Physical Identity Proofing API
Resources
Sequence diagram
Authentication
The API is secured with OAuth2.0. All requests to protected endpoints must include a valid access token obtained from the OAuth 2.0 authorization server.
Obtaining an access token
Request access token
curl -X POST https://api.example.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET"
Response
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR...",
"token_type": "Bearer",
"expires_in": 3600
}
Using the access token
All requests to protected endpoints must include the access token in the Authorization
header.
Authorization: Bearer <access_token>
Services
POST
/v1/requestor/pip
Create a new Physical Identity Proofing (PIP) request.
Request example:
{
"applicantName": "John Doe",
"applicantPhoneNumber": "99995555"
}
Response example:
{
"pipId": "B1A5346C-32BD-43A8-BE32-B47D5A107108",
"status": "CREATED",
"lastUpdated": "2025-10-01T14:20:00Z",
"attendanceCode": "123456"
}
POST
/v1/requestor/pip/{pipId}/cancel
Cancel a PIP request. Only possible if status is CREATED
.
Response example:
{
"attendanceCode": "123456",
"pipId": "B1A5346C-32BD-43A8-BE32-B47D5A107108",
"status": "CANCELLED",
"lastUpdated": "2025-10-07T12:20:24.075439Z"
}
GET
/v2/requestor/pip/{id}/result
Get the current status and result of a PIP request, if the physical identity control has been completed.
Response example when completed and approved:
{
"pipId": "B1A5346C-32BD-43A8-BE32-B47D5A107108",
"applicantName": "John Doe",
"pipStatus": "AWAITING_DOWNLOAD",
"approved": true,
"completed": true,
"terminationCause": null,
"proofingSessionDetails": {
"locationOfProofing": "Lagunen Post i Butikk, OBS Lagunen",
"dateOfProofing": "2025-10-03T13:24:25.019522Z",
"registrationOfficer": "Ole Olsen"
},
"proofingData": {
"toveStatus": "NO_MATCH",
"automaticRfidRead": true,
"automaticBiometricComparisonApproval": true,
"automaticBiometricComparisonScore": 0.84046376,
"automaticRfidPassiveAuthentication": "AUTHENTICATED",
"automaticRfidActiveAuthentication": "AUTHENTICATED",
"manualBiometricComparisonApproval": true,
"idNumberManuallyEntered": false,
"nfcData": {
"idType": "PASSPORT",
"nationalIdNumber": "01019912345",
"documentHolder": "Aasmund Specimen",
"documentHolderSurname": "Specimen",
"documentHolderGivenNames": "Aasmund",
"gender": "MALE",
"nationality": "NOR",
"birthdate": "1999-01-01",
"mrzCode": "XANORJGD0004758230456<12345<<<, 5604230M2606118XXX<<<<<<<<<<<9, OESTENBYEN<<AASAMUND<SPECIMEN<",
"mrzValid": true,
"nfcDataIssuer": "NOR",
"nfcDataDocNumber": "CCC002251",
"nfcDataValidUntil": "2030-01-01"
},
"files": {
"chipImage": "https://test.idkontroll.mobai.no/v1/requestor/pip/B1A5346C-32BD-43A8-BE32-B47D5A107108/result/chipImage",
"identityCardImage": "https://test.idkontroll.mobai.no/v1/requestor/pip/B1A5346C-32BD-43A8-BE32-B47D5A107108/result/identityCardImage",
"identityCardImage2": "https://test.idkontroll.mobai.no/v1/requestor/pip/B1A5346C-32BD-43A8-BE32-B47D5A107108/result/identityCardImage2",
"personImage": "https://test.idkontroll.mobai.no/v1/requestor/pip/B1A5346C-32BD-43A8-BE32-B47D5A107108/result/personImage",
"pdf": "https://test.idkontroll.mobai.no/v1/requestor/pip/B1A5346C-32BD-43A8-BE32-B47D5A107108/result/pdf"
}
}
}
Response example when terminated because of mismatch phone number:
{
"pipId": "B1A5346C-32BD-43A8-BE32-B47D5A107108",
"applicantName": "John Doe",
"pipStatus": "AWAITING_DOWNLOAD",
"approved": null,
"completed": false,
"terminationCause": "MISMATCH_PHONE",
"proofingSessionDetails": null,
"proofingData": null
}
- When pip request is created by requestor:
status
isCREATED
approved
isnull
completed
isfalse
.proofingSessionDetails
andproofingData
isnull
- When physical identity proofing is completed:
status
isRESULT_SENT
,AWAITING_DOWNLOAD
orRESULT_DOWNLOADED
approved
istrue
orfalse
completed
istrue
proofingSessionDetails
andproofingData
is present
- When pip request has been cancelled by requestor:
status
isCANCELLED
approved
isnull
completed
isfalse
proofingSessionDetails
andproofingData
isnull
- When terminated:
status
isRESULT_SENT
,AWAITING_DOWNLOAD
orRESULT_DOWNLOADED
approved
isnull
completed
isfalse
terminationCause
is present
Fields
Explanation of status
CREATED
– Before the Applicant have started the PIP process.PROCESSING
– Internal processing at Mobai’s server.RESULT_SENT
– A verification that the case has been sent through to Digipost (if Digipost is used).AWAITING_DOWNLOAD
– If the requestor does not use the Digipost option, this will be the status after a valid identity proofing has been done, and Mobai have not received a request from the customer to the Fetch PIP Report endpoint.RESULT_DOWNLOADED
- If the requestor does not use the Digipost option, this will be status after we have replied with a 200 HTTP status code on a request of a process ID. Mobai do not guarantee that the user of the endpoint has completed its task, and the user of this endpoint should not use this status as confirmation that things have been successful on their side.EXPIRED
– The status of the PIP after 30 days. Collected customer data can not be retrieved after this deadline.ERROR
– Shown if there for some reason has been a technical error during the process. In cases like this, both parties know this has happened. Normally Mobai will fix a bug in cases like this.AWAITING_APPROVAL
- This happens when the PIP is waiting for administrator approval due to use of forgotten PIN-function during a PIP session with a customer.CANCELLED
- This happens when the PIP is cancelled by the requestor. (Only possible if status is CREATED)
Explanation of terminationCause
ID_CODE_EXPIRED
- The code provided to the user has expiredMISMATCH_PHONE
- The phone number provided by the user does not match the one used for verificationMISMATCH_ID_DOC
- The ID document presented does not match the expected type or formatMISMATCH_NAME
- The name on the ID document does not match the name provided by the userMISMATCH_FACE
- The face comparison did not matchID_DOC_EXPIRED
- The ID document presented has expiredID_CARD_FOREIGN
- The ID card presented is foreign and cannot be acceptedID_DOC_NOT_VALID
- The ID document presented is not valid or recognizedTERMINATED
- Other reason for termination at registration officeUNKNOWN
- Unknown reason
Explanation of toveStatus
NO_MATCH
- The ID document has not been reported as lost or stolenMATCH
- The ID document has been reported as lost or stolen