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

Get an access token

Request

Exchange your Client ID and Secret for a short-lived access token. Don't have them yet? Email support@tryjeeves.com — sandbox and production each need their own.

Credentials go in the Authorization: Basic base64(clientId:clientSecret) header, not in the body. The client certificate is required on this call as on every other.

Request only the scopes the integration needs. A token cannot reach a capability outside its scopes.

Read expires_in from the response rather than hardcoding a lifetime — it is configured platform-side and may change. Request a new token when the current one nears expiry; there is no refresh token.

The response is a standard RFC 6749 §5.1 token response — access_token, token_type, expires_in and scope, in snake_case — so any off-the-shelf OAuth 2.0 client library can consume it unchanged. Note that scope reports the scopes actually granted, which may be narrower than the scopes you asked for; check it rather than assuming your request was honoured in full.

Bodyapplication/x-www-form-urlencodedrequired
grant_typestringrequired

Always client_credentials.

Value"client_credentials"
scopestringrequired

Space-delimited list of scopes.

Example: "accounts:read beneficiaries:read beneficiaries:write quotes:write payments:write payments:read"
curl -i -X POST \
  -u <username>:<password> \
  https://public-sandbox.tryjeeves.com/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d grant_type=client_credentials \
  -d 'scope=accounts:read beneficiaries:read beneficiaries:write quotes:write payments:write payments:read'

Responses

Token issued.

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
access_tokenstringrequired

Send as Authorization: Bearer <access_token>.

token_typestringrequired
Value"Bearer"
expires_inintegerrequired

Lifetime in seconds. Read this value rather than hardcoding it — it is configured platform-side and is currently far shorter than an hour.

scopestring

Space-delimited list of the scopes actually granted. This may be narrower than the scope you requested — unknown or ungranted scopes are dropped rather than rejected — so check it before relying on a capability.

Response
application/json
{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "Bearer", "expires_in": 300, "scope": "accounts:read beneficiaries:read beneficiaries:write quotes:write payments:write payments:read" }

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

Payments

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

OperationsWebhooks