PDF Scanner & Editor by Kaagaz icon

PDF Scanner & Editor by Kaagaz data API

Kaagaz Apps · Utilities

PDF Scanner & Editor by Kaagaz is an India-first camera-to-PDF app whose private API covers the signed-in vault, not just on-device scans. After OTP on /v1/auth/otp/request, GET /v1/account/quota returns maxSize, currentSize, numOfDocs and the nested userPlan; GET /v1/vault/folders restores the folder tree the restore worker downloads.

Sharing, search and money sit on the same session: POST /v1/shares/create mints a time-bounded URL, POST /v1/ocr/pages stores page text for cross-device search, GET /v1/referrals/wallet exposes referral totalPoints, and GET /v1/billing/plans plus POST /v1/billing/orders open Razorpay or Play Billing for Premium cloud quota. Kaagaz AI turns a scanned PDF into POST /v1/assistant/messages answers gated by /v1/assistant/credits.

PDF Scanner & Editor by Kaagaz is Kaagaz Apps' India-first camera-to-PDF super app: scan, OCR-search, e-sign, share and back up documents to a first-party vault hosted in India. After a mobile OTP on /v1/auth/otp/request the client stores an authorization token, then reads account quotas and plan state from /v1/account/quota (maxSize, currentSize, userPlan, aiConsent), restores the folder tree from /v1/vault/folders, mints share links, syncs OCR text, spends Kaagaz AI credits in /v1/assistant/messages, and cashes referral points through /v1/referrals/wallet. Premium plans are quoted at /v1/billing/plans and paid via Razorpay or Play Billing orders at /v1/billing/orders.

Screenshots

  • PDF Scanner & Editor by Kaagaz screenshot 1
  • PDF Scanner & Editor by Kaagaz screenshot 2
  • PDF Scanner & Editor by Kaagaz screenshot 3
  • PDF Scanner & Editor by Kaagaz screenshot 4
  • PDF Scanner & Editor by Kaagaz screenshot 5
  • PDF Scanner & Editor by Kaagaz screenshot 6
  • PDF Scanner & Editor by Kaagaz screenshot 7
  • PDF Scanner & Editor by Kaagaz screenshot 8

API surface

  • Send mobile OTP

    POST /v1/auth/otp/request opendata

    Starts Kaagaz cloud sign-in from the sign-in screen: sends an SMS OTP to the mobile number that the verify screen later confirms.

    Auth: None (pre-login). Body identifies the user by Indian mobile number; Truecaller SDK is an optional alternate on the same sign-in screen.

    • mobile
    • response
    • exists

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/auth/otp/request HTTP/1.1
    Content-Type: application/json
    
    {
      "mobile": 9876543210
    }
    {
      "response": "OTP_SENT",
      "exists": true
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the mobile OTP sign-in screen
    • Response model carries response and exists
  • Verify OTP and mint session

    POST /v1/auth/otp/confirm opendata

    Confirms the OTP on the verify screen and returns the session token plus the free cloud quota (spaceAlloted, typically 100 MB) granted to the account.

    Auth: None (pre-login). Body carries the SMS OTP plus the mobile collected on the sign-in screen. The response authorization value is sent as Authorization on later Kaagaz calls.

    • mobile
    • otp
    • newUser
    • spaceAlloted
    • authorization

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/auth/otp/confirm HTTP/1.1
    Content-Type: application/json
    
    {
      "mobile": 9876543210,
      "otp": "482193"
    }
    {
      "newUser": false,
      "spaceAlloted": 104857600,
      "authorization": "kgz_live_8f3c1d2e7a9b4c5e"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the OTP verification screen
    • Session payload includes newUser, spaceAlloted and authorization
  • Read account quotas and plan

    GET /v1/account/quota opendata

    Returns the signed-in vault snapshot used by the home and settings screens: used vs allotted cloud bytes, document count, ad/referral flags, AI consent, and the nested UserPlan (name, expiry, overallLimit, points).

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • id
    • obfuscatedId
    • maxSize
    • currentSize
    • numOfDocs
    • exists
    • showAds
    • showReferral
    • everPremium
    • recurring
    • aiConsent
    • userPlan
    • name
    • expiry
    • overallLimit
    • topPlan
    • totalPoints
    • trial

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/account/quota HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "id": 18422109,
      "obfuscatedId": "usr_8f3c1d2e",
      "maxSize": 1073741824,
      "currentSize": 248576000,
      "numOfDocs": 142,
      "exists": true,
      "showAds": false,
      "showReferral": true,
      "everPremium": true,
      "recurring": true,
      "aiConsent": true,
      "userPlan": {
        "name": "Kaagaz Premium",
        "expiry": 1767225600000,
        "overallLimit": 1073741824,
        "topPlan": true,
        "totalPoints": 450,
        "trial": false,
        "recentlyActivated": false,
        "userDurationOnKaagaz": 86400000
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the home and settings quota snapshot
    • Matches UserPlan fields shown on the premium status chip
  • Fetch user profile

    GET /v1/vault/owner osint

    Reads the profile screen record: display name, email, mobile, WhatsApp consent and the profile-completion bottom-sheet flag.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • name
    • email
    • mobile
    • whatsappConsent
    • shouldShowProfileBottomSheet
    • elements

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/vault/owner HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "name": "Anita Sharma",
      "email": "[email protected]",
      "mobile": 9876543210,
      "whatsappConsent": true,
      "shouldShowProfileBottomSheet": false,
      "elements": []
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the profile screen
    • Fields name, email, mobile and whatsappConsent match the editable profile form
  • Restore cloud document vault

    GET /v1/vault/folders opendata

    Returns the cloud vault the restore worker consumes: per-user folder tree with display names, page files (key, size, sequence, ocrBackup flag) and totalPages against the quota in /v1/account/quota.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • userId
    • totalPages
    • folders
    • name
    • givenName
    • createDate
    • modiDate
    • lastAccess
    • files
    • key
    • size
    • sequence
    • ocrBackup
    • link

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/vault/folders HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "userId": 18422109,
      "totalPages": 36,
      "folders": [
        {
          "name": "folder_20260901_1015",
          "givenName": "GST invoice Sep",
          "createDate": "2026-09-01T10:15:00.000+05:30",
          "modiDate": "2026-09-12T18:40:00.000+05:30",
          "lastAccess": "2026-09-20T09:02:00.000+05:30",
          "files": [
            {
              "name": "page_001.jpg",
              "key": "18422109/folder_20260901_1015/page_001.jpg",
              "size": 842113,
              "sequence": 1,
              "ocrBackup": true,
              "link": "/obj/18422109/folder_20260901_1015/page_001.jpg"
            }
          ],
          "tag": []
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the cloud restore and document-list flow
    • Folder and file fields match the vault browser (givenName, sequence, ocrBackup)
  • Create shareable document link

    POST /v1/shares/create opendata

    Mints a time-bounded public URL for a scanned folder (Link.link, Link.expires) so the user can share a PDF without exporting the file off-device.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • folderName
    • extension
    • link
    • expires
    • error

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/shares/create HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    Content-Type: application/json
    
    {
      "folderName": "folder_20260901_1015",
      "extension": 7
    }
    {
      "link": "/s/a8f3c1d2",
      "expires": 1761955200000,
      "error": null
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the share-link composer on a scanned folder
    • Response carries link, expires and error
  • List active share links

    GET /v1/shares opendata

    Lists every live share the account has minted, with folderName, createdAt/expiresAt and remaining extension days — the share-manager screen plus the background share-link refresh worker.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • link
    • folderName
    • createdAt
    • expiresAt
    • extension
    • error

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/shares HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    [
      {
        "link": "/s/a8f3c1d2",
        "folderName": "GST invoice Sep",
        "createdAt": "2026-09-12T18:41:00.000+05:30",
        "expiresAt": "2026-10-12T18:41:00.000+05:30",
        "extension": 7,
        "error": null
      }
    ]

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the share-manager screen
    • Each row carries folderName, createdAt, expiresAt and extension
  • Backup OCR text for a page

    POST /v1/ocr/pages opendata

    Uploads the on-device OCR index for one scanned page (plain text plus serialized block coordinates) so search can be rebuilt across devices. Companion restore posts a batch of page ids and returns fileList.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • ocrText
    • serializedText
    • folderName
    • fileName
    • pageId
    • response
    • exists

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/ocr/pages HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    Content-Type: application/json
    
    {
      "ocrText": "GSTIN 07AABCU9603R1ZX Invoice No. INV-2041",
      "serializedText": "{\"blocks\":[{\"text\":\"GSTIN 07AABCU9603R1ZX\"}]}",
      "folderName": "folder_20260901_1015",
      "fileName": "page_001.jpg",
      "pageId": 900112
    }
    {
      "response": "OK",
      "exists": true
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the per-page OCR backup that powers cross-device search
    • Payload fields ocrText, serializedText, folderName, fileName and pageId
  • Read AI / tool credit balance

    GET /v1/credits/balance openfinance

    Returns the integer credit balance the remaining-credits chip and PDF-tool paywall display. Companion history lists credit transactions for the same account.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • credits-balance

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/credits/balance HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    42

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the AI remaining-credits chip
    • Integer balance gates PDF-tool paywalls
  • Read referral wallet

    GET /v1/referrals/wallet openfinance

    Returns the referral-points ledger behind the wallet history screen: running totalPoints, redeemable saleItems (code, points, text) and walletHistory rows (cat, rewardType, rewardCreditTime). Spend path redeems points for a catalogue item.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • totalPoints
    • saleItems
    • code
    • image
    • points
    • text
    • desc
    • walletHistory
    • id
    • cat
    • rewardType
    • rewardCreditTime

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/referrals/wallet HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "totalPoints": 450,
      "saleItems": [
        {
          "code": "PREMIUM_1M",
          "image": "/ads/kaagaz-premium.jpg",
          "points": 400,
          "text": "1 month Premium",
          "desc": "Redeem 400 points for a month of Kaagaz Premium"
        }
      ],
      "walletHistory": [
        {
          "id": "wh_9012",
          "cat": "REFERRAL",
          "points": 50,
          "text": "Friend joined Kaagaz",
          "rewardType": "CREDIT",
          "rewardCreditTime": "2026-09-18T11:20:00.000+05:30"
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the referral wallet history screen
    • Ledger fields totalPoints, saleItems and walletHistory
  • Fetch referral code and history

    GET /v1/referrals/code opendata

    Loads the referral share card: the personal referral url plus a history of named invitees and the points each conversion credited. Benefit copy is a sibling read of the programme terms.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • url
    • totalPoints
    • history
    • name
    • points
    • referralTime

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/referrals/code HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "url": "/r/ANITA50",
      "totalPoints": 450,
      "history": [
        {
          "name": "Ravi Kumar",
          "points": 50,
          "referralTime": "2026-09-18T11:20:00.000+05:30"
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the referral share card
    • Fields url, totalPoints and invitee history (name, points, referralTime)
  • List premium plans

    GET /v1/billing/plans openfinance

    Returns the paywall catalogue: per-plan INR price/actualPrice, Razorpay subscription code, Play product id, trialValid, and whether to hide Razorpay in favour of Play Billing.

    Auth: Authorization token minted by /v1/auth/otp/confirm. Query flags select Play Billing vs Razorpay and the one-time vs subscription catalogue.

    • title
    • subHeading
    • buttonText
    • hideRazorPay
    • launchPlayBilling
    • trialValid
    • plans
    • name
    • price
    • actualPrice
    • oldPrice
    • currency
    • validity
    • offer
    • razorPaySubscriptionCode
    • playSubscriptionId

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/billing/plans HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "title": "Go Premium",
      "subHeading": "Remove ads, unlock 1 GB cloud",
      "buttonText": "Continue",
      "hideRazorPay": false,
      "launchPlayBilling": true,
      "trialValid": true,
      "plans": [
        {
          "name": "Yearly",
          "price": "599",
          "actualPrice": "999",
          "oldPrice": "999",
          "currency": "₹",
          "validity": "12 months",
          "offer": "40% off",
          "razorPaySubscriptionCode": "plan_KaagazYearly",
          "playSubscriptionId": "kaagaz_premium_yearly",
          "selected": true
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the Premium paywall catalogue
    • Plan rows carry price, razorPaySubscriptionCode and playSubscriptionId
  • Create Razorpay / Play order

    POST /v1/billing/orders openfinance

    Opens a payable order whose orderId/amount/subscriptionId the Razorpay checkout or Play Billing flow consumes. Status is polled on a sibling payment-status route; confirmation posts paymentId, orderId and signature (Razorpay) or purchaseToken (Play).

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • planName
    • razorPaySubscriptionCode
    • playSubscriptionId
    • orderId
    • amount
    • subscriptionId

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/billing/orders HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    Content-Type: application/json
    
    {
      "planName": "Yearly",
      "razorPaySubscriptionCode": "plan_KaagazYearly",
      "playSubscriptionId": "kaagaz_premium_yearly"
    }
    {
      "orderId": "order_N8f3c1d2e7a9",
      "amount": 59900,
      "subscriptionId": "sub_KaagazYearly_001"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the Premium checkout that opens Razorpay or Play Billing
    • Order payload returns orderId, amount and subscriptionId
  • Chat with Kaagaz AI over a PDF

    POST /v1/assistant/messages opendata

    Runs a turn of Kaagaz AI against a scanned PDF: the client posts userChat plus the Bot session (assistId, fileId, threadId, vectorStore) and receives botChat, an auto summary, a suggestedName for the folder, and follow-up questions. Sibling summarize and chat-response calls complete the same assistant thread.

    Auth: Authorization token minted by /v1/auth/otp/confirm. Consumes AI credits tracked at /v1/assistant/credits.

    • userChat
    • botChat
    • summary
    • suggestedName
    • questions
    • bot
    • assistId
    • fileId
    • fileName
    • fileType
    • origFileName
    • pdfPath
    • sessId
    • threadId
    • runId
    • vectorStore

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/assistant/messages HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    Content-Type: application/json
    
    {
      "userChat": "What is the GSTIN and invoice total?",
      "bot": {
        "assistId": "asst_kaagaz_pdf",
        "fileId": "file_9c1",
        "fileName": "gst_invoice_sep.pdf",
        "fileType": "pdf",
        "origFileName": "GST invoice Sep.pdf",
        "pdfPath": "18422109/folder_20260901_1015/gst_invoice_sep.pdf",
        "sessId": "sess_44ab",
        "threadId": "thread_7e2",
        "runId": "run_01",
        "vectorStore": "vs_kaagaz_18422109"
      }
    }
    {
      "botChat": "GSTIN 07AABCU9603R1ZX. Invoice total is ₹12,480 including 18% GST.",
      "summary": "September GST invoice, total ₹12,480.",
      "suggestedName": "GST invoice Sep 2026",
      "questions": [
        "Who is the vendor?",
        "When is payment due?"
      ],
      "userChat": "What is the GSTIN and invoice total?",
      "bot": {
        "assistId": "asst_kaagaz_pdf",
        "fileId": "file_9c1",
        "threadId": "thread_7e2",
        "runId": "run_02",
        "sessId": "sess_44ab",
        "vectorStore": "vs_kaagaz_18422109",
        "fileName": "gst_invoice_sep.pdf",
        "fileType": "pdf",
        "origFileName": "GST invoice Sep.pdf",
        "pdfPath": "18422109/folder_20260901_1015/gst_invoice_sep.pdf"
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the in-app PDF assistant chat
    • Turn payload carries userChat plus Bot session ids (assistId, fileId, threadId, vectorStore)
  • Read remaining Kaagaz AI credits

    GET /v1/assistant/credits openfinance

    Returns the remaining Kaagaz AI credit count (AiCredit.value) shown on the credits tooltip before /v1/assistant/messages is allowed to run.

    Auth: Authorization token minted by /v1/auth/otp/confirm.

    • response
    • value

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/assistant/credits HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "response": "OK",
      "value": 12
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the AI credits tooltip shown before a chat turn
    • AiCredit fields response and value

Data categories

  • identity
  • cloud storage
  • document sharing
  • ocr index
  • credits
  • referrals
  • subscriptions
  • ai chat

Where teams use this data

  • India-hosted document-vault sync

    A records bot signed in as the same Kaagaz account can poll GET /v1/account/quota for maxSize/currentSize/numOfDocs, then pull GET /v1/vault/folders to inventory every folder's givenName, page keys and ocrBackup flags — useful for GST-invoice archival without scraping the camera roll.

  • Share-link expiry watchdog

    Compliance jobs list GET /v1/shares and compare expiresAt against policy; links that still have extension days can be renewed, and stale GST or KYC packets revoked from the same share-manager surface.

  • Referral-points and premium reconciliation

    Finance stacks read GET /v1/referrals/wallet (totalPoints, walletHistory) and GET /v1/referrals/code (invitee name, points, referralTime), then match POST /v1/billing/orders orderId/amount/subscriptionId against Razorpay or Play receipts posted after checkout.

  • Invoice Q&A over scanned PDFs

    After OCR is backed up at POST /v1/ocr/pages, an assistant posts the Bot session (fileId, threadId, vectorStore) to POST /v1/assistant/messages and stores botChat plus summary; GET /v1/assistant/credits.value gates how many turns remain.

Frequently asked questions

How does Kaagaz Scanner authenticate the cloud vault?

The user enters a mobile number on the sign-in screen; POST /v1/auth/otp/request delivers an SMS code and POST /v1/auth/otp/confirm returns authorization, newUser and spaceAlloted (the free 100 MB quota). Later calls to account, vault, billing and OCR routes send that token as Authorization. Truecaller is an optional alternate on the same login screen.

What document data does the backup API return?

GET /v1/vault/folders returns userId, totalPages and a folders array. Each folder has name, givenName, createDate/modiDate/lastAccess and a files list with key, size, sequence, ocrBackup and a download link. Quotas that gate the vault live on GET /v1/account/quota as maxSize and currentSize.

Which endpoints expose credits, referrals or subscriptions?

GET /v1/credits/balance and GET /v1/assistant/credits.value are the spendable counters. GET /v1/referrals/wallet returns totalPoints, saleItems and walletHistory; GET /v1/referrals/code adds the personal url and invitee history. Premium catalogue is GET /v1/billing/plans (price, razorPaySubscriptionCode, playSubscriptionId); POST /v1/billing/orders creates the payable orderId.

Is this a public developer API?

No. These are first-party endpoints the Android client calls after OTP login. Paths and field names are documented here so integrators can recognise the same data the app already shows — they are not an open developer programme.

Topics

  • Kaagaz Scanner API
  • Kaagaz PDF cloud backup
  • Kaagaz OCR backup
  • Kaagaz referral wallet
  • Kaagaz AI credits
  • Kaagaz Razorpay plans
  • India PDF scanner data 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

Get a quote