Publishing note: Use this page as a draft for API plans, private beta, or developer access. If the API is not publicly available yet, publish this page as "API private beta" or "API waitlist" instead of promising live access.
The EditMyPDF API is intended for developers who want to automate PDF editing, conversion, OCR, compression, metadata, split, merge, or AI-assisted document workflows inside their own applications.
This documentation is a product-ready draft. Update endpoint names, authentication, limits, pricing, and examples to match the production API before publishing.
API status
Current suggested status:
Private beta / by invitation
To request access, contact:
Include your company name, use case, expected monthly volume, file types, security requirements, preferred region, and whether you need a Data Processing Agreement.
Typical use cases
The API may be useful for:
- automated PDF conversion;
- OCR for scanned documents;
- AI-assisted rewriting or translation workflows;
- document cleanup;
- metadata removal;
- PDF compression;
- splitting and merging files;
- batch processing;
- internal business workflows;
- SaaS integrations;
- document intake pipelines.
Base URL
Example base URL:
https://api.editmypdf.ai/v1
Replace this before publishing if your production API uses a different host or path.
Authentication
API requests should use bearer-token authentication:
Authorization: Bearer YOUR_API_KEY
Do not expose API keys in browser-side code. Store keys on your server and rotate them if you suspect they have been compromised.
Content type
JSON endpoints should use:
Content-Type: application/json
File upload endpoints may use pre-signed upload URLs or multipart upload, depending on implementation.
Suggested workflow
A standard API workflow can be designed like this:
- Create an upload.
- Upload the source file.
- Create a processing job.
- Poll the job status or receive a webhook.
- Download the result.
- Delete the source file or let retention rules expire it.
Create an upload
POST /files
Example request:
{ "filename": "contract.pdf", "content_type": "application/pdf", "size_bytes": 2489312 }
Example response:
{ "file_id": "file_abc123", "upload_url": "https://example-upload-url", "expires_at": "2026-07-07T12:30:00Z" }
Upload the file
Upload the file to the returned upload URL using the method required by your implementation.
Example:
curl -X PUT "UPLOAD_URL" \ -H "Content-Type: application/pdf" \ --data-binary @contract.pdf
Create an AI edit job
POST /jobs/ai-edit
Example request:
{ "file_id": "file_abc123", "instruction": "Rewrite the first paragraph to sound more professional while keeping the same meaning.", "output_format": "pdf" }
Example response:
{ "job_id": "job_abc123", "status": "queued" }
Create an OCR job
POST /jobs/ocr
Example request:
{ "file_id": "file_abc123", "languages": ["eng", "fra"], "output_format": "searchable_pdf" }
Create a conversion job
POST /jobs/convert
Example request:
{ "file_id": "file_abc123", "target_format": "docx" }
Supported target formats may include pdf, docx, txt, html, jpg, png, or others depending on the production route.
Create a compression job
POST /jobs/compress
Example request:
{ "file_id": "file_abc123", "quality": "balanced" }
Suggested quality values:
| Value | Description |
|---|---|
high | Smaller reduction, better visual quality |
balanced | General-purpose compression |
maximum | Stronger compression, higher risk of visible quality loss |
Create a metadata job
POST /jobs/metadata
Example request:
{ "file_id": "file_abc123", "action": "remove" }
Check job status
GET /jobs/{job_id}
Example response:
{ "job_id": "job_abc123", "status": "succeeded", "created_at": "2026-07-07T12:00:00Z", "completed_at": "2026-07-07T12:01:30Z", "result_file_id": "file_result_abc123" }
Suggested job statuses:
| Status | Meaning |
|---|---|
queued | Job accepted and waiting to start |
running | Job is being processed |
succeeded | Job completed successfully |
failed | Job failed |
cancelled | Job was cancelled |
expired | Job or result is no longer available |
Download result
GET /files/{file_id}/download
Example response:
{ "download_url": "https://example-download-url", "expires_at": "2026-07-07T13:00:00Z" }
Delete a file
DELETE /files/{file_id}
Example response:
{ "file_id": "file_abc123", "deleted": true }
Webhooks
For asynchronous processing, webhooks can notify your server when a job changes state.
Suggested event types:
| Event | Description |
|---|---|
job.queued | Job was accepted |
job.running | Job started processing |
job.succeeded | Job completed successfully |
job.failed | Job failed |
job.cancelled | Job was cancelled |
file.expired | A file or output is no longer available |
Example webhook payload:
{ "event": "job.succeeded", "job_id": "job_abc123", "result_file_id": "file_result_abc123", "created_at": "2026-07-07T12:01:31Z" }
Verify webhook signatures before trusting webhook payloads.
Error format
Suggested error response:
{ "error": { "code": "file_too_large", "message": "The uploaded file exceeds the limit for this plan.", "request_id": "req_abc123" } }
Common error codes:
| Code | Meaning |
|---|---|
unauthorized | Missing or invalid API key |
forbidden | API key does not have access to this action |
file_too_large | File exceeds plan or endpoint limit |
unsupported_file_type | File type is not supported by the selected endpoint |
invalid_instruction | AI edit instruction is missing or invalid |
rate_limited | Too many requests |
job_failed | Processing failed |
expired | File, upload, or result expired |
Rate limits
Suggested placeholders before launch:
| Plan | Requests per minute | Concurrent jobs | Max file size |
|---|---|---|---|
| Private beta | To be confirmed | To be confirmed | To be confirmed |
| Business | To be confirmed | To be confirmed | To be confirmed |
| Enterprise | Custom | Custom | Custom |
Retention and deletion
API files and outputs should follow the same general retention philosophy as the main product unless a separate enterprise agreement says otherwise.
Suggested default alignment:
- temporary upload URLs expire quickly;
- submitted run content is retained for a limited window after terminal state;
- minimal metadata may be retained for reliability, abuse prevention, finance reconciliation, and debugging;
- billing and legal records may have longer retention where required by law;
- customers can request earlier deletion where supported.
EditMyPDF should not be used as the only archive or backup of customer documents.
Responsible API use
Do not use the API to create fake, fraudulent, deceptive, or unlawful documents. Do not use it to falsify official, financial, academic, employment, identity, government, medical, insurance, tax, legal, or evidentiary records.
Customers are responsible for:
- having the right to process uploaded files;
- providing any required notices or consents;
- reviewing outputs before relying on them;
- complying with privacy, security, intellectual property, and sector-specific rules;
- preventing end-user misuse in their own products.
Security requirements for API users
API users should:
- keep API keys secret;
- use server-side calls only;
- rotate keys periodically;
- validate webhook signatures;
- avoid logging sensitive document content;
- process only the files necessary for the task;
- delete files when no longer needed;
- monitor for abuse in their own application;
- contact EditMyPDF if credentials are compromised.
Example cURL request
curl -X POST "https://api.editmypdf.ai/v1/jobs/ai-edit" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "file_id": "file_abc123", "instruction": "Translate page 1 into French and keep the layout readable.", "output_format": "pdf" }'
Example Python request
import requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://api.editmypdf.ai/v1" response = requests.post( f"{BASE_URL}/jobs/ai-edit", headers={ "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", }, json={ "file_id": "file_abc123", "instruction": "Rewrite the introduction in a more professional tone.", "output_format": "pdf", }, timeout=60, ) response.raise_for_status() print(response.json())
Request access
To request API access, contact:
Include:
- company name;
- website;
- intended use case;
- expected monthly volume;
- file types and average file size;
- security and DPA requirements;
- preferred processing region;
- whether you need webhooks, batch processing, or custom limits.
FAQ
Is the EditMyPDF API public?
This page is written as private-beta or draft API documentation. If public API access is not yet available, publish it as an API waitlist or private-beta page.
Can I use the API from browser JavaScript?
Do not expose API keys in browser-side code. API keys should be stored and used on your server.
Does the API keep files forever?
No. API retention should follow the same limited-retention philosophy as the main product unless a separate enterprise agreement says otherwise.
Can the API be used for automated document fraud?
No. Fraudulent, deceptive, or unlawful document editing is prohibited.