Last updated

Funding accounts

The accounts you can fund payments from.

Every payment debits one of your funding accounts — called productAccounts in the API. Before your first payment, list them, pick the account you'll pay from, and take two values: productAccountId (sent when creating the payment) and productAccountType (sent when creating the quote, because your FX rate and fees depend on the kind of account you pay from).

Listing funding accounts

GET /v1/product-accounts — scope accounts:read.

curl 'https://public-sandbox.tryjeeves.com/v1/product-accounts' \
  -H "Authorization: Bearer $JEEVES_ACCESS_TOKEN"

The response is an array of companies, each carrying its own accounts. A single-company integration reads [0].productAccounts:

[
  {
    "companyId": "c8ddf33f-6244-4218-af7e-7a6fe0b13528",
    "companyName": "Bluesky Inc.",
    "productAccounts": [
      {
        "productAccountType": "self-funded",
        "productAccountId": "2b6f0c94-7a15-4e83-9d20-6c8e3b5a1f79",
        "productAccountCurrency": "USD",
        "productAccountStatus": "active"
      },
      {
        "productAccountType": "credit-line",
        "productAccountId": "7c14a8d0-2e63-4f19-9b85-3d0f6a2c7e41",
        "productAccountCurrency": "USD",
        "productAccountStatus": "active"
      },
      {
        "productAccountType": "crypto-wallet",
        "productAccountId": "4e9b1d27-5c80-4a36-b1f4-8a2d6c0e7f13",
        "productAccountCurrency": "USDC",
        "productAccountStatus": "active"
      }
    ]
  }
]

Account types

Reported typeWhat funds itSend in a quote
self-fundedYour own pre-funded balance at Jeeves.self-funded
credit-lineYour Jeeves credit line.credit-line
crypto-walletYour stablecoin balance — its currency is a stablecoin ticker (USDB, USDC, USDT or EURC), not an ISO 4217 code. Note this changes the purpose-code corridors (see Send a payment).crypto-wallet
jeeves-pay-creditA Bill Pay credit account.credit-line
jeeves-pay-externalA Bill Pay account funded from your own funds.Not accepted as productAccountType in a quote.

Treat the list of reported types as open — tolerate values you don't recognize.

The type you pass as productAccountType when quoting must be the type of the account you actually pay from — your FX rate and fees depend on it, so a quote priced for a different account type doesn't reflect what you'll pay.

One account = one currency × one type

You can hold several funding accounts at once, across currencies and types — for example a USD self-funded (fiat) balance, a crypto-wallet holding a stablecoin such as USDC, an MXN self-funded balance, and credit in USD, MXN, or BRL. Every payment is funded by exactly one of them, and the pair you pick drives everything downstream: the quote's sourceCurrency must match the account's currency, the productAccountType sets your FX pricing, and together with the destination they select the valid purpose codes.

The rules that matter

  • Only active accounts can fund a payment. The other statuses (pending, in-active, deactivate, closed) all mean the same thing to your integration: the account can't fund a payment — treat anything that isn't active as unusable.
  • Currency must match. The account's productAccountCurrency must equal the quote's sourceCurrency, or the payment is rejected.
  • Currencies are ISO 4217 codes or stablecoin tickers. productAccountCurrency is an ISO 4217 alpha code (USD, MXN, …) or one of USDB, USDC, USDT, EURC — crypto-wallet accounts report a ticker. Don't validate it against ISO 4217 alone, or you'll reject real accounts.
  • Balance covers amount plus fees. A payment whose source account can't cover the quoted sourceAmount plus fees returns 422 insufficient_funds.

Funding the account itself

Depositing into a product account (bank transfer in, credit-line draw, crypto deposit) happens through your Jeeves account and dashboard — it is not part of this API. What this API guarantees is the check at payment time: if the balance doesn't cover the payment, nothing is created and you get insufficient_funds.