Add payment transactions
/partners/invoices/{uuid}/add-transactionsSettles whole transactions against an invoice, or records a refund paid out on a credit memo.
Each transaction settles its full amount. On an invoice, Income transactions are payments and Expense transactions are refunds; on a credit memo, Expense transactions record a refund paid to the customer — the only way to refund a credit memo. The document must be approved (not a draft or estimate), have a customer, and be in the workspace currency; pay a foreign-currency invoice with POST /partners/transactions/{transactionId}/assign-to-bills-invoices instead. Transactions must not be reviewed, reconciled, pending, excluded, or already part of another invoice. Undo with PATCH /{uuid}/remove-transaction. MCP equivalent for credit memo refunds: COUNT_record_credit_memo_refund.
Path parameters
uuiduuidrequiredThe UUID of the invoice or credit memo.
Request body
transactionsarrayrequiredTransaction UUIDs from the Transactions API.
isRecordAsCashbooleanRecord the payment as a hand-recorded cash receipt. Defaults to false.
cashDepositPendingbooleanInvoices only, and only with isRecordAsCash: true. Routes the receipt through Undeposited Funds so the invoice reads `paid, awaiting deposit` until the bank deposit is matched.
Responses
200Transactions added.400No transactions sent; the document is a draft or estimate, has no customer, is in a foreign currency, or is already fully paid; a transaction is reviewed, reconciled, pending, excluded, or already on another invoice; or the amount exceeds the unpaid balance or the invoice total for refunds.404Invoice not found, or no transaction of the accepted type found.401Missing or invalid HMAC signature, expired timestamp, or invalid Bearer token. Troubleshoot403The credential does not have access to this workspace or resource. Troubleshoot429Rate limit exceeded (100 requests per minute per clientId). Retry after the Retry-After header. Troubleshoothttps://api.getcount.com/partners/invoices/{uuid}/add-transactionsimport crypto from 'node:crypto';
const BASE_URL = 'https://api.getcount.com';
const CLIENT_ID = process.env.COUNT_CLIENT_ID;
const CLIENT_SECRET = process.env.COUNT_CLIENT_SECRET;
const ACCESS_TOKEN = process.env.COUNT_ACCESS_TOKEN;
const method = 'PATCH';
const signingPath = '/invoices/3fa85f64-5717-4562-b3fc-2c963f66afa6/add-transactions';
const timestamp = Math.floor(Date.now() / 1000).toString();
const body = {
"transactions": [
"b7c8d9e0-f1a2-3456-bcde-678901234567"
]
};
const bodyString = JSON.stringify(body);
const bodyHash = crypto.createHash('sha256').update(bodyString).digest('hex');
const baseString = `${method}:${signingPath}:${timestamp}:${bodyHash}`;
const signature = crypto.createHmac('sha256', CLIENT_SECRET).update(baseString).digest('hex');
const response = await fetch(`${BASE_URL}/partners/invoices/3fa85f64-5717-4562-b3fc-2c963f66afa6/add-transactions`, {
method,
headers: {
'x-client-id': CLIENT_ID,
'x-timestamp': timestamp,
'x-signature': signature,
'Content-Type': 'application/json',
Authorization: `Bearer ${ACCESS_TOKEN}`,
},
body: bodyString,
});
console.log(await response.json());{
"status": "success",
"message": "success on adding transactions to your invocie.",
"data": {
"paidInvoice": {
"id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"invoiceNumber": "INV-1042",
"invoiceType": "invoice",
"customerUuid": "dfa3219e-6af8-4c53-997a-037534f63a35",
"date": "2026-03-01",
"dueDate": "2026-03-31",
"currency": "USD",
"status": "sent",
"isDraft": false,
"approved": true,
"isSent": true,
"paymentStatus": "paid",
"subtotal": 1000,
"taxTotal": 85,
"total": 1085,
"amountDue": 0,
"products": [
{
"productUuid": "aa11bb22-cc33-dd44-ee55-ff6677889900",
"description": "Consulting services",
"quantity": 10,
"unitPrice": 100,
"nonTaxable": false
}
],
"createdAt": "2026-03-01T09:00:00.000Z",
"updatedAt": "2026-03-02T11:15:00.000Z"
}
}
}