PayFacto API - v1.0 - POST /v1/recur/ack

PayFacto API - v1.0 - POST /v1/recur/ack

PayFacto API - v1.0 - POST /v1/recur/ack

Confirms that the response from a recurring billing (token-based) transaction has been received. Instructs the PayFacto host to mark the transaction as COMPLETED. The ACK must be sent within 3 minutes of the original transaction response β€” after that window, PayFacto automatically reverses the transaction and it must be considered VOIDED.

1

Prerequisites

πŸ”‘

API Key

Generate your API key from the Payments Manager: Administrator Client β†’ API Key β†’ Add New Key. Pass it as auth-api-key in every request.

πŸͺ

Company & Merchant Numbers

Your CompanyNumber (5-digit) and MerchantNumber (8-digit) are issued by PayFacto during onboarding. Both are required on every Recur ACK request.

🌐

Environment Base URL

Test: https://test.api.payfacto.cloud/v1   |   Production: Provided by the PayFacto Integration team upon certification.

πŸ“¦

Request Format β€” Base64-Encoded Payload

Requests use HTTP POST with an application/x-www-form-urlencoded body. Assemble all parameters as a cleartext query string, Base64-encode it, then send: auth-api-key={key}&payload={base64}. This endpoint does not require card data, amounts, or invoice numbers.

πŸ”„

Recurring Billing Context Only

This endpoint applies exclusively to token-based recurring billing transactions. It is not applicable to semi-integrated terminal transactions or standard E-Commerce purchases. No MerchantTerminalNumber is required.

⏱️

3-Minute Window β€” Transaction Will Be VOIDED If Missed

The ACK must be sent within 3 minutes of receiving the original recurring transaction response. After this window, PayFacto automatically reverses the transaction. The transaction must then be considered VOIDED and the cardholder will not be charged.

βœ”οΈ

Boolean Result β€” Not a Standard Return Code

The outcome of the acknowledgment is returned in the result field as true (ACK accepted β€” transaction marked COMPLETED) or false (ACK not accepted). A returnCode of 00 confirms only that the request was processed β€” always inspect result to determine the final transaction status.

2

Request

ℹ️

All parameters are passed inside the Base64-encoded payload form field. Raw body format: auth-api-key=<key>&payload=<base64>. This endpoint does not require card data, amounts, or invoice numbers.

Required fields

FieldTypeDescription
CompanyNumberNumeric(5)Identifies the merchant on PayFacto's network. Provided by PayFacto during onboarding. Example: 12345
MerchantNumberNumeric(8)Identifies the merchant to PayFacto's network. Provided by the integration team. Example: 53400000
LanguageCodeAlphanumeric(1)Language for PayFacto responses. F = French, E = English.
OperatorIDAlphanumeric(8)Identifies the cashier, agent, or system that initiated the request. Example: USER0001
TransactionNumberNumeric(12)The PayFacto gateway transaction identifier of the recurring billing transaction to acknowledge. This is the transactionNumber returned in the recurring transaction response. Must be sent within 3 minutes of that response. Example: 000111222333
3

Request β€” Code Example

⚠️

The example below uses the test endpoint and a sandbox API key. Replace credentials and base URL before going live. The ACK must be sent within 3 minutes of receiving the recurring transaction response, or the transaction will be automatically reversed and considered VOIDED.

cURL
# Recur ACK -- POST /v1/recur/ack
# Step 1: Build the cleartext payload

PAYLOAD="CompanyNumber=12345&MerchantNumber=53400000&LanguageCode=E&OperatorID=USER0001&TransactionNumber=000111222333"

# Step 2: Base64-encode the payload
ENCODED=$(echo -n "$PAYLOAD" | base64)

# Step 3: Submit the request (within 3 minutes of the recurring transaction response)
curl -X POST "https://test.api.payfacto.cloud/v1/recur/ack" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "auth-api-key=YOUR_TEST_API_KEY&payload=$ENCODED"
4

Response

Always returned

FieldTypeDescription
returnCodeAlphanumeric(4)Identifies the result of the request processing. 00 = request was processed β€” check result for the acknowledgment outcome. All other values indicate a request-level failure. Refer to Section 6 for endpoint-specific codes.
serverNumberAlphanumeric(4)Identifies the PayFacto Network server that processed the request.
timeStampAlphanumeric(17)Date and time the request was processed. Format: YYYYMMDD-HHMMSSCC. Example: 20240515-14320100

Conditionally returned

Returned when returnCode is 00. The result field is the definitive indicator of whether the transaction has been marked COMPLETED or should be treated as VOIDED.

FieldTypeDescription
resultAlphanumericβ˜… Always inspect this field. The outcome of the acknowledgment. true = ACK accepted β€” the transaction is marked COMPLETED and the cardholder will be charged. false = ACK not accepted β€” the 3-minute window has elapsed, PayFacto has reversed the transaction, and it must be treated as VOIDED.
errorDescriptionAlphanumeric(50)Only returned when the request fails (non-00 returnCode). Human-readable description of the failure reason.
5

Response β€” Code Example

JSON β€” ACK accepted (transaction COMPLETED)
{
"returnCode": "00",
"serverNumber": "0001",
"timeStamp": "20240515-14320100",
"result": "true"
}
JSON β€” ACK not accepted (3-minute window elapsed β€” transaction VOIDED)
{
"returnCode": "00",
"serverNumber": "0001",
"timeStamp": "20240515-14360100",
"result": "false"
}
JSON β€” Request-level error
{
"returnCode": "9006",
"errorDescription": "INVALID COMPANY NUMBER",
"serverNumber": "0001",
"timeStamp": "20240515-14320200"
}
6

Error / Return Codes

The following codes apply to the request processing result in returnCode. A returnCode of 00 does not guarantee the transaction was marked COMPLETED β€” always read the result field. For the complete catalogue see the Return Code Index.

Return CodeMeaningWhen it occursRecommended Action
00Request processedThe ACK request reached the PayFacto host successfully. The acknowledgment outcome is in the result field.Read result. If true, the transaction is COMPLETED and the cardholder will be charged. If false, the window elapsed β€” PayFacto has already reversed the transaction and it must be treated as VOIDED.
9004"Null" value: company numberCompanyNumber is null or blank in the payload.Check your application. The field must correspond to the specification in the documentation.
9005 / 9006Invalid / rejected: company numberCompanyNumber does not match the required 5-digit length or is not configured in the payment solution.Make sure the application uses the correct company number provided by PayFacto. If it does, contact PayFacto customer service.
9007"Null" value: merchant numberMerchantNumber is null or blank in the payload.Check your application. The field must correspond to the specification in the documentation.
9008 / 9009Invalid / rejected: merchant numberMerchantNumber does not match the required 8-digit length or is not configured in the payment solution.Make sure the application uses the merchant number provided by PayFacto. If it does, contact PayFacto customer service.
9051Time outRequest processing timed out.Retry the request immediately. Be aware the 3-minute acknowledgment window is still running. If the problem persists, contact PayFacto customer service.
9049 / 9050Fatal errorA critical error occurred while processing the request.Retry the request immediately. Be aware the 3-minute acknowledgment window is still running. If the problem persists, contact PayFacto customer service.