Test mode

A test tenant runs every verification and enrollment flow on the production API without real IDs, real wallet passes or real eID.

Getting a test tenant

There is no separate sandbox. Ask support@abyrgverslun.is for a test tenant; Ábyrg Verslun flags it as a test tenant for you. You cannot turn test mode on or off yourself. Set up service clients, locations, devices and employees on it exactly as on a live tenant.

livemode

Every verification response (all three methods, polls and Idempotency-Key replays included), every Employee Enrollment response and every transaction carries livemode: false on a test tenant, true on a live one.

{
  "result": "pass",
  "transactionId": "k57...",
  "livemode": false
}

Refuse a sale on livemode: false in production. A test outcome proves nothing about a real customer. If your integration is not itself running as a test setup, treat livemode: false as a configuration error (someone entered test credentials), not as a verification result.

Test Pass Tokens

Send these as passData with "method": "pass". They have the Pass Token format (53 characters), so they pass any format check in your client. You can encode them in a QR code to test scanning.

passDataOutcome
2TESTPASS0000000000000000000000000000000000000000000Zpass for any requiredAge up to 20 (attests 17, 18 and 20). Never consumed: reuse it as often as you like.
2TESTPASS1700000000000000000000000000000000000000000Zattests only 17, so it fails at the default minimum age of 18 (requiredAge is raised to the tenant minimum) and passes only on a tenant whose minimum age is 17 or lower. The transaction records failReason "underage".
2TESTEXPRD000000000000000000000000000000000000000000Zfail, reason "expired"
2TESTCNSMD000000000000000000000000000000000000000000Zfail, reason "consumed"
2TESTNKNWN000000000000000000000000000000000000000000Zfail, reason "unknown"
2TESTBAD00000000000000000000000000000000000000000000Zfail, reason "invalid"; no transaction is recorded

On a test tenant every other Pass Token, including a real shopper's, reads as unknown and is never looked up or consumed. Rate limits apply as on a live tenant.

Test eID identifiers

Use these as the identifier of an eID verification (either form, with either loginType) or in an Employee Enrollment: the phone as the phoneNumber of method: "sim", the kennitala as the kennitala of method: "app". No phone is prompted: the start response carries code 0000 and the first poll returns the outcome. Spaces and hyphens are ignored. A successful test enrollment sets the employee's name to Test Person, the verified name.

PhoneKennitalaOutcome
00000010000000001success: an adult born 1990-01-01, so result "pass". Enrollment: enrolled as "Test Person".
00000040000000004success: a person aged 16 today, so result "fail" at 17+. Enrollment: enrolled as "Test Person".
00000020000000002status "rejected" (the person declined)
00000030000000003status "timeout" (the person never answered)

On a test tenant any other identifier is refused with 400 Bad Request; the eID Provider is never called. An employee entered on the dashboard with a real kennitala cannot enroll with a test identifier (the kennitala does not match, so the enrollment is rejected with identity_mismatch on the first poll); employees created through the API can. The test person may enroll as any number of employees; on a live tenant one person is at most one employee. Manual verification on the dashboard takes a real kennitala, also on a test tenant, and is recorded as a test enrollment there.

On a live tenant

  • The test Pass Tokens are not valid Pass Tokens: they read as invalid and nothing is recorded.
  • The test eID identifiers are not real phone numbers or kennitölur: they go to the eID Provider like any other identifier and fail there.
  • When a test tenant goes live, employees enrolled with a test identifier are no longer enrolled and must enroll again with real eID, and pending test eID requests are closed as failed. An Idempotency-Key used in test mode is not replayed live.

What a test transaction is

Test transactions are recorded like live ones (with livemode: false), so you can test lookups by posReference and polling. Manual verifications work as on a live tenant. Test transactions are never sealed for, reported to or counted by the regulatory authority. The transaction list shows only the tenant's current mode: a test tenant lists only its test transactions, and once the tenant goes live its list never includes them again.