Skip to content
Tranzaq

Developers

A small API that does one job well.

Create people and payout batches, follow every payment, and hear about results by signed webhook. Start in test mode with fake money.

A man in a blue shirt checking a phone on a beach

Quick start

Your first payout in three calls.

Create credentials on the website (Developers, choose Test), then:

POST /oauth/token
grant_type=client_credentials
client_id=tqz_test_1a2b3c4d
client_secret=…

→ { "access_token": "eyJ…",
    "token_type": "Bearer",
    "expires_in": 3600,
    "scope": "balance.read payouts.write" }
POST /api/v1/sandbox/fund
Authorization: Bearer <token>

{ "amount": 5000 }

→ { "success": true,
    "result": { "available": 5000.00 } }
POST /api/v1/payout-batches
Authorization: Bearer <token>
Idempotency-Key: payroll-2026-10

{ "name": "October salaries",
  "items": [{ "beneficiaryId": "…",
              "amount": 1850.00 }] }

POST /api/v1/payout-batches/{id}/submit

In your language

The same call, in the language you use.

Pick a language and copy it. Swap in your own credentials and people.

# 1. Trade your credentials for a token
curl -X POST https://api.tranzaq.com/oauth/token \
  -d grant_type=client_credentials \
  -d client_id=tqz_test_… -d client_secret=…

# 2. Create a batch (safe to retry)
curl -X POST https://api.tranzaq.com/api/v1/payout-batches \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: payroll-2026-10" \
  -H "Content-Type: application/json" \
  -d '{ "name": "October salaries",
        "items": [{ "beneficiaryId": "…", "amount": 1850.00 }] }'

Authentication

OAuth 2.0, with scopes you control.

Your server signs in with a client ID and secret and receives a token that lasts an hour. Credentials carry only the scopes you choose.

  • Client credentials flow: no user sign-in, made for servers
  • Ask for fewer scopes than the credentials have, never more
  • Revoke credentials and every token already issued stops working at once
  • Calls are limited per credentials, so one busy customer never affects another
ScopeAllows
balance.readRead the balance
beneficiaries.readList and read people
beneficiaries.writeAdd people
payouts.readList and read payout batches
payouts.writeCreate, submit and cancel batches
sandbox.fundTest mode only: add fake money

Test mode

Build with fake money. Go live when you are ready.

Test and live are completely separate: test credentials only ever touch a separate database with test money.

  • Test credentials are available the moment you sign up, before your business is approved
  • Client IDs show their mode: tqz_test_… or tqz_live_…
  • Add fake money with the sandbox funding call
  • Payouts really run through the whole flow, using a test bank
  • Live credentials unlock when your business has been approved

Test mode

tqz_test_1a2b3c4d

Fake money · separate database

Live mode

tqz_live_5e6f7a8b

Real money · after approval

Webhooks

Hear about every result, safely.

Register an address and we send a signed message when something happens. Failed deliveries are retried, and every attempt is logged.

  • payout.batch.approved
  • payout.batch.rejected
  • payout.batch.cancelled
  • payout.batch.completed
  • payout.item.succeeded
  • payout.item.failed
  • funding.credited
const expected = crypto
  .createHmac("sha256", signingSecret)
  .update(timestamp + "." + rawBody)
  .digest("hex");

// X-Tranzaq-Signature must equal `expected`.
// Reject messages with an old X-Tranzaq-Timestamp.

Built to be safe

Retries never pay twice.

Creating people and payout batches needs an Idempotency-Key. Send the same key with the same request and you get the first answer back, with nothing created twice.

Same key, same request

Returns the original answer, marked as a replay.

Same key, different request

Refused, so a key can never be reused by mistake.

A rejected request

Does not use up its key, so you can fix it and send it again.

Get started

Start building today.

Create test credentials and make your first payout in minutes.

A man in a blue shirt checking a phone on a beach