Tax Guide
Choose the tax jurisdiction and payment category for each batch and payment so Payment Labs collects the right tax forms and withholds the right amount.
Every payout carries a tax jurisdiction and a payment category. Together they decide which tax form the payee must complete before you can pay them, and how much tax Payment Labs withholds from the payment. This page explains both and how to set them.
Before you start
- Payment Labs enables tax jurisdictions on your account during onboarding. Get Payor returns them in
taxJurisdictions. An empty or missing list means no jurisdiction is enabled and no tax is processed. - Depending on your agreement, Payment Labs also remits withheld tax to the tax authority and issues tax documents to your payees. Ask your Payment Labs contact which of these services apply to you.
What Payment Labs does for you
- Collects tax forms. During onboarding, each payee completes the tax form for every jurisdiction you pay them under. The payee does this in the Payment Labs onboarding flow or the Payee Widget; you never handle the form.
- Decides payability per jurisdiction. A payee is payable for a jurisdiction only after completing its form. The payee object shows this in
payableByJurisdiction, for example{"us": true, "de": false}. A payment can be submitted only when its payee is payable for the payment's jurisdiction. - Calculates withholding at submit. When a payment is submitted, Payment Labs calculates the tax to withhold from the payee's form, residence and the payment category, and deducts it from what the payee receives.
Tax jurisdictions
taxJurisdiction is a lowercase code:
| Value | Jurisdiction | Forms the payee completes |
|---|---|---|
us | United States | W-9 (US persons), W-8BEN (non-US individuals) or W-8BEN-E (non-US entities) |
de | Germany | German resident or non-resident form, for an individual or a business |
fi | Finland | Finnish tax form |
gb | United Kingdom | UK resident or non-resident form, for an individual or a business |
my | Malaysia | Malaysian resident or non-resident form, for an individual or a business |
pl | Poland | Polish resident or non-resident form, for an individual or a business |
sa | Saudi Arabia | Saudi resident or non-resident form, for an individual or a business |
se | Sweden | Swedish resident or non-resident form, for an individual or a business |
none | No jurisdiction | None. No tax form is collected, nothing is withheld, and no tax documents are issued for the payment. |
You can send only none or a jurisdiction enabled on your account.
Defaults
The batch sets the jurisdiction, and its payments inherit it:
| Jurisdictions enabled on your account | taxJurisdiction on Create Batch | Default |
|---|---|---|
| None | Optional | none |
| One | Optional | Your one jurisdiction. Send none to opt a batch out. |
| Two or more | Required | None; the request fails without it. |
- Create Batch sets the batch's jurisdiction. Patch Batch cannot change it, so create a new batch to use another jurisdiction.
- Create Payment uses the batch's jurisdiction unless you send
taxJurisdictionon the payment. - Which jurisdiction applies to a payment is a tax decision for your business. Ask your tax adviser if you are unsure.
Payment categories
paymentCategory says what the payment is for. Some jurisdictions withhold differently by category, so classify every payment as precisely as you can.
| Value | Use for |
|---|---|
online-esport-prize | Prize money for an esports competition played online. |
in-person-esport-prize | Prize money for an esports competition at a physical event in the jurisdiction. |
in-person-esport-prize-out-of-jurisdiction | Prize money for an esports competition at a physical event held outside the jurisdiction. |
online-contest-prize | Prize money for a non-esports contest held online. |
in-person-contest-prize | Prize money for a non-esports contest at a physical event. |
online-misc-prize | Any other prize awarded online. |
in-person-misc-prize | Any other prize awarded at a physical event. |
athlete-prize | Prize money or payments to athletes for competing in person. |
remote-contractors | Fees for services performed remotely by a contractor. |
in-person-contractors | Fees for services performed in person by a contractor. |
reimbursement | Repayment of expenses the payee incurred for you. Not income. |
royalties | Royalties for the use of rights, content or intellectual property. |
How categories affect withholding, in general terms:
- In-person categories (
in-person-*,athlete-prize) describe activity performed in the jurisdiction. They are the categories most likely to trigger withholding for non-resident payees. - Online and remote categories (
online-*,remote-contractors) andin-person-esport-prize-out-of-jurisdictiondescribe activity performed outside the jurisdiction, and are less often subject to withholding for non-residents. reimbursementis not taxable income in the United States, so nothing is withheld foruspayments in this category.
For example, under us: a payee with a W-9 has nothing withheld unless the IRS has put them under backup withholding (24%). A payee with a W-8BEN or W-8BEN-E has nothing withheld on online and remote categories, and up to 30% withheld on in-person categories and royalties. For some in-person categories, a tax treaty with the payee's country of residence lowers the rate.
Defaults
- Create Batch requires
defaultPaymentCategory. - A payment uses the batch's
defaultPaymentCategoryunless you sendpaymentCategorywhen you create it.
Preview the tax on a payment
Submit Payment Dry Run returns the withholding before you submit, in payee.taxWithholdingAmount, together with fees and the amount the payee receives. Nothing is charged or saved.
curl -s -X POST "$BASE_URL/batches/$BATCH_ID/payments/$PAYMENT_ID/submit/dry-run" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{}' | jq '.payee | {taxWithholdingAmount: .taxWithholdingAmount.formattedValue, payeeReceives: .totalDestinationAmount.formattedValue}'The payee must have completed their tax form for the result to include withholding.
Change the category or jurisdiction
- Before submit. Update Payment accepts
paymentCategoryandtaxJurisdictionwhile the payment'sisEditableistrue. - For a whole batch. Patch Batch with a new
defaultPaymentCategoryand"updateExistingPayments": truealso moves everyDRAFTpayment in the batch to the new category. Payments already submitted keep theirs. - After submit. You cannot change either through the API. Tax is calculated, and may already be withheld and reported, at submit time. Contact Payment Labs support; a correction can lead to tax penalties.
curl -s -X PATCH "$BASE_URL/batches/$BATCH_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"defaultPaymentCategory": "in-person-esport-prize", "updateExistingPayments": true}'Errors and edge cases
| Status | code in details | Meaning | What to do |
|---|---|---|---|
400 VALIDATION_ERROR | MISSING_REQUIRED_FIELD on taxJurisdiction | Your account has two or more jurisdictions and the batch did not name one. | Send taxJurisdiction. |
400 VALIDATION_ERROR | INVALID_TAX_JURISDICTION_OPTION | The jurisdiction is not enabled on your account. | Send none or one of GET /payors/me taxJurisdictions. |
400 VALIDATION_ERROR | INVALID_FIELD_ENUM_TYPE on taxJurisdiction or paymentCategory | The value is not one of the values above. | Use a value from the tables on this page. |
409 on submit | The payee is not payable for this payment's jurisdiction, usually because their tax form is missing. | Ask the payee to finish onboarding, or submit with autoSubmit: true so the payment goes out when they do. |
Next steps
Updated 13 days ago
What’s Next
Next: Payin SDK Changelog.
