Changelog

New in Pulse, and what it means for your integration.

Pay out only to your own accounts

Pulse can set up your business so that every payout goes to your own payout accounts, never to your customers. Each order names the account with recipient_id, and only your dashboard admins add, replace, and remove the accounts. Ask support to set it up.

Nothing changes for a business that pays its customers.

To use it: Paying out only to your own accounts?

  1. Read the payout account id values with GET /v1/recipients.
  2. Send recipient_id on each order, not beneficiary or destination. See Name a payout account on an order.
  3. Handle 403 payout_accounts_locked on the requests that change payout accounts.

Collect naira to permanent bank accounts

Give each of your customers a permanent bank account. Whenever anyone transfers naira to it, Pulse converts the transfer and sends a stablecoin to the wallet you choose. You do not create a quote or an order for each transfer.

Each transfer creates an onramp order, and its webhooks carry your collection reference. Pulse holds a transfer below ₦15,000 or above ₦100,000,000.

Action required: Reading from_address?

order.payment_received and order.held replace from_address with a sender object. For a stablecoin deposit, read sender.crypto_address.address. The simulate response changes the same way.

Action required: Matching unsupported_collection_type?

Pulse no longer returns it. A wallet payout account now creates a naira collection. To switch a collection to a different kind of payout account, create a new collection.

To use it: Start collecting naira

  1. Add a wallet as a payout account.
  2. Create a collection for each customer with that wallet as recipient_id.
  3. Show the customer deposit_account.
  4. Read sender, session_id, and payout on order.payment_received.

Read Naira collections for the full flow.

Name the payout account on every collection

Every collection now names its payout account with recipient_id. Payout accounts no longer have a default, so a collection always pays the account it names.

Action required: Creating collections without recipient_id?

Send recipient_id on POST /v1/collections. Without it, the request returns 400 bad_request. Stop sending is_default on POST /v1/recipients; Pulse ignores it.

USDT0 on Optimism

Pulse accepts two USDT contracts on OPTIMISM: USDT0 and USDT.e. A customer can send either one for an offramp. Onramp orders on OPTIMISM pay out USDT0 only.

To use it: Onramp on Optimism?

Tell your customers that they receive USDT0. Supported networks lists both contracts.

Collect stablecoins to permanent addresses

Give each of your customers permanent deposit addresses, one for EVM networks and one for Solana. Whenever a customer sends stablecoins, Pulse converts the deposit and pays naira to the bank account you choose. You do not create a quote or an order for each payment.

Each deposit is an offramp order with the usual webhooks, carrying your collection reference so you can match it to your customer. A deposit Pulse cannot process, such as one below the minimum or on an unsupported network, is held with a reason.

To use it: Start collecting

  1. Add a payout account with POST /v1/recipients.
  2. Create a collection for each customer with POST /v1/collections, and show them the addresses in deposit_addresses.
  3. Handle order.held and the new fields on order.payment_received.

Read the Collections guide for the full flow.

Naira collections are next: a permanent naira account in your customer's name, with each credit converted to stablecoin.

To use it: Parsing order statuses?

Orders can now have the status held. It applies only to orders created from collection deposits.

Show prices without creating a quote

Get indicative buy and sell rates for every asset and network Pulse supports, in one call. Show them on a price page or a calculator before the customer starts a trade. An indicative rate is a guide. To lock a price, create a quote.

A single quote is now limited to ₦100,000,000 on the naira side.

Action required: Quoting above ₦100,000,000?

POST /v1/quotes now returns invalid_amount for these trades. Price them with indicative rates instead.

Earn a fee on every order

Set your own fee on any quote, in basis points. Pulse builds it into the rate your customer sees and pays it to your wallet when the order settles. Every order shows exactly what you earned.

To use it: Start earning

  1. Ask a team admin to add a payout wallet for each network on the Fees page in the dashboard.
  2. Send partner_fee when you create a quote.
  3. Handle the two new errors: partner_fee_exceeds_cap and partner_fee_wallet_missing.

Read the Partner fees guide for the full flow.

USDT and USDC on Solana

Your customers can buy and sell USDT and USDC on Solana. It works for onramp and offramp, through the same endpoints you use today.

To use it: Add Solana

  1. Accept Solana wallet addresses. They are base58, not 0x.
  2. For an offramp, the customer sends the SPL token to deposit_address. Their wallet delivers it to that address's token account.
  3. For an onramp, transaction_hash is the Solana transaction signature. Link it to a Solana block explorer.
  4. Try every outcome with the Solana sandbox addresses in Testing.

Let customers choose what they receive

A customer can now say how much they want to receive, and Pulse works out what they pay. Orders tell you exactly when they stop accepting payment. Every amount Pulse returns is ready to send as-is.

Action required: Update your integration

These renames break existing requests. Ship them before this release reaches your environment.

  1. On POST /v1/quotes, rename amount to source_amount.
  2. On onramp order creation, rename account to funding_account. Read expires_at from the order, not from account.expires_at.
  3. On offramp order creation, read funding_account.deposit_address instead of the top-level deposit_address.
  4. On order reads, read expires_at from the order, not from funding_account.expires_at.

Also in this release:

  • Onramp customers always get the full 30 minutes to pay. The clock starts when their virtual account is issued, so a slow account does not cut their time.
  • An onramp payment that arrives after expires_at does not execute the order, the same as offramp.
  • The minimum onramp quote is ₦15,000.

Quotes now hold for two minutes

A quote holds its price for two minutes. If the customer needs longer, refresh it, even after it expires. Orders that are never funded now close on their own when the payment window ends.

Action required

  1. Reconcile with the order, not the quote. Late funding can change an order's rate and amount.
  2. Handle 409 quote_changed when you create an order. Pulse returns it when a refresh changes the quote at the same time.

Pulse API v1 is here

One API to move between naira and crypto. Customers pay naira and receive crypto, or send crypto and get naira in a verified bank account. Signed webhooks tell you each time an order moves forward.

Test and live each have their own base URL and API keys. Each key allows 60 requests per minute.

To use it: Start building

On this page