Skip to main content
Every change here is backwards compatible unless an entry says otherwise. Breaking changes ship under a new Reap-Version, described in Versioning & Compatibility.

Funds can be withdrawn from an account to an external address

You can move tokens out of a User-Funded account’s wallet to any address you name. Initiate crypto withdrawal reserves the funds and opens a signature window. The wallet owner signs a payload from Mint signing payload, and you hand the signature to Submit withdrawal signature. Reap covers the network fee and charges a flat fee per chain, taken out of the amount you request.Subscribe to CRYPTO_WITHDRAWAL_CREATED and CRYPTO_WITHDRAWAL_STATUS_UPDATED to follow one to completion. You can also read one with Get crypto withdrawal, or cancel one that is still waiting for a signature. Withdrawals appear in the activity feed.See Withdrawing Funds.

Account assets report what can be withdrawn per chain

Each chain in the assets endpoint now reports withdrawable, the largest amount you can request on that chain, and withdrawalFee, what a withdrawal there costs. Outstanding card spend is already netted out of withdrawable, so you can show a user a figure they can act on.See The withdrawable cap.

Account ownership is chosen per account

Create account accepts an optional ownerType (USER or COMPANY). It defaults to USER when omitted. Company-owned accounts are only available in corporate programs and return 400 COMPANY_ACCOUNT_NOT_ALLOWED in consumer programs. Account ownership is no longer a project-level setting.See Program Mode and Accounts.

Deleting a user deletes their cards

Delete user deletes every card the user holds, instead of just blocking them. Deletion is permanent. The user’s accounts stay open, since they can still hold value or card debt to settle.

Creating a user no longer needs terms acceptance

Create user no longer accepts or requires termsAcceptance. Drop the field from any request that still sends it.

Card shipment status can be simulated in sandbox

Simulate shipment status drives a submitted shipment through production and delivery in sandbox. Watch the change arrive through CARD_SHIPMENT_STATUS_UPDATED.
  • Shipping covers card production and delivery tracking

Fiat deposit simulation takes the currency you send, not a conversion pair

Simulating a fiat deposit now takes a required currency, the currency of the simulated transfer. It replaces the optional originalAmount and originalCurrency that previously simulated a converted transfer.The currency must be the one your card program bills in. Any other is rejected with SIMULATION_UNSUPPORTED_CURRENCY, which lists the currencies the project accepts. A sandbox call that still sends originalAmount or originalCurrency now fails validation.

Deposit addresses name the assets they accept

Each deposit address now names the assets it accepts. Each item uses the same symbol, name, decimals, and logoUri fields used elsewhere for asset metadata, plus the assetId to deposit against.A deposit of anything else fails with ASSET_NOT_ACCEPTED. Read the list rather than hardcoding one, since what a project accepts is a subset of what the platform supports.List responses stay lean and omit it. name and logoUri are best-effort and may be null, so render a fallback for both.

Sumsub Token Sharing decisions now arrive by webhook

Importing a Sumsub applicant share token no longer approves the user synchronously. A successful import now moves the user to IN_REVIEW.The decision, APPROVED, REJECTED, or RETRY_REQUIRED, then arrives on the same USER_APPLICATION_STATUS_UPDATED webhook used by Managed KYC.A failed import can now leave the user at RETRY_REQUIRED as well as NOT_STARTED.

Choose the account owner type at creation

Creating an account now takes an explicit ownerType, USER or COMPANY, instead of inferring it from the project.It defaults to USER. ownerId is a user ID or a company ID to match. Requesting COMPANY outside a corporate program now fails with COMPANY_ACCOUNT_NOT_ALLOWED.

Fund the master collateral account by bank transfer

Get bank details returns the beneficiary name and address, the account number, the bank name and address, the SWIFT code, and the domestic bank and branch codes for wiring funds into the master collateral account, along with a reference to quote on the transfer. It applies to Program-Funded projects enabled for bank transfers. FIAT_DEPOSITS_NOT_ENABLED means the project has not been enabled for it.See Funding via Bank Transfer.

Card shipping can be disabled for a project

Submit shipment returns 403 CARD_SHIPPING_NOT_ENABLED when physical card shipping is not enabled for the project.See Shipping.

Company simulation rejects restricted countries

Simulate company status now rejects country, registeredAddress, and operationalAddress values for a country that cannot be used for card issuance, such as KP, when simulating ACTIVE.See Getting started with KYB.

Cards can be blocked and unblocked directly

You can block a card and unblock it when the block can be lifted. A block is a hard stop, separate from freezing it.blockLiftable on the card resource tells you whether unblock will work before you call it.frozen reports a freeze that a block is hiding from status.blockReason.type on a blocked card can be CLIENT_REQUESTED.

Card management stays available when an account is restricted

Card operations no longer fail with ACCOUNT_NOT_ACTIVE when the linked account is restricted.blockReason.type can no longer be ACCOUNT_RESTRICTED. Restriction only affects transaction authorization, tracked on the account.

File a dispute on a cleared card transaction

You can dispute a cleared card transaction and have Reap take the case to the card network.Send the transaction ID and a reason. Reap derives the card and cardholder from the transaction, along with its currency.Some reasons need a signed statement from the cardholder before the case can move forward. Subscribe to CARD_DISPUTE_STATUS_UPDATED for the outcome.

Fiat deposits are now available over the API

You can read a fiat deposit credited to an account. The response includes the amount as received by the bank and the amount actually credited.Those two differ when the transfer was converted on the way in.In Program-Funded programs you can simulate a deposit in sandbox. Subscribe to FIAT_DEPOSIT_CREATED for new deposits.Fiat deposits also appear in the activity feed as FIAT_DEPOSIT.

The activity feed can return more than one activity type at once

type on the activity feed accepts a comma-separated list. type=CRYPTO_DEPOSIT,CARD_TRANSACTION returns deposits and card transactions together in one ordered, paginated feed.Every other filter narrows within its own activity type instead of restricting the feed to it.cardId=<id> alone still returns the account’s other activity alongside that card’s transactions. Combine it with type=CARD_TRANSACTION to see the card’s transactions by themselves.

Master deposits can be charged a deposit fee

Deposits into a master account can carry a fee, set per project and agreed with Reap. The fee comes out of the deposit.Each deposit reports what it was charged in feeAmount, in the same token as amount. A project with no fee reports 0.Deposits into user accounts are never charged and report null.
  • Deposit fee explains when a master deposit is charged

Simulate an authorization with a 3DS challenge

You can run the whole challenge flow in sandbox for cards using 3dsChallengeMethod: WEBHOOK.The simulation sends CARD_3DS_CHALLENGE_CREATED without creating a transaction. Approving one creates the transaction, rejecting it does not.

Responding to a closed 3DS challenge returns a specific error

A closed challenge returns a specific error if it has already been answered or has expired.

Fraud alerts can be handled through the API

Reap raises an alert on a transaction it suspects is fraudulent. You can also report a past transaction as fraud yourself.You can list alerts and fetch one, then respond to confirm or decline. Confirming an alert or reporting a transaction as fraud blocks the card and sends CARD_STATUS_UPDATED with blockReason.type: FRAUD_ALERT_CONFIRMED.CARD_FRAUD_ALERT_CREATED fires when an alert is raised. CARD_FRAUD_ALERT_STATUS_UPDATED fires when its status changes.An alert that nobody answers in time expires on its own.