Jeeves Payment API (1.0.0)

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.

Download OpenAPI description
Overview
Languages
Servers
Sandbox
https://public-sandbox.tryjeeves.com/
Production
https://public-api.jeev.es/

Authentication

Exchange client credentials for a short-lived bearer token.

Operations

Accounts

The accounts you can fund payments from.

Operations

Beneficiaries

The people and businesses you pay, with their attached payment methods.

Operations

Quotes

Lock an FX rate before creating a payment.

Operations

Create a quote

Request

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.

Bodyapplication/jsonrequired
sourceCurrencystringrequired

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.

destinationCurrencystringrequired

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.

amountstring^(?!0+(\.0+)?$)\d{1,12}(\.\d{1,2})?$required

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.

productAccountTypestring(AccountType)required

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.

ValuePlain meaning
self-fundedYour own pre-funded balance at Jeeves.
credit-lineYour 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-walletYour 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.
Enum"self-funded""crypto-wallet""credit-line"
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"
  }'

Responses

Quote created and rate locked.

Headers
X-RateLimit-Limitinteger

Requests allowed in the current window.

Example: 300
X-RateLimit-Remaininginteger

Requests left in the current window.

Example: 297
X-RateLimit-Resetinteger

Unix time at which the window resets.

Example: 1789045760
Bodyapplication/json
quoteIdstring(uuid)required
ratestringrequired

Decimal string. Destination units per one source unit.

sourceCurrencystringrequired

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).

sourceAmountstringrequired

Decimal string. What you will be debited, before fees.

destinationAmountstringrequired

Decimal string. What the beneficiary receives.

destinationCurrencystringrequired

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).

createdAtstring(date-time)required
expiresAtstring or null(date-time)required

When the locked rate stops being valid. Read this rather than assuming a window — the TTL is configured per company. null means the quote does not expire.

Response
application/json
{ "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" }

Payments

Create a payment against a quote and track it to a terminal status.

OperationsWebhooks