PDF Scanner & Editor by Kaagaz icon

PDF Scanner & Editor by Kaagaz data API

Kaagaz Apps · Utilities

PDF Scanner & Editor by Kaagaz is a camera-to-PDF scanner and document organiser from the Indian developer Kaagaz Apps, widely picked up as a made-in-India alternative to CamScanner after India's 2020 ban on Chinese apps. Users photograph paper documents into named folders of pages, run on-device OCR so every scan becomes searchable text, edit and e-sign PDFs with credit-gated PDF tools, and back everything up to a Kaagaz cloud vault hosted in India after signing in with a mobile-number SMS OTP or Truecaller. A share manager mints expiring links to a scanned folder so a PDF can be sent without exporting the file, and the built-in Kaagaz AI assistant answers questions about a scanned PDF, writes a short summary of it and suggests a folder name, spending AI credits per turn. New accounts get 100 MB of free cloud space; Kaagaz Premium removes ads and expands cloud storage, priced in rupees and sold through Razorpay or Google Play Billing with free trials, while a referral programme pays points for each invited friend that can be redeemed from a rewards catalogue. It serves Indian users digitising everyday paperwork such as GST invoices and KYC documents, competing with Adobe Scan, Microsoft Lens and the Google Drive scanner on India-hosted storage and rupee pricing.

Cloud-vault folders are the core record: each carries a user-given givenName with createDate, modiDate and lastAccess timestamps, and lists its page files by key, size and sequence plus an ocrBackup flag. The OCR index travels page by page as plain ocrText and block-level serializedText keyed by pageId, so the text of a scanned invoice or KYC form stays searchable off the phone. Around the vault sit an account snapshot (maxSize, currentSize, numOfDocs and a nested userPlan with expiry and trial), share links with expiresAt and remaining extension days, and Kaagaz AI turns that return botChat, an auto summary and a suggestedName for the folder.

The money side is just as structured: referral-wallet totalPoints and walletHistory rows with rewardType and rewardCreditTime, invitee referralTime, the remaining AI-credit count, rupee-priced plans carrying razorPaySubscriptionCode and playSubscriptionId, and checkout orders with orderId, amount and subscriptionId.

On that data, records bots archive GST-invoice folders straight from the India-hosted vault without scraping the camera roll; compliance jobs compare share-link expiry against policy, renewing links that still have extension days and revoking stale GST or KYC packets; finance stacks reconcile referral points and Premium orders against Razorpay or Play receipts; and invoice assistants answer questions over the backed-up OCR index while the credit count gates how many turns remain. openData Studio turns this Kaagaz vault, OCR and wallet data into callable open data.

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

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • 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
    POST /v1/auth/otp/request HTTP/1.1
    Content-Type: application/json
    
    {
      "mobile": 9876543210
    }
    {
      "response": "OTP_SENT",
      "exists": true
    }
  • 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
    POST /v1/auth/otp/confirm HTTP/1.1
    Content-Type: application/json
    
    {
      "mobile": 9876543210,
      "otp": "482193"
    }
    {
      "newUser": false,
      "spaceAlloted": 104857600,
      "authorization": "kgz_live_8f3c1d2e7a9b4c5e"
    }
  • 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
    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
      }
    }
  • 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
    GET /v1/vault/owner HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "name": "Anita Sharma",
      "email": "[email protected]",
      "mobile": 9876543210,
      "whatsappConsent": true,
      "shouldShowProfileBottomSheet": false,
      "elements": []
    }
  • 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
    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": []
        }
      ]
    }
  • 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
    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
    }
  • 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
    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
      }
    ]
  • 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
    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
    }
  • 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
    GET /v1/credits/balance HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    42
  • 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
    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"
        }
      ]
    }
  • 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
    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"
        }
      ]
    }
  • 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
    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
        }
      ]
    }
  • 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
    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"
    }
  • 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
    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"
      }
    }
  • 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
    GET /v1/assistant/credits HTTP/1.1
    Authorization: kgz_live_8f3c1d2e7a9b4c5e
    {
      "response": "OK",
      "value": 12
    }

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.

Apps similar to PDF Scanner & Editor by Kaagaz

  • Adobe Scan — Adobe Scan turns phone-camera captures into searchable PDFs with OCR and opens them in Acrobat to fill forms and sign.
  • Genius Scan - PDF Scanner — Genius Scan digitizes paper into multi-page PDFs with a searchable text layer and optional Genius Cloud backup.
  • PDF Scanner app - TapScanner — TapScanner is a camera-to-PDF toolkit with automatic edge detection, OCR in 110-plus languages, and in-app merge, split and sign tools.
  • Simple Scan - PDF Scanner App — Simple Scan turns the phone into a portable PDF scanner for documents and receipts, with OCR text export and optional cloud backup.
  • Microsoft Lens — Microsoft Lens (formerly Office Lens) captures whiteboards, printed pages and business cards and exports them as PDF, Word, PowerPoint or OneNote files.
  • Google Drive Scanner — The Google Drive Android app includes a built-in scanner that saves receipts, letters and statements as searchable PDFs in Drive.
  • SwiftScan — SwiftScan captures documents on iPhone, iPad and Android, saves them as PDF or JPEG, and can send faxes from the same app.

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