What you can do
- Create and onboard recipients
- Send payouts individually or in batches
- Track payment status from creation to settlement
- Collect and retrieve recipient tax forms (W-9)
- Record payments made outside of Karat for reporting
- Subscribe to webhooks for asynchronous updates
How it works
1
Generate an API key
Create an API key from your Karat dashboard and store it securely. See Authentication.
2
Add recipients
Create recipients with
POST /recipients. Each recipient receives an onboarding link to complete their profile.3
Send payouts
Send one or more payouts with
POST /payments, using an idempotencyKey so retries are safe.4
Listen for updates
Subscribe a callback URL to events like
payout.updated to receive status changes as they happen. See Webhooks.Choose recipient tax collection settings
SettaxCollectionMode on each recipient in POST /recipients:
taxCollectionMode is optional. When no tax collection settings are supplied, collect_immediately is saved. Each recipient can have its own mode.
The mode must be one of the exact strings above; null, empty strings, and other values return HTTP 400. One invalid recipient rejects the whole request before any recipients are written, with a field path such as recipients.1.taxCollectionMode in error.message.
Re-add and verify a recipient
POST /recipients creates or updates an active recipient in your organization by normalized email. Re-adding applies the same creation defaults: omitting tax collection settings saves collect_immediately, even if the recipient previously used another mode. Include the desired mode on every re-add when you need to retain it. Archived recipients must be unarchived before re-adding.
Read the saved taxCollectionMode in data.recipients[] after creation, data[] from GET /recipients, or data from GET /recipients/{recipient_id}. Configuration is separate from recipient status and tax approval.
How the $600 threshold works
The threshold is inclusive: an eligible payout that brings the total to $600 or more invokes the existing tax-required flow when tax information is not approved. Totals belong to the payer-recipient relationship and include completed, nondeleted payouts and recorded nondeleted external payments. Reimbursements are excluded. Eligible amounts in the current batch accumulate per recipient. There is no calendar-year reset in this calculation. For an unonboarded recipient whose first payout or batch reaches $600, payment creation changes the saved mode tocollect_immediately. Later recipient reads return that updated mode. This transition happens during payment creation, after the recipient’s chosen mode was saved.
POST /payments uses the recipient’s saved configuration. It has no per-payment taxCollectionMode override. Existing onboarding, verification, payment-method requirements, holds, and webhook behavior continue to apply. do_not_collect does not emit the tax_info_collected milestone.
Explore the API
Authentication
Generate, use, and rotate your API keys.
Environments
Base URL and how to get sandbox access.
Payments
Create, list, retrieve, and cancel payouts.
Recipients
Add and manage the payees you send to.
Webhooks
Subscribe to asynchronous event notifications.
Sandbox testing
Simulate payout outcomes before going live.
All amounts in the Payout API are integers in the smallest currency unit (cents). For example,
$250.00 is 25000.