1. FX Quotes
Kobble
  • Introduction
  • API Fundamentals
    • Idempotency
    • Rate Limits
    • Healthcheck
      GET
  • Authorization
    • Authorization
    • Get access token
      POST
  • Beneficiaries
    • List all beneficiaries
      GET
    • Get beneficiary by ID
      GET
    • Create beneficiary
      POST
    • Create Payid beneficiary
      POST
    • Update beneficiary
      PATCH
  • Cards
    • Cards API
    • Card Creation Flow — Developer Guide & Onboarding
    • Get all cards
      GET
    • Create a new card
      POST
    • Get card by ID
      GET
    • Update card status
      PATCH
    • Replace or renew card
      POST
    • Generate card secret
      POST
    • Generate MeaWallet widget session token
      POST
  • Card Programs
    • Card Programs API
    • Get all programs
      GET
    • Create a new program
      POST
    • Get program by ID
      GET
  • Clients
    • Clients API
    • Get all clients
    • Get client by ID
    • Create a new client
    • Update client status
  • Endusers
    • Endusers API
    • Usage of Metadata on Endusers
    • Get all endusers
    • Create a new enduser
    • Get enduser by ID
    • Update enduser
    • Create a stakeholder
    • List stakeholders
    • Update stakeholder
  • Transactions
    • Transactions API
    • Get all transactions
    • Create a transaction
    • Get transaction by ID
    • Create manual credit transaction
    • Create manual debit transaction
    • Download the partner's confirmation letter for a `_4` transaction
  • Wallets
    • Wallets API
    • Get all wallets
    • Create a new wallet
    • Get wallet by ID
    • Update wallet
    • Download the partner's confirmation letter for a `_4` wallet
  • Relays
    • Relays API
    • Create subscription
  • Webhooks
    • Webhooks API
    • Webhook Signature Verification
    • Create a webhook
    • Report completed
    • Get all webhooks
    • Delete a webhook
  • Wallet Statements
    • Request a wallet statement
    • List wallet statements
    • Get a wallet statement
    • Get a wallet statement download URL
  • Card Art
    • Get a card art upload URL
    • Register a card art
    • List card arts
    • Get a card art
    • Update a card art
    • Activate a card art
    • Archive a card art
  • Verifications
    • List verifications for a subject
    • Create a verification
    • Get verification by ID
    • Get a verification session (SDK token or hosted link)
    • Record a client-asserted outcome
    • Email a KYB party its hosted verification link
    • Set a KYB party's USD details
    • Project the company's declared owners into KYB parties
  • Transaction Documents
    • Request a presigned upload for a supporting document
    • List the supporting documents on a transaction
  • Mandates
    • List mandates
    • Create mandate
    • Get mandate by ID
    • Update mandate
  • FX Quotes
    • Request an FX quote
      POST
    • Get an FX quote by ID
      GET
  • Schemas
    • Schemas
    • CardWidgetSessionTokenResponse
    • 202 Accepted
    • Webhook
    • 201 Created
    • Relay
    • Create Beneficiary with bank details
    • Client
    • Beneficiary
    • Card
    • CardCreateInputDto
    • CardStatusUpdateDto
    • CardRenewReplaceInputDto
    • Program
    • MetadataKobbleDebit1
    • ProgramCreateInputDto
    • Person
    • Company
    • Enduser
    • Enduser Create Person Input
    • Enduser Create Company Input
    • Metadata
    • Enduser Create Input DTO
    • Transaction
    • TransactionCreateManualCreditInputDto
    • TransactionDocumentType
    • TransactionDocumentStatus
    • TransactionDocumentCreateInput
    • WalletUpdateInputDto
    • TransactionDocumentUpload
    • WalletStatement
    • TransactionDocument
    • TransactionCreateInputDto
    • ReportCompletedEntity
    • Mandate
    • Wallet
    • ReportCompletedNotification
    • WalletCreateInputDto
    • CardArt
    • CardArtDetail
    • WebhookNotification
    • CardArtUploadUrlInput
    • CardArtUploadUrlResponse
    • CardArtCreateInput
    • CardArtPatchInput
    • Error
    • RelayCreateResponse
    • ScreeningSummary
    • VerificationPartyLink
    • Verification
    • VerificationSessionToken
    • Address
    • Stakeholder
    • StakeholderCreateInput
    • StakeholderUpdateInput
    • VerificationPartyInviteResult
    • FxQuoteCreateInputDto
    • FxQuote
  1. FX Quotes

Request an FX quote

POST
/customers/v1/fx-quotes
Optional (on request). Applies only if this feature is enabled for your client.
Prices a conversion for the caller. payment_type defaults to FX_SEND_1 (convert and pay out to a beneficiary from the holder's KOBBLE_FX_1 wallet in sell_asset). With FX_TRANSFER_4 the quote is for a conversion between two of one holder's own KOBBLE_<CCY>_4 wallets, named by from_wallet_id and to_wallet_id; the response echoes payment_type, from_wallet_id and to_wallet_id, and the quote can only be spent on that pair via POST /customers/v1/transactions with payment_type: FX_TRANSFER_4.
The quote is returned PENDING and priced asynchronously: poll GET /customers/v1/fx-quotes/{id} until status is QUOTED, then cite its id as quote_id. The returned rate has Kobble's spread embedded. expires_at on an FX_TRANSFER_4 quote is a Kobble staleness window (60 seconds by default), not a partner rate lock: the partner re-prices at execution and a conversion whose wholesale rate has drifted beyond tolerance is declined with reason_code FX_RATE_TOLERANCE_EXCEEDED. FX_TRANSFER_4 quotes are issued even while execution of that rail is switched off, so a rate table is available ahead of launch; the transaction is what is refused (FX_TRANSFER_4 execution is not enabled). An FX_TRANSFER_4 quote also needs a spread configured for your client on the corridor (400 FX_TRANSFER_4 requires a configured markup for this owner and corridor otherwise — contact Kobble).
Requires the client/write scope. Owner-scoped. Not idempotent: each call creates a new quote.

Request

Header Params

Body Params application/json

Examples
{
    "holder_id": "6f1c2a4e-3b7d-4e0a-9c2f-1d5e8a7b6c3d",
    "sell_asset": "AUD",
    "buy_asset": "EUR",
    "fixed_side": "SELL",
    "fixed_amount": 1000
}

Request Code Samples

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
Request Request Example
Shell
JavaScript
Java
Swift
cURL
curl --location '/customers/v1/fx-quotes' \
--header 'x-client-id;' \
--header 'Content-Type: application/json' \
--data '{
    "holder_id": "6f1c2a4e-3b7d-4e0a-9c2f-1d5e8a7b6c3d",
    "sell_asset": "AUD",
    "buy_asset": "EUR",
    "fixed_side": "SELL",
    "fixed_amount": 1000
}'

Responses

🟢201Created
application/json
Quote created (PENDING). Poll GET /customers/v1/fx-quotes/{id} for the price.
Bodyapplication/json

Example
{
    "id": "b4d6f8a0-5c21-4e73-9d18-3a6b2c5e7f94",
    "owner": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "holder_id": "6f1c2a4e-3b7d-4e0a-9c2f-1d5e8a7b6c3d",
    "partner_product": "KOBBLE_AED_4",
    "payment_type": "FX_TRANSFER_4",
    "sell_asset": "AED",
    "buy_asset": "EUR",
    "from_wallet_id": "3e0c2a1d-9b47-4c86-9a35-5f1e8d7c2b40",
    "to_wallet_id": "7a5b1c8e-2d34-4f90-8b61-0c9e4a3d7f52",
    "fixed_side": "SELL",
    "fixed_amount": "100",
    "derived_amount": null,
    "rate": null,
    "status": "PENDING",
    "expires_at": null,
    "external_id": null,
    "reason": null,
    "reason_code": null,
    "created_at": "2026-09-29T02:10:11.000Z",
    "updated_at": "2026-09-29T02:10:11.000Z"
}
🟠400Bad Request
🟠401Unauthorized
🟠403Forbidden
🟠422Parameter Error
Modified at 2026-11-13 07:19:25
Previous
Update mandate
Next
Get an FX quote by ID
Built with