Error contract
Webhook errors use real HTTP status codes plus a stable string code. Branch
on code, not on message (the message is human-readable Vietnamese and may
change).
{ "code": "DAILY_CAP_EXCEEDED", "message": "Vượt hạn mức theo ngày" }| HTTP | code | When | What to do |
|---|---|---|---|
| 400 | INVALID_PAYLOAD | Body isn’t valid JSON or fails schema. | Fix the payload; don’t retry as-is. |
| 401 | INVALID_SIGNATURE | Missing/invalid signature, or unknown apiKeyId. | Check secret & signing string; verify you signed the exact bytes. |
| 401 | TIMESTAMP_OUT_OF_RANGE | X-Timestamp outside ±5 min. | Sync clock (NTP), resend with a fresh timestamp. |
| 403 | PARTNER_SUSPENDED | Your partner account is suspended. | Contact Eventista. |
| 403 | TENANT_NOT_ALLOWED | tenantId not allow-listed, or no caps configured. | Check tenantId; contact Eventista to enable. |
| 403 | EP_DISABLED | The tenant’s EP wallet is turned off. | Contact Eventista / the tenant admin. |
| 409 | IDEMPOTENCY_CONFLICT | orderId reused with a different payload. | Use a new orderId, or resend the identical payload. |
| 422 | AMOUNT_BELOW_MIN | amount < 1000 — would credit 0 EP. | Only send amount ≥ 1000. |
| 422 | PER_TX_CAP_EXCEEDED | Credited EP exceeds perTx. | Lower the amount or request a higher cap. |
| 429 | DAILY_CAP_EXCEEDED | Per-partner or per-user daily cap reached. | Retry next Vietnam day, or request a higher cap. |
| 422 | WALLET_FROZEN | The recipient’s wallet is frozen by an admin. | Do not retry; contact Eventista. |
| 503 | TX_CONFLICT | Transient DB contention. | Retry with backoff (same orderId). |
| 404 | NOT_FOUND | Status lookup for an unknown orderId. | Verify the orderId. |