ClocknextHelp
DocumentationAPI ReferenceMCP Tools
Dashboard

Get started

OverviewQuickstart

Good to know

Response formatHandling errorsPaginating resultsSending data reliablyYour own customer idsWebhooks

API reference

Record credit POSTRecord outcome POSTComplete outcome POSTRecord wallet POSTRecord unit POSTComplete composite POST
List customers GETCreate a customer POSTGet a customer GETUpdate a customer PATCHDelete a customer DELETEGet a customer's balances GETGet a customer's wallet ledger GETSet a customer's low-balance alert PUTGet a customer's current plan GETChange a recurring grant PUTList Customer Usage Log GETLook Up Usage Logs by ID GET
Manage a customer's credit balance POSTManage a customer's outcome balance POSTManage a customer's unit balance POSTManage a customer's composite balance POSTManage a customer's wallet balance POST
List a customer's members GETAdd a member POSTUpdate a member PATCHRemove a member DELETE
PlansCreditsOutcomesUnitsComposites
List taxes GETCreate a tax POSTGet a tax GETUpdate a tax PATCH
List purchases GETCreate a purchase POSTGet a purchase GETUpdate a purchase's auto-payment setting PATCHCancel a purchase POST
List invoices GETGet an invoice GETMint a hosted pay link GET
List payments GETGet a payment GET
wallet.balance.update POSTwallet.balance.drop POST
Mint a customer-portal access token POST
Taxes

Create a tax

Creates a tax for one country. Two active taxes can't share a name (ignoring case) in the same country — that's a 409. isActive can't be sent.

POST
/taxes

Authorization

apiKey
AuthorizationBearer <token>

Organisation-scoped key from Settings → API Keys.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/taxes" \  -H "Content-Type: application/json" \  -d '{    "name": "GST",    "percentage": 18,    "countryCode": "IN",    "behavior": "exclusive",    "description": "India GST"  }'
{  "statusCode": 200,  "statusDetail": {    "status": "SUCCESS",    "message": "OK"  },  "result": {    "created": true,    "tax": {      "id": "tax_7k2m9",      "name": "GST",      "description": "India GST",      "percentage": 18,      "countryCode": "IN",      "behavior": "exclusive",      "isActive": true,      "createdAt": "2026-10-05T10:00:00.000Z",      "updatedAt": "2026-10-05T10:00:00.000Z"    }  }}
{  "statusCode": 400,  "statusDetail": {    "status": "ERROR",    "message": "Request body must be valid JSON."  },  "result": {}}
{  "statusCode": 401,  "statusDetail": {    "status": "ERROR",    "message": "Invalid API key."  },  "result": {}}
{  "statusCode": 409,  "statusDetail": {    "status": "ERROR",    "message": "Customer \"cus_abc123\" is archived."  },  "result": {}}
{  "statusCode": 500,  "statusDetail": {    "status": "ERROR",    "message": "Could not complete the request."  },  "result": {}}

List taxes GET

Lists your taxes, oldest first. Archived taxes are included; pass `active=true` for only the ones that apply to new invoices.

Get a tax GET

Gets one tax — the same row the list returns.

name*string

Shown on invoices. Unique among active taxes in the same country, ignoring case.

Length1 <= length <= 100
description?|

Optional note for your team. Not shown to customers.

Lengthlength <= 500
percentage*number
Range0 <= value <= 100
countryCode*string

ISO 3166-1 alpha-2 country code. Lower case is accepted and stored upper case; a country name is refused.

behavior*string

inclusive — already inside the price. exclusive — added on top.

Value in

  • "inclusive"
  • "exclusive"