Guide for PSP (Payment Service Provider) merchants that process payments on behalf of their own sub-merchants through ALPS.
1. What is a PSP with sub-merchants?
A PSP integrates ALPS with a single set of credentials (public_key / secret_key) and, underneath, groups multiple businesses — its sub-merchants. When the PSP processes a shopper's payment, it must tell ALPS which sub-merchant the transaction belongs to.
This is done by adding the sub_merchant_id field inside the shopper_information object, with the sub-merchant's identifier.
2. How to send sub_merchant_id
sub_merchant_idThe transaction creation flow is exactly the same as always (POST to /justpay/check-out/SecurePayment). The only change is that the shopper_information JSON includes one additional key:
| Parameter | Mandatory (PSP) | Data type | Description |
|---|---|---|---|
sub_merchant_id | True | String | Identifier of the sub-merchant the transaction belongs to. |
shopper_informationis always sent as a JSON string (JSON encoded). Thesub_merchant_idis just one more key inside that same object, alongsidename_shopper,
shopper_information example with sub_merchant_id
shopper_information example with sub_merchant_id{
"name_shopper": "Jon",
"last_name_Shopper": "Snow",
"type_doc_identi": "DNI",
"Num_doc_identi": "92738009",
"email": "[email protected]",
"country_code": "+56",
"Phone": "999763655",
"sub_merchant_id": "SUBM-00123"
}3. Full request example (cURL)
Channel 3 (Transbank, CLP cards) as an example. The sub_merchant_id goes inside shopper_information:
curl --request POST \
--url https://uat-payments.alps.cl/justpay/check-out/SecurePayment \
--data public_key={your_public_key} \
--data time=2026-06-12T14:39:09 \
--data channel=3 \
--data amount=300 \
--data currency=CLP \
--data trans_id=1 \
--data time_expired=120 \
--data url_ok=https://yourstore.com/ok \
--data url_error=https://yourstore.com/error \
--data signature={calculated_sha256} \
--data shopper_information='{"name_shopper":"Jon","last_name_Shopper":"Snow","type_doc_identi":"DNI","Num_doc_identi":"92738009","email":"[email protected]","country_code":"+56","Phone":"999763655","sub_merchant_id":"SUBM-00123"}'The same pattern applies to any channel: just add the sub_merchant_id key to the shopper_information JSON you already send for that channel/country.
4. Important: the signature does NOT change
The shopper_information field is not part of the signature calculation. The signature is built only from:
public_key + time + amount + currency + trans_id + time_expired + url_ok + url_error + channel + secret_key
→ Therefore, adding sub_merchant_id does not affect the signature. You do not need to change your signing logic to integrate sub-merchants. If you get INVALID_SIGNATURE, the cause is in the fields of the chain above, not in shopper_information.
Signature validator: https://payments.alps.cl/justpay/check-out/generateSignature
5. Notification (webhook)
The payment notification flow does not change: ALPS notifies via POST to the PSP's configured URL once the transaction is completed, and you must validate the notification signature (time + channel + amount + currency + trans_id + secret_key, SHA256).
To reconcile the transaction with the correct sub-merchant, use your own trans_id (which you map internally to the sub-merchant) and/or the sub_merchant_id you sent at creation.
