Prerequisites
- An API key from the Dashboard — see Authentication
- A funded business account — see Fund Your Account, or use the sandbox deposit endpoint for test funds
Step 1: Onboard the Contractor
Create a Person withtype: "CONTRACTOR". Contractors are either individuals or registered businesses — set contractorType accordingly (businessName is required for BUSINESS).
- Individual
- Registered Business
personId you’ll use in every later step:
- Amounts are in minor units —
500000USD is $5,000.00. compInfois what payroll pays. For contractors, use typenet(orfixed). If pay varies per cycle (hourly work, milestones), setsalary.amountto0and supply the real amount on each payroll entry in Step 4.
Step 2: Put an Agreement in Place (Optional)
Payroll does not require a contract — but most businesses want one on file. Cadana supports two flows; both attach the agreement to the contractor’spersonId. See Manage Contracts for the full lifecycle.
- Generate from a template
- Upload a signed PDF
List your contract templates, then create a contract for the contractor. Template variables (name, salary, dates) are filled from the Person record at creation time.Both parties then sign electronically — fetch each signer’s link with
GET /v1/contracts/{contractId}/signingUrl and track progress via the contract status (awaiting business signature → awaiting person signature → completed).The agreement documents the terms; it doesn’t drive payment. Payroll amounts come from the Person’s
compInfo (or per-cycle entries), and payroll runs regardless of contract status. Template variables snapshot the Person’s data when the contract is created — updating compInfo later does not update an existing contract.Step 3: Give Them a Wallet
Contractors are paid into a Cadana Global Wallet by default. Provisioning takes two calls — full details in Set Up Worker Wallets. 1. Create a User for the Person. This provisions a wallet in their compensation currency and automatically setswallet as their preferred payment method:
By default the contractor receives a welcome email to set their password. Pass suppressWelcomeEmail: true if you handle login via your own SSO.
2. Submit KYC. The wallet can’t receive funds until identity verification is approved. Upload the ID documents (file upload flow), then submit — issuedBy, frontFileId, and selfieFileId are required:
Track approval by polling KYC status or subscribing to the user.kyc.updated webhook. Alternatively, the contractor can complete KYC themselves in the Cadana app after logging in. See KYC Verification for statuses, rejections, and resubmission.
Contractors hired by U.S. businesses also complete a tax form (W-9, W-8BEN, or W-8BEN-E) in the Cadana app alongside KYC — no API work needed on your side. See Tax Forms.
Step 4: Run Payroll
Pay the contractor with a one-off contractor payroll — full details in Pay Workers via Payroll. 1. Create the payroll shell: 2. Save the entries. Thesalary here is what gets paid this cycle (minor units):
Saving is asynchronous — poll GET /v1/payrolls/{payrollId} until the status is Pending Submission, then review the calculated debit: the total that will leave your business account, i.e. net pay plus fees. The fee breakdown is on the linked invoice (GET /v1/invoices/{invoiceId}).
3. Approve to trigger fund collection and disbursement:
4. Confirm the money landed. When the payroll reaches Completed, each entry carries transactionIds — resolve them with GET /v1/users/{userId}/transactions/{transactionId} or check the wallet balance. Wallet credits can trail the Completed status by up to a minute.
Step 5: The Contractor Gets Their Money
Funds sit in the contractor’s wallet until they’re withdrawn. Two paths:Self-serve (Cadana or white-label app)
The contractor logs in — via the welcome-email credentials or your SSO — and cashes out to a bank account, mobile money, or card in 100+ countries from the app. Nothing to build; brand it with White-Label UI.On their behalf (API)
Your platform can run the payout for them — full details in Payout:- Check the corridor: payment methods for the destination country, field requirements for the details schema, and fees, timelines, and limits.
- Create a beneficiary — the saved payment destination.
- Get an FX quote. A quote is required even when source and destination currencies are the same (the rate is
1). - Create the transaction.
referenceis your idempotency key and must be a UUID:
- Track the transaction to
success, or subscribe totransaction.succeeded/transaction.failedwebhooks.
Wallet transaction amounts are decimal strings in major units (
"500.00" = $500.00) — unlike the minor-unit integers used by payroll. See Money Amounts.Recap
| Step | Endpoint | You have |
|---|---|---|
| Onboard | POST /v1/persons | personId |
| Agreement | POST /v1/contracts or POST /v1/contracts-upload | signed agreement on file |
| Wallet | POST /v1/users/invite + POST /v1/users/{userId}/kyc | userId, KYC-approved wallet |
| Pay | POST /v1/payrolls → save → approve | funds in the wallet |
| Cash out | self-serve app, or POST /v1/users/{userId}/transactions | funds at the contractor’s bank |
Next Steps
Onboard Workers
Full Person field reference
Payroll Lifecycle
All payroll statuses and webhooks
Set Up Worker Wallets
Users, KYC, and wallet details
Payout
Beneficiaries, quotes, and corridors