Genius Scan Data API: Cloud documents, pages and account fields
Genius Scan - PDF Scanner is the pocket document scanner from The Grizzly Labs, the Paris-based studio that also licenses the same capture engine to other apps as the Genius Scan SDK. Its camera screen detects a page's edges and auto-crops it, corrects perspective distortion and applies colour or black-and-white enhancement filters, while batch mode strings several shots into one multi-page PDF that can be reordered, renamed and tagged before it is shared; on-device text recognition makes the finished scans searchable. The library groups scans into folders and tags, and an optional Genius Cloud account syncs that library across a user's devices, with an account screen for changing the login email or deleting the account. People use it to capture receipts, invoices, contracts, ID cards and passports from a phone instead of a flatbed scanner, and it competes in the mobile document-scanning utilities category alongside Adobe Scan and CamScanner; this listing covers the US store.
Synced scans land in the Genius Cloud vault as items keyed by uid, each carrying a name, a tags list, a document_type that separates documents from folders, a parent pointer that rebuilds the folder tree, and created_at, updated_at and deleted_at timestamps. A usn update sequence number lets a client pull only what changed since its last sync, with a remaining-count flag saying whether another pull is due, and a removed item keeps its deleted_at stamp until it is permanently purged. Inside each item, pages keep their order and capture settings — the quadrangle crop corners, the post_processing_type filter and whether distortion_correction_enabled was on — and every page lists its files by type, md5, version and format, with the original file always present. The page images themselves sit in object storage, keyed per page uid and file type and reached through short-lived access_key_id, secret_access_key, session_token and expiration credentials.
Around the vault sits the account and licensing layer: the signed-in identity as uid and email, a push device_token bound to the session, email changes confirmed with current_password, and the scanning license itself — a key with an expiration_date, refreshed per device_id, sdk_version, framework, os_version and app_version.
Onboarding desks use that structure to rebuild KYC case files from passport and ID-card scans by uid, name and tags without asking a customer to re-photograph anything; records teams run incremental vault backups off the usn cursor and copy page blobs into a long-term archive; privacy workflows read the signed-in user, rotate the login email and issue a password-confirmed account deletion when a customer leaves Genius Cloud; and ops teams running capture fleets watch license expiry per device and app version before capture, distortion correction and PDF export stop working in the field. openData Studio turns this vault, page and license 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.
Sign up for a Genius Cloud session
POST
/v1/accounts/registeropendataCreates a Genius Cloud account and returns the signed-in user (uid, email) plus the Bearer token used for document sync and account calls.
Auth: None. Body carries email and password. The response token is sent as an Authorization: Bearer header on later Genius Cloud calls.
- password
- user
- uid
- token
POST /v1/accounts/register HTTP/1.1 Content-Type: application/json { "email": "[email protected]", "password": "hunter2-example" }{ "user": { "uid": "usr_8f3c1d2e7a9b", "email": "[email protected]" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example" }Log in to Genius Cloud
POST
/v1/accounts/loginopendataAuthenticates an existing Genius Cloud account and returns the user object plus Bearer token that the sync client attaches to later calls.
Auth: None. Body carries email and password. The response token is sent as an Authorization: Bearer header on later calls.
- password
- user
- uid
- token
POST /v1/accounts/login HTTP/1.1 Content-Type: application/json { "email": "[email protected]", "password": "hunter2-example" }{ "user": { "uid": "usr_8f3c1d2e7a9b", "email": "[email protected]" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example" }Reconnect session by user uid
POST
/v1/accounts/reconnectopendataRe-opens a Genius Cloud session when the client already knows the account uid, returning a fresh Bearer token and user object.
Auth: None. Body carries uid and password rather than email. The response token is sent as an Authorization: Bearer header on later calls.
- uid
- password
- user
- token
POST /v1/accounts/reconnect HTTP/1.1 Content-Type: application/json { "uid": "usr_8f3c1d2e7a9b", "password": "hunter2-example" }{ "user": { "uid": "usr_8f3c1d2e7a9b", "email": "[email protected]" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example" }Update session device token
PUT
/v1/accounts/sessionopendataRegisters the device_token on the open Genius Cloud session so sync and account notifications can target this install.
Auth: Authorization: Bearer token from POST /v1/accounts/login.
- device_token
- user
- uid
- token
PUT /v1/accounts/session HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json { "device_token": "fcm-device-token-example" }{ "user": { "uid": "usr_8f3c1d2e7a9b", "email": "[email protected]" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example" }List cloud documents since USN
GET
/v1/vault/itemsopendataIncrementally syncs the Genius Cloud vault: items changed after the query usn, including page files and a remaining-count flag so the client knows whether another pull is needed.
Auth: Authorization: Bearer token from POST /v1/accounts/login.
- usn
- remaining-count
- uid
- name
- tags
- pages
- created_at
- updated_at
- deleted_at
- document_type
- parent
- order
- format
- quadrangle
- post_processing_type
- distortion_correction_enabled
- files
- type
- md5
- version
GET /v1/vault/items?usn=1842&remaining-count=true HTTP/1.1 Authorization: Bearer <token>[ { "uid": "doc_a1b2c3d4", "name": "Passport scan", "tags": ["id", "travel"], "pages": [{ "uid": "page_9f0e", "order": 0, "format": "jpeg", "quadrangle": "0,0,1,0,1,1,0,1", "post_processing_type": "color", "distortion_correction_enabled": true, "files": [{ "type": "original", "md5": "d41d8cd98f00b204e9800998ecf8427e", "version": "1", "format": "jpeg" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-20T14:02:18Z" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-20T14:02:18Z", "deleted_at": null, "usn": 1843, "document_type": "document", "parent": null } ]Fetch one cloud document
GET
/v1/vault/items/{itemId}opendataHydrates a single Genius Cloud vault item (document or folder) by id, including nested pages and the original page-file blobs the scanner stores in object storage.
Auth: Authorization: Bearer token from POST /v1/accounts/login.
- itemId
- uid
- name
- tags
- pages
- created_at
- updated_at
- deleted_at
- usn
- document_type
- parent
- files
- type
- md5
- format
GET /v1/vault/items/doc_a1b2c3d4 HTTP/1.1 Authorization: Bearer <token>{ "uid": "doc_a1b2c3d4", "name": "Passport scan", "tags": ["id", "travel"], "pages": [{ "uid": "page_9f0e", "order": 0, "format": "jpeg", "quadrangle": "0,0,1,0,1,1,0,1", "post_processing_type": "color", "distortion_correction_enabled": true, "files": [{ "type": "original", "md5": "d41d8cd98f00b204e9800998ecf8427e", "version": "1", "format": "jpeg" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-20T14:02:18Z" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-20T14:02:18Z", "deleted_at": null, "usn": 1843, "document_type": "document", "parent": null }Update a cloud document
PUT
/v1/vault/items/{itemId}opendataWrites document metadata and page descriptors (name, tags, parent folder, page files) back to Genius Cloud and returns the updated item with a new usn.
Auth: Authorization: Bearer token from POST /v1/accounts/login.
- itemId
- uid
- name
- tags
- pages
- usn
- document_type
- parent
- created_at
- updated_at
- deleted_at
PUT /v1/vault/items/doc_a1b2c3d4 HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json { "uid": "doc_a1b2c3d4", "name": "Passport scan (front)", "tags": ["id", "kyc"], "pages": [{ "uid": "page_9f0e", "order": 0, "format": "jpeg", "quadrangle": "0,0,1,0,1,1,0,1", "post_processing_type": "color", "distortion_correction_enabled": true, "files": [{ "type": "original", "md5": "d41d8cd98f00b204e9800998ecf8427e", "version": "1", "format": "jpeg" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-27T10:15:00Z" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-27T10:15:00Z", "deleted_at": null, "usn": 1843, "document_type": "document", "parent": null }{ "uid": "doc_a1b2c3d4", "name": "Passport scan (front)", "tags": ["id", "kyc"], "pages": [{ "uid": "page_9f0e", "order": 0, "format": "jpeg", "quadrangle": "0,0,1,0,1,1,0,1", "post_processing_type": "color", "distortion_correction_enabled": true, "files": [{ "type": "original", "md5": "d41d8cd98f00b204e9800998ecf8427e", "version": "1", "format": "jpeg" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-27T10:15:00Z" }], "created_at": "2026-09-20T14:02:11Z", "updated_at": "2026-09-27T10:15:00Z", "deleted_at": null, "usn": 1901, "document_type": "document", "parent": null }Delete a cloud document
DELETE
/v1/vault/items/{itemId}opendataRemoves a Genius Cloud vault item. Query permanently=false soft-deletes (deleted_at set); permanently=true purges the vault entry.
Auth: Authorization: Bearer token from POST /v1/accounts/login.
- itemId
- permanently
- deleted_at
- uid
DELETE /v1/vault/items/doc_a1b2c3d4?permanently=false HTTP/1.1 Authorization: Bearer <token>Refresh object-storage credentials for page images
GET
/v1/storage/tokensopendataMints short-lived object-storage session credentials so the scanner can upload and download page image objects keyed per page uid and file type (default jpeg; the original file type is mandatory).
Auth: Authorization: Bearer token from POST /v1/accounts/login.
- access_key_id
- secret_access_key
- session_token
- expiration
GET /v1/storage/tokens HTTP/1.1 Authorization: Bearer <token>{ "access_key_id": "ASIAEXAMPLEKEYID", "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "session_token": "FwoGZXIvYXdzEJr//////////wEaEXAMPLE", "expiration": "2026-09-27T13:05:00Z" }Fetch Genius Cloud user
GET
/v1/accounts/profileosintReturns the signed-in Genius Cloud identity: uid and email used by the account screen.
Auth: Authorization: Bearer token from POST /v1/accounts/login.
- uid
GET /v1/accounts/profile HTTP/1.1 Authorization: Bearer <token>{ "uid": "usr_8f3c1d2e7a9b", "email": "[email protected]" }Update user email
PUT
/v1/accounts/profileopendataChanges the Genius Cloud login email after confirming current_password and returns the updated user object.
Auth: Authorization: Bearer token from POST /v1/accounts/login. Body requires current_password.
- current_password
- uid
PUT /v1/accounts/profile HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json { "email": "[email protected]", "current_password": "hunter2-example" }{ "uid": "usr_8f3c1d2e7a9b", "email": "[email protected]" }Delete Genius Cloud user
DELETE
/v1/accounts/profileopendataPermanently closes the Genius Cloud account after the user confirms their password; used by the account-deletion flow.
Auth: Authorization: Bearer token from POST /v1/accounts/login. The DELETE body carries the account password.
- password
- uid
DELETE /v1/accounts/profile HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json { "password": "hunter2-example" }Refresh Genius Scan SDK license key
GET
/v1/licensing/keys/{keyId}opendataRefreshes the on-device scanning license. The query identifies the install; the response key and expiration_date gate capture features.
Auth: None. Device and SDK identity travel as query params: device_id, sdk_version, framework, os, os_version, optional app_version, integration_mode and key_refresh.
- keyId
- device_id
- sdk_version
- framework
- os
- os_version
- app_version
- integration_mode
- key_refresh
- key
- expiration_date
GET /v1/licensing/keys/GS-BASE-LICENSE-KEY?device_id=3a7c9e12f04b8d11&sdk_version=5.12.0&framework=android&os=android&os_version=14&app_version=7.43.0&integration_mode=app&key_refresh=1 HTTP/1.1{ "key": "GS-REFRESHED-LICENSE-KEY", "expiration_date": "2027-03-01T00:00:00Z" }
Data categories
- documents
- pages
- account
- sessions
- credentials
- identity
Where teams use this data
KYC packet archive from scanned IDs
An onboarding desk pulls Genius Cloud documents tagged as identity scans, walks nested pages and original jpeg files, and stores uid, name, tags and usn so a case file can be rebuilt without re-photographing the passport or ID card.
Incremental document vault backup
A records job pages the document list with the usn cursor and remaining-count flag, then uses the minted access_key_id, secret_access_key, session_token and expiration to copy page blobs keyed as pageUid-fileType.format into a long-term archive.
Account lifecycle and erasure
A privacy workflow reads uid and email from the signed-in user, can rotate email with current_password, and issues a password-confirmed account delete when the customer asks to leave Genius Cloud.
Scanner license health for capture fleets
Ops monitors SDK license refreshes per device_id and app_version so expiration_date is visible before capture, distortion correction and PDF export stop working on a field device.
Frequently asked questions
How does Genius Scan authenticate cloud sync?
Signup and login post email and password to /v1/accounts/register and /v1/accounts/login. The response token is sent as an Authorization: Bearer header on later vault, storage-token and profile calls. A reconnect variant posts the account uid plus password to /v1/accounts/reconnect.
What fields describe a synced Genius Scan document?
Each vault item has uid, name, tags, pages, usn, document_type (document or folder), parent, created_at, updated_at and deleted_at. Pages add order, format, quadrangle, post_processing_type, distortion_correction_enabled and files (type, md5, version, format).
Where are scanned page images stored?
GET /v1/storage/tokens returns access_key_id, secret_access_key, session_token and expiration. Page image objects are keyed per page uid and file type; the original is the mandatory file type and jpeg is the default format.
Does Genius Scan send scans to a cloud OCR API?
No. Optical character recognition runs on the device. The network data surface is cloud document sync, the user account at /v1/accounts/profile, short-lived storage tokens for page blobs, and a scanner license refresh at /v1/licensing/keys/{keyId}.
Apps similar to Genius Scan - PDF Scanner
- Microsoft Lens — Microsoft Lens is a free document scanner that captures pages, whiteboards and cards and exports them to OneDrive, Word and other Microsoft 365 apps.
- Adobe Scan — Adobe Scan turns camera photos into PDFs with OCR and sends them to Adobe Acrobat for further editing.
- CamScanner — CamScanner is a document scanner with editing, OCR and sharing tools for receipts, notes and multi-page PDFs.
- SwiftScan — SwiftScan is a mobile scanner that adds fax, cloud sync and workflow automation on top of PDF capture.
- Google Drive Scanner — Google Drive's built-in scanner captures documents as searchable PDFs saved directly to Drive.
- vFlat Scan — vFlat Scan is a book-oriented scanner with automatic page detection and curved-page flattening.
- Scanner Pro — Scanner Pro is Readdle's document scanner for capturing, organizing and exporting multi-page PDFs.
- iScanner — iScanner is a mobile document scanner with OCR and editing tools, listed among Genius Scan alternatives.
Topics
- genius scan api
- genius cloud sync
- genius scan pdf scanner data api
- genius scan bearer token
- genius scan storage tokens
- genius scan usn sync
- genius scan account uid email
- the grizzly labs scanner api
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