Skip to Content
B2C APIPayment Instrument Endpoints

Payment Instruments

Link and manage payment instruments for users. Our payment instrument tracking system helps detect and prevent:

  • Account takeover attempts through unusual payment method additions
  • Card stuffing attacks using stolen card information
  • Suspicious linking patterns across multiple accounts
  • Unusual payment method usage patterns
  • Shared instruments across mule networks

Payment instruments can either be created and marked as “linked” or “unlinked” explicitly, otherwise they will be inferred from transaction details.

Endpoint

POST /v1/paymentInstrument

Request Schema

The paymentInstrument object must be a nested object with the appropriate item subfields for the given payment method.

FieldTypeRequiredDescription
statusenumYesInstrument status: linked, unlinked
paymentInstrument.idstringYesUnique payment instrument identifier
paymentInstrument.userIdstringYesUser identifier
paymentInstrument.providerstring[]NoProvider of specific payment instrument, eg stripe, onafriq
paymentInstrument.methodenumNoPayment method type: bank, crypto, wallet, card
paymentInstrument.payInMethodbooleanNoWhether instrument can be used for pay-ins
paymentInstrument.payOutMethodbooleanNoWhether instrument can be used for pay-outs
createdAtnumberNoCreation timestamp in milliseconds
updatedAtnumberYesLast update timestamp in milliseconds

Payment Method Details

We cover most major payment instrument types such as bank, card, wallet and crypto.

Bank Details Schema

FieldTypeDescription
idstringUnique identifier for bank instrument
accountNumberstringBank account number
routingNumberstringBank routing number (ACH)
currencystringCurrency code of the account
ibanFullstringFull IBAN number for international payments
sortCodestringUK sort code if applicable
accountTypestringType of account (checking/savings)
accountHolderNamestringName of the account holder
bankNamestringName of the bank
bankBranchstringName of the bank branch
bankBranchCodestringCode identifying the specific bank branch

Card Details Schema

We currently cover both physical and digital cards (e.g Apple Pay and Google Pay). If you need additional identifiers for products such as virtual cards and accounts, please contact support@orca-fraud.com

FieldTypeDescription
idstringProvider-specific identifier
binstringFirst 6 digits of card
binCountrystringCountry of card issue
currencystringCard currency
brandstringCard brand
last4stringLast 4 digits
isDigitalWalletbooleanDigital wallet flag
fingerprintstringUnique tokenized identifier
digitalWalletTypestringType of digital wallet if applicable
digitalWalletTokenstringToken or identifier from digital wallet if applicable

Wallet Details Schema

Support for various wallet types, such as:

  • PIX (Brazil)
  • M-PESA (Kenya)
FieldTypeDescription
tokenBrandstringWallet brand (e.g. pix)
typestringWallet type: pix, phone
phonestringAssociated phone number
countrystringCountry code
phoneProviderstringMobile provider for onafriq
currencystringWallet currency
pixKeystringPIX key for dLocal
taxNumberIdstringTax ID for dLocal

Example Request

{ "status": "linked", "paymentInstrument": { "id": "pi_123456", "userId": "user_123", "provider": ["dlocal"], "method": "bank", "payInMethod": true, "payOutMethod": true, "bank": { "accountNumber": "1234567890", "accountHolderName": "John Doe", "bankName": "Test Bank", "bankBranchCode": "001", "currency": "USD" } }, "updatedAt": 1734167723000 }

Crypto Details Schema

We also support crypto payment instruments and can offer additional crypto-specific fields on these.

Response

Success Response

200 OK

Error Response Format

See the Error Reference section for a full description of API errors. All API errors follow a consistent JSON structure:

{ "error": { "type": "ERROR_TYPE", "message": "Human-readable error description", "details": ["Additional error details (optional)"] }, "timestamp": 1755602195137 }

In the case of a validation error, the format will be as follows:

{ "error": { "type": "VALIDATION_ERROR", "message": "Request validation failed", "details": [ "/id: Expected string" ] }, "timestamp": 1755602195137 }
Last updated on