Register one non-PII payslip record
const url = 'https://register.verifiabl.io/v1/registerNonPII';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"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},"encryption_metadata":{"iv":"AAECAwQFBgcICQoL","tag":"UFFSU1RVVldYWVpbXF1eXw"}}'};
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://register.verifiabl.io/v1/registerNonPII \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "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 }, "encryption_metadata": { "iv": "AAECAwQFBgcICQoL", "tag": "UFFSU1RVVldYWVpbXF1eXw" } }'Registers a non-PII payslip and its encryption metadata. A provider-supplied Verifiabl reference makes retries idempotent.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”The encryption values in these structural examples are non-submittable placeholders. For each payslip, perform one AES-256-GCM encryption with a fresh, unpredictable 96-bit IV from a cryptographically secure random number generator, then use that operation’s IV and authentication tag together with its ciphertext. Never copy, mix, or reuse the example encryption values.
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Examples
Australian payslip (replace all encryption outputs)
{ "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 }, "encryption_metadata": { "iv": "AAECAwQFBgcICQoL", "tag": "UFFSU1RVVldYWVpbXF1eXw" }}New Zealand payslip (replace all encryption outputs)
{ "schema": "nz.payslip.v1", "issued_at": "2026-04-22T00:00:00.000Z", "payslip_non_pii": { "period_start": "2026-04-06", "period_end": "2026-04-19", "payment_date": "2026-04-22", "currency": "NZD", "pay_cycle": "fortnightly", "tax_code": "M SL", "employment_type": "permanent", "hours_paid": 80, "gross_cents": 300000, "paye_cents": 66000, "net_cents": 213500, "ytd_gross_cents": 300000, "ytd_paye_cents": 66000, "earnings": [ { "type": "ordinary", "units": 76, "rate_cents": 3750, "amount_cents": 285000 }, { "type": "overtime", "units": 4, "rate_cents": 3750, "amount_cents": 15000 } ], "student_loan_cents": 10000, "kiwisaver": { "employee_deduction_cents": 10500, "employee_rate_basis_points": 350, "employer_contribution_cents": 10500, "esct_cents": 1837 }, "leave_balances": { "annual": { "value": 4, "unit": "weeks" }, "sick": { "value": 10, "unit": "days" } } }, "encryption_metadata": { "iv": "EBESExQVFhcYGRob", "tag": "ZGVmZ2hpamtsbW5vcHFycw" }}Responses
Section titled “ Responses ”An identical provider-referenced record already existed.
object
Examples
Registered payslip
{ "verifiabl_reference": "n5waC35dPCoRtMXW5_gJqw"}The record was created.
object
Examples
Registered payslip
{ "verifiabl_reference": "n5waC35dPCoRtMXW5_gJqw"}The request failed strict validation.
object
object
Examples
The request failed strict validation.
{ "error": "Validation failed", "code": "VALIDATION_FAILED", "field_errors": [ { "path": "payslip_non_pii.net_cents", "message": "Invalid input: expected int, received number" }, { "path": "encryption_metadata.iv", "message": "IV must be exactly 16 base64url characters (96 bits)" } ]}The bearer token is missing or invalid.
object
object
Examples
The bearer token is missing or invalid.
{ "error": "Unauthorized", "code": "UNAUTHORIZED"}The authenticated principal cannot use this operation.
object
object
Examples
The authenticated principal cannot use this operation.
{ "error": "Forbidden", "code": "FORBIDDEN"}The reference conflicts with another record, or the IV has already been used.
object
object
Examples
The reference is registered with different data
{ "error": "Conflict", "code": "CONFLICT", "detail": "verifiabl_reference already registered with different data"}The IV has already been used by this issuer
{ "error": "Conflict", "code": "IV_REUSED", "detail": "encryption_metadata.iv has already been used by this issuer; re-encrypt the record with a fresh iv"}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"}The request exceeded an IP or client rate limit.
object
object
Examples
The request exceeded an IP or client rate limit.
{ "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