# Puplar - [Authentication](https://docs.puplar.com/guides/authentication.md): Authenticate with a secret key - [Test vs Live Mode](https://docs.puplar.com/guides/test-vs-live.md): sk_test_ vs sk_live_ - [Errors](https://docs.puplar.com/guides/errors.md): How the API reports failures - [Pagination](https://docs.puplar.com/guides/pagination.md): page and limit on list endpoints - [Idempotency](https://docs.puplar.com/guides/idempotency.md): Retry without charging twice - [Webhooks](https://docs.puplar.com/guides/webhooks.md): Get a POST when something happens - [Virtual Accounts](https://docs.puplar.com/guides/virtual-accounts.md): Issue bank details a customer can transfer into - [Payments](https://docs.puplar.com/guides/payments.md): Collect a one-time payment with a hosted checkout link - [Collections](https://docs.puplar.com/guides/collections.md): Accept many payments on one reusable link - [Invoices](https://docs.puplar.com/guides/invoices.md): Bill a customer from catalog products - [Crypto](https://docs.puplar.com/guides/crypto.md): Issue a deposit address and list supported tokens - [Identity Verification (KYC)](https://docs.puplar.com/guides/kyc.md): Verify a customer with a government-issued ID - [Refunds](https://docs.puplar.com/guides/refunds.md): Refund a completed, settled credit transaction - [Payouts](https://docs.puplar.com/guides/payouts.md): Send wallet funds to a bank account or crypto wallet - [Transactions](https://docs.puplar.com/guides/transactions.md): List and verify money in and out of your wallet - [Introduction](https://docs.puplar.com/api-reference/introduction.md): Overview of the Puplar Integrations API - [List banks by country](https://docs.puplar.com/api-reference/misc/list-banks-by-country.md): Returns supported banks for bank-transfer payouts in the given country. Currently only `ng` is supported. Use the bank `code` as `bank_code` when resolving an account or creating an NGN payout. - [Resolve bank account by country](https://docs.puplar.com/api-reference/misc/resolve-bank-account-by-country.md): Look up the account holder name for a bank account before creating a bank-transfer payout. Currently only `ng` is supported. Both body fields are required. - [Health check](https://docs.puplar.com/api-reference/meta/health-check.md): No authentication required. - [List customers](https://docs.puplar.com/api-reference/customers/list-customers.md) - [Create customer](https://docs.puplar.com/api-reference/customers/create-customer.md): Creates a customer. - [Get customer](https://docs.puplar.com/api-reference/customers/get-customer.md) - [Update customer](https://docs.puplar.com/api-reference/customers/update-customer.md) - [Delete customer](https://docs.puplar.com/api-reference/customers/delete-customer.md) - [Submit KYC document (deprecated)](https://docs.puplar.com/api-reference/customers/submit-kyc-document-deprecated.md): Deprecated. Use [POST /customers/:id/documents](/api-reference/customers/submit-kyc-documents). - [List customer KYC documents](https://docs.puplar.com/api-reference/customers/list-customer-kyc-documents.md): List KYC documents for a customer. - [Submit KYC documents](https://docs.puplar.com/api-reference/customers/submit-kyc-documents.md): Submit up to 3 KYC documents for a customer. - [Get virtual account requirements](https://docs.puplar.com/api-reference/virtual-accounts/get-virtual-account-requirements.md): KYC documents required to issue a virtual account for a currency. Live issuance is `ngn` only. Pass `customer_id` to see whether that customer is eligible. - [List virtual accounts](https://docs.puplar.com/api-reference/virtual-accounts/list-virtual-accounts.md) - [Create virtual account](https://docs.puplar.com/api-reference/virtual-accounts/create-virtual-account.md): Issue funding instructions for a customer. Test mode only for issuance in current product rules. - [Get virtual account](https://docs.puplar.com/api-reference/virtual-accounts/get-virtual-account.md) - [Simulate deposit (test mode)](https://docs.puplar.com/api-reference/virtual-accounts/simulate-deposit-test-mode.md): Only with a **test** secret key (`sk_test_*`). Amount in minor units (e.g. cents), integer 100–1_000_000. - [List webhooks](https://docs.puplar.com/api-reference/webhooks/list-webhooks.md) - [Create webhook](https://docs.puplar.com/api-reference/webhooks/create-webhook.md): HTTPS URL only. - [Update webhook](https://docs.puplar.com/api-reference/webhooks/update-webhook.md) - [Delete webhook](https://docs.puplar.com/api-reference/webhooks/delete-webhook.md) - [List webhook delivery events](https://docs.puplar.com/api-reference/webhooks/list-webhook-delivery-events.md) - [Get event by id](https://docs.puplar.com/api-reference/webhooks/get-event-by-id.md) - [Resend event to a webhook](https://docs.puplar.com/api-reference/webhooks/resend-event-to-a-webhook.md) - [Create payment](https://docs.puplar.com/api-reference/payments/create-payment.md): Create a one-time checkout - [Verify payment](https://docs.puplar.com/api-reference/payments/verify-payment.md): Look up a payment by your merchant `reference`. Returns status, amounts, and transaction details when available. - [List collections](https://docs.puplar.com/api-reference/collections/list-collections.md): Returns a list of collections. - [Create collection](https://docs.puplar.com/api-reference/collections/create-collection.md): Create a reusable checkout URL - [Get collection](https://docs.puplar.com/api-reference/collections/get-collection.md): Retrieve a single collection by its ID. - [Update collection](https://docs.puplar.com/api-reference/collections/update-collection.md): Update mutable fields on a collection. Cannot change `amount` or `currency`. - [Disable collection](https://docs.puplar.com/api-reference/collections/disable-collection.md): Stop new checkouts on this collection. Completed payments stay. - [List products](https://docs.puplar.com/api-reference/products/list-products.md): Paginated catalog for the authenticated business and mode (live/test). - [Create product](https://docs.puplar.com/api-reference/products/create-product.md): Add a catalog item. `amount` is minor units. Optional `distribution` attaches a share plan (same currency). Invoice lines snapshot the price. - [Get product](https://docs.puplar.com/api-reference/products/get-product.md) - [Update product](https://docs.puplar.com/api-reference/products/update-product.md): Updates catalog fields. Does not change line items already stored on invoices. - [Archive product](https://docs.puplar.com/api-reference/products/archive-product.md): Sets `active` to false. Archived products cannot be added to new invoices. Existing invoice lines are unchanged. - [List invoices](https://docs.puplar.com/api-reference/invoices/list-invoices.md) - [Create invoice](https://docs.puplar.com/api-reference/invoices/create-invoice.md): Create a draft invoice from products. Amount is sum of line items (minor units). Finalize to get a payment URL. - [Get invoice](https://docs.puplar.com/api-reference/invoices/get-invoice.md): Includes snapshotted `lines`, `amount`, `status`, and `url` (hosted checkout) after finalize. `past_due` may be true when status is `open` and `due_date` is in the past — the invoice remains payable. - [Update invoice](https://docs.puplar.com/api-reference/invoices/update-invoice.md): Draft only. Replacing `lines` re-snapshots product names and prices. Customer cannot be changed. - [Delete invoice](https://docs.puplar.com/api-reference/invoices/delete-invoice.md): Draft only. Open invoices must be voided, not deleted. - [Finalize invoice](https://docs.puplar.com/api-reference/invoices/finalize-invoice.md): Locks lines, customer, and amount. Assigns `number` (e.g. `INV-0001`) and `url` (`inv_…` hosted checkout). Status becomes `open`. Emits `invoice.finalized`. After this, edit means void and create a new invoice. - [Send invoice](https://docs.puplar.com/api-reference/invoices/send-invoice.md): Emails the customer the hosted payment URL. Invoice must be `open`. Optional `message`. Emits `invoice.sent`. Status stays `open`. - [Void invoice](https://docs.puplar.com/api-reference/invoices/void-invoice.md): Cancels an `open` invoice. Hosted checkout will reject payment. Emits `invoice.voided`. Cannot void `paid` or `draft` (delete drafts instead). - [Quote a payout](https://docs.puplar.com/api-reference/payouts/quote-a-payout.md): Preview fee and FX for a payout without debiting the wallet. Pass the same `destination` object you will use on create, including `crypto` or `bank_transfer`. Crypto `destination.currency` must be `usdc` or `usdt`; `chain` must be a network id from that token on GET /crypto/tokens. - [List payouts](https://docs.puplar.com/api-reference/payouts/list-payouts.md): Returns a list of payouts for the business. Filter by status or destination currency. - [Create payout](https://docs.puplar.com/api-reference/payouts/create-payout.md): Debit a wallet and send to a bank account or crypto wallet. `reference` is required and unique For crypto, pass `usdc` or `usdt` and a `chain` from GET /crypto/tokens. Do not send `contract_address`. - [Get payout](https://docs.puplar.com/api-reference/payouts/get-payout.md): Look up a payout by the merchant `reference` supplied at creation. Crypto destinations include the resolved `contract_address`. - [Cancel payout](https://docs.puplar.com/api-reference/payouts/cancel-payout.md): Cancel a payout that is still `pending`. Credits the wallet (and fee wallet if applicable). Payouts that are `in_transit` or later cannot be cancelled. - [List wallet balances](https://docs.puplar.com/api-reference/wallets/list-wallet-balances.md): Returns wallet balances for the authenticated business. Amounts are in minor units. Use `available` when checking funds before creating a payout. - [List supported tokens](https://docs.puplar.com/api-reference/crypto/list-supported-tokens.md): Returns supported tokens (USDC / USDT) and the networks each token can be sent or received on. - [List wallet addresses](https://docs.puplar.com/api-reference/crypto/list-wallet-addresses.md): Paginated list of crypto wallet addresses. Optionally filter by customer or chain type. - [Create wallet address](https://docs.puplar.com/api-reference/crypto/create-wallet-address.md): Generate a new EVM wallet address for a customer. Each customer can have at most one wallet per chain type; recreating returns the existing address. - [Get wallet address](https://docs.puplar.com/api-reference/crypto/get-wallet-address.md) ## OpenAPI Specs - [openapi](/openapi.json)