Jeeves Public API (1.0.0)

Introduction

The Jeeves API is built around REST principles. Our API accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes.

Looking for money movement? Quotes, payments, beneficiaries, and funding accounts live in the separate Payments API reference (guides: Payments). This reference covers cards, boletos, transactions, travel, and webhook subscriptions.

Authentication

The Jeeves API uses mTLS and OAuth 2.0 to authenticate requests. You can request your mTLS certificate and OAuth 2.0 credentials in both sandbox and production environments by reaching out to our support team.

All API requests will only work over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.

Errors

The Jeeves API uses standard HTTP response codes to indicate the success or failure of an API request. In general: codes in the 2XX range indicate success; codes in the 4XX range indicate an error in the information provided; codes in the 5XX range indicate an internal error with Jeeves application/server.

Currently, the Jeeves API has the following HTTP responses:

CodeResponseDescription
200OkObject was returned as expected.
201OkObject was created as expected.
202AcceptedRequest was accepted and will be processed asynchronously.
204OkNo return, but request was processed as expected.
400Bad requestAt least one argument is wrong or missing.
401UnauthorizedNo valid API token provided.
403ForbiddenThe API token doesn't have permission to perform the request.
404Not foundThe requested resource doesn't exist.
409ConflictThe request conflicts with an operation already in progress — retry once it completes. In the Payments API, also returned when an Idempotency-Key is reused with a different body.
422Unprocessable entityThe request is well-formed but the resource's current state rejects it — in the Payments API, an expired quote, a corridor validation failure, or insufficient funds.
429Rate limitedToo many requests — honor Retry-After (Payments API).
500Server errorAn internal error at Jeeves.

In this reference, 409 and 422 are returned by the boleto discount and rebate endpoints; 429 is returned today only by the Payments API — full semantics in Errors & rate limits.

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

Boletos

The Boleto API supports the full boleto lifecycle, enabling clients to create, retrieve, extend, and cancel boletos, and to configure early-payment discounts and reduce the amount owed (abatimento), via secure integration. It also supports Bolepix, which adds a Pix QR code to the boleto for instant settlement through Pix rails. For boletos paid via barcode or digitable line, the API provides an early payment notice before final settlement - offering visibility of the payment up to one day in advance, with guaranteed settlement. For boletos paid via Pix (via Bolepix), the boleto is marked as paid directly, as settlement is immediate.

Operations

Pix Charges

The Pix Charges API lets clients create dynamic Pix charges: a single-use Pix QR code that the payer can scan or paste into their banking app. Each charge carries pixCopyPaste (the copy-and-paste payload) and qrCodeImage (a base64-encoded JPEG of the QR code).

Charges are not pushed to you: poll GET /v1/pix-charges/{id} to follow a charge until it reaches a final status.

A charge has one of these statuses:

StatusMeaning
activeThe charge can be paid. Only active charges can be canceled.
under_reviewThe charge is under review.
paidThe charge was paid. paymentDetails is present. Final status.
canceledThe charge was canceled with POST /v1/pix-charges/{id}/cancel. Final status.
expiredThe charge was not paid before payableUntil. Final status. It can be set 1 to 3 days after payableUntil, not right at the end of that day.

Due date and payable period. Without dueDate, the charge is due 365 days from today (Brasilia time) and daysPayableAfterDue is 0. daysPayableAfterDue can only be sent together with dueDate; when dueDate is sent without it, it defaults to 180. The response always carries the effective dueDate and daysPayableAfterDue, and payableUntil, the last day the QR code can be paid.

Your own reference. externalId is unique per organization. Reusing one returns a 409 whose errorData.chargeId is the id of the existing charge.

Operations

Cards

The Card API supports the full card lifecycle, enabling clients to create, retrieve, and update cards via secure integration. Use POST /v1/cards/transactions with the source field to query card or travel transactions in a single endpoint.

Operations

Transactions

The Transactions API enables clients to retrieve card and payment transactions via secure integration. Supports filtering by date range and pagination for efficient data retrieval.

Operations

Travel

The Travel API covers the virtual cards created through this API (originally built for travel platforms, hence the name): retrieve their completed transactions and attach booking details to a card.

Operations

Update booking details

Request

Path
idstring[^\/#\?]+?required
Headers
Accept-Languagestring

Language code for localization.

Default en-US
Enum"en-US""es-MX""pt-BR"
Example: en-US
Bodyapplication/jsonrequired

TravelCardBookingDetails

itineraryIdstring<= 60 characters

The travel itinerary where the card is used.

Example: "ITIN-993235"
bookingReferencestring<= 60 characters

The booking reference where the card is used.

Example: "BREF-334234"
transactionIdstring<= 60 characters

The transaction id.

Example: "TRX-673829"
otherCustomFieldstring

Other custom key-value field

Example: "custom-value"
curl -i -X PATCH \
  'https://public-sandbox.tryjeeves.com/v1/travel/cards/{id}/booking' \
  -H 'Accept-Language: en-US' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "itineraryId": "ITIN-993235",
    "bookingReference": "BREF-334234",
    "transactionId": "TRX-673829",
    "otherCustomField": "custom-value"
  }'

Responses

Travel card details.

Bodyapplication/json
metadataobject(TravelCardBookingDetails)
namestring[ 1 .. 60 ] characters^[a-zA-Z0-9\s]+$required

The name of the card.

Example: "Travel Card"
restrictionsobject(CardRestrictions)required
restrictions.​spendLimitnumbernon-empty> 0required

Maximum total amount that can be spent with the card in local currency. Must be greater than 0.

Example: 1000
restrictions.​activeDateRangeUTCobject(CardActiveDateRangeRestrictions)
restrictions.​maxTransactionCountnumber[ 1 .. 10 ]

The maximum number of transactions that can be made with the card.

Example: 10
restrictions.​merchantCategoryobject(MerchantCategoryControl)
idstringrequired
Example: "123e4567-e89b-12d3-a456-426614174000"
createdAtstringrequired
Example: "2024-12-25 10:35:00"
updatedAtstringrequired
Example: "2024-12-25 10:35:00"
Response
application/json
{ "metadata": { "itineraryId": "ITIN-993235", "bookingReference": "BREF-334234", "transactionId": "TRX-673829", "otherCustomField": "custom-value" }, "name": "Travel Card", "restrictions": { "spendLimit": 1000, "activeDateRangeUTC": { … }, "maxTransactionCount": 10, "merchantCategory": { … } }, "id": "123e4567-e89b-12d3-a456-426614174000", "createdAt": "2024-12-25 10:35:00", "updatedAt": "2024-12-25 10:35:00" }

Get transactionsDeprecated

Request

Deprecated. Use POST /v1/cards/transactions with "source": "travel" instead.

Get completed transactions from the virtual cards created via API for reconciliation.

Query
pageCursorstring or null

The cursor of the next page of transactions (returned in the "nextCursor" property in the response).

Default null
pageSizenumber[ 1 .. 100 ]

The page size.

Default 100
Example: pageSize=100
startDatestring or string(yyyy-MM-dd)

The start date of the transaction.

Default "D-1 (yesterday)"
Example: startDate=2025-01-01
One of:

The start date of the transaction.

string(yyyy-MM-dd)

The start date of the transaction.

Default "D-1 (yesterday)"
endDatestring or string(yyyy-MM-dd)

The end date of the transaction.

Default "D-1 (yesterday)"
Example: endDate=2025-01-01
One of:

The end date of the transaction.

string(yyyy-MM-dd)

The end date of the transaction.

Default "D-1 (yesterday)"
Headers
Accept-Languagestring

Language code for localization.

Default en-US
Enum"en-US""es-MX""pt-BR"
Example: en-US
curl -i -X GET \
  'https://public-sandbox.tryjeeves.com/v1/travel/transactions?endDate=2025-01-01&pageSize=100&startDate=2025-01-01' \
  -H 'Accept-Language: en-US' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Paginated list of completed transactions done from the virtual cards created via API.

Bodyapplication/json
linksobject(TransactionResponseLinks)required
links.​nextstring or nullrequired

Link to the next page; null if there is no next page. For deprecated GET transaction endpoints, this may contain a URL with query parameters. For POST /v1/cards/transactions, this field is always null — use pagination.nextCursor in the next request body instead.

Example: "/v1/transactions?pageCursor=MTI7eyJ0cmFuc2FjdGlvbklkIjoiODA4MTUxOSIsImNyZWF0ZWRBdCI6IjE3NDY1NTUzMDI1MTIifq"
paginationobject(TransactionResponsePagination)required
pagination.​pageSizenumberrequired

Number of transactions returned by page.

Default 20
Example: 5
pagination.​totalCountnumberrequired

Total number of transactions for your call.

Example: 41
pagination.​nextCursorstring or null

The cursor pointing to the next page; null if there's no next page.

Example: "MTI7eyJ0cmFuc2FjdGlvbklkIjoiODA4MTUxOSIsImNyZWF0ZWRBdCI6IjE3NDY1NTUzMDI1MTIifq"
pagination.​hasNextbooleanrequired

True if there's a next page; false otherwise.

Example: true
dataArray of objects(TravelTransactionDto)required

List of all transactions with all details.

data[].​transactionIdstringrequired

Unique identifier of a transaction.

Example: "123e4567-e89b-12d3-a456-426614174000"
data[].​transactionDatestring\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d....required

The date and time the transaction occurred, in UTC.

Example: "2025-01-29 16:22:51"
data[].​settlementDatestring\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d....

The date and time the transaction was settled, in UTC.

Example: "2025-01-30 08:00:03"
data[].​statementClosingDatestring\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d....

The date and time the statement was closed, in UTC.

Example: "2025-01-30 08:00:03"
data[].​statementDueDatestring\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d....

The date and time the statement due date, in UTC.

Example: "2025-01-30 08:00:03"
data[].​cardLastFourstring

The last 4 digits of the card number.

Example: "9876"
data[].​merchantNamestringrequired

The name of the merchant.

Example: "Starbucks"
data[].​transactionAmountnumberrequired

Amount billed to your account, in your account's billing currency.

Example: 127.59
data[].​transactionCurrencystringrequired

Currency the amount was billed in (ISO 4217), e.g. USD.

Example: "USD"
data[].​localAmountnumberrequired

Amount in the merchant's local currency — the currency of the transaction location.

Example: 741.33
data[].​localCurrencystringrequired

Currency of the merchant's local amount (ISO 4217).

Example: "BRL"
data[].​transactionTypestringrequired

Debit for purchases and fees; credit for payments and refunds.

Enum"debit""credit"
Example: "debit"
data[].​merchantCategoryCodestringrequired

Merchant Category Code (MCC) used by the merchant.

Example: "5814"
data[].​cardholderNamestringrequired

The name of the cardholder.

Example: "John Doe"
data[].​cardNamestringrequired

The name of the card.

Example: "Travel Card"
data[].​cardIdstringrequired

The ID of the card.

Example: "c8ddf33f-6244-4218-af7e-7a6fe0b13528"
data[].​authorizationCodestringrequired

The authorization code of the transaction.

Example: "123456"
data[].​metadataobjectrequired

The metadata of the transaction.

Example: {"reservation_code":"abc123","passenger_name":"John Doe"}
data[].​restrictionsobject(CardRestrictions)required
data[].​restrictions.​spendLimitnumbernon-empty> 0required

Maximum total amount that can be spent with the card in local currency. Must be greater than 0.

Example: 1000
data[].​restrictions.​activeDateRangeUTCobject(CardActiveDateRangeRestrictions)
data[].​restrictions.​maxTransactionCountnumber[ 1 .. 10 ]

The maximum number of transactions that can be made with the card.

Example: 10
data[].​restrictions.​merchantCategoryobject(MerchantCategoryControl)
Response
application/json
{ "links": { "next": "/v1/transactions?pageCursor=MTI7eyJ0cmFuc2FjdGlvbklkIjoiODA4MTUxOSIsImNyZWF0ZWRBdCI6IjE3NDY1NTUzMDI1MTIifq" }, "pagination": { "pageSize": 5, "totalCount": 41, "nextCursor": "MTI7eyJ0cmFuc2FjdGlvbklkIjoiODA4MTUxOSIsImNyZWF0ZWRBdCI6IjE3NDY1NTUzMDI1MTIifq", "hasNext": true }, "data": [ { … } ] }

Webhooks

The Webhooks API provides access to webhook subscription management and event tracking, enabling you to receive real-time HTTP notifications the moment a card transaction is approved, declined, settled, or fails. These subscriptions cover card events only — payment.status.updated for the Payments API is delivered separately and has no subscription endpoint, see the Payments API reference.

Operations