curl --request GET \
--url https://api.sandbox.paypathiq.com/v1/clients/{clientCode}/payment-requests/{externalPaymentRequestId} \
--header 'Authorization: Bearer <token>'{
"externalCustomerId": "CUS_EXAMPLE",
"items": [
{
"amount": {
"amount": "125.50",
"currency": "EUR"
},
"externalReceivableId": "REC_EXAMPLE"
}
],
"createdAt": "2026-10-15T12:00:00Z",
"expiresAt": "2026-10-15T13:00:00Z",
"externalPaymentRequestId": "PAYREQ_EXAMPLE",
"revision": 1,
"paymentUrl": null,
"status": "open",
"totalAmount": {
"amount": "125.50",
"currency": "EUR"
}
}{
"detail": "API key is invalid, inactive, revoked, or for another environment.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 401,
"title": "API key is invalid, inactive, revoked, or for another environment.",
"type": "https://docs.paypathiq.com/problems/invalid_api_key"
}{
"detail": "The Client code is unknown, the grant lacks the required scope, or the calling address is outside the grant's IP allowlist.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 403,
"title": "The Client code is unknown, the grant lacks the required scope, or the calling address is outside the grant's IP allowlist.",
"type": "https://docs.paypathiq.com/problems/client_scope_denied"
}{
"detail": "Payment request was not found within the authorized scope.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 404,
"title": "Payment request was not found within the authorized scope.",
"type": "https://docs.paypathiq.com/problems/payment_request_not_found"
}{
"detail": "Route parameters or the representation are invalid. Route parameters are checked before authentication. Field errors carry a code such as invalid_format, unrecognized_keys, custom, sensitive_external_id, or sensitive_source_reference.",
"errors": [
{
"code": "invalid_format",
"detail": "Invalid ISO date",
"pointer": "/dueDate"
}
],
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 422,
"title": "Route parameters or the representation are invalid. Route parameters are checked before authentication. Field errors carry a code such as invalid_format, unrecognized_keys, custom, sensitive_external_id, or sensitive_source_reference.",
"type": "https://docs.paypathiq.com/problems/validation_error"
}{
"detail": "Each API key may send 60 requests per minute and run 1 request at a time. In sandbox, the same limits also apply per Client across all of its keys. Every request, including GET, counts.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 429,
"title": "Each API key may send 60 requests per minute and run 1 request at a time. In sandbox, the same limits also apply per Client across all of its keys. Every request, including GET, counts.",
"type": "https://docs.paypathiq.com/problems/rate_limit_exceeded"
}{
"detail": "An unexpected error prevented a safe commit, and nothing was saved. Retry with backoff.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 503,
"title": "An unexpected error prevented a safe commit, and nothing was saved. Retry with backoff.",
"type": "https://docs.paypathiq.com/problems/projection_unavailable"
}Get a hosted payment request
Requires payment_requests:read. Returns the request’s fixed items and current status. The payment link is never returned again after it is issued; status paid appears only after the payment provider’s verified confirmation.
curl --request GET \
--url https://api.sandbox.paypathiq.com/v1/clients/{clientCode}/payment-requests/{externalPaymentRequestId} \
--header 'Authorization: Bearer <token>'{
"externalCustomerId": "CUS_EXAMPLE",
"items": [
{
"amount": {
"amount": "125.50",
"currency": "EUR"
},
"externalReceivableId": "REC_EXAMPLE"
}
],
"createdAt": "2026-10-15T12:00:00Z",
"expiresAt": "2026-10-15T13:00:00Z",
"externalPaymentRequestId": "PAYREQ_EXAMPLE",
"revision": 1,
"paymentUrl": null,
"status": "open",
"totalAmount": {
"amount": "125.50",
"currency": "EUR"
}
}{
"detail": "API key is invalid, inactive, revoked, or for another environment.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 401,
"title": "API key is invalid, inactive, revoked, or for another environment.",
"type": "https://docs.paypathiq.com/problems/invalid_api_key"
}{
"detail": "The Client code is unknown, the grant lacks the required scope, or the calling address is outside the grant's IP allowlist.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 403,
"title": "The Client code is unknown, the grant lacks the required scope, or the calling address is outside the grant's IP allowlist.",
"type": "https://docs.paypathiq.com/problems/client_scope_denied"
}{
"detail": "Payment request was not found within the authorized scope.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 404,
"title": "Payment request was not found within the authorized scope.",
"type": "https://docs.paypathiq.com/problems/payment_request_not_found"
}{
"detail": "Route parameters or the representation are invalid. Route parameters are checked before authentication. Field errors carry a code such as invalid_format, unrecognized_keys, custom, sensitive_external_id, or sensitive_source_reference.",
"errors": [
{
"code": "invalid_format",
"detail": "Invalid ISO date",
"pointer": "/dueDate"
}
],
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 422,
"title": "Route parameters or the representation are invalid. Route parameters are checked before authentication. Field errors carry a code such as invalid_format, unrecognized_keys, custom, sensitive_external_id, or sensitive_source_reference.",
"type": "https://docs.paypathiq.com/problems/validation_error"
}{
"detail": "Each API key may send 60 requests per minute and run 1 request at a time. In sandbox, the same limits also apply per Client across all of its keys. Every request, including GET, counts.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 429,
"title": "Each API key may send 60 requests per minute and run 1 request at a time. In sandbox, the same limits also apply per Client across all of its keys. Every request, including GET, counts.",
"type": "https://docs.paypathiq.com/problems/rate_limit_exceeded"
}{
"detail": "An unexpected error prevented a safe commit, and nothing was saved. Retry with backoff.",
"requestId": "29400000-0000-4000-8000-000000000001",
"status": 503,
"title": "An unexpected error prevented a safe commit, and nothing was saved. Retry with backoff.",
"type": "https://docs.paypathiq.com/problems/projection_unavailable"
}Authorizations
Integration-owned environment-specific API key. Never paste a production key into documentation tools.
Path Parameters
Stable non-sensitive Client code authorized by the Integration grant.
^[A-Za-z0-9_-]{1,128}$Caller-assigned, opaque identifier of this hosted payment request. Reusing it with the identical body is a safe retry; reusing it with a different body conflicts.
^[A-Za-z0-9_-]{1,128}$Response
Current payment request.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$When the most recent payment link stops working. Null once the request is no longer open.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$Caller-assigned, opaque identifier for this Customer's source-system record. It is not a PayPathIQ ID, member number, loan or account number, or contact detail. Keep it stable when Customer details change.
^[A-Za-z0-9_-]{1,128}$^[A-Za-z0-9_-]{1,128}$Show child attributes
Show child attributes
Hosted payment page on the Client's verified payment domain. It is a secret: send it only to the paying Customer. Returned by create and by an exact retry while the request is open; null on reads.
Increases each time the request's status changes. It matches the revision in change-feed events.
1 <= x <= 9007199254740991paid is set only after the payment provider's verified confirmation. Returning from the hosted page never changes this status.
open, payment_in_progress, under_review, paid, expired, replaced, cancelled Show child attributes
Show child attributes