| Property | Value |
|---|---|
| Algorithm | RSA-SHA256 |
| Signature Encoding | Base64 |
| Header | Description | Example |
|---|---|---|
X-Signature-Timestamp | Unix timestamp (10 digits, seconds since epoch) | 1713982800 |
X-Signature | Base64-encoded RSA signature of the signed payload | dGhpcyBpcyBhbiBleGFtcGxlIHNpZ25hdHVyZSE... |
X-Signed-By | Public key identifier (used to fetch the correct certificate from /certificates) | 5ac5ae43-01d2-4c70-8a5b-b69a34d11c62 |
signed_payload = timestamp + "." + raw_body_bytestimestamp is the value from X-Signature-Timestamp header (as a string). is a literal period character (ASCII 46)raw_body_bytes is the raw, unmodified HTTP request body (as bytes, not parsed JSON)X-Signature-Timestamp: 1785430667{ "approved_on": "2026-07-30T14:53:34.964208905Z", "country": "SV", "created_on": "2026-07-30T14:53:27.210213Z", "currency": "USD", "fee": 0, "merchant_transaction_reference": "34ac9a13-b435-41f4-9d71-0db142b712c6", "payment_method": "cuscatlan", "status": "approved", "tax": 0, "transaction_amount": 1000, "transaction_id": "20260730-1453-4015-a22f-b18176861ca3", "transaction_type": "pay_in" }1785430667.{ "approved_on": "2026-07-30T14:53:34.964208905Z", "country": "SV", "created_on": "2026-07-30T14:53:27.210213Z", "currency": "USD", "fee": 0, "merchant_transaction_reference": "34ac9a13-b435-41f4-9d71-0db142b712c6", "payment_method": "cuscatlan", "status": "approved", "tax": 0, "transaction_amount": 1000, "transaction_id": "20260730-1453-4015-a22f-b18176861ca3", "transaction_type": "pay_in" }Important: Do not parse, format, or modify the JSON body before verification. Use the raw bytes exactly as received.
X-Signature-Timestamp, X-Signature, and X-Signed-By from the request headerstimestamp + "." + raw_bodyX-Signature headerexpires_at field of the latest certificate as TTL.X-Signed-By identifier will be used.