200 with isValid set to false.
Values are case-sensitive. transactionId and createdAt are generated per request, and metadata is echoed back from your request. See Sandbox introduction for the full matching rules.
Verified
VERIFIED — sample 1
VERIFIED — sample 1
RequestResponse — HTTP
200VERIFIED — sample 2
VERIFIED — sample 2
RequestResponse — HTTP
200Rejected
A rejection is a completed verification, not an error:success is true and HTTP status is 200. In live mode a rejection is billed.
REJECTED — sample 1
REJECTED — sample 1
RequestResponse — HTTP A rejected QR returns no
200qrValue, image or signature.REJECTED — sample 2
REJECTED — sample 2
RequestResponse — HTTP
200REJECTED — Not verified, unmatched payload fallback
REJECTED — Not verified, unmatched payload fallback
RequestResponse — HTTP This QR value matches no documented scenario, so it takes the no-match fallback — identical to the documented rejections above apart from
200transactionId and metadata. Fire it once to confirm that an unknown QR never reaches the live PhilSys source.Validation failures
All validation failures return HTTP400 with code set to VALIDATION_FAILED and the same message; only errors differs. Validation runs before any fixture matching, so these behave identically in sandbox and live. transactionId is null and no transaction row is written.
VALIDATION_FAILED — QR value missing
VALIDATION_FAILED — QR value missing
RequestResponse — HTTP
400VALIDATION_FAILED — QR format not supported
VALIDATION_FAILED — QR format not supported
RequestResponse — HTTP
400qrValue must be an ePhilID value starting with PH1:, or a PhilID or Digital ID JSON value.VALIDATION_FAILED — Trust flow fields sent to a stateless endpoint
VALIDATION_FAILED — Trust flow fields sent to a stateless endpoint
RequestResponse — HTTP
400Source unavailable
Account-level responses
Two further responses are not specific to this endpoint. A missing or invalidAuthorization header returns HTTP 401, and an account without the qr_verification plan returns HTTP 403 — both enforced in sandbox exactly as in live. See Sandbox introduction for their envelopes.
