Skip to content

Payment requests ​

A payment request asks another TxGold account to pay yours. The payer gets a push notification and a card on their TxGold home screen, and pays with a tap. You see the request turn paid.

Create a request ​

http
POST /v1/payment-requests
{
  "accountId": "1000007",
  "payerAccountId": "1000006",
  "amount": "12.50",
  "memo": "Invoice 4411",
  "memoInternal": "order-88231",
  "expiresAt": "2026-11-04T00:00:00Z"
}
Field
accountIdYour account, which will be paid.
payerAccountIdThe account asked to pay. Required: a request is addressed to someone.
amountA decimal string, at most 2 places. A business or charity must ask for more than 0.02.
memoShown to the payer, and becomes the payment's memo. Up to 150 characters.
memoInternalYour own reference, never shown to the payer. Up to 150 characters.
expiresAtOptional. At least 1 minute and at most 7 days ahead; 7 days if left out.

The answer is 201:

json
{
  "id": "918",
  "status": "pending",
  "accountId": "1000007",
  "payerAccountId": "1000006",
  "amount": "12.50",
  "memo": "Invoice 4411",
  "memoInternal": "order-88231",
  "createdAt": "2026-10-30T16:10:00.000Z",
  "expiresAt": "2026-11-04T00:00:00.000Z",
  "statusChangedAt": null,
  "paymentId": null
}

Resending the identical signed request returns the same request with 200.

The Integration and Device roles can create requests; Device-no-refunds can't.

Statuses ​

StatusMeaning
pendingWaiting for the payer
paidPaid: paymentId is the payment, statusChangedAt when
dismissedThe payer dismissed it in the app
cancelledYou cancelled it
expiredPassed expiresAt unpaid

A cancelled or expired request can't be paid: the payer's attempt is refused with payment_request_not_payable.

Watch for payment ​

Until webhooks arrive, poll the request, or list your pending ones:

http
GET /v1/payment-requests/{id}
GET /v1/payment-requests?accountId=1000007&status=pending&limit=50

Lists are newest first and paged with cursor (see Conventions). A reasonable poll is every few seconds while a customer is paying, and every few minutes for invoices.

Cancel a request ​

http
POST /v1/payment-requests/{id}/cancel

It leaves the payer's app at once. Only a pending request can be cancelled (request_not_pending).

In the Sandbox ​

Requests to your demo customers can be paid on demand with POST /v1/sandbox/payment-requests/{id}/pay.

The SDKs are MIT licensed.