Skip to content

API Reference

Base URL: https://indox.org, every path below is absolute from it and already carries its /api/v1/ prefix. Running your own instance? Substitute your host; the paths are identical.

Authentication

Authorization: Bearer <api_key>

The Auth column in every table below says whether a request needs that header:

Value Meaning
Bearer The endpoint returns 401/403 without a token.
**, ** The endpoint is reachable without a token. Anonymous requests are served within the free quota; sending a token attributes the job to your account and applies your plan's limits instead.

Browser clients authenticated by session cookie may send the cookie instead of the header, the backend accepts either. See Concepts for the full auth model.

Async conversion flow

Conversions do not block. Every convert endpoint returns 202 { "conversion_id": ... }; you then poll the matching status endpoint for that media family and download when it reaches a terminal state.

Media family Submit Poll status Download
Documents / PDF POST /api/v1/pdf_handler/convert/ GET /api/v1/docs_core/conversion/{conversion_id}/ GET /api/v1/pdf_handler/{conversion_id}/download/
Fonts POST /api/v1/fonts/convert/ GET /api/v1/fonts/conversion/{conversion_id}/ GET /api/v1/fonts/{conversion_id}/download/
Images / video / 3D POST /api/v1/convert/{image\|video\|model}/convert/ GET /api/v1/media_core/conversion/{conversion_id}/ GET /api/v1/media_core/files/{conversion_id}/download/

GET /api/v1/docs_core/conversion/wait/{conversion_id}/ and GET /api/v1/media_core/conversion/wait/{conversion_id}/ long-poll instead of returning immediately, if you would rather not implement a poll loop.

DELETE /api/v1/conversion/{conversion_id}/ removes a conversion of any media family: the converted output and the original upload are deleted from storage and the item leaves your history. 204 on success, 404 when the id is unknown or not yours.


Health

Method Path Auth Description
GET /api/v1/health/ — Health probe, DB, cache, storage, Celery broker

Documents

Document and PDF conversion. Job status, credits and batching for this family live under /api/v1/docs_core/ below.

Method Path Auth Description
GET /api/v1/pdf_handler/formats/ — Supported document types
GET /api/v1/pdf_handler/operations/ — Operations available for a from/to pair
POST /api/v1/pdf_handler/convert/ — Convert a document (multipart)
POST /api/v1/pdf_handler/convert/json/ — Convert a document (JSON body)
POST /api/v1/pdf_handler/form-fields/ — List the fillable form fields in a PDF
POST /api/v1/pdf_handler/save/ — Save an edited PDF and deliver it to a destination
GET /api/v1/pdf_handler/history/ — List conversion history
GET /api/v1/pdf_handler/conversion/{conversion_id}/ — Get conversion status
GET /api/v1/pdf_handler/{conversion_id}/download/ — Download the converted file

Document jobs, status, credits, batching

Method Path Auth Description
GET /api/v1/docs_core/conversion/{conversion_id}/ — Conversion info
GET /api/v1/docs_core/conversion/wait/{conversion_id}/ — Long-poll until the conversion settles
POST /api/v1/docs_core/batch/collect/ — Collect several conversions into one ZIP
GET /api/v1/docs_core/batch/{batch_id}/download/ — Download the batch ZIP
GET /api/v1/docs_core/credits/ — Remaining credits
POST /api/v1/docs_core/visibility/hide/ — Hide items from history

PDF pipelines

Saved, replayable sequences of PDF operations.

Method Path Auth Description
GET /api/v1/pdf_handler/pipeline/ Bearer List saved pipelines
POST /api/v1/pdf_handler/pipeline/ Bearer Create a saved pipeline
GET /api/v1/pdf_handler/pipeline/{pipeline_id}/ Bearer Get a saved pipeline
DELETE /api/v1/pdf_handler/pipeline/{pipeline_id}/ Bearer Delete a saved pipeline
POST /api/v1/pdf_handler/pipeline/{pipeline_id}/run/ Bearer Run a saved pipeline on a PDF

Phone scan

Pair a phone to a desktop session, capture pages, assemble them into a PDF.

Method Path Auth Description
POST /api/v1/pdf_handler/scan/sessions/ Bearer Open a phone-scan session
GET /api/v1/pdf_handler/scan/sessions/{session_id}/ Bearer Poll a phone-scan session
POST /api/v1/pdf_handler/scan/sessions/{session_id}/finalize/ Bearer Queue assembly of the captured pages into a PDF
GET /api/v1/pdf_handler/scan/pair/ Bearer Phone: read a paired scan session
POST /api/v1/pdf_handler/scan/pair/pages/ — Phone: upload a captured page
DELETE /api/v1/pdf_handler/scan/pair/pages/{page_id}/ Bearer Phone: discard a captured page

E-signing

The session owner authenticates; each participant acts through a per-recipient {token}, so the participant routes take no bearer token.

Method Path Auth Description
POST /api/v1/pdf_handler/signing/sessions/ Bearer Create a multi-party signing session
GET /api/v1/pdf_handler/signing/sessions/{session_id}/ Bearer Get a signing session
GET /api/v1/pdf_handler/signing/sign/{token}/ — Participant: view a document to sign
POST /api/v1/pdf_handler/signing/sign/{token}/ — Participant: sign
POST /api/v1/pdf_handler/signing/sign/{token}/decline/ — Participant: decline

Fonts

Method Path Auth Description
GET /api/v1/fonts/formats/ — List font formats
GET /api/v1/fonts/formats/{input_format}/ — Output formats available for an input format
POST /api/v1/fonts/upload/ — Upload a font to object storage
POST /api/v1/fonts/convert/ — Convert an uploaded font by key
POST /api/v1/fonts/validate/ — Validate a conversion before running it
POST /api/v1/fonts/inspect/ — Inspect an uploaded font file
GET /api/v1/fonts/inspect/ — Inspect a stored font by key
GET /api/v1/fonts/conversion/{conversion_id}/ — Get font conversion info
GET /api/v1/fonts/{conversion_id}/download/ — Download the converted font
GET /api/v1/fonts/{conversion_id}/download/{filename} — Download the converted font under a chosen filename
GET /api/v1/fonts/quota/ — Remaining font quota
GET /api/v1/fonts/health/ — Font service health

Images, video and 3D models

Three media families share one path shape. Job status, downloads and credits for all three go through /api/v1/media_core/ below.

Method Path Auth Description
GET /api/v1/convert/image/formats/ — List image formats
GET /api/v1/convert/image/operations/ — List image operations
POST /api/v1/convert/image/convert/ — Convert an image
GET /api/v1/convert/image/conversion/{conversion_id}/ — Retrieve image conversion info
GET /api/v1/convert/image/history/ Bearer List image conversion history
GET /api/v1/convert/video/formats/ — List video formats
POST /api/v1/convert/video/convert/ — Convert a video
GET /api/v1/convert/model/formats/ — List 3D model formats
GET /api/v1/convert/model/operations/ — List 3D model operations
POST /api/v1/convert/model/convert/ — Convert a 3D model
GET /api/v1/convert/model/conversion/{conversion_id}/ — Retrieve 3D model conversion info

Video conversions have no dedicated status route, poll GET /api/v1/media_core/conversion/{conversion_id}/.

Media jobs, status, downloads, credits

Method Path Auth Description
GET /api/v1/media_core/conversion/{conversion_id}/ — Unified download link for a media conversion
GET /api/v1/media_core/conversion/wait/{conversion_id}/ — Long-poll until the conversion or batch settles
GET /api/v1/media_core/files/{conversion_id}/download/ — Download the converted media file
POST /api/v1/media_core/batch/collect/ Bearer Collect several items into one ZIP
GET /api/v1/media_core/batch/{batch_id}/download/ — Download the batch ZIP
GET /api/v1/media_core/credits/ — Remaining credits
POST /api/v1/media_core/visibility/hide/ — Hide items from history
GET /api/v1/media_core/health/ — Media service health

User

Method Path Auth Description
POST /api/v1/user/auth/login/ — Log in with username/email + password, Google OAuth or Apple Sign-In
POST /api/v1/user/auth/logout/ — Log out
GET /api/v1/user/me/ Bearer Current user profile
PATCH /api/v1/user/me/ Bearer Update the current user profile
GET /api/v1/user/usage/ Bearer Assigned pricing plans
GET /api/v1/user/usage/summary/ Bearer Usage summary
GET /api/v1/user/usage/trend/ Bearer Conversion trend over time
GET /api/v1/user/usage/recent-conversions/ Bearer Recent conversions
GET /api/v1/user/usage/conversions/{conversion_id}/ Bearer Detailed conversion record

Storage

Files the account owns, uploads and conversion outputs alike.

Method Path Auth Description
GET /api/v1/user/storage/files/ Bearer List user-managed files
POST /api/v1/user/storage/files/upload/ Bearer Upload a new file to the account's storage
POST /api/v1/user/storage/files/register/ Bearer Register an existing object as a user-managed file
POST /api/v1/user/storage/files/download/ Bearer Generate download URLs for stored files
POST /api/v1/user/storage/files/download/zip/ Bearer Download stored files as a ZIP archive
POST /api/v1/user/storage/files/delete/ Bearer Delete stored files and reclaim storage

Shares

Method Path Auth Description
GET /api/v1/user/shares/ Bearer List the caller's share links
POST /api/v1/user/shares/ Bearer Create a share link for a file the caller owns
DELETE /api/v1/user/shares/{link_id}/ Bearer Revoke a share link
GET /api/v1/user/shares/public/{token}/ — Public share metadata, never returns the file itself
POST /api/v1/user/shares/public/{token}/download/ — Redeem a share link for a download URL

Billing

Method Path Auth Description
GET /api/v1/subscription/pricing_plan/ — Structured pricing plans
GET /api/v1/subscription/rate_card/ — Per-operation credit prices
GET /api/v1/subscription/credits/balance/ Bearer Credit balance
POST /api/v1/subscription/credits/promo-code/ Bearer Redeem a promo code for credits
GET /api/v1/subscription/purchase_history/ Bearer Purchase history
POST /api/v1/subscription/purchase_initiate/ Bearer Start a subscription purchase
POST /api/v1/subscription/purchase_initiate/pay-as-you-go/ Bearer Start a pay-as-you-go purchase
GET /api/v1/subscription/purchase_initiate/callback/ — Stripe checkout return callback
POST /api/v1/subscription/storage/initiate/ Bearer Start a Stripe checkout for storage add-ons
GET /api/v1/subscription/storage/callback/ — Stripe storage checkout return callback
POST /api/v1/subscription/tasks/task-completion/ Bearer Report task completion and deduct credits
GET /api/v1/subscription/tasks/task-history/ Bearer Recent task completion history

The two callback/ routes are Stripe redirect targets, not endpoints you call directly.

Webhooks

Method Path Auth Description
GET /api/v1/webhooks/ Bearer List the account's webhooks
POST /api/v1/webhooks/ Bearer Create a webhook, the raw secret is returned exactly once
GET /api/v1/webhooks/{webhook_id}/ Bearer Get one webhook
PATCH /api/v1/webhooks/{webhook_id}/ Bearer Update url / events / is_active / description
DELETE /api/v1/webhooks/{webhook_id}/ Bearer Delete a webhook and its delivery history
GET /api/v1/webhooks/{webhook_id}/deliveries/ Bearer Recent delivery attempts, newest first
POST /api/v1/webhooks/{webhook_id}/test/ Bearer Enqueue a test delivery

Notes

  • Send the trailing slash. Every path above ends in / except /api/v1/fonts/{conversion_id}/download/{filename}. Omitting it makes a GET cost an extra 301 round trip, and a POST without the slash fails, send the exact path.
  • Legacy aliases. The image, video and 3D routes are also served under /api/v1/image_converter/, /api/v1/video_converter/ and /api/v1/model/. Those are legacy prefixes kept for older clients, use the /api/v1/convert/{image|video|model}/ forms above in new code.
  • Not listed here: internal, admin and self-test routes are outside the public surface and are not part of the API contract. This page covers the 101 public operations only.
  • Machine-readable schema. The same surface is published as OpenAPI at /api/v1/openapi.json on any running instance; the official SDKs are generated from it.