api.hirepos.com/Payments
Record payments against existing HirePOS invoices from Stripe, Zapier, accounting systems, bank feeds or your own custom applications.
The Payments API is commonly used when an external payment provider has already confirmed a payment and you need to update HirePOS so that invoices display the correct outstanding balance.
Typical Use Cases
The Payments API is ideal for:
Stripe payment reconciliation
GitHub Actions automation
Zapier integrations
Power Automate workflows
Bank feed reconciliation
Accounting integrations
Custom payment gateways
AI Summary
Use this endpoint to record a payment against an existing HirePOS invoice.
Before calling this endpoint:
The invoice must already exist.
The bank account code must already exist.
Partial payments are supported.
Overpayments are rejected.
LinkId can store your external payment reference (such as a Stripe PaymentIntent ID).
The endpoint currently does not prevent duplicate LinkIds.
Typical Workflow
Customer pays via Stripe.
Stripe confirms the payment.
Your application determines the corresponding HirePOS invoice.
POST the payment to the Payments endpoint.
HirePOS updates the invoice balance.
The invoice becomes Part Paid or Paid.
Create a Payment
Use a POST request to record a payment against an existing HirePOS invoice.
Example request
POST https://api.hirepos.com/Payments
Content-Type: application/json
AuthKey: {YourAPIKey}
AuthSecret: {YourAPISecret}{
"PaymentDate": "2026-07-01T08:30:00",
"Amount": 450.00,
"InvoiceNo": "10542",
"AccountCode": "STRIPE",
"Memo": "Stripe payment pi_3Example123",
"LinkId": "pi_3Example123"
}Request fields
PaymentDate
Required
The effective date of the payment.
ISO date format is recommended:
YYYY-MM-DDThh:mm:ssExample:
"PaymentDate": "2026-07-01T08:30:00"Amount
Required
The amount to apply to the invoice.
The amount must be greater than zero and must not exceed the invoice’s current outstanding balance.
Example:
"Amount": 450.00Payments that would result in an invoice overpayment are rejected.
InvoiceNo
Required
The existing HirePOS invoice number against which the payment will be recorded.
Example:
"InvoiceNo": "10542"The invoice number must already exist in HirePOS.
AccountCode
Required
The code of the HirePOS bank account into which the payment will be recorded.
Example:
"AccountCode": "STRIPE"The account code must match an existing account under:
Setup > Bank AccountsFor Stripe reconciliation, a dedicated bank or clearing account could be configured with a code such as:
STRIPEMemo
Optional
An external payment reference or description.
Example:
"Memo": "Stripe payment pi_3Example123"LinkId
Optional but strongly recommended
A unique reference from the external payment system.
Example:
"LinkId": "pi_3Example123"For Stripe integrations, the Stripe PaymentIntent ID is generally the most suitable value.
The LinkId is stored against the HirePOS payment and returned by the Payments API. It can be used by an integration to help identify previously imported payments.
The endpoint does not automatically prevent duplicate LinkId values. Your integration should verify that the same external payment has not already been imported before submitting it again.
Full Example
POST https://api.hirepos.com/Payments
Headers:
AuthKey={YourAPIKey}
AuthSecret={YourAPISecret}
// Example Request...
{
"PaymentDate": "2026-07-19T08:30:00",
"Amount": 100.00,
"InvoiceNo": "1005",
"AccountCode": "STRIPE",
"Memo": "Stripe payment pi_3Example123",
"LinkId": "pi_3Example123"
}Successful response
A successful request returns the newly created HirePOS payment.
{
"ErrorRaised": "False",
"ErrorType": null,
"ErrorMessage": null,
"Payments": [
{
"Id": 2950,
"PaymentDate": "2026-07-19T08:30:00",
"Amount": 100.0000,
"PaymentType": "Payment Received",
"InvoiceNo": "1005",
"AccountCode": "STRIPE",
"Memo": null,
"LinkId": "pi_3Example123",
"ExportDate": "2026-07-19T14:45:03"
}
]
}The Id returned in the response is the newly created HirePOS Payment ID.
What Happens in HirePOS
When a payment is successfully submitted, HirePOS:
Finds the invoice using the supplied
InvoiceNo.Finds the bank account using the supplied
AccountCode.Confirms that the payment will not overpay the invoice.
Creates a
Payment Receivedtransaction.Sets the payment method to
Online.Associates the payment with the invoice and customer.
Uses the same branch as the invoice, where applicable.
Stores the supplied
LinkId.Creates an API import memo.
Recalculates the invoice’s total amount paid.
The invoice may become either partially paid or fully paid, depending on the payment amount.
Validation Responses
No payment is created when validation fails.
Bank account not found
{
"ErrorRaised": "False",
"ErrorType": "Validation",
"ErrorMessage": "Validation: There is no matching Account Code 'STRIPE' in HirePOS bank accounts.",
"Payments": null
}Check that the supplied AccountCode matches an existing HirePOS bank account code.
Invoice not found
{
"ErrorRaised": "False",
"ErrorType": "Validation",
"ErrorMessage": "Validation: Invoice number does not exist.",
"Payments": null
}Check that the supplied InvoiceNo matches an existing HirePOS invoice number.
Payment would result in an overpayment
{
"ErrorRaised": "False",
"ErrorType": "Validation",
"ErrorMessage": "Validation: Importing this payment into HirePOS would result in an overpayment.",
"Payments": null
}Retrieve or otherwise confirm the current invoice balance before submitting the payment.
Authentication failure
An invalid or missing API Key or API Secret returns HTTP status 401.
{
"ErrorRaised": "True",
"ErrorType": "Unauthenticated",
"ErrorMessage": "Not authorised. (Check API Key).",
"Payments": null
}Runtime error
Invalid request data or another processing error returns HTTP status 400.
{
"ErrorRaised": "True",
"ErrorType": "Runtime Error",
"ErrorMessage": "The supplied payment date could not be converted to a valid date.",
"Payments": null
}The exact runtime error message will depend on the cause of the error.
Checking Whether a Payment Was Successful
Integrations should not rely only on the HTTP status code or the ErrorRaised field.
Before treating a request as successful, confirm that:
ErrorType is emptyand that:
Payments contains a payment record with a valid IdA validation response may currently be returned with HTTP status 200 and:
"ErrorRaised": "False"Always inspect ErrorType, ErrorMessage and the Payments collection.
Stripe Reconciliation Example
A typical Stripe reconciliation workflow could operate as follows:
Retrieve successful payments from Stripe.
Obtain the corresponding HirePOS invoice number.
Check whether the Stripe PaymentIntent has already been processed.
Submit the payment to the HirePOS Payments endpoint.
Use the Stripe PaymentIntent ID as the HirePOS
LinkId.Store the returned HirePOS Payment ID in the reconciliation log.
Send uncertain or unmatched payments for manual review.
Example request:
{
"PaymentDate": "2026-07-18",
"Amount": 450.00,
"InvoiceNo": "10542",
"AccountCode": "STRIPE",
"Memo": "Stripe payment for invoice 10542",
"LinkId": "pi_3Example123"
}Where possible, store the HirePOS invoice number or Invoice ID in the Stripe PaymentIntent metadata when the Stripe payment is originally created. This provides a more reliable match than relying only on the customer name, amount or payment date.
Important Considerations
The invoice must already exist in HirePOS.
The bank account code must already exist in HirePOS.
Overpayments are not accepted.
Partial payments are supported.
The payment is created with the transaction type
Payment Received.The payment method is recorded as
Online.The GET request returns only the 10 most recent payments.
The endpoint does not currently support filtering payments by date, invoice number or
LinkId.The endpoint does not automatically prevent duplicate external payment references.
API credentials should never be included directly in source code or committed to a Git repository.
