Skip to content

Reference

API reference

One host, JSON in and JSON out, and objects whose shape does not change with the identity provider behind them. Every endpoint below exists in all six SDKs under the same name.

RESTJSONCursor pagination

Resources

This page is the overview. Each resource has its own page with the full field table, every endpoint, and a request and response example for each of them.

Base URL

Every request goes to the same host. The environment is decided by the key you send, not by the URL, which means promoting code from staging to production is a change of secret and nothing else.

1https://api.paycux.com

Authentication

Send your secret key as a bearer token. Keys are server-side only; a request that arrives from a browser origin with a secret key is rejected and logged.

1curl https://api.paycux.com/organizations \
2 -H "Authorization: Bearer sk_example_123456789"

A missing or malformed key returns 401. A valid key without access to the resource returns 403. See Errors for the full list.

Pagination

List endpoints are cursor paginated. Pass limit (default 10, maximum 100) and use the cursor from list_metadata to walk forwards or backwards. Cursors are opaque — never construct one yourself.

1curl "https://api.paycux.com/users?limit=100&after=user_01HQ8ZK3M4N5P6R7S8T9V0W1X2" \
2 -H "Authorization: Bearer sk_example_123456789"
3
4# list_metadata.after is null once you reach the end
5{
6 "object": "list",
7 "data": [ ... ],
8 "list_metadata": { "before": null, "after": null }
9}

Users

A user is one person. Users exist at the account level and may belong to any number of organizations through memberships.

GET/users
POST/users
GET/users/:id
PUT/users/:id
DELETE/users/:id
POST/users/:id/memberships
1curl -X POST https://api.paycux.com/users \
2 -H "Authorization: Bearer sk_example_123456789" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "email": "alan@foo-corp.example",
6 "first_name": "Alan",
7 "last_name": "Turing",
8 "email_verified": false
9 }'

Organizations

An organization is your customer — the tenant that owns a connection, a directory, a role set and a billing relationship.

GET/organizations
POST/organizations
GET/organizations/:id
PUT/organizations/:id
DELETE/organizations/:id
GET/organizations/:id/memberships
1curl -X POST https://api.paycux.com/organizations \
2 -H "Authorization: Bearer sk_example_123456789" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "Foo Corp",
6 "domain_data": [{ "domain": "foo-corp.example", "state": "verified" }]
7 }'

Connections

A connection is one customer's identity provider. SAML and OIDC differences are normalised, so your code reads the same profile either way.

GET/connections
GET/connections/:id
DELETE/connections/:id
POST/portal/generate_link
POST/sso/token
1curl "https://api.paycux.com/connections?organization_id=org_01HQ8ZK3M4N5P6R7S8T9V0W1X2" \
2 -H "Authorization: Bearer sk_example_123456789"

Directories

A directory keeps your user list in step with the customer's SCIM endpoint or HR system. You read the result; the reconciliation is ours.

GET/directories
GET/directories/:id
GET/directory_users
GET/directory_users/:id
GET/directory_groups
DELETE/directories/:id
1curl "https://api.paycux.com/directory_users?directory=directory_01HQ8ZK3M4N5P6R7S8T9V0W1X2&limit=1" \
2 -H "Authorization: Bearer sk_example_123456789"

Roles

Roles are defined per environment and assigned per membership. Permissions travel inside the session, so checking one costs nothing.

GET/roles
POST/roles
PUT/roles/:id
DELETE/roles/:id
PUT/memberships/:id
1curl -X POST https://api.paycux.com/roles \
2 -H "Authorization: Bearer sk_example_123456789" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "Billing admin",
6 "slug": "billing-admin",
7 "permissions": ["invoices:read", "invoices:write", "payment-methods:write"]
8 }'

Audit logs

Append-only events with an actor, a target and context. Searchable in the dashboard, exportable on demand, streamable into a customer's own tooling.

POST/audit_logs/events
POST/audit_logs/exports
GET/audit_logs/exports/:id
GET/audit_logs/schemas
1curl -X POST https://api.paycux.com/audit_logs/events \
2 -H "Authorization: Bearer sk_example_123456789" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "organization_id": "org_01HQ8ZK3M4N5P6R7S8T9V0W1X2",
6 "event": {
7 "action": "invoice.exported",
8 "occurred_at": "2026-06-18T08:14:03.220Z",
9 "actor": { "id": "user_01HQ8ZK3M4N5P6R7S8T9V0W1X2", "type": "user", "name": "Alan Turing" },
10 "targets": [{ "id": "invoice_2026_06", "type": "invoice" }],
11 "context": { "location": "203.0.113.24", "user_agent": "Mozilla/5.0" }
12 }
13 }'

Webhooks

Endpoints receive signed event deliveries. Manage them from the API when you provision environments programmatically.

GET/webhooks
POST/webhooks
PUT/webhooks/:id
DELETE/webhooks/:id
GET/events
1curl -X POST https://api.paycux.com/webhooks \
2 -H "Authorization: Bearer sk_example_123456789" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "endpoint_url": "https://api.yourapp.example/paycux/webhook",
6 "events": ["dsync.user.created", "dsync.user.deleted", "connection.activated"]
7 }'

Something missing?

The reference tracks the API, and the API changes most weeks. New fields and endpoints are announced in the changelog before they appear here.