Skip to content
Download OpenAPI JSON

Verify a payslip barcode payload

POST
/v1/verifications/payload
curl --request POST \
--url https://verify.verifiabl.io/v1/verifications/payload \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "barcode": "2|n5waC35dPCoRtMXW5_gJqw|JVSWY3DPO5XXE3DE" }'

Authenticates, decrypts, and verifies a supported barcode representation.

Media typeapplication/json
Any of:
Scanned barcode
object
barcode
required
string
>= 1 characters <= 13000 characters
Examples

Barcode or PDF metadata text

{
"barcode": "2|n5waC35dPCoRtMXW5_gJqw|JVSWY3DPO5XXE3DE"
}

The barcode was decrypted and verified.

Media typeapplication/json
object
verified
required
boolean
verifiabl_reference
required
string
>= 22 characters <= 22 characters /^[A-Za-z0-9_-]+$/
payslip
required
object
key
additional properties
employee
required
object
key
additional properties
decrypted_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$/
Examples
ExampleVerified

Verified Australian payslip

{
"verified": true,
"verifiabl_reference": "n5waC35dPCoRtMXW5_gJqw",
"employee": {
"employee_name": "Jane A. Doe",
"position": "Senior Developer",
"department": "Engineering",
"employer_abn": "12345678901",
"bsb": "062-000",
"account_number": "12345678",
"account_name": "Jane A. Doe",
"address": "12 Example St, Sydney NSW 2000"
},
"payslip": {
"schema": "au.payslip.v1",
"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_cents": 360000,
"taxable_gross_cents": 340000,
"paygw_cents": 75200,
"net_cents": 268250,
"ytd_gross_cents": 4320000,
"ytd_paygw_cents": 902400,
"earnings": [
{
"type": "ordinary",
"units": 76,
"rate_cents": 4000,
"amount_cents": 304000
},
{
"type": "overtime",
"units": 4,
"rate_cents": 6000,
"amount_cents": 24000
},
{
"type": "allowance",
"allowance_type": "tools",
"amount_cents": 4000
},
{
"type": "paid_leave",
"leave_type": "other_paid_leave",
"amount_cents": 28000
}
],
"salary_sacrifice": [
{
"type": "super",
"amount_cents": 20000
}
],
"deductions": [
{
"type": "other_post_tax",
"amount_cents": 4550
}
],
"superannuation": [
{
"contribution_type": "superannuation_guarantee",
"amount_cents": 39840,
"usi": "STA0100AU"
},
{
"contribution_type": "salary_sacrifice",
"amount_cents": 20000,
"usi": "STA0100AU"
}
],
"reimbursements_cents": 8000
}
},
"decrypted_at": "2026-06-09T09:10:11.123Z"
}

The request is invalid, or the barcode ciphertext cannot be authenticated.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: VALIDATION_FAILED DECRYPTION_FAILED
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples

The request failed strict validation

{
"error": "Validation failed",
"code": "VALIDATION_FAILED",
"field_errors": [
{
"path": "barcode",
"message": "Unrecognised barcode format"
}
]
}

The bearer token is missing or invalid.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: UNAUTHORIZED
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleUnauthorized

The bearer token is missing or invalid.

{
"error": "Unauthorized",
"code": "UNAUTHORIZED"
}

The authenticated principal cannot use this operation.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: FORBIDDEN
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleForbidden

The authenticated principal cannot use this operation.

{
"error": "Forbidden",
"code": "FORBIDDEN"
}

No record exists for the Verifiabl reference.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: VERIFIABL_REFERENCE_NOT_FOUND
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleVerifiabl Reference Not Found

No record exists for the Verifiabl reference.

{
"error": "Record not found for the provided Verifiabl reference",
"code": "VERIFIABL_REFERENCE_NOT_FOUND"
}

The JSON request body exceeds the route limit.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: PAYLOAD_TOO_LARGE
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExamplePayload Too Large

The JSON request body exceeds the route limit.

{
"error": "Request body too large",
"code": "PAYLOAD_TOO_LARGE"
}

The request Content-Type is not supported.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: UNSUPPORTED_MEDIA_TYPE
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleUnsupported Media Type

The request Content-Type is not supported.

{
"error": "Unsupported media type",
"code": "UNSUPPORTED_MEDIA_TYPE"
}

No live decryption key is available for the record.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: KEY_VERSION_UNAVAILABLE
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleKey Version Unavailable

No live decryption key is available for the record.

{
"error": "Decryption is not available for this record",
"code": "KEY_VERSION_UNAVAILABLE",
"detail": "Contact support."
}

The request exceeded an IP or client rate limit.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: RATE_LIMITED
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleRate Limited

The request exceeded an IP or client rate limit.

{
"error": "Too many requests",
"code": "RATE_LIMITED",
"detail": "Retry after the rate limit resets."
}
Retry-After
required
integer
<= 9007199254740991

Seconds to wait before retrying.

Example
60

An unexpected internal error occurred.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: INTERNAL_ERROR
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleInternal Error

An unexpected internal error occurred.

{
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}

A required service dependency or configuration is unavailable.

Media typeapplication/json
object
error
required
string
code
required
string
Allowed values: SERVICE_UNAVAILABLE
reason
string
detail
string
field_errors
Array<object>
object
path
required
string
message
required
string
Examples
ExampleService Unavailable

A required service dependency or configuration is unavailable.

{
"error": "Service temporarily unavailable",
"code": "SERVICE_UNAVAILABLE",
"detail": "Please retry with exponential backoff."
}
Retry-After
required
integer
<= 9007199254740991

Seconds to wait before retrying.

Example
5