Payments API

Create, list, refresh and cancel hosted payment links and read receivables figures.

Payments lets your workspace collect money from your own customers through a payment provider you have connected (Razorpay). This API creates and tracks hosted payment links. Connecting the provider account itself (its keys) is done in the app, and the keys are never returned by the API.

This is separate from your AxisIQ subscription: here your workspace charges its customers with your provider account.

If the Invoices & Payments app is switched off in Settings › Apps, these routes answer 404 NOT_FOUND.

Endpoints

Method Path Permission What it does
GET /orgs/{orgId}/payments/connections payments:read List connected provider accounts
GET /orgs/{orgId}/payments/links payments:read List payment links
POST /orgs/{orgId}/payments/links payments:collect Create a payment link
GET /orgs/{orgId}/payments/links/{linkId} payments:read Get a link
POST /orgs/{orgId}/payments/links/{linkId}/cancel payments:collect Cancel an unpaid link
POST /orgs/{orgId}/payments/links/{linkId}/refresh payments:collect Re-check the status with the provider
GET /orgs/{orgId}/payments/overview payments:read Receivables and collections summary

Connections can also be created, edited, tested and deleted (payments:manage), but that involves provider secrets, so use the app. GET …/connections returns a plain array. GET …/links/{linkId} answers 404 NOT_FOUND for an unknown link.

Connections

{
  "id": "0190f300-…",
  "provider": "razorpay",
  "name": "Main account",
  "mode": "live",
  "redirect_url": "https://example.com/thanks",
  "status": "ok",
  "last_checked_at": "2026-10-04T09:00:00Z",
  "created_at": "2026-10-01T08:00:00Z"
}

id is the connection_id you pass when creating a link. redirect_url is where a payer is sent after paying, unless a link sets its own. last_error appears when the last check failed. Secrets are never included.

{
  "id": "0190f301-…",
  "connection_id": "0190f300-…",
  "provider": "razorpay",
  "short_url": "https://pay.example.com/AbC123",
  "amount": "12500.00",
  "currency": "INR",
  "status": "created",
  "description": "Invoice INV-1001",
  "invoice_id": "0190f0aa-…",
  "customer_name": "Asha Rao",
  "customer_email": "asha@example.com",
  "customer_contact": "+919876543210",
  "created_at": "2026-10-04T09:30:00Z"
}

status is created (waiting to be paid), paid, cancelled or expired. When it is paid, paid_at and payment_record_id appear. The payment record is an ordinary payments record you can read through the Records API.

short_url is the page you send to the customer.

POST /orgs/{orgId}/payments/links

Permission: payments:collect.

Field Type Required Notes
connection_id string Yes A connection id
amount string Yes, unless invoice_id is given A positive decimal such as "12500.00"
currency string No ISO 4217 code. Default: the invoice's currency, else the workspace default currency
description string No Shown to the payer
invoice_id string No An invoice record. Fills the amount and currency when you leave them out. You must be able to read that invoice
redirect_url string No Where the payer goes afterwards. Overrides the connection's
customer_name, customer_email, customer_contact string No Pre-fill the payer's details
curl -s -X POST https://axisiq.co/api/v1/orgs/$ORG/payments/links \
  -H "Authorization: Bearer $AXIS_KEY" -H "Content-Type: application/json" \
  -d '{"connection_id": "0190f300-…", "invoice_id": "0190f0aa-…", "customer_email": "asha@example.com"}'

Response 201 with the link object.

Errors

Status Code When
400 VALIDATION_ERROR Missing or invalid amount, bad connection or invoice id, an invoice that does not exist or that your role cannot read ("invoice not found or not accessible"), a redirect_url that is not an absolute http(s) address
403 FORBIDDEN The role lacks payments:collect
404 NOT_FOUND No such connection

Cursor paging, newest first. limit (default 50, maximum 100) and cursor. The response is an array of link objects; to get the next page pass the id of the last link as cursor.

When the customer pays, your provider notifies AxisIQ and the link turns paid. AxisIQ then creates a payments record. The invoice is not closed automatically; someone (or a flow) closes it.

To receive that notification, open Invoices & Payments › Connections, edit the connection, and paste the webhook address shown there into your provider's dashboard. If a notification is ever missed, call POST …/links/{linkId}/refresh. It re-checks the provider and updates the link, which is safe to repeat.

POST /orgs/{orgId}/payments/links/{linkId}/cancel

Cancels a link that has not been paid. Response 200 with the link.

GET /orgs/{orgId}/payments/overview

The app's home figures: open and overdue receivables by currency, aging buckets (current, 1 to 30, 31 to 60, 61 to 90, 90+ days), top debtors, the oldest overdue invoices, payments collected per month and link counts per status. Invoice and payment figures only include what your role may read.