What you can do
- Create and onboard recipients
- Send payouts individually or in batches
- Schedule payouts for a later date or on a weekly, every-two-weeks, or monthly repeat
- Track payment status from creation to settlement
- List your payout source accounts and check balances and year-to-date payout totals
- Read posted banking transactions and active pending holds for your organization’s checking accounts
- Collect and retrieve recipient tax forms (W-9)
- Create, list, retrieve, cancel, and send reminders for invoices
- Record payments made outside of Karat for reporting
- Subscribe to webhooks for asynchronous updates
How it works
- Generate an API key. Create an API key from your Karat dashboard and store it securely. See Authentication.
- Add recipients. Create recipients with
POST /recipients. Each recipient receives an onboarding link to complete their profile. - Send payouts. Send one or more payouts with
POST /payments, using anidempotencyKeyso retries are safe. - Listen for updates. Subscribe a callback URL to events like
payout.updatedto 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.
Legacy shouldCollectTaxInfo field
The legacy shouldCollectTaxInfo boolean is still accepted on POST /recipients for backward compatibility, but new integrations should use taxCollectionMode.
- When you supply
taxCollectionMode, it is authoritative. AnyshouldCollectTaxInfovalue in the same recipient is ignored. - When you supply only
shouldCollectTaxInfo,truesavescollect_immediatelyandfalsesavesdo_not_collect. There is no legacy value that maps tocollect_at_600. - When you omit both fields,
collect_immediatelyis saved. This also applies when re-adding a recipient by email: omitting both fields resets the saved mode tocollect_immediatelyeven if the recipient previously used another mode. - Only JSON booleans are accepted.
null, strings such as"true", and numbers return HTTP 400 with a field path such asrecipients.0.shouldCollectTaxInfoinerror.message, and reject the whole batch.
shouldCollectTaxInfo. Read the saved mode from taxCollectionMode instead.
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 $2,000 threshold works
The threshold is inclusive: an eligible payout that brings the year’s total to **$2,000 or more** invokes the existing tax-required flow when tax information is not approved. This follows the IRS 1099-NEC threshold for payments made in 2026 and later; for 2025 and earlier it was $600. Totals belong to the payer-recipient relationship and reset each calendar year (Eastern time). They include completed, nondeleted payouts by completion date and recorded nondeleted external payments by payment date. Reimbursements are excluded. Eligible amounts in the current batch accumulate per recipient. Approved tax information stays valid across years. For an unonboarded recipient whose first payout or batch reaches $2,000, 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 recipients you send to.
Invoices
Create, list, retrieve, cancel, and send reminders for invoices.
Accounts
List payout source accounts and check balances and year-to-date totals.
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.