Simple Scan (com.simplescan.scanner) Data API
Simple Scan talks to its cloud backend over a small set of form-encoded calls, all tagged appType=7. Feature flags and byte quotas come from PUT /v1/config/features (fileSyncEnable, ggOcrUsable, cloudFileShareUsable, daily/monthly flow caps). Cloud vault access is minted at PUT /v1/sync/credentials, which returns cloud identityId, identityPoolId, storage bucketName and a short-lived token. After a scan is uploaded, POST /v1/shares/register records the bucketKey and fileSize. Premium is wired through POST /v1/billing/subscriptions and checked at GET /v1/billing/entitlements/lookup via the Play purchaseToken. Account teardown is PUT /v1/account/delete.
Simple Scan is Easy inc.'s camera-to-PDF scanner with a cloud backend for sync, sharing and premium storage. After a Firebase sign-in the client fetches feature flags (file sync, Google OCR, cloud file share), mints short-lived cloud credentials for the user's document vault, registers a scanned PDF as a shareable file, and posts Google Play purchase tokens so the server can unlock premium cloud quotas. Every call carries an appType=7 marker plus device and account identity headers.
Screenshots
API surface
Fetch scanner feature flags and sync quotas
PUT
/v1/config/featuresopendataReturns whether cloud sync, Google OCR and file-share are enabled for this device, plus the daily and monthly upload/download byte quotas that gate the scanner's cloud vault.
Auth: Signed-in Firebase user. Every call sends custom app identity headers: app-version, appType=7, app-type=7, requestTime, systemVersion, phoneModel, uu-id (Firebase UID) and device-id.
- status
- message
- fileSyncEnable
- cloudFileShareUsable
- deviceUsable
- ggOcrUsable
- dayDownSyncFlow
- dayUploadSyncFlow
- monthDownSyncFlow
- monthUploadSyncFlow
Illustrative example reconstructed from the app's interface — not a live capture.
PUT /v1/config/features HTTP/1.1 app-version: 295 appType: 7 app-type: 7 requestTime: 1758902400000 systemVersion: Android 14 phoneModel: Pixel 8 uu-id: K8f2c1e0AbCdEf123456 device-id: 3a7c9e12f04b8d11{ "status": 1, "message": "ok", "data": { "fileSyncEnable": 1, "cloudFileShareUsable": true, "deviceUsable": true, "ggOcrUsable": true, "dayDownSyncFlow": 5368709120, "dayUploadSyncFlow": 5368709120, "monthDownSyncFlow": 32212254720, "monthUploadSyncFlow": 32212254720 } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the app's cloud feature-toggle and quota flowMatches the configuration payload the client caches before enabling sync, OCR and sharing
Mint AWS Cognito token for document sync
PUT
/v1/sync/credentialsopendataExchanges a Firebase ID token (and optional Play purchase token) for Cognito identity credentials and the S3 bucket/region used to upload and download scanned PDFs in the user's cloud vault.
Auth: Firebase ID token posted as token, plus the standard app identity headers (uu-id, device-id, appType=7). Optional Play IAP fields purchaseToken, orderId (GPA order) and productId when the user is on a cloud plan.
- status
- message
- currentTimeMillis
- bucketName
- bucketRegionName
- identityId
- identityPoolId
- identityPoolRegionName
- providerName
- token
- tokenExpireTimeMillis
- dayDownSyncFlow
- dayUploadSyncFlow
- monthDownSyncFlow
- monthUploadSyncFlow
- appType
- deviceId
- purchaseToken
- orderId
- productId
Illustrative example reconstructed from the app's interface — not a live capture.
PUT /v1/sync/credentials HTTP/1.1 app-version: 295 appType: 7 uu-id: K8f2c1e0AbCdEf123456 device-id: 3a7c9e12f04b8d11 Content-Type: application/x-www-form-urlencoded appType=7&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...&deviceId=3a7c9e12f04b8d11&purchaseToken=GPA.1234-5678-9012-34567&orderId=GPA.3344-5566-7788-99000&productId=cloud100g_yearly{ "status": 1, "message": "ok", "currentTimeMillis": 1758902400000, "data": { "bucketName": "scanner-cloud-vault", "bucketRegionName": "us-east-2", "identityId": "us-east-2:8f3c1d2e-7a9b-4c5e-9f0a-1b2c3d4e5f6a", "identityPoolId": "us-east-2:c0ffee00-1111-2222-3333-444455556666", "identityPoolRegionName": "us-east-2", "providerName": "cognito-identity.amazonaws.com", "token": "eyJraWQiOiJhd3MtY29nbml0by4uLiIsInR5cCI6IkpXVCJ9...", "tokenExpireTimeMillis": 1758906000000, "dayDownSyncFlow": 5368709120, "dayUploadSyncFlow": 5368709120, "monthDownSyncFlow": 32212254720, "monthUploadSyncFlow": 32212254720 } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the sign-in flow that provisions cloud storage credentialsMatches the token exchange the app performs before uploading scanned PDFs
Register a scanned PDF share link
POST
/v1/shares/registeropendataRegisters a scanned PDF (cloud storage key plus byte size) as a cloud share after the share-sheet upload, returning whether sharing is enabled and the free vs subscribed storage caps.
Auth: Anonymous or signed-in Firebase user. Standard app identity headers; body carries userId, deviceId, appType=7.
- status
- message
- currentTimeMillis
- appType
- deviceId
- bucketKey
- fileSize
- userId
- orderId
- cloudFileShareUsable
- deviceUsable
- ggOcrUsable
- freeStorageSpace
- subscribeStorageSpace
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/shares/register HTTP/1.1 app-version: 295 appType: 7 uu-id: K8f2c1e0AbCdEf123456 device-id: 3a7c9e12f04b8d11 Content-Type: application/x-www-form-urlencoded appType=7&deviceId=3a7c9e12f04b8d11&bucketKey=A_K8f2c1e0AbCdEf123456/pdfs/invoice-2026-09-26.pdf&fileSize=842144&userId=K8f2c1e0AbCdEf123456&orderId=GPA.3344-5566-7788-99000{ "status": 1, "message": "ok", "currentTimeMillis": 1758902400000, "data": { "cloudFileShareUsable": true, "deviceUsable": true, "ggOcrUsable": true, "cloudFileShareConfiguration": { "freeStorageSpace": 50, "subscribeStorageSpace": 500 } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the share-sheet upload flow for scanned documents
Record a Google Play subscription purchase
POST
/v1/billing/subscriptionsopenfinanceUploads the Play Billing purchaseToken, GPA orderId and Firebase userId so the scanner backend can attach a premium/cloud-storage entitlement to the account.
Auth: Signed-in Firebase user. Standard app identity headers; body posts userId (Firebase UID), deviceId, purchaseToken and orderId from Play Billing.
- appType
- userId
- orderId
- purchaseToken
- accountId
- deviceId
- status
- message
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/billing/subscriptions HTTP/1.1 app-version: 295 appType: 7 uu-id: K8f2c1e0AbCdEf123456 device-id: 3a7c9e12f04b8d11 Content-Type: application/x-www-form-urlencoded appType=7&userId=K8f2c1e0AbCdEf123456&orderId=GPA.3344-5566-7788-99000&purchaseToken=GPA.1234-5678-9012-34567&accountId=0&deviceId=3a7c9e12f04b8d11{ "status": 1, "message": "ok" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the premium upgrade flow after Google Play billing completes
Verify Play subscription entitlement
GET
/v1/billing/entitlements/lookupopenfinanceLooks up a Google Play subscription by purchase token and returns the SubscriptionPurchase blob (expiryTimeMillis and payment state) used to turn premium/cloud features on or off.
Auth: Play purchase token as query param token, plus account_id. No Firebase session required on this call.
- token
- account_id
- type
- SubscriptionPurchase
- expiryTimeMillis
- paymentState
- acknowledgementState
- orderId
- purchaseToken
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/billing/entitlements/lookup?token=GPA.1234-5678-9012-34567&account_id=0 HTTP/1.1{ "type": 1, "SubscriptionPurchase": { "expiryTimeMillis": "1761494400000", "paymentState": 1, "acknowledgementState": 1, "orderId": "GPA.3344-5566-7788-99000", "purchaseToken": "GPA.1234-5678-9012-34567" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the subscription status check that gates premium features
Delete scanner account
PUT
/v1/account/deleteosintDeletes the scanner cloud account bound to this Firebase userId, deviceId and push token, wiping the identity used for sync and share-link history.
Auth: Firebase userId plus deviceId and the stored push token as deviceToken. Standard app identity headers.
- userId
- appType
- deviceToken
- deviceId
- status
- message
Illustrative example reconstructed from the app's interface — not a live capture.
PUT /v1/account/delete HTTP/1.1 app-version: 295 appType: 7 uu-id: K8f2c1e0AbCdEf123456 device-id: 3a7c9e12f04b8d11 Content-Type: application/x-www-form-urlencoded userId=K8f2c1e0AbCdEf123456&appType=7&deviceToken=fcm-e0AbCdEf123456&deviceId=3a7c9e12f04b8d11{ "status": 1, "message": "ok" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the in-app account deletion flow
Data categories
- cloud-sync
- document-share
- entitlements
- feature-flags
- device-identity
Where teams use this data
Cloud vault credential broker
A document-management connector calls PUT /v1/sync/credentials with the user's Firebase ID token, then uses the returned identityId, identityPoolId, bucketName and short-lived cloud token to list and pull scanned PDFs from the user's storage vault without opening the app.
Share-link intake for back-office OCR
Intake bots watch POST /v1/shares/register for new bucketKey + fileSize registrations, then fetch the PDF from cloud storage and run downstream OCR or ID-document extraction using the same userId.
Premium entitlement audit
Billing ops verify a device's cloud quota by pairing POST /v1/billing/subscriptions (purchaseToken, orderId, userId) with GET /v1/billing/entitlements/lookup, reading expiryTimeMillis and paymentState before granting 100 GB sync.
Account teardown / GDPR wipe
Support tools call PUT /v1/account/delete with userId, deviceId and deviceToken to drop the cloud identity, then purge the synced vault so the user's stored scan volume is zeroed.
Frequently asked questions
How does Simple Scan authenticate its cloud calls?
Every cloud call sends custom app identity headers: app-version, appType=7, app-type=7, requestTime, systemVersion, phoneModel, uu-id (Firebase UID) and device-id. Sync additionally posts the Firebase ID token as token; the entitlement lookup uses the Play purchase token instead.
Where do scanned PDFs actually live?
PUT /v1/sync/credentials returns bucketName, bucketRegionName, identityPoolId and a short-lived cloud token. The app then uploads pages to cloud object storage; share-sheet files are also copied under a pdfs/ storage path before POST /v1/shares/register records the bucketKey.
Which fields control OCR and cloud-share?
PUT /v1/config/features returns ggOcrUsable, cloudFileShareUsable, deviceUsable and fileSyncEnable, plus dayDownSyncFlow / dayUploadSyncFlow / monthDownSyncFlow / monthUploadSyncFlow. The share-link response repeats those flags and adds freeStorageSpace vs subscribeStorageSpace.
How is a Play subscription turned into cloud quota?
After billing, POST /v1/billing/subscriptions sends purchaseToken, orderId, userId, accountId and deviceId. GET /v1/billing/entitlements/lookup?token=...&account_id=... then returns the expiryTimeMillis and paymentState used to unlock the 10 GB / 100 GB plans.
Topics
- simple scan api
- simplescan.scanner cloud sync api
- simple scan pdf share api
- simple scan subscription api
- simple scan document cloud 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.