Your files stay private and are automatically deleted after 24 hours. Learn more
Mobile API v1

Every PDF tool,
ready for Flutter.

Secure email and Google login, rotating 60-day sessions, file processing, document history and self-hosted AI through one consistent JSON API.

GET STARTED

Quickstart

The Flutter app logs in once, stores tokens in Keychain/Keystore, uploads a file, processes it, then downloads the result with the same Bearer access token.

1AuthenticateReceive access + refresh tokens
2Upload & processUse any catalog tool
3DownloadBearer-protected output
Base URLhttps://pdf.techicomm.com/api/v1Production accepts HTTPS only.
AUTHENTICATION

Login and token refresh

Raw tokens are displayed only in the response and stored as SHA-256 hashes on the server. Put them in flutter_secure_storage, never SharedPreferences.

Login
curl -X POST "https://pdf.techicomm.com/api/v1/auth/login.php" \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"StrongPass1","device_name":"Flutter app"}'
Auth response
{
  "status": true,
  "message": "",
  "data": {
    "user": {"id": 42, "name": "PDFPrime User", "plan": "free"},
    "auth": {
      "access_token": "pdfm_at_...",
      "expires_in": 900,
      "refresh_token": "pdfm_rt_...",
      "refresh_expires_in": 5184000
    }
  }
}
PROCESSING

One workflow for every file tool

Upload
POST /jobs/upload.php
Authorization: Bearer ACCESS_TOKEN
Content-Type: multipart/form-data

tool=compress
files[]=@document.pdf
Process
POST /jobs/process.php
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json

{"job_id":"32_character_job_id","options":{"compression_level":"recommended"}}

Use GET /jobs/status.php?id=JOB_ID for status and GET /jobs/download.php?id=JOB_ID for the private output.

REFERENCE

Available endpoints

MethodEndpointPurpose
POST/auth/register.php

Create account and tokens

POST/auth/login.php

Email/password login

POST/auth/firebase.php

Google/Firebase login

POST/auth/refresh.php

Rotate token pair

POST/auth/logout.php

Revoke mobile session

GET/user/profile.php

Profile and plan limits

GET/user/jobs.php

Document history

GET/tools/index.php

Tool catalog and option schemas

POST/jobs/upload.php

Secure multipart upload

POST/jobs/process.php

Process an uploaded job

GET/jobs/status.php

Check job status

GET/jobs/download.php

Download protected output

POST/ai/generate.php

Generate AI text

CAPABILITIES

30 file-processing APIs

Call /tools/index.php to obtain live extensions, file-count rules and option schemas.

Merge PDFmerge
Split PDFsplit
Compress PDFcompress
PDF to JPGpdf-to-jpg
JPG to PDFjpg-to-pdf
Word to PDFword-to-pdf
Excel to PDFexcel-to-pdf
PowerPoint to PDFppt-to-pdf
Rotate PDFrotate
Watermark PDFwatermark
Protect PDFprotect
Unlock PDFunlock
Extract PDF Pagesextract-pages
Delete PDF Pagesdelete-pages
Reorder PDF Pagesreorder-pages
Compress JPGcompress-jpg
Compress PNGcompress-png
Resize Imageresize-image
Crop Imagecrop-image
Image Converterconvert-image
WEBP to JPGwebp-to-jpg
PNG to WEBPpng-to-webp
WEBP to PNGwebp-to-png
AVIF to JPGavif-to-jpg
PNG to AVIFpng-to-avif
AVIF to PNGavif-to-png
Image to Base64image-to-base64
Image to Textimage-to-text
Remove Backgroundremove-background
Change Backgroundchange-background
RESPONSES

Consistent responses

Every JSON endpoint returns only status, message and data at the top level. List endpoints return the array directly in data.

Validation error
{
  "status": false,
  "message": "Please check the supplied fields.",
  "data": {
    "code": "validation_failed",
    "request_id": "b347...",
    "fields": {"email": "Enter a valid email address."}
  }
}
401token_expiredRefresh once, save the new pair and retry.
404job_not_foundThe job is missing, expired or belongs to another user.
422processing_failedThe file or tool options could not be processed.
429rate_limitedWait for the Retry-After interval.
Demo action completed.