Our PDF Rotate API allows you to rotate pages in PDF files by specified angles through a simple REST endpoint. Whether you're fixing upside down scanned documents, changing page orientation for a single page, or rotating entire reports by 90 degrees, our API handles it all while maintaining the original quality. Rotate all pages at once, target specific pages, or use keywords like “even” and “odd” for flexible rotation operations. Solving how to rotate PDF files within your application workflow is now a single API call away.
Perfect for document scanning systems, automated report processors, content management platforms, and digital archiving solutions. Fix incorrectly scanned documents, standardize page orientation across multi-page files, correct upside down pages in bulk uploads, or rotate specific sections of technical manuals. With asynchronous request processing and webhook support, you can seamlessly integrate PDF rotation into your automation pipelines.
If you don't want to poll for task status, you can simply provide the webhook data in your request. Instead of manually checking status, we will automatically notify your endpoint the moment the task processing is completed.
destroy parameter, your files are permanently wiped from our servers immediately after processing finishes, ensuring complete data security. If destroy is not set, files are retained up to 30 days based on user's plan.Rotate PDF pages by 90, 180, or 270 degrees in either direction. The API supports rotation in multiples of 90 degrees (0, 90, 180, 270, -90, -180, -270) giving you complete control over page orientation. Fix upside down PDFs or adjust landscape to portrait with precision.
Rotate specific pages using individual page numbers, ranges, or special keywords. Target pages like "1,5,10", rotate ranges like "3-7", or use "even", "odd", and "all" keywords to rotate pages instantly based on patterns.
We keep your original document's quality. All things like fonts, pictures, and vector graphics, and the look do not change from original file. No compressing, downgrading, and you do not lose quality.
Handle heavy documents and high-resolution assets with ease. Our API supports a massive 1GB payload size per request, allowing you to process even the largest PDF files without worrying about size restrictions.
$ pip install requests
File uploads must use multipart/form-data format. PDF API accepts a single file upload.
| Parameter | Required | Type | Default | Description |
|---|---|---|---|---|
| file | No | multipart/form-data | - | The PDF file to process. Only used if you're uploading a file instead of using file_id. |
Input Priority Rule:
If both file and file_id are provided, the multipart file upload takes priority and file_id is ignored.
All parameters must be included as query parameters. Any parameters sent in the form data will be ignored.
| Parameter | Required | Type | Default | Description |
|---|---|---|---|---|
| rotate | Yes | Integer | - | Angle to rotate the selected pages. Must be one of: 0, 90, 180, 270, -90, -180, -270. |
| file_id | No | String | - | The unique ID of a file already present on our server. Use this instead of uploading the file again. |
| output | No | String | rotated_pdf | Name of the output PDF (without extension). |
| destroy | No | Boolean | false | If true, we delete the input file immediately after generating the output. |
| pages | No | String | all | Specify the pages to rotate from the PDF. You can provide individual page numbers and/or ascending page ranges in any order (e.g., 1, 3-5, 7). Use commas ( , ) to separate entries and hyphens ( - ) for ranges. Special keywords: • even – rotates all even-numbered pages • odd – rotates all odd-numbered pages • all – rotates all pages • last – represents the last page (e.g., 5-last, 10 or 1,last) and used with a page/range Examples: ✓ "1,4-2,last" ✓ "odd" ✓ "all" ✗ "1,odd" (invalid) Note: Only "last" is allowed to be used with pages/ranges. Other keywords are passed on their own. |
| Parameter | Required | Type | Default | Description |
|---|---|---|---|---|
| webhook_url | No | String | - | The URL where we'll send the webhook notification after the task completes. Authentication parameters in the URL (e.g., ?auth=token123) are passed as-is. |
| webhook_failure_notification | No | Boolean | false | If true, we'll send an email notification if the webhook request fails after 3 retries. The email goes to the requesting user or their org admin if user is part of an organization. |
| Header | Required | Type | Default | Description |
|---|---|---|---|---|
| X-Webhook-Authorization | No | String | - | Custom authorization header sent with the webhook request. Format: Key:Value (e.g., Authorization:Bearer token123). |
Explore detailed response fields including field names, data types, requirements, and descriptions in the interactive Response Table below. For complete response documentation click here.
Use these endpoints to manage files and check task status.
task_id. The response includes creation and expiry timestamps to help you track result availability, along with specific error details if a task fails. Results are retained for up to 7 days, depending on the operation.file_id. Returns details including file name, size, type, and creation/deletion timestamps. Generated or uploaded files are retained up to 30 days based on user's plan, unless destroy is enabled to delete them immediately. You can use this endpoint to check if the file has expired using its file_id.multipart/form-data request. Each file receives a unique file_id that can be used with the PDF APIs.file_id for uses with the PDF APIs.| HTTP Status | Reasons |
|---|---|
| 400 | Invalid PDF File: Please provide a valid PDF file. We don't support other types. |
| 400 | Missing File or ID: You must provide either a file or a file ID. |
| 400 | Invalid Parameter: The value for 'param_name' is invalid. |
| 404 | File ID Not Found: Please provide a valid file ID. |
| 500 | File Saving Exception: An unknown error occurred while saving. Try again later. |
| 500 | Internal Server Error: Internal Server Error Occurred. |
| 400 | Invalid Rotation Angle: Please provide a valid rotation angle. Refer to the documentation for valid rotation angles. |
These errors might appear in the task-status response if the background job fails.
| Error | Description |
|---|---|
Invalid PDF File | The provided file is not a valid PDF file. |
File Saving Exception | An unknown error occurred while saving the file. Try again later. |
PDF Generation Exception | An unknown error occurred while generating the PDF. Try again later. |
Internal Server Error | Internal Server Error Occurred. |
Encrypted PDF Provided | The provided PDF file is encrypted. Please decrypt it first to perform operations. |
Invalid Page Number Format | The page number format is invalid. Refer to the documentation for valid formats. |
Rotate pages in your PDF by uploading a file directly (multipart upload) or referencing a file_id of a stored file. Specify the rotation angle and which pages to rotate using page numbers, ranges, or keywords.
# Standard Response { "taskId": "04a06cd5-158d-4191-a45b-6f58249c599d", "inputIds": [ "7a9e4b12-f3c8-4d56-b7e1-8c2f9d0a3e6f" ] } # Response with destroy=true (No File IDs as they are deleted right away) { "taskId": "04a06cd5-158d-4191-a45b-6f58249c599d" }curl -X 'POST' \ 'https://api.apifreaks.com/v1.0/pdf/rotate?rotate=90&pages=1-5&output=rotated_pdf' \ -H 'X-apiKey: YOUR_API_KEY' \ -F 'file=@/path/to/document.pdf'
Notes:
rotate parameter is required and must be one of: 0, 90, 180, 270, -90, -180, -270destroy=true parameter to delete input file after rotation completes (returns only taskId)After submitting a rotation task, check its progress using the Task Status API with your taskId. The task goes through these statuses: queued, processing, completed, and failed.
# Response (completed) { "taskId": "04a06cd5-158d-4191-a45b-6f58249c599d", "status": "completed", "outputFileId": "9b2e7f3a-5c8d-4e1b-a6f9-0d3c8e7b2a5f", "outputFileName": "processed_document.pdf", "createdAt": "2025-01-26 10:30:00", "expiresAt": "2025-01-27 10:30:00" } # Response (failed) { "taskId": "04a06cd5-158d-4191-a45b-6f58249c599d", "status": "failed", "error": "Invalid PDF File", "message": "The provided file is not a valid PDF file.", "createdAt": "2025-01-26 10:30:00" }curl -X GET "https://api.apifreaks.com/v1.0/pdf/task-status?taskId=04a06cd5-158d-4191-a45b-6f58249c599d" \ -H "X-apikey: YOUR_API_KEY"
Once the task status shows “completed”, download your rotated PDF using the File Download API with the outputFileId from the task status response.
curl -X GET "https://api.apifreaks.com/v1.0/pdf/download?fileId=9b2e7f3a-5c8d-4e1b-a6f9-0d3c8e7b2a5f" \ -H "X-apikey: YOUR_API_KEY" \ --output output.pdf
Get automatic notifications when your task completes instead of polling the task status endpoint. Good for event-driven applications and real-time document processing.
Add webhook_url to your request. We'll send a POST request to this URL when the task finishes (either completed or failed).
Example Request:
# Response { "taskId": "04a06cd5-158d-4191-a45b-6f58249c599d", "inputIds": [ "566dc743-d8fe-4943-8cef-61e5d3d6096c" ] }curl -X 'POST' \ 'https://api.apifreaks.com/v1.0/pdf/rotate?rotate=90&pages=1-5&webhook_url=https://yourdomain.com/webhook/pdf-rotate&webhook_failure_notification=true' \ -H 'X-apiKey: YOUR_API_KEY' \ -F 'file=@/path/to/document.pdf'
Webhook delivery will be attempted up to 3 times. If all retries fail and webhook_failure_notification is enabled, we'll send an email notification to the requesting user or their organization admin.
Use X-Webhook-Authorization to add a custom header to webhook requests for endpoint security.
Format: Key:Value
Example: If you send Authorization:Bearer token123, the webhook request will include: Authorization: Bearer token123
Example with custom authorization:
curl -X 'POST' \ 'https://api.apifreaks.com/v1.0/pdf/rotate?webhook_url=https://yourdomain.com/webhook/pdf-rotate&webhook_failure_notification=true' \ -H 'X-apiKey: YOUR_API_KEY' \ -H 'X-Webhook-Authorization: Authorization:Bearer token123' \ -F 'file=@/path/to/document.pdf'
When your task completes, we send a POST request to your webhook_url with these headers:
| Header | Description | Example |
|---|---|---|
Content-Type | Always application/json | application/json |
X-Signature | HMAC-SHA256 signature of the request body using your API key. Use this to verify the payload is authentic. | 4a7d1ed414474e4033ac29ccb8653d9b |
| Custom Header | (If provided) Your custom header from X-Webhook-Authorization | Authorization: Bearer token123 |
The webhook payload contains the same response structure as the Task Status API endpoint when checked for the task ID. For a comprehensive view of the webhook response structure and detailed field descriptions, explore the interactive Response Table.
Use the X-Signature header to verify webhook requests actually came from API Freaks and weren't tampered with.
How the signature works:
X-Signature header valueTo verify the webhook:
X-Signature header valueImportant: Don't transform or process the raw request body before verification. Adding whitespace or other formatting creates a different signature and verification will fail.
To use the PDF Rotate API, API credits are required. Charges apply only for successful queries, defined by a 2xx status code. If a request results in a 4xx or 5xx status code, no credits will be deducted, and any credits already charged will be refunded.
For each successful request, 200 credit will be charged. 1 extra credit will be charged per MB beyond 50 MB.
Utilize the Credits Usage API to efficiently monitor your recent consumption of both one-off and subscription credits. This API provides a streamlined way to track and manage your credit usage, ensuring you stay informed about your remaining balance and can optimize your resource allocation effectively.