Skip to main content
The Karat Payout API lets you programmatically send money to creators, contractors, and partners, manage recipients and their tax information, and react to payment activity in real time with webhooks.

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

Set taxCollectionMode 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 to collect_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.