Quote FX, create payments idempotently, and track them through signed webhooks.
Quote FX, create payments idempotently, and track them through signed webhooks.
Lock an FX rate, create a payment against it, and follow it to a terminal status. Conventions, authentication and error handling are covered in the Jeeves Payment API Integration Guide.
Getting credentials: sandbox and production each need their own client credentials. Email support@tryjeeves.com to request them for either environment.
mTLS on every call: all requests — including POST /oauth/token — require your client certificate. The curl examples show the --cert/--key flags once, on the token call, and omit them elsewhere for brevity; add them to every request.
Looking for cards, boletos, transactions, or webhook subscriptions? Those live in the main API reference.
Lock an FX rate for a payment.
amount is the destination amount — what the beneficiary receives. The source amount is derived from the rate and returned as sourceAmount.
A quote is single-use and expires. It funds exactly one payment; reusing a consumed quote returns 422 quote_expired. Read expiresAt from the response rather than assuming a fixed window — the TTL is configured per company.
Your FX rate and fees depend on the kind of account you pay from, so pass the productAccountType of the account you will actually use — a quote priced for a different account type does not reflect what you will pay.
The currency you pay from. One of USD, MXN, BRL, COP, EUR, GBP, CAD, or a stablecoin ticker: USDB, USDC, USDT, EURC. Any other code is rejected with 400 validation_failed. Use the account's productAccountCurrency as returned by GET /v1/product-accounts — a crypto-wallet account is quoted in its ticker, for example USDC.
The currency the beneficiary receives. One of USD, MXN, BRL, COP, EUR, GBP, CAD, or a stablecoin ticker: USDB, USDC, USDT, EURC. Any other code is rejected with 400 validation_failed.
Destination amount as a decimal string — what the beneficiary receives, in destinationCurrency. The source amount is computed from the rate.
Greater than zero, at most 2 decimal places, at most 12 integer digits. Anything else returns 400 validation_failed.
The kind of account funding the payment. Take this from the productAccountType of the account you intend to pay from, via GET /v1/product-accounts — with one exception, see the credit-line row.
| Value | Plain meaning |
|---|---|
self-funded | Your own pre-funded balance at Jeeves. |
credit-line | Your Jeeves credit line. Also the value to send for a Bill Pay credit account, which GET /v1/product-accounts reports as jeeves-pay-credit. |
crypto-wallet | Your stablecoin balance. Its currency is reported as a stablecoin ticker (USDB, USDC, USDT or EURC) rather than an ISO 4217 code, and it changes the purpose-code corridors. |
curl -i -X POST \
https://public-sandbox.tryjeeves.com/v1/quotes \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"sourceCurrency": "USD",
"destinationCurrency": "MXN",
"amount": "43035.00",
"productAccountType": "self-funded"
}'Quote created and rate locked.
The currency you pay from, as sent in the request — one of the supported currencies (USD, MXN, BRL, COP, EUR, GBP, CAD) or a stablecoin ticker (USDB, USDC, USDT, EURC).
The currency the beneficiary receives, as sent in the request — one of the supported currencies (USD, MXN, BRL, COP, EUR, GBP, CAD) or a stablecoin ticker (USDB, USDC, USDT, EURC).
{ "quoteId": "9f2c1b84-3e7a-4d1f-9c05-8b6e2a4f7d13", "rate": "17.2140", "sourceCurrency": "USD", "sourceAmount": "2500.00", "destinationAmount": "43035.00", "destinationCurrency": "MXN", "createdAt": "2026-09-10T15:04:05Z", "expiresAt": "2026-09-10T15:09:05Z" }