KRONOS.Platform Payouts API · v1

Payouts API

Pay your sellers straight into their UK bank accounts. You say how many pounds the seller gets, we handle the rest.

Overview

You keep taking payments the way you do now (any checkout — Whop, Stripe, your own) and decide when each recipient is paid. When you want to pay someone, call POST /v1/payouts with the recipient's bank details and the amount in pounds. The money goes out on Faster Payments, usually within minutes.

Your keys only work for your account and only for the endpoints on this page. Your money is held in your own wallet — never mixed with anyone else's.

How money moves

1 · Buyer paysOn your platform, as today. You hold it until the event.
2 · Top upReleased money goes into your Kronos wallet (it's held as USDC, a digital dollar).
3 · SendPOST /v1/payouts — "pay Sam £12".
4 · Seller paid£12 lands in Sam's bank. You can watch it in the dashboard.

Topping up your wallet

OptionHowGood for
Bank transfer inSend pounds from your bank to your Kronos account details. They're converted to USDC when they arrive.Most people — simple and predictable
USDC withdrawalWithdraw USDC from your checkout provider or exchange straight to your wallet address (shown in the dashboard), on the network shown there.Speed — check the provider's withdrawal fee first

Top up in batches (e.g. once a day) rather than per sale. The wallet needs enough to cover the seller's amount plus the bank's share of the fee — the quote tells you exactly how much.

Getting your API keys

  1. We add you. Tell us the work emails that should have access — they can sign in to the dashboard straight away.
  2. Sign in at your own page, partners.getkronos.io/<your-name> (we send you the link), with your work email. We email a 6-digit code — no password.
  3. Open "API keys" → "New sandbox key". Give it a name, copy the key (it's shown once) and put it in your server's environment variables — never in an app or website.
  4. Build and test against the sandbox — it runs on our banking partner's sandbox, so the same code works live; no real money moves.
  5. Verify your business. We send a link; it takes about 10 minutes (company, directors, owners).
  6. Once approved, "New live key". Swap the sandbox key for the live key — nothing else changes.

You can have up to 5 keys per environment and switch any key off instantly from the dashboard (e.g. if one leaks, or when a developer leaves).

Dashboard

partners.getkronos.io shows your balance in £, every payout and its status, this month's fees, your invoices and your API keys — for both sandbox and live (switch at the top). Team admins can also send a one-off payout from the dashboard ("New payout") — live ones are confirmed with an emailed code. Viewers can only look. Every action is in the audit log under Compliance.

Sandbox & live

SandboxLive
Base URLhttps://auth.getkronos.io/functions/v1/partner-api — the key decides which
Key starts withkp_sandbox_kp_live_
MoneyTest money on HiFi's sandbox (about £7,900 of test float). Nothing real moves.Real money from your wallet
WhenStraight awayAfter business verification
Bank detailsAny valid-looking sort code and account numberThe seller's real details
Payout statusFollows the sandbox bank's real status updatesUsually minutes (Faster Payments)
Charged?NeverCompleted payouts, on the monthly invoice

Same base URL, same requests, same responses — the key decides which one you're in.

Authentication

curl https://auth.getkronos.io/functions/v1/partner-api/v1/account \
  -H "Authorization: Bearer kp_sandbox_YOUR_KEY"

Everything is JSON. Money amounts are strings in pounds with up to two decimals, like "12.00".

GET/v1/account

{ "object": "account", "name": "Acme Marketplace", "status": "active", "environment": "live",
  "funding_wallet": { "currency": "USDC", "chain": "SOLANA", "address": "7Xf…q3" },
  "enabled_countries": ["GB"],
  "prices": { "payout": "£0.99 + 1.00%", "monthly_account": "£15.00" } }

GET/v1/balance

{ "object": "balance", "usdc": "5330.00", "approx_gbp": "4210.70", "gbp_per_usd": 0.79 }

POST/v1/quotes

See what a payout will cost before sending it.

curl -X POST …/v1/quotes -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{ "country": "GB", "amount_gbp": "12.00" }'

{ "object": "quote", "country": "GB",
  "seller_receives_gbp": "12.00",
  "fee_gbp": "1.11",
  "wallet_sends_usdc": "16.37",
  "exchange_rate": { "gbp_per_usd": 0.79 },
  "fee_breakdown": { "taken_in_transfer_gbp": "0.90", "on_monthly_invoice_gbp": "0.21" } }

The fee is always £0.99 + 1% in total. Part of it (the bank's share) is taken inside the transfer — that's why the wallet sends a little more than the seller gets — and the rest is on your monthly invoice.

POST/v1/payouts

Send an Idempotency-Key header — use your own order or payout id. If you send the same request twice (a retry, a timeout), the seller is still only paid once.

curl -X POST …/v1/payouts \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: order_8841" \
  -d '{
    "country": "GB",
    "amount_gbp": "12.00",
    "reference": "order_8841",
    "recipient": {
      "first_name": "Sam", "last_name": "Taylor", "email": "sam@example.com",
      "address": { "line1": "12 Ecclesall Rd", "city": "Sheffield", "postal_code": "S11 8HW" },
      "bank": { "bank_name": "Monzo", "sort_code": "040004", "account_number": "12345678" }
    }
  }'

201 Created
{ "id": "4b1c…", "object": "payout", "environment": "live", "status": "processing",
  "reference": "order_8841", "country": "GB", "amount_gbp": "12.00", "fee_gbp": "1.11",
  "wallet_sent_usdc": "16.37", "recipient": { "name": "Sam Taylor", "account_last4": "5678" }, … }
FieldRules
amount_gbpWhat the seller receives: "1.00" to "20000.00"
recipient.banksort_code 6 digits, account_number 8 digits, bank_name
recipient.addressline1, city, postal_code
recipient.typeOptional: individual (default) or business

GET/v1/payouts/{id} · /v1/payouts

statusMeaning
pendingSaved, waiting for the bank to confirm
processingOn its way
completedIn the seller's account. Only completed payouts are charged.
failed / cancelledDidn't go — nothing charged. See failure_reason.
returnedThe seller's bank sent it back

GET/v1/usage · /v1/invoices · /v1/keys

/v1/usage shows this month so far (payouts, amount paid to sellers, fees and the invoice so far). /v1/invoices lists past invoices, /v1/keys your keys (only the start of each key).

Errors

{ "error": { "code": "invalid_recipient", "message": "Some seller details are missing.",
  "details": { "missing": ["recipient.bank.sort_code (6 digits)"] } } }
HTTPcode
400idempotency_key_required, invalid_json
401unauthorized
402insufficient_funds — top up and retry
403partner_not_active, api_key_required
422invalid_amount, invalid_recipient, corridor_not_enabled, recipient_account_rejected
502payout_not_created — nothing sent; retry with the same key

Sandbox tests

TryYou'll see
Any valid sellerprocessing, then completed when HiFi's sandbox settles it
Account number ending 0000failed (bank rejected the details)

Pricing

WhatPrice
Each payout to a UK bank£0.99 + 1% of the payout
Per sellerNothing
Monthly account£15
Business verification£39, once
Network feesCost + 10% (about 2p a payout)
Bank exceptions (returns, recalls, traces)Cost + 20%, only if they happen

Invoices arrive on the 1st for the month before, by email and in the dashboard.

Compliance

Questions or dashboard access: support@getkronos.io