IDnow identification session data API
IDnow Online Ident is IDnow GmbH's branded Android identification client — the Munich vendor's own app that walks a user through a bank, telco or insurer KYC session. After the relying party issues an ident code, the user types it on the start screen, then either joins a live video call with a human agent (VideoIdent / LiveSwitch), captures a passport or national ID with AutoIdent, taps a German eID chip over NFC, reuses a stored identity, or signs PDF contracts with a Qualified Electronic Signature. Version 9.7.16 opens on a splash, continues through the ident-code start screen, the video live-stream room, the German eID chip flow, stored-identity reuse and a result screen that can redirect back to the originating bank or telco. It needs camera, microphone and NFC, and sits next to WebID, Deutsche Post POSTIDENT and Veriff as the video-ident / eID choice for BaFin-supervised onboarding in Germany.
Ident-session token values bind a relying-party case to the holder's firstName, lastName, email, mobile and live status. The same customer record names the channel as processType, keeps preferredLang, and nests a video-queue request with clientSecret, sessionToken, positionInQueue, estimatedWaitingTime and userVideoSessionToken. Start payloads add chosen idType / idCountry plus os, sdkVersion and customerapp. Classification returns country, idType and idSubtype against PASSPORT / IDCARD / DRIVERS_LICENSE / RESIDENCE_PERMIT; OTP proof is confirmationToken; recording agreement is consentValue. Capture sides tag stills IDFRONTSIDE, IDBACKSIDE, FACE; liveness is FACESCREENSHOT; clips carry encoding H264. In-call lines store chat text / originator; a pre-call probe reports per-stream quality under user.video / user.audio.
German eID chip sessions surface tcTokenUrl, mobileToken and an eID sessionToken, with modelEnableOTP splitting ident versus signing. After the NFC read, resultToken is posted with internalToken; screens advance via request_step. Contract PDFs arrive as hash, displayHash and a documentDefinition (identifier, optional); InstantSign then yields Identification_Signature. Wallet reuse is authenticatedRequest and expiredWalletExists; high-volume days flip waitingListEnrolled / waitingListNotified; post-call quality is rating and reason. Redirects use tenant sucessUrl / failureUrl (the success key is spelled that way on the wire). Tenant capacity is officeOpen, numberOfWaitingChatRequests and officeHours rows (days, hours); spoken approval lines arrive as translationKey plus value.
Bank and telco KYC desks can track queue position and process type before opening an account; compliance engines can enforce issuing-country and document-family allow-lists; nPA stacks can drive the NFC chip flow from the eID token URL; lending and QES desks can reconcile PDF hashes with the InstantSign signature. openData Studio turns this identification-session data into callable open data for those integrations.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Fetch identification session
GET
/v1/idnow/cases/{caseId}osintReturns the ident case as Models_Customer: holder name and contact, processType, live status, nested video-queue request (clientSecret, sessionToken, positionInQueue) and success/failure redirect URLs.
Auth: Path parameters tenantId and caseId. Headers Accept, X-Client-Version, X-Client-SDK-Version; optional X-Client-Secret after start.
- token
- internalToken
- status
- mobile
- firstName
- lastName
- preferredLang
- processType
- redirectUrl
- remainingInternalTokenRetries
- preEstablishVideoConnection
- waitingListEnrolled
- waitingListNotified
- custom1
- videoSession
- userVideoSessionToken
- videoserverUsed
- clientSecret
- sessionToken
- estimatedWaitingTime
- positionInQueue
- Identification_Signature
- sucessUrl
- failureUrl
GET /v1/idnow/cases/TST-AAAAA HTTP/1.1 Accept: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16{ "token": "TST-AAAAA", "internalToken": "int-9f2c1a", "status": "PENDING", "email": "[email protected]", "mobile": "+491701234567", "firstName": "Anna", "lastName": "Mueller", "preferredLang": "de", "processType": "VIDEO_IDENT", "redirectUrl": "https://bank.example.de/ident/done", "request": { "status": "REQUESTED_CHAT", "clientSecret": "cs_7e91", "sessionToken": "st_4d21", "estimatedWaitingTime": 120, "positionInQueue": 3 }, "settings": { "sucessUrl": "https://bank.example.de/ident/ok", "failureUrl": "https://bank.example.de/ident/fail" } }Start identification
POST
/v1/idnow/cases/{caseId}/startosintStarts the ident case with holder contact, chosen idType/idCountry and device clientInfo; returns status, OTP flags, nested data and the video-queue request that yields clientSecret.
Auth: Path parameters tenantId and caseId. Same client-version headers. JSON body with holder contact, idType/idCountry and clientInfo.
- token
- mobile
- preferredLang
- authenticatedRequest
- idType
- idCountry
- type
- consentProtocolVersion
- language
- locale
- os
- sdkVersion
- customerapp
- status
- remainingInternalTokenRetries
- ident
- signing
- originator
- timestamp
- clientSecret
- sessionToken
- estimatedWaitingTime
- positionInQueue
- userVideoSessionToken
- videoserverUsed
POST /v1/idnow/cases/TST-AAAAA/start HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "token": "TST-AAAAA", "mobile": "+491701234567", "email": "[email protected]", "preferredLang": "de", "data": {"idType": "IDCARD", "idCountry": "DE", "type": "IDENT"}, "clientInfo": {"os": "Android", "sdkVersion": "9.7.16", "customerapp": "orangeapp"} }{ "token": "TST-AAAAA", "status": "STARTED", "remainingInternalTokenRetries": 3, "enableOTP": {"ident": true, "signing": false}, "data": {"idType": "IDCARD", "idCountry": "DE", "originator": "acmebank"}, "request": { "clientSecret": "cs_7e91", "sessionToken": "st_4d21", "estimatedWaitingTime": 90, "positionInQueue": 2 } }Fetch tenant office hours
GET
/v1/idnow/tenants/{tenantId}/hoursopendataReturns Models_OfficeHours for the tenant: whether the ident desk is officeOpen, queue size, estimatedWaitingTime, spoken availableLanguages and weekday officeHours rows (days, hours).
Auth: Path parameter tenantId. Headers Accept, X-Client-Version, X-Client-SDK-Version.
- shortname
- shortcode
- name
- officeOpen
- estimatedWaitingTime
- numberOfWaitingChatRequests
- highCallVolumeMessage
- waitingListNotified
- availableLanguages
- days
- hours
GET /v1/idnow/tenants/acmebank/hours HTTP/1.1 Accept: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16{ "shortname": "acmebank", "shortcode": "ACM", "name": "Acme Bank Ident", "officeOpen": true, "estimatedWaitingTime": 180, "numberOfWaitingChatRequests": 12, "highCallVolumeMessage": "High demand — please wait", "waitingListNotified": false, "availableLanguages": ["de", "en"], "company": { "name": "Acme Bank AG" }, "officeHours": [ { "days": "Mon-Fri", "hours": "08:00-20:00" }, { "days": "Sat", "hours": "09:00-14:00" } ] }List eSign PDF documents
GET
/v1/idnow/cases/{caseId}/contractsopenfinanceReturns the PDF contracts attached to the ident as Models_PDFDocument rows with content hash, displayHash and a documentDefinition (identifier, optional flag) used by the eSign review screen.
Auth: Path parameters tenantId and caseId. Same client-version headers; X-Client-Secret when start returned clientSecret.
- name
- status
- version
- hash
- displayHash
- identifier
- optional
GET /v1/idnow/cases/TST-AAAAA/contracts HTTP/1.1 Accept: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 X-Client-Secret: cs_7e91[ { "name": "loan-agreement.pdf", "status": "PENDING", "version": "1", "hash": "e3b0c44298fc1c149afbf4c8996fb924", "displayHash": "E3B0-C442", "documentDefinition": { "identifier": "LOAN_AGREEMENT", "name": "Loan agreement", "optional": false } } ]List spoken approval phrases
GET
/v1/idnow/cases/{caseId}/spoken-phrasesopendataReturns Models_ApprovalPhrase rows the agent asks the holder to speak, each with translationKey, spoken value and optional urls (link, label, action).
Auth: Path parameters tenantId and caseId plus the client-version headers.
- name
- translationKey
- value
- link
- label
- action
GET /v1/idnow/cases/TST-AAAAA/spoken-phrases HTTP/1.1 Accept: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16[ { "name": "recording_consent", "translationKey": "idnow.phrase.recording", "value": "I agree that this identification is recorded", "urls": { "privacy": { "link": "https://bank.example.de/privacy", "label": "Privacy notice", "translationKey": "idnow.link.privacy", "action": "OPEN" } } } ]Upload document classification info
POST
/v1/idnow/cases/{caseId}/document-metaosintRecords the document the user selected (issuing idCountry, idType such as IDCARD/PASSPORT/DRIVERS_LICENSE/RESIDENCE_PERMIT, and idSubtype) before image capture.
Auth: Path parameters tenantId and caseId. JSON body with idCountry, idType and idSubtype.
- idCountry
- idType
- idSubtype
POST /v1/idnow/cases/TST-AAAAA/document-meta HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "idCountry": "DE", "idType": "IDCARD", "idSubtype": "NATIONAL_ID" }{ "idCountry": "DE", "idType": "IDCARD", "idSubtype": "NATIONAL_ID" }Classify captured ID image
POST
/v1/idnow/cases/{caseId}/document-classosintUploads a captured ID image and returns Model_Classification with detected country, idType and idSubtype so AutoIdent can lock the document family.
Auth: Path parameters tenantId and caseId. Multipart image body plus client-version headers.
- country
- idType
- idSubtype
POST /v1/idnow/cases/TST-AAAAA/document-class HTTP/1.1 Accept: application/json Content-Type: multipart/form-data; boundary=----idnow X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 ------idnow Content-Disposition: form-data; name="file"; filename="front.jpg" Content-Type: image/jpeg (binary) ------idnow--{ "country": "DE", "idType": "IDCARD", "idSubtype": "NATIONAL_ID" }Upload captured ID image
POST
/v1/idnow/cases/{caseId}/stills/{side}osintUploads a still of the chosen document side or face (path type IDFRONTSIDE / IDBACKSIDE / DRIVERSFRONTSIDE / DRIVERSBACKSIDE / FACE) after AutoIdent classification, so the ident case holds the capture used by the agent or eSign review.
Auth: Path parameters tenantId, caseId and side (IDFRONTSIDE, IDBACKSIDE, DRIVERSFRONTSIDE, DRIVERSBACKSIDE, FACE). Multipart body.
- type
POST /v1/idnow/cases/TST-AAAAA/stills/IDFRONTSIDE HTTP/1.1 Accept: application/json Content-Type: multipart/form-data; boundary=----idnow X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 ------idnow Content-Disposition: form-data; name="file"; filename="id-front.jpg" Content-Type: image/jpeg (binary) ------idnow--{ "type": "IDFRONTSIDE", "status": "UPLOADED" }Upload face screenshot
POST
/v1/idnow/cases/{caseId}/liveness/{kind}osintPosts the liveness / face still taken during VideoIdent (Models_Screenshot.screenshot with type FACESCREENSHOT) so the agent can compare the holder to the ID portrait.
Auth: Path parameters tenantId, caseId and kind (FACESCREENSHOT). JSON screenshot payload plus type.
- screenshot
- type
POST /v1/idnow/cases/TST-AAAAA/liveness/FACESCREENSHOT HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "screenshot": "(base64 jpeg)", "type": "FACESCREENSHOT" }{ "type": "FACESCREENSHOT", "status": "UPLOADED" }Upload identification video
POST
/v1/idnow/cases/{caseId}/clips/{codec}osintUploads the AutoIdent / VideoIdent capture clip with codec tag encoding (H264) so the ident case stores the motion evidence the agent or classifier reviews.
Auth: Path parameters tenantId, caseId and codec (H264). Multipart video body plus client-version headers.
- encoding
POST /v1/idnow/cases/TST-AAAAA/clips/H264 HTTP/1.1 Accept: application/json Content-Type: multipart/form-data; boundary=----idnow X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 ------idnow Content-Disposition: form-data; name="file"; filename="ident.mp4" Content-Type: video/mp4 (binary) ------idnow--{ "encoding": "H264", "status": "UPLOADED" }Submit recording consent
POST
/v1/idnow/cases/{caseId}/recording-consentopendataPosts the user's recording-agreement flag (consentValue) before the VideoIdent agent call, matching the showRecordingAgreement setting.
Auth: Path parameters tenantId and caseId. JSON body with consentValue.
- consentValue
POST /v1/idnow/cases/TST-AAAAA/recording-consent HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "consentValue": true }Send mobile confirmation token
POST
/v1/idnow/cases/{caseId}/mobile-otposintSubmits the SMS/OTP confirmationToken when verifyMobileNumber is enabled on the tenant, proving the holder controls the mobile on the ident.
Auth: Path parameters tenantId and caseId. JSON body with confirmationToken.
- confirmationToken
POST /v1/idnow/cases/TST-AAAAA/mobile-otp HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "confirmationToken": "847291" }{ "confirmationToken": "847291" }Update mobile number
POST
/v1/idnow/cases/{caseId}/mobileosintWrites a new E.164 mobile onto the ident case when the user corrects the number before OTP or video, returning the stored mobile.
Auth: Path parameters tenantId and caseId. JSON body with mobile. Tenant flag disabledMobileNumberChange can block the call.
- mobile
POST /v1/idnow/cases/TST-AAAAA/mobile HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "mobile": "+491701234567" }{ "mobile": "+491701234567" }Check wallet reuse eligibility
GET
/v1/idnow/cases/{caseId}/wallet-reuseosintTells StoredIdentityActivity whether a prior ident can be reused (authenticatedRequest) and whether an expired wallet still exists (expiredWalletExists).
Auth: Path parameters tenantId and caseId plus the client-version headers.
- authenticatedRequest
- expiredWalletExists
GET /v1/idnow/cases/TST-AAAAA/wallet-reuse HTTP/1.1 Accept: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16{ "authenticatedRequest": true, "expiredWalletExists": false }Start German eID session
POST
/v1/idnow/eid/{caseId}/openosintOpens the nPA / German eID chip flow and returns mobileToken, sessionToken and the eID-server tcTokenUrl that eIDActivity hands to the NFC stack (Authada).
Auth: Path parameters tenantId and caseId. JSON body with eID clientInfo.
- mobileToken
- sessionToken
- tcTokenUrl
- modelEnableOTP
- ident
- signing
- language
- locale
- os
- sdkVersion
- customerapp
POST /v1/idnow/eid/TST-AAAAA/open HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "clientInfo": {"language": "de", "os": "Android", "sdkVersion": "9.7.16"} }{ "mobileToken": "mt_6c10", "sessionToken": "st_eID_9aa", "tcTokenUrl": "eid-token://handoff?session=st_eID_9aa", "modelEnableOTP": { "ident": true, "signing": true }, "request": { "status": "RUNNING" } }Enroll on high-volume waiting list
POST
/v1/idnow/cases/{caseId}/queue-joinopendataPuts the ident onto the agent waiting list during high call volume (Activities_HighCallVolumeActivity); later customer fetches echo waitingListEnrolled / waitingListNotified.
Auth: Path parameters tenantId and caseId. Empty JSON body.
- waitingListEnrolled
- waitingListNotified
POST /v1/idnow/cases/TST-AAAAA/queue-join HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 {}{}Subscribe waiting-list push
POST
/v1/idnow/cases/{caseId}/queue-pushopendataRegisters the device FCM subscriptionToken so Activities_HighCallVolumeActivity can notify the holder when an agent slot opens (type, appName).
Auth: Path parameters tenantId and caseId. JSON body with type, appName and subscriptionToken.
- type
- appName
- subscriptionToken
POST /v1/idnow/cases/TST-AAAAA/queue-push HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "type": "FCM", "appName": "orangeapp", "subscriptionToken": "fcm-token-88ab" }{ "type": "FCM", "appName": "orangeapp", "subscriptionToken": "fcm-token-88ab" }Submit agent feedback
POST
/v1/idnow/cases/{caseId}/agent-ratingopendataPosts the post-call agent rating and free-text reason from Activities_AgentFeedbackActivity after a VideoIdent session ends.
Auth: Path parameters tenantId and caseId. JSON body with rating and reason. Gated by enableAgentFeedback.
- rating
- reason
POST /v1/idnow/cases/TST-AAAAA/agent-rating HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "rating": 5, "reason": "clear instructions" }Request video chat
POST
/v1/idnow/cases/{caseId}/video-roomopendataAsks the ident desk to open a LiveSwitch / VideoIdent room; success is logged as 'requestVideoChat rest call was successful' and later customer fetches echo Models_Request queue fields.
Auth: Path parameters tenantId and caseId plus the client-version headers.
- status
- videoSession
- userVideoSessionToken
- videoserverUsed
- clientSecret
- sessionToken
- estimatedWaitingTime
- positionInQueue
POST /v1/idnow/cases/TST-AAAAA/video-room HTTP/1.1 Accept: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16{ "status": "REQUESTED_CHAT", "videoSession": "vs-88c1", "userVideoSessionToken": "uvt-22ab", "videoserverUsed": "eu-west-relay", "clientSecret": "cs_7e91", "sessionToken": "st_4d21", "estimatedWaitingTime": 90, "positionInQueue": 2 }Send in-call agent chat
POST
/v1/idnow/cases/{caseId}/agent-chatopendataPosts a LiveSwitch in-call chat line (Models_TextMessage.content) that the video room stores as Models_ChatMessage (text, date, originator, name) when IDnowSDK.enableChat is on.
Auth: Path parameters tenantId and caseId. JSON body with content.
- content
- text
- date
- originator
- name
POST /v1/idnow/cases/TST-AAAAA/agent-chat HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "content": "Please hold your ID closer to the camera" }{ "text": "Please hold your ID closer to the camera", "date": "2026-10-12T08:16:02Z", "originator": "AGENT", "name": "Mara" }Start call-quality test
POST
/v1/idnow/cases/{caseId}/call-probeopendataStarts CallQualityCheckActivity's pre-call probe with sessionId and userVideoSessionToken; metrics land as CallQualityMetrics.user with per-stream CallStreamQuality.quality for video and audio before the agent room opens.
Auth: Path parameters tenantId and caseId. JSON body with sessionId and userVideoSessionToken.
- sessionId
- userVideoSessionToken
- user
- video
- audio
- quality
POST /v1/idnow/cases/TST-AAAAA/call-probe HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "sessionId": "vs-88c1", "userVideoSessionToken": "uvt-22ab" }{ "sessionId": "vs-88c1", "userVideoSessionToken": "uvt-22ab", "user": { "video": { "quality": 4 }, "audio": { "quality": 5 } } }Start InstantSign / QES session
POST
/v1/idnow/qes/{caseId}/openopenfinanceStarts the trusted-original / InstantSign QES flow and returns Identification_Signature, a signing clientSecret/sessionToken and OTP flags used by the eSign screens.
Auth: Path parameters tenantId and caseId. JSON body with holder contact; response carries Identification_Signature.
- Identification_Signature
- clientSecret
- sessionToken
- ident
- signing
- token
- mobile
- preferredLang
POST /v1/idnow/qes/TST-AAAAA/open HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "token": "TST-AAAAA", "email": "[email protected]", "mobile": "+491701234567", "preferredLang": "de" }{ "Identification_Signature": "qes-sess-4412", "clientSecret": "cs_sign_91", "sessionToken": "st_sign_02", "enableOTP": { "ident": false, "signing": true } }Register eSign account
POST
/v1/idnow/cases/{caseId}/sign-accountopenfinanceCreates the trust-service eSign account for the ident using the holder's email and mobile (Models_RegistrationeSign) before signingDone.
Auth: Path parameters tenantId and caseId. JSON body with email and mobile.
- mobile
POST /v1/idnow/cases/TST-AAAAA/sign-account HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "email": "[email protected]", "mobile": "+491701234567" }{ "email": "[email protected]", "mobile": "+491701234567" }Report identification failure
POST
/v1/idnow/cases/{caseId}/failosintPosts the terminal failedReason code (for example USER_ID_DOCUMENT_EXPIRED_NO_FALLBACK from InstantSign) when the ident cannot complete.
Auth: Path parameters tenantId and caseId. JSON body with failedReason.
- failedReason
POST /v1/idnow/cases/TST-AAAAA/fail HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "failedReason": "USER_ID_DOCUMENT_EXPIRED_NO_FALLBACK" }Mark identification canceled
POST
/v1/idnow/cases/{caseId}/abortosintTells the ident case the holder aborted, pairing the empty JSON body with an IDnowCancelationStep value (CONSENT, WAITING_LIST, AGENT_CONVERSATION, DOCUMENT_CLASSIFICATION) used by Activities_ResultActivity.
Auth: Path parameters tenantId and caseId. Empty JSON body; result screen shows the cancelation step the holder left.
- resultCancelationStep
POST /v1/idnow/cases/TST-AAAAA/abort HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 {}{}Prepare signing session
POST
/v1/idnow/cases/{caseId}/sign-prepareopenfinanceOpens the QES signing session on an ident that already has a trust-service account, so SignContractView / CompleteEsignView can bind Identification_Signature, clientSecret and sessionToken before the holder reviews PDFs.
Auth: Path parameters tenantId and caseId. Empty JSON body; optional X-Client-Secret from InstantSign.
- Identification_Signature
- clientSecret
- sessionToken
POST /v1/idnow/cases/TST-AAAAA/sign-prepare HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 X-Client-Secret: cs_sign_91 {}{}Complete eSign / QES
POST
/v1/idnow/cases/{caseId}/sign-completeopenfinanceMarks the QES / InstantSign flow complete after the holder accepts the hashed PDFs; CompleteEsignView then treats Identification_Signature as final and Activities_ResultActivity can follow sucessUrl.
Auth: Path parameters tenantId and caseId. Empty JSON body; optional X-Client-Secret from InstantSign.
- status
- Identification_Signature
POST /v1/idnow/cases/TST-AAAAA/sign-complete HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 X-Client-Secret: cs_sign_91 {}{}Refuse eSign documents
POST
/v1/idnow/cases/{caseId}/sign-refuseopenfinanceRecords that the holder refused the attached PDF contracts (SignContractView) instead of completing QES, so the ident ends without Identification_Signature.
Auth: Path parameters tenantId and caseId. Empty JSON body.
- status
POST /v1/idnow/cases/TST-AAAAA/sign-refuse HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 {}{}Fetch trust-service PDF
GET
/v1/idnow/cases/{caseId}/tsp-pdfopenfinanceDownloads the trust-service-provider (TSP) PDF for the ident so Activities_PDFViewer can show the same document whose hash / displayHash / documentDefinition.identifier were listed on the documents call.
Auth: Path parameters tenantId and caseId. Accept application/pdf; optional X-Client-Secret. Raw PDF body.
- hash
- displayHash
- identifier
- name
GET /v1/idnow/cases/TST-AAAAA/tsp-pdf HTTP/1.1 Accept: application/pdf X-Client-Version: .android-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 X-Client-Secret: cs_sign_91(binary PDF; Activities_PDFViewer / PDFWebView render the trust-service provider document whose hash matches Models_PDFDocument.hash)Submit German eID result tokens
POST
/v1/idnow/eid/chip-resultosintPosts the nPA chip-read resultToken together with the eID sessionToken and ident internalToken so eIDActivity can close the Authada / AusweisApp2Service hand-off.
Auth: Path parameter tenantId. JSON body with resultToken, sessionToken and internalToken after the NFC chip read.
- resultToken
- sessionToken
- internalToken
POST /v1/idnow/eid/chip-result HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-eid-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "resultToken": "rt_aa19", "sessionToken": "st_eID_9aa", "internalToken": "int-9f2c1a" }Advance German eID step
POST
/v1/idnow/eid/{caseId}/steposintMoves the eID session to the next NFC / PIN / CAN screen inside eIDActivity by posting request_step (the REST is skipped when the eID client is null).
Auth: Path parameters tenantId and caseId. JSON body with request_step.
- request_step
POST /v1/idnow/eid/TST-AAAAA/step HTTP/1.1 Accept: application/json Content-Type: application/json X-Client-Version: .android-eid-9.7.16 X-Client-SDK-Version: orangeapp.androidsdk-9.7.16 { "request_step": "READ_CHIP" }{}
Data categories
- identification sessions
- ID document types
- German eID
- qualified electronic signatures
- agent waiting queues
- tenant office hours
- captured ID images
- video chat
Where teams use this data
Bank KYC case tracking
A BaFin onboarding desk can poll token, status, processType, firstName, lastName and nested positionInQueue / estimatedWaitingTime to know whether a VideoIdent case is still queued, in the agent room, or ready to redirect via sucessUrl.
Document-family allow-lists
Compliance engines can consume idCountry, idType and idSubtype (PASSPORT, IDCARD, DRIVERS_LICENSE, RESIDENCE_PERMIT) from the classification and upload-info records to enforce which issuing countries and document families a product may accept.
German eID chip hand-off
An nPA / eID stack can take tcTokenUrl, mobileToken and sessionToken from the eID start record and drive the NFC AusweisApp flow, then gate OTP with modelEnableOTP.ident / signing.
QES contract-hash reconciliation
A lending or telco eSign desk can match PDF hash and displayHash against documentDefinition.identifier, then bind the InstantSign Identification_Signature and signing clientSecret to the same ident token.
Frequently asked questions
Which fields identify an IDnow Online Ident session?
The customer record keys the case by token and internalToken, then carries status, processType, firstName, lastName, email, mobile and a nested request with clientSecret, sessionToken and positionInQueue.
How are ID document types represented?
Classification and upload-info records use idCountry / country, idType and idSubtype. The document-type enum is PASSPORT, IDCARD, DRIVERS_LICENSE and RESIDENCE_PERMIT.
What does the German eID start response contain?
It returns mobileToken, sessionToken and tcTokenUrl for the NFC / AusweisApp hand-off, plus modelEnableOTP flags that split ident versus signing. After the chip read, resultToken is posted with sessionToken and internalToken.
How are eSign PDF contracts described?
Each document has name, status, version, hash, displayHash and a documentDefinition with identifier, name and optional. InstantSign adds Identification_Signature, clientSecret and sessionToken.
Apps similar to IDnow Online Ident
- POSTIDENT — Deutsche Post POSTIDENT identifies a person in a German post office, by video chat, via eID, with AutoID, or at delivery, including for bank-account opening or SIM activation.
- WebID — WebID Solutions provides KYC for banks and insurers, with VideoID live-call identification, automated AutoID, German eID and NFC ePassID, reusable TrueID, and SignID qualified signatures.
- Veriff — Veriff confirms a person with document checks, face matching and liveness detection, plus AML screening and business verification.
- Jumio — Jumio automates identity verification with a government ID check, a selfie with liveness detection, and a risk-based decision for KYC and AML onboarding.
- Nect Ident — Nect Ident is a German identity-verification product with Auto Video Ident (ID scan and selfie), NFC eID, ePass chip readout, and reusable ReIdent via the Nect Wallet.
- AUTHADA — AUTHADA ident lets a user complete online identification with a smartphone and the German eID chip; the vendor also offers digital signing and on-site KYC.
- Onfido — Onfido is a London identity-verification company that checks a person from a photo of a government ID document plus a selfie.
- Sumsub Video Identification — Sumsub Video Identification is a remote KYC interview where a compliance agent confirms the user on a live video call against their ID documents.
Topics
- IDnow Online Ident API
- IDnow identification session
- idType idCountry KYC
- German eID tcTokenUrl
- IDnow QES document hash
- VideoIdent waiting queue
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use