Test a payslip that you registered (sandbox)
const url = 'https://verify.sandbox.verifiabl.io/v1/issuer-test/verifications/payload';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"barcode":"https://v.verifiabl.io/v/n5waC35dPCoRtMXW5_gJqw#2.JVSWY3DPO5XXE3DE"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://verify.sandbox.verifiabl.io/v1/issuer-test/verifications/payload \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "barcode": "https://v.verifiabl.io/v/n5waC35dPCoRtMXW5_gJqw#2.JVSWY3DPO5XXE3DE" }'Use this operation in sandbox to test the payslips that your organisation registered. Get a Verifier API token with your Issuer API client ID and client secret. Set scope to verifiabl:issuer-test. Verifiabl does not charge for this operation. This operation is not available in production.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Examples
QR code scan URL
{ "barcode": "https://v.verifiabl.io/v/n5waC35dPCoRtMXW5_gJqw#2.JVSWY3DPO5XXE3DE"}PDF metadata payload
{ "barcode": "2|n5waC35dPCoRtMXW5_gJqw|JVSWY3DPO5XXE3DE"}Responses
Section titled “ Responses ”The payslip is verified.
object
object
object
Examples
Verified Australian payslip
{ "verified": true, "verifiabl_reference": "n5waC35dPCoRtMXW5_gJqw", "employee": { "employee_name": "Ana Leota", "position": "Senior Developer", "department": "Engineering", "employer_identity": "12 345 678 901", "bsb": "062-000", "account_number": "12345678", "account_name": "A Leota", "address": "12 Example St, Sydney NSW 2000" }, "payslip": { "schema": "au.payslip.v2", "issued_at": "2026-04-04T00:00:00.000Z", "payslip_non_pii": { "period_start": "2026-03-21", "period_end": "2026-04-03", "payment_date": "2026-04-04", "currency": "AUD", "pay_frequency": "fortnightly", "gross": "4153.85", "taxable_gross": "3953.85", "paygw": "911.00", "net": "3077.35", "ytd_gross": "83077.00", "ytd_paygw": "18220.00", "earnings": [ { "type": "ordinary", "amount": "3738.43", "ytd_amount": "82661.58" }, { "type": "paid_leave", "leave_type": "other_paid_leave", "units": "7.6", "rate": "54.66", "amount": "415.42" } ], "salary_sacrifice": [ { "type": "super", "amount": "200.00" } ], "deductions": [ { "type": "other_post_tax", "amount": "45.50" } ], "superannuation": [ { "contribution_type": "superannuation_guarantee", "amount": "498.46", "rate": "12", "usi": "STA0100AU" }, { "contribution_type": "salary_sacrifice", "amount": "200.00" } ], "reimbursements": "80.00", "employment_basis": "full_time", "engagement_type": "permanent", "award": "Professional Employees Award 2020 Level 3", "base_rate": { "amount": "108000.00", "per": "year" }, "ytd": { "taxable": "79077.00", "super": "9969.20", "non_taxable": "1600.00", "post_tax_deductions": "910.00", "reimbursements": "1600.00" } } }, "decrypted_at": "2026-06-09T09:10:11.123Z"}The request is invalid, or the payload cannot be decrypted. A DECRYPTION_FAILED response contains reason: no_key_matched, or one of invalid_utf8, p2_invalid_prefix, p2_field_count, p2_control_or_format_character, profile_invalid_prefix, profile_schema_mismatch, profile_field_count, profile_control_or_format_character.
object
object
Examples
The request is invalid, or the payload cannot be decrypted. A DECRYPTION_FAILED response contains reason: no_key_matched, or one of invalid_utf8, p2_invalid_prefix, p2_field_count, p2_control_or_format_character, profile_invalid_prefix, profile_schema_mismatch, profile_field_count, profile_control_or_format_character.
{ "error": "Validation failed", "code": "VALIDATION_FAILED"}The request is invalid, or the payload cannot be decrypted. A DECRYPTION_FAILED response contains reason: no_key_matched, or one of invalid_utf8, p2_invalid_prefix, p2_field_count, p2_control_or_format_character, profile_invalid_prefix, profile_schema_mismatch, profile_field_count, profile_control_or_format_character.
{ "error": "Decryption failed", "code": "DECRYPTION_FAILED"}The bearer token is missing or invalid.
object
object
Examples
The bearer token is missing or invalid.
{ "error": "Unauthorized", "code": "UNAUTHORIZED"}The token does not have the verifiabl:issuer-test scope, or another organisation registered the payslip. For another organisation’s payslip, the response contains reason: issuer_mismatch.
object
object
Examples
Another organisation registered the payslip
{ "error": "This record was not registered by your organisation", "code": "FORBIDDEN", "reason": "issuer_mismatch"}Verifiabl has no record of this payslip, or the operation is not available in this environment.
object
object
Examples
Verifiabl has no record of this payslip, or the operation is not available in this environment.
{ "error": "Record not found for the provided Verifiabl reference", "code": "VERIFIABL_REFERENCE_NOT_FOUND"}Verifiabl has no record of this payslip, or the operation is not available in this environment.
{ "error": "Not found", "code": "NOT_FOUND"}The JSON request body exceeds the route limit.
object
object
Examples
The JSON request body exceeds the route limit.
{ "error": "Request body too large", "code": "PAYLOAD_TOO_LARGE"}The request Content-Type is not supported.
object
object
Examples
The request Content-Type is not supported.
{ "error": "Unsupported media type", "code": "UNSUPPORTED_MEDIA_TYPE"}No live decryption key is available for the record.
object
object
Examples
No live decryption key is available for the record.
{ "error": "Decryption is not available for this record", "code": "KEY_VERSION_UNAVAILABLE", "detail": "Contact support."}Too many test requests for your organisation.
object
object
Examples
Too many test requests for your organisation.
{ "error": "Too many requests", "code": "RATE_LIMITED", "detail": "Retry after the rate limit resets."}Headers
Section titled “Headers”Seconds to wait before retrying.
Example
60An unexpected internal error occurred.
object
object
Examples
An unexpected internal error occurred.
{ "error": "Internal server error", "code": "INTERNAL_ERROR"}A required service dependency or configuration is unavailable.
object
object
Examples
A required service dependency or configuration is unavailable.
{ "error": "Service temporarily unavailable", "code": "SERVICE_UNAVAILABLE", "detail": "Please retry with exponential backoff."}Headers
Section titled “Headers”Seconds to wait before retrying.
Example
5