Send us payments in the ACI ConnectIn format. We act as a connector on the ACI Payment Orchestration Platform, so no change is needed on your side beyond pointing ConnectIn at our endpoint.
This integration follows ACI's ConnectIn specification. Payment Initiation Messages are accepted exactly as ConnectIn sends them: application/x-www-form-urlencoded with dot notation for nested fields and bracket notation for custom parameters. Parameters we do not recognise are ignored rather than rejected.
application/x-www-form-urlencoded
1 {UUID} is the value you sent as customParameters[UUID] on the original payment.
{UUID}
customParameters[UUID]
Either an authentication block or a Bearer token. As per the ConnectIn specification the two must not be used together - send one or the other. Both resolve to the same merchant.
Bearer {CompanyNum}.{token}
The Bearer token is derived as base64(sha256(CompanyNum + PersonalHashKey)), prefixed with the company number and a dot. It is stable, so it can be configured once. Rotating the hash key changes the token.
base64(sha256(CompanyNum + PersonalHashKey))
var raw = CompanyNum + PersonalHashKey; var digest = CryptoJS.SHA256(raw).toString(CryptoJS.enc.Base64); var token = CompanyNum + "." + digest; // Authorization: Bearer 7022221.qQnAIBhwpD1Pn6SG9iNrg8sGk+0pM4x38+B/HzJsmQM=
id
customer.phone
billing.street2
1 Card fields are required for PA, DB and CD. Referenced operations - RF, RV and CP - take the card from the original payment and must not resend it. 2 Optional by default, but some merchant profiles make phone, email or date of birth mandatory. When a required field is missing the payment is rejected before it is routed, with result code 200.300.404. 3 Required for any payment that may need 3D Secure. Without them an asynchronous payment cannot be completed.
200.300.404
POST https://process.coriunder.cloud/v1/payments Authorization: Bearer 7022221.qQnAIBhwpD1Pn... Content-Type: application/x-www-form-urlencoded amount=92.00& currency=EUR& paymentType=DB& paymentBrand=VISA& customParameters[UUID]=a785cabfa77d404e9f34ec9f55be56ac& customParameters[ShortId]=a785cabf& merchantTransactionId=order-10231& descriptor=Coffee+subscription& card.number=4111111111111111& card.expiryMonth=03& card.expiryYear=2029& card.cvv=123& card.holder=Test+Holder& customer.email=test%40example.com& customer.mobile=%2B15492001234& customer.ip=203.0.113.24& billing.street1=Barkat+12& billing.city=Holon& billing.postcode=5544888& billing.country=IL& notificationUrl=https%3A%2F%2Ftest.ppipe.net%2Fconnectors%2Fasyncresponse%3F...& shopperResultUrl=https%3A%2F%2Fshop.example.com%2Fdone
1 PA has to be enabled on the merchant profile. If the referenced UUID cannot be found we answer 700.100.100.
700.100.100
{ "id": "a785cabfa77d404e9f34ec9f55be56ac", "paymentType": "DB", "paymentBrand": "VISA", "descriptor": "Coffee subscription", "amount": "92.00", "currency": "EUR", "merchantTransactionId": "order-10231", "card": { "bin": "411111", "last4Digits": "1111", "holder": "Test Holder", "expiryMonth": "03", "expiryYear": "2029" }, "result": { "code": "000.000.000" }, "resultDetails": { "AcquirerResponse": "000", "ExtendedDescription": "SUCCESS" }, "timestamp": "2026-08-25 10:53:25 +0000" }
{ "id": "a785cabfa77d404e9f34ec9f55be56ac", "paymentType": "DB", "amount": "92.00", "currency": "EUR", "result": { "code": "000.200.000" }, "resultDetails": { "AcquirerResponse": "553", "ExtendedDescription": "3D Secure Redirection is needed" }, "redirect": { "url": "https://process.coriunder.cloud/member/remoteCharge_Back.asp?TransID=18081&CompanyNum=7022221", "method": "GET" }, "timestamp": "2026-08-25 10:53:25 +0000" }
When a payment needs 3D Secure we answer 000.200.000 with a redirect block. From there:
000.200.000
redirect
redirect.url
notificationUrl
shopperResultUrl
The status notification is always sent before the shopper redirect, and it is sent exactly once per payment even if the shopper returns at the same moment the payment settles.
GET {notificationUrl} &status=000.000.000 &resultDetails.ExtendedDescription=SUCCESS &signature={hex} // signature is HMAC-SHA256 over every query // parameter, sorted by name and joined with "|", // keyed with your personal hash key, hex encoded. asyncsource=UCONNECT|data=abc|method=CC| ndcid=1|resultDetails.ExtendedDescription=SUCCESS| status=000.000.000|type=notification|uuid=...
A repeated Payment Initiation Message carrying a UUID we have already answered returns the stored answer, including the original redirect, rather than charging the card a second time. Retries are therefore safe.
The one case that needs attention is 900.100.100. It means we did not get a usable reply from the processing host and the outcome is genuinely unknown, so we neither approve nor decline. Retrying returns the same answer rather than risking a double charge. Contact support with the UUID to have the payment reconciled.
900.100.100
Learn how 3DS transactions are processed.
What to check when authentication fails.
The standard server to server integration.