{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#413-content-too-large",
"title": "Content too large",
"status": 413,
"detail": "Uploaded document exceeds the file size limit",
"instance": "/platform/transformations"
}
{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#422-unprocessable-entity",
"title": "Unprocessable Entity",
"status": 422,
"detail": "The request was well-formed but could not be processed",
"instance": "/platform/transformations"
}
{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#413-content-too-large",
"title": "Content too large",
"status": 413,
"detail": "Uploaded document exceeds the file size limit",
"instance": "/platform/transformations"
}
{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#422-unprocessable-entity",
"title": "Unprocessable Entity",
"status": 422,
"detail": "The request was well-formed but could not be processed",
"instance": "/platform/transformations"
}
The Rotate method of the Transformations endpoint lets you rotate one or more pages in a PDF.
You provide a rotation array containing page indexes and their corresponding rotation angles.Rotation is limited to 90-degree increments (90, 180, 270). Pages can only be rotated to standard vertical or horizontal orientations. Intermediate angles are not supported.
Rotation Examples
Upright
0 or 360 degrees
Turned Right
90 degrees
Inverted
180 or -180 degrees
Turned Left
270 or -90 degrees
Out-of-range indices in the PDF file are ignored
Output File Format
The endpoint can return output either as JSON or as a binary file. The format depends on the Accept header (details below), which defaults to application/json.
Processing
When requesting JSON, you can run the operation synchronously or asynchronously. This is determined by the Prefer header (details below).
In sync mode, the response includes a URL pointing to the processed file.
In async mode, the request creates a Job, and the response contains the Job ID and status so you can track progress.
Binary (octet-stream) responses are only available for synchronous operations.
Custom File Delivery
The endpoint supports custom file-delivery destinations through the optional delivery parameter. You can provide an upload target, such as your own PUT endpoint or a pre-signed S3 URL, and Nitro will upload the resulting file there.
This works for both synchronous and asynchronous processing.
Sync delivery
In synchronous calls, the delivery parameter lets you direct Nitro to upload the output file to a custom URL endpoint or a pre-signed URL (e.g S3),
by providing an upload url in the uploadResultTo or uploadResultsTo properties.
Custom endpoint
If implementing the upload endpoint by yourself, make sure your code or middleware configuration accepts requests without content-type headers.
S3 delivery
If you are using S3 to manage delivery uploads, follow this AWS documentation to generate a pre-signed PUT URL.
If using the AWS provided Python script, omit the Content-Type in Params to get the pre-signed url. For example:
In asynchronous flows, you can also provide a custom URL or pre-signed S3 object via uploadResultTo or uploadResultsTo, to upload your file(s) once the Job is done processing.
Callback
For asynchronous processing, you can also include a callback URL within the delivery parameter. This callback is a POST endpoint that Nitro will call once the Job is created and running, providing details about the file-processing job.Example of Nitro’s callback request body:
This matrix shows the expected response behavior based on content type, sync/async mode, and custom file-delivery settings.
JSON (application/json)
Binary (application/octet-stream)
Synchronous
Returns a JSON object with a file(s) URL(s).
Returns the processed file directly as binary.
Asynchronous (respond-async)
Returns a JSON object with a Job ID and status.
Async preference ignored, returns sync binary.
Synchronous delivery
File delivered to custom endpoint / Bucket, returns success confirmation.
N/A
Asynchronous delivery
Returns a JSON object with a Job ID and status. The file(s) will be uploaded to the provided PUT endpoint / S3 Bucket at the end of process. If callback url is provided, Nitro will notify the endpoint with a JOB ID and location.
N/A
Limits
The Platform API has the following limits:
File size: Maximum of 100 MB per request for direct uploads and synchronous requests; asynchronous requests with remote-file (URL) input allow up to 300 MB. This applies to single-file and multi-file requests (multi-file requests are limited by their combined size). Some operations allow more — Merge accepts up to 1.5 GB for asynchronous remote-file input.
Page count: Maximum of 500 pages per individual document, or 2500 pages for asynchronous requests with remote-file (URL) input. This applies to single-file and multi-file requests. Multiple documents may exceed the page limit in total.
Retention time: Inputs and outputs are deleted approximately 15 minutes after the operation completes.
Request
Authorizations
Authorization
string
header
required
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Accept
enum<string>
default:*/*
Controls response format and behavior. See endpoint description above for detailed response combinations.
application/json: Returns JSON response with operation result
Controls synchronous vs asynchronous operation. See endpoint description above for behavior details.
respond-async: Makes request asynchronous, returns job status for polling
No value: Synchronous response
Available options:
respond-async
Body
multipart/form-data
method
enum<string>
default:rotate
required
The Transformations' endpoint method: rotate
Available options:
rotate
params
Rotate · object
required
Show child attributes
file
fileRemote file · object
required
The file to process. It can be provided as a binary upload or as a JSON remote file reference.
delivery
object
This endpoint lets you supply your own URL to receive the single-file output. The URL may point to a custom API endpoint or a pre-signed S3 URL.
The HTTP method defaults to PUT, but you can change it based on your implementation needs via the verb parameter. You can also provide custom headers, such as authentication headers or any others required by your endpoint.
Show child attributes
Response
Returns either JSON or binary output depending on the Accept header (defaults to JSON).
JSON responses include a file URL for synchronous tasks or a job status for asynchronous tasks.
Sync
Async - Job
result
Sync - Single File · object
Sync - Single File
Sync - Multiple Files
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Nitro APIs","colors":{"primary":"#D93706","light":"#FCAF9D","dark":"#D93706"},"logo":{"light":"https://www.gonitro.com/hubfs/Nitro_2025/logo-dark.svg","dark":"https://www.gonitro.com/hubfs/Nitro_2025/logo-light.svg","href":"https://www.gonitro.com/automate"},"favicon":"https://mintcdn.com/go-nitro/0xUomOly-LNhxK7b/favicon.ico?fit=max\u0026auto=format\u0026n=0xUomOly-LNhxK7b\u0026q=85\u0026s=646fb37e5970115d681bdd0d81ba8515","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required"}},"navbar":{"links":[{"icon":"newspaper","href":"https://www.gonitro.com/resources?type=developer_blog","label":"Blog"},{"icon":"headset","href":"https://help.gonitro.com/support","label":"Support"},{"icon":"arrow-right-to-bracket","href":"https://sso.gonitro.com/login","label":"Log In"}],"primary":{"type":"button","label":"Get API access","href":"https://sso.gonitro.com/platform-trial-signup"}},"footer":{"socials":{"instagram":"https://www.instagram.com/gonitro","youtube":"https://www.youtube.com/c/nitrosoftware","linkedin":"https://www.linkedin.com/company/go-nitro","facebook":"https://www.facebook.com/nitrosoftware"}},"seo":{"metatags":{"google-site-verification":"qdnOUtxzQiObiPkJRHptxlmvIVydZCoH1KBdB21IP8o"}},"fonts":{"heading":{"family":"DM Sans"},"body":{"family":"IBM Plex Sans"}},"integrations":{"gtm":{"tagId":"GTM-WVZNLW"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Home","icon":"house","href":"/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"go-nitro","hasAudioNarration":false,"actualSubdomain":"go-nitro","customDomains":["developers.gonitro.com"],"gitSource":{"type":"github","owner":"nitro","repo":"public-api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af5e069c24142980e6afaff","clientVersion":"0.0.4128","searchFilterCounts":[{"language":"default","tag":"API Reference","count":161},{"language":"default","tag":"Nitro PDF \u0026 Sign","count":103},{"language":"default","tag":"Nitro Sign Enterprise Verified","count":89},{"language":"default","tag":"NSEV WebPortal API","count":75},{"language":"default","tag":"Sign API","count":40},{"language":"default","tag":"PDF Services","count":37},{"language":"default","tag":"Packages","count":16},{"language":"default","tag":"Documents","count":14},{"language":"default","tag":"Transformations","count":13},{"language":"default","tag":"Guides","count":12}],"searchSettings":{"isFiltersEnabled":false}},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"html[data-current-path^=\"/nsev\"] a[href*=\"sso.gonitro.com\"],html[data-current-path^=\"/nsev\"] a[href*=\"contact-sales/early-access-automate\"]{display:none!important}"}],"page":{"pagePath":"api-reference/platform/transformations/rotate","slug":"/api-reference/platform/transformations/rotate","pageMetadata":{"title":"Rotate","description":"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.","sidebarTitle":"Rotate","summary":"Rotate pages in a PDF document","openapi":"rotate POST /transformations","href":"/api-reference/platform/transformations/rotate"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CodeBlock,Columns,Heading,Note,Table,Tip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`Rotate`}),` method of the Transformations endpoint lets you rotate one or more pages in a PDF.\nYou provide a rotation array containing page indexes and their corresponding rotation angles.`]}),`\n`,_jsx(_components.p,{children:`Rotation is limited to 90-degree increments (90, 180, 270). Pages can only be rotated to standard vertical or horizontal orientations. Intermediate angles are not supported.`}),`\n`,_jsx(Heading,{level:`3`,id:`rotation-examples`,children:`Rotation Examples`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsxs(Card,{title:`Upright`,children:[_jsx(_components.p,{children:`0 or 360 degrees`}),_jsx(`img`,{noZoom:true,style:{width:`180px`},src:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upright.png?fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=34f50a988fa94e4053144bd937ade5b0`,\"data-og-width\":`600`,width:`600`,\"data-og-height\":`600`,height:`600`,\"data-path\":`images/platform/nitro-upright.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upright.png?w=280\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=251a16fd51ba3db78feaa05b0143f2e2 280w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upright.png?w=560\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=ae61bfa07c243adb4ac61cfa309b88dd 560w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upright.png?w=840\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=e2bc29c0e92caeb18e8988ade36e3666 840w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upright.png?w=1100\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=9d8aaf3fd8b0060c23ca65dcb1496818 1100w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upright.png?w=1650\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=0e727730568dc6bc747b8d603cbabd3c 1650w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upright.png?w=2500\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=4e3bbf86dc949f98cb3d4ca2f26c5150 2500w`})]}),_jsxs(Card,{title:`Turned Right`,img:``,children:[_jsx(_components.p,{children:`90 degrees`}),_jsx(`img`,{noZoom:true,style:{width:`180px`},src:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-right.png?fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=3aaa1b526784f443b95423e91b7880da`,\"data-og-width\":`600`,width:`600`,\"data-og-height\":`600`,height:`600`,\"data-path\":`images/platform/nitro-right.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-right.png?w=280\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=eab3e365db46395eb59050fb8a5e59e5 280w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-right.png?w=560\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=41bad4eed27f1c584e0bb0382db64e9c 560w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-right.png?w=840\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=055230df1bff94d5a5c81ea80c659535 840w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-right.png?w=1100\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=99e09e13e0f4a13b9862e3f2b936ed38 1100w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-right.png?w=1650\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=ed65b0c7d0c53b97ad6aca407749fc12 1650w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-right.png?w=2500\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=d2eee97ead844284e6b0ea7acac89681 2500w`})]}),_jsxs(Card,{title:`Inverted`,img:``,children:[_jsx(_components.p,{children:`180 or -180 degrees`}),_jsx(`img`,{noZoom:true,style:{width:`180px`},src:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upsidedown.png?fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=07decd1237ad7fcc0631a991b08d3df3`,\"data-og-width\":`600`,width:`600`,\"data-og-height\":`600`,height:`600`,\"data-path\":`images/platform/nitro-upsidedown.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upsidedown.png?w=280\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=7eef35abb50e66683cda20708de5c5f7 280w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upsidedown.png?w=560\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=34d53e5da3f452957016c092db3aeb3e 560w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upsidedown.png?w=840\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=c8abc1b2177df0c72148a22e0a795c37 840w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upsidedown.png?w=1100\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=4b20493b8e0840129957a586ef2d9a1f 1100w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upsidedown.png?w=1650\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=f51e6032c73243ecfaae2c524a24fe1a 1650w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-upsidedown.png?w=2500\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=a8f0151a99e45c0f676cf75496bc8d96 2500w`})]}),_jsxs(Card,{title:`Turned Left`,img:``,children:[_jsx(_components.p,{children:`270 or -90 degrees`}),_jsx(`img`,{noZoom:true,style:{width:`180px`},src:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-left.png?fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=31d9307a33c0dbd1199b5ccbdef02483`,\"data-og-width\":`600`,width:`600`,\"data-og-height\":`600`,height:`600`,\"data-path\":`images/platform/nitro-left.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-left.png?w=280\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=c02979a81a7e9733490954b4818a11d7 280w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-left.png?w=560\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=ffbf54c366e2e52c488d6dfb4a49f2d9 560w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-left.png?w=840\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=98fe17c04fd1db6abc43f568b5e26179 840w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-left.png?w=1100\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=61d66052b4d3e49f9dd6a4f3ac9dafe9 1100w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-left.png?w=1650\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=4c7ab52f5c8df4443cdfcf528c73119e 1650w, https://mintcdn.com/go-nitro/_8ul0Mp0H1BT2NrV/images/platform/nitro-left.png?w=2500\u0026fit=max\u0026auto=format\u0026n=_8ul0Mp0H1BT2NrV\u0026q=85\u0026s=7f697a00d986515bcf998e7d19bcbbcc 2500w`})]})]}),`\n`,_jsx(Note,{children:`Out-of-range indices in the PDF file are ignored`}),`\n`,_jsx(Heading,{level:`3`,id:`output-file-format`,children:`Output File Format`}),`\n`,_jsxs(_components.p,{children:[`The endpoint can return output either as JSON or as a binary file. The format depends on the `,_jsx(_components.code,{children:`Accept`}),` header (details below), which defaults to application/json.`]}),`\n`,_jsx(Heading,{level:`3`,id:`processing`,children:`Processing`}),`\n`,_jsxs(_components.p,{children:[`When requesting JSON, you can run the operation synchronously or asynchronously. This is determined by the `,_jsx(_components.code,{children:`Prefer`}),` header (details below).`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`In sync mode, the response includes a URL pointing to the processed file.`}),`\n`,_jsx(_components.li,{children:`In async mode, the request creates a Job, and the response contains the Job ID and status so you can track progress.`}),`\n`]}),`\n`,_jsx(Note,{children:`Binary (octet-stream) responses are only available for synchronous operations.`}),`\n`,_jsx(Heading,{level:`3`,id:`custom-file-delivery`,children:`Custom File Delivery`}),`\n`,_jsx(_components.p,{children:`The endpoint supports custom file-delivery destinations through the optional delivery parameter. You can provide an upload target, such as your own PUT endpoint or a pre-signed S3 URL, and Nitro will upload the resulting file there.\nThis works for both synchronous and asynchronous processing.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(Heading,{level:`3`,id:`sync-delivery`,children:`Sync delivery`}),`\n`,_jsxs(_components.p,{children:[`In synchronous calls, the `,_jsx(_components.a,{href:`#body-delivery`,children:`delivery`}),` parameter lets you direct Nitro to upload the output file to a custom URL endpoint or a pre-signed URL (e.g S3),\nby providing an upload url in the `,_jsx(_components.code,{children:`uploadResultTo`}),` or `,_jsx(_components.code,{children:`uploadResultsTo`}),` properties.`]}),`\n`,_jsx(Heading,{level:`4`,id:`custom-endpoint`,children:`Custom endpoint`}),`\n`,_jsx(Tip,{children:`If implementing the upload endpoint by yourself, make sure your code or middleware configuration accepts requests without content-type headers.`}),`\n`,_jsx(Heading,{level:`4`,id:`s3-delivery`,children:`S3 delivery`}),`\n`,_jsxs(_components.p,{children:[`If you are using S3 to manage delivery uploads, follow this `,_jsx(_components.a,{href:`https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html`,children:`AWS documentation`}),` to generate a pre-signed PUT URL.\n`,_jsxs(Tip,{children:[`If using the AWS provided Python script, omit the `,_jsx(_components.code,{children:`Content-Type`}),` in Params to get the pre-signed url. For example:`]})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` url `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` generate_presigned_url(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` s3_client,`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"put_object\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Bucket\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: args.bucket, `})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Key\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: args.key,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Content-Type: \"application/octet-stream\" => Omit!`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(Heading,{level:`3`,id:`async-delivery`,children:`Async delivery`}),`\n`,_jsxs(_components.p,{children:[`In asynchronous flows, you can also provide a custom URL or pre-signed S3 object via `,_jsx(_components.code,{children:`uploadResultTo`}),` or `,_jsx(_components.code,{children:`uploadResultsTo`}),`, to upload your file(s) once the Job is done processing.`]}),`\n`,_jsx(Heading,{level:`4`,id:`callback`,children:`Callback`}),`\n`,_jsxs(_components.p,{children:[`For asynchronous processing, you can also include a `,_jsx(_components.a,{href:`#body-delivery-callback`,children:`callback`}),` URL within the delivery parameter. This callback is a POST endpoint that Nitro will call once the Job is created and running, providing details about the file-processing job.`]}),`\n`,_jsx(_components.p,{children:`Example of Nitro’s callback request body:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"jobID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"babe2aa7-9b5d-4eb2-a679-5fc12cf0a490\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"location\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.gonitro.dev/jobs/babe2aa7-9b5d-4eb2-a679-5fc12cf0a490\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`response-behavior-matrix`,children:`Response behavior Matrix`}),`\n`,_jsx(_components.p,{children:`This matrix shows the expected response behavior based on content type, sync/async mode, and custom file-delivery settings.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:_jsxs(_components.strong,{children:[`JSON (`,_jsx(_components.code,{children:`application/json`}),`)`]})}),_jsx(_components.th,{children:_jsxs(_components.strong,{children:[`Binary (`,_jsx(_components.code,{children:`application/octet-stream`}),`)`]})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Synchronous`})}),_jsx(_components.td,{children:`Returns a JSON object with a file(s) URL(s).`}),_jsx(_components.td,{children:`Returns the processed file directly as binary.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsxs(_components.strong,{children:[`Asynchronous (`,_jsx(_components.code,{children:`respond-async`}),`)`]})}),_jsx(_components.td,{children:`Returns a JSON object with a Job ID and status.`}),_jsx(_components.td,{children:`Async preference ignored, returns sync binary.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Synchronous delivery`})}),_jsx(_components.td,{children:`File delivered to custom endpoint / Bucket, returns success confirmation.`}),_jsx(_components.td,{children:`N/A`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Asynchronous delivery`})}),_jsxs(_components.td,{children:[`Returns a JSON object with a Job ID and status. The file(s) will be uploaded to the provided PUT endpoint / S3 Bucket at the end of process. If `,_jsx(_components.code,{children:`callback`}),` url is provided, Nitro will notify the endpoint with a JOB ID and location.`]}),_jsx(_components.td,{children:`N/A`})]})]})]}),`\n`,_jsx(Heading,{level:`4`,id:`limits`,children:`Limits`}),`\n`,_jsx(_components.p,{children:`The Platform API has the following limits:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`File size: Maximum of 100 MB per request for direct uploads and synchronous requests; asynchronous requests with remote-file (URL) input allow up to 300 MB. This applies to single-file and multi-file requests (multi-file requests are limited by their combined size). Some operations allow more — Merge accepts up to 1.5 GB for asynchronous remote-file input.`}),`\n`,_jsx(_components.li,{children:`Page count: Maximum of 500 pages per individual document, or 2500 pages for asynchronous requests with remote-file (URL) input. This applies to single-file and multi-file requests. Multiple documents may exceed the page limit in total.`}),`\n`,_jsx(_components.li,{children:`Retention time: Inputs and outputs are deleted approximately 15 minutes after the operation completes.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`request`,children:`Request`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Rotate","description":"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.","sidebarTitle":"Rotate","summary":"Rotate pages in a PDF document","openapi":"rotate POST /transformations","href":"/api-reference/platform/transformations/rotate"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Rotation Examples","slug":"rotation-examples","depth":3,"children":[]},{"title":"Output File Format","slug":"output-file-format","depth":3,"children":[]},{"title":"Processing","slug":"processing","depth":3,"children":[]},{"title":"Custom File Delivery","slug":"custom-file-delivery","depth":3,"children":[]},{"title":"Sync delivery","slug":"sync-delivery","depth":3,"children":[]},{"title":"Custom endpoint","slug":"custom-endpoint","depth":4,"children":[]},{"title":"S3 delivery","slug":"s3-delivery","depth":4,"children":[]},{"title":"Async delivery","slug":"async-delivery","depth":3,"children":[]},{"title":"Callback","slug":"callback","depth":4,"children":[]},{"title":"Response behavior Matrix","slug":"response-behavior-matrix","depth":4,"children":[]},{"title":"Limits","slug":"limits","depth":4,"children":[]},{"title":"Request","slug":"request","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Transformations"],"summary":"Rotate PDF","description":"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.","parameters":["d7631441-29ea-4c10-b9ae-66f792e9561a","8826d9d9-8976-484f-9f24-565fe720fe4b"],"requestBody":"2ff6feab-1c59-45f5-8308-87be5f0b42de","responses":{"200":"610bed9d-a97a-4d8d-a4b7-9193f51bf437","400":"1bcf352a-dfe4-4378-af95-9ff888266510","401":"199bbda3-b102-4d54-925c-0cbf57134119","404":"ca0fc127-7b65-4950-8e9f-55293bbc2560","413":"803ceae0-cdb1-4415-aa9c-a5de212d1b86","422":"cea7a6a5-df00-406b-a430-3520b4c4c2e5","500":"d6722e4d-b3ab-459d-af7d-1735b9267373"},"security":["94c7da16-0b07-416e-8404-fe5c0c5ff7ca"],"method":"post","type":"path","servers":["4c2f95b9-e399-4990-bbdb-da130336d9a4","4d5bff0e-51ff-4678-84e2-1c0c3887a53c","b9791ebe-2946-4bf4-8f5a-29dca26c3c37"],"path":"/transformations","baseUrlOptions":["https://api.gonitro.dev","https://api.us.gonitro.dev","https://api.au.gonitro.dev"],"title":"Rotate PDF","codeSamples":[],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"d7631441-29ea-4c10-b9ae-66f792e9561a":{"name":"Accept","in":"header","schema":{"type":"string","enum":["application/json","application/octet-stream","*/*"],"default":"*/*","description":"Controls response format and behavior. See endpoint description above for detailed response combinations.\n- `application/json`: Returns JSON response with operation result\n- `application/octet-stream`: Returns binary file content \n- `*/*`: Defaults to JSON response","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"8826d9d9-8976-484f-9f24-565fe720fe4b":{"name":"Prefer","in":"header","schema":{"type":"string","enum":["respond-async"],"description":"Controls synchronous vs asynchronous operation. See endpoint description above for behavior details.\n- `respond-async`: Makes request asynchronous, returns job status for polling\n- No value: Synchronous response","uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"method":{"type":"string","description":"The Transformations' endpoint method: `rotate`","default":"rotate","enum":["rotate"],"isRequired":true,"uniqueKey":"method","typeLabel":"enum\u003cstring>"},"params":{"title":"Rotate","type":"object","properties":{"rotations":{"type":"array","items":{"type":"object","properties":{"page_index":{"type":"integer","description":"Page index to rotate (0-based)","isRequired":true,"uniqueKey":"params.rotations.items.[INDEX].page_index","typeLabel":"integer"},"amount":{"type":"integer","enum":[-270,-180,-90,0,90,180,270,360],"description":"Rotation amount in degrees","isRequired":true,"uniqueKey":"params.rotations.items.[INDEX].amount","typeLabel":"enum\u003cinteger>"}},"required":["page_index","amount"],"uniqueKey":"params.rotations.items.[INDEX]","typeLabel":"object"},"description":"Array of page rotations to apply","example":[{"page_index":0,"amount":90}],"isRequired":true,"uniqueKey":"params.rotations","typeLabel":"object[]"}},"required":["rotations"],"isRequired":true,"uniqueKey":"params","typeLabel":"Rotate · object"},"file":{"oneOf":[{"type":"string","description":"The file to process. It can be provided as a binary upload or as a JSON remote file reference. \n\n","format":"binary","isRequired":true,"uniqueKey":"file.oneOf.0","typeLabel":"file"},{"type":"object","title":"Remote file","description":"The file to process. It can be provided as a binary upload or as a JSON remote file reference. \n\n","required":["URL","contentType"],"properties":{"URL":{"type":"string","format":"uri","description":"URL of the remote file to process","isRequired":true,"uniqueKey":"file.oneOf.1.URL","typeLabel":"string\u003curi>"},"contentType":{"type":"string","description":"The MIME type of the remote file","example":"application/pdf","isRequired":true,"uniqueKey":"file.oneOf.1.contentType","typeLabel":"string"}},"isRequired":true,"uniqueKey":"file.oneOf.1","typeLabel":"Remote file · object"}],"isRequired":true,"uniqueKey":"file","typeLabel":"file | Remote file · object"},"delivery":{"type":"object","properties":{"uploadResultTo":{"type":"object","properties":{"URL":{"type":"string","description":"Your delivery endpoint URL","nullable":false,"format":"uri","isRequired":true,"uniqueKey":"delivery.uploadResultTo.URL","typeLabel":"string\u003curi>"},"verb":{"type":"string","description":"The HTTP method","default":"PUT","enum":["GET","POST","PUT","DELETE","PATCH"],"isRequired":true,"uniqueKey":"delivery.uploadResultTo.verb","typeLabel":"enum\u003cstring>"},"headers":{"oneOf":[{"type":"array","description":"Headers your file delivery endpoint might need (Optional)","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"delivery.uploadResultTo.headers.oneOf.0.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"delivery.uploadResultTo.headers.oneOf.0.items.[INDEX].value","typeLabel":"string"}},"required":["name","value"],"uniqueKey":"delivery.uploadResultTo.headers.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"delivery.uploadResultTo.headers.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Headers your file delivery endpoint might need (Optional)","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]},"uniqueKey":"delivery.uploadResultTo.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"delivery.uploadResultTo.headers","typeLabel":"object[] | null"}},"required":["URL","verb"],"uniqueKey":"delivery.uploadResultTo","typeLabel":"object"},"callback":{"type":"object","description":"POST endpoint that will get JOB ID and location when processing starts only on async processesing (see example above)","properties":{"URL":{"type":"string","description":"Your POST endpoint callback URL.","nullable":false,"format":"uri","isRequired":true,"uniqueKey":"delivery.callback.URL","typeLabel":"string\u003curi>"},"headers":{"type":"array","description":"Headers your callback endpoint might need","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"delivery.callback.headers.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"delivery.callback.headers.items.[INDEX].value","typeLabel":"string"}},"required":["name","value"],"uniqueKey":"delivery.callback.headers.items.[INDEX]","typeLabel":"object"},"uniqueKey":"delivery.callback.headers","typeLabel":"object[]"}},"required":["URL"],"uniqueKey":"delivery.callback","typeLabel":"object"}},"description":"This endpoint lets you supply your own URL to receive the single-file output. The URL may point to a custom API endpoint or a pre-signed S3 URL. \n\n The HTTP method defaults to PUT, but you can change it based on your implementation needs via the `verb` parameter. You can also provide custom headers, such as authentication headers or any others required by your endpoint.","uniqueKey":"delivery","typeLabel":"object"}},"required":["method","params","file"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"method":"rotate","params":{"rotations":[{"page_index":0,"amount":90}]},"file":"\u003cstring>","delivery":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"610bed9d-a97a-4d8d-a4b7-9193f51bf437":{"description":"Returns either JSON or binary output depending on the Accept header (defaults to JSON).\n JSON responses include a file URL for synchronous tasks or a job status for asynchronous tasks.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Sync","properties":{"result":{"oneOf":[{"type":"object","title":"Sync - Single File","properties":{"file":{"type":"object","properties":{"URL":{"oneOf":[{"type":"string","format":"uri","description":"URL with processed file for download. Field will be `null` if `delivery` parameter for post-processing upload is defined.","uniqueKey":"oneOf.0.result.oneOf.0.file.URL.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"URL with processed file for download. Field will be `null` if `delivery` parameter for post-processing upload is defined.","uniqueKey":"oneOf.0.result.oneOf.0.file.URL.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.oneOf.0.file.URL","typeLabel":"string\u003curi> | null"},"contentType":{"type":"string","description":"The file type","example":"application/json","uniqueKey":"oneOf.0.result.oneOf.0.file.contentType","typeLabel":"string"},"metadata":{"type":"object","properties":{"fileSizeBytes":{"oneOf":[{"type":"number","uniqueKey":"oneOf.0.result.oneOf.0.file.metadata.fileSizeBytes.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"oneOf.0.result.oneOf.0.file.metadata.fileSizeBytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.oneOf.0.file.metadata.fileSizeBytes","typeLabel":"number | null"},"pageCount":{"oneOf":[{"type":"number","description":"Number of pages in resulting document.","uniqueKey":"oneOf.0.result.oneOf.0.file.metadata.pageCount.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of pages in resulting document.","uniqueKey":"oneOf.0.result.oneOf.0.file.metadata.pageCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.oneOf.0.file.metadata.pageCount","typeLabel":"number | null"}},"uniqueKey":"oneOf.0.result.oneOf.0.file.metadata","typeLabel":"object"}},"uniqueKey":"oneOf.0.result.oneOf.0.file","typeLabel":"object"}},"uniqueKey":"oneOf.0.result.oneOf.0","typeLabel":"Sync - Single File · object"},{"type":"object","title":"Sync - Multiple Files","properties":{"files":{"type":"array","items":{"type":"object","properties":{"URL":{"oneOf":[{"type":"string","format":"uri","description":"URL with processed file for download. Field will be `null` if `delivery` parameter for post-processing upload is defined.","uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].URL.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"URL with processed file for download. Field will be `null` if `delivery` parameter for post-processing upload is defined.","uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].URL.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].URL","typeLabel":"string\u003curi> | null"},"contentType":{"type":"string","description":"The file type","example":"application/json","uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].contentType","typeLabel":"string"},"metadata":{"type":"object","properties":{"fileSizeBytes":{"oneOf":[{"type":"number","uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].metadata.fileSizeBytes.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].metadata.fileSizeBytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].metadata.fileSizeBytes","typeLabel":"number | null"},"pageCount":{"oneOf":[{"type":"number","description":"Number of pages in resulting document.","uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].metadata.pageCount.oneOf.0","typeLabel":"number"},{"type":"null","description":"Number of pages in resulting document.","uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].metadata.pageCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].metadata.pageCount","typeLabel":"number | null"}},"uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX].metadata","typeLabel":"object"}},"uniqueKey":"oneOf.0.result.oneOf.1.files.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.result.oneOf.1.files","typeLabel":"object[]"}},"uniqueKey":"oneOf.0.result.oneOf.1","typeLabel":"Sync - Multiple Files · object"}],"uniqueKey":"oneOf.0.result","typeLabel":"Sync - Single File · object | Sync - Multiple Files · object"}},"uniqueKey":"oneOf.0","typeLabel":"Sync · object"},{"type":"object","title":"Async - Job","properties":{"jobID":{"type":"string","example":"01234567-89ab-cdef-0123-456789abcdef","uniqueKey":"oneOf.1.jobID","typeLabel":"string"},"status":{"type":"string","enum":["running"],"uniqueKey":"oneOf.1.status","typeLabel":"enum\u003cstring>"},"progress":{"type":"number","description":"Progress of the job as a float between 0.0 and 1.0","format":"float","default":0,"example":0,"uniqueKey":"oneOf.1.progress","typeLabel":"number\u003cfloat>"}},"uniqueKey":"oneOf.1","typeLabel":"Async - Job · object"}],"uniqueKey":"","typeLabel":"Sync · object | Async - Job · object"},"examples":{"Example":{"title":"Example","value":{"result":{"file":{"URL":"\u003cstring>","contentType":"application/json","metadata":{"fileSizeBytes":123,"pageCount":123}}}}}},"exampleType":"generated"},"application/octet-stream":{"schema":{"type":"string","format":"binary","uniqueKey":"","typeLabel":"file"},"examples":{"Example":{"title":"Example","value":"\u003cstring>"}},"exampleType":"generated"}},"exampleType":"generated"},"1bcf352a-dfe4-4378-af95-9ff888266510":{"description":"Bad Request - Invalid request parameters","content":{"application/problem+json":{"schema":{"type":"object","description":"Bad Request error details","example":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#400-bad-request","title":"Bad Request","status":400,"detail":"Request validation failed","instance":"/platform/transformations"},"properties":{"type":{"type":"string","description":"A URI reference that identifies the problem type","uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"A short, human-readable summary of the problem type","uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","format":"int32","description":"The HTTP status code","uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"A URI reference that identifies the specific occurrence","uniqueKey":"instance","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#400-bad-request","title":"Bad Request","status":400,"detail":"Request validation failed","instance":"/platform/transformations"}}},"exampleType":"generated"}},"exampleType":"generated"},"199bbda3-b102-4d54-925c-0cbf57134119":{"description":"Unauthorized - Invalid or missing Authorization header","content":{"application/problem+json":{"schema":{"type":"object","description":"Unauthorized error details","example":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#401-unauthorized","title":"Unauthorized","status":401,"detail":"Missing or invalid Authorization header","instance":"/platform/transformations"},"properties":{"type":{"type":"string","description":"A URI reference that identifies the problem type","uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"A short, human-readable summary of the problem type","uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","format":"int32","description":"The HTTP status code","uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"A URI reference that identifies the specific occurrence","uniqueKey":"instance","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#401-unauthorized","title":"Unauthorized","status":401,"detail":"Missing or invalid Authorization header","instance":"/platform/transformations"}}},"exampleType":"generated"}},"exampleType":"generated"},"ca0fc127-7b65-4950-8e9f-55293bbc2560":{"description":"Not Found - Resource not found","content":{"application/problem+json":{"schema":{"type":"object","description":"Not Found error details","example":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#404-not-found","title":"Not Found","status":404,"detail":"Resource not found","instance":"/platform/transformations"},"properties":{"type":{"type":"string","description":"A URI reference that identifies the problem type","uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"A short, human-readable summary of the problem type","uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","format":"int32","description":"The HTTP status code","uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"A URI reference that identifies the specific occurrence","uniqueKey":"instance","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#404-not-found","title":"Not Found","status":404,"detail":"Resource not found","instance":"/platform/transformations"}}},"exampleType":"generated"}},"exampleType":"generated"},"803ceae0-cdb1-4415-aa9c-a5de212d1b86":{"description":"Content Too Large - File size exceeds limit","content":{"application/problem+json":{"schema":{"type":"object","description":"Content too large error details","example":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#413-content-too-large","title":"Content too large","status":413,"detail":"Uploaded document exceeds the file size limit","instance":"/platform/transformations"},"properties":{"type":{"type":"string","description":"A URI reference that identifies the problem type","uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"A short, human-readable summary of the problem type","uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","format":"int32","description":"The HTTP status code","uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"A URI reference that identifies the specific occurrence","uniqueKey":"instance","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#413-content-too-large","title":"Content too large","status":413,"detail":"Uploaded document exceeds the file size limit","instance":"/platform/transformations"}}},"exampleType":"generated"}},"exampleType":"generated"},"cea7a6a5-df00-406b-a430-3520b4c4c2e5":{"description":"Unprocessable Entity - Request cannot be processed","content":{"application/problem+json":{"schema":{"type":"object","description":"Unprocessable Entity error details","example":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#422-unprocessable-entity","title":"Unprocessable Entity","status":422,"detail":"The request was well-formed but could not be processed","instance":"/platform/transformations"},"properties":{"type":{"type":"string","description":"A URI reference that identifies the problem type","uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"A short, human-readable summary of the problem type","uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","format":"int32","description":"The HTTP status code","uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"A URI reference that identifies the specific occurrence","uniqueKey":"instance","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#422-unprocessable-entity","title":"Unprocessable Entity","status":422,"detail":"The request was well-formed but could not be processed","instance":"/platform/transformations"}}},"exampleType":"generated"}},"exampleType":"generated"},"d6722e4d-b3ab-459d-af7d-1735b9267373":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/problem+json":{"schema":{"type":"object","description":"Internal Server Error details","example":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#500-internal-server-error","title":"Internal Server Error","status":500,"detail":"An unexpected error occurred","instance":"/platform/transformations"},"properties":{"type":{"type":"string","description":"A URI reference that identifies the problem type","uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"A short, human-readable summary of the problem type","uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","format":"int32","description":"The HTTP status code","uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"A URI reference that identifies the specific occurrence","uniqueKey":"instance","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://developers.gonitro.com/docs/build-nitro/errors#500-internal-server-error","title":"Internal Server Error","status":500,"detail":"An unexpected error occurred","instance":"/platform/transformations"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"94c7da16-0b07-416e-8404-fe5c0c5ff7ca":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"4c2f95b9-e399-4990-bbdb-da130336d9a4":{"url":"https://api.gonitro.dev","description":"Europe"},"4d5bff0e-51ff-4678-84e2-1c0c3887a53c":{"url":"https://api.us.gonitro.dev","description":"North America"},"b9791ebe-2946-4bf4-8f5a-29dca26c3c37":{"url":"https://api.au.gonitro.dev","description":"Australia"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/platform/output/rotate.json"},"subdomain":"go-nitro","siteName":"Nitro APIs","title":"Rotate - Nitro APIs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T15:51:48.446Z","originalFileLocation":"api-reference/platform/transformations/rotate.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nitro APIs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Rotate - Nitro APIs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nitro APIs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://go-nitro.mintlify.site/docs/_mintlify/api/og/v2?division=Transformations\u0026amp;title=Rotate\u0026amp;description=Rotate+one+or+more+pages+in+a+PDF+with+the+Nitro+API+by+specifying+page+indexes+and+rotation+angles.\u0026amp;theme=15424dbe3b3c699dcf498f64\u0026amp;signature=25280f1f5b6810dbca9a17211b6dc8a622f49bd8dab32d365e0965f2e4887d08\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Rotate - Nitro APIs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://go-nitro.mintlify.site/docs/_mintlify/api/og/v2?division=Transformations\u0026amp;title=Rotate\u0026amp;description=Rotate+one+or+more+pages+in+a+PDF+with+the+Nitro+API+by+specifying+page+indexes+and+rotation+angles.\u0026amp;theme=15424dbe3b3c699dcf498f64\u0026amp;signature=25280f1f5b6810dbca9a17211b6dc8a622f49bd8dab32d365e0965f2e4887d08\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/go-nitro/zmdJVHCbyTDP-GYA/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nitro APIs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#D93706\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"qdnOUtxzQiObiPkJRHptxlmvIVydZCoH1KBdB21IP8o\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/platform/transformations/rotate.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.gonitro.com/#organization\",\"name\":\"Nitro APIs\",\"url\":\"https://developers.gonitro.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.gonitro.com/hubfs/Nitro_2025/logo-dark.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.gonitro.com/docs#website\",\"name\":\"Nitro APIs\",\"url\":\"https://developers.gonitro.com/docs\",\"publisher\":{\"@id\":\"https://developers.gonitro.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate#webpage\",\"url\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate\",\"name\":\"Rotate\",\"description\":\"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.\",\"dateModified\":\"2026-11-12T15:51:48.446Z\",\"isPartOf\":{\"@id\":\"https://developers.gonitro.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"PDF Services\",\"item\":\"https://developers.gonitro.com/docs/build-nitro/optimize-pdf\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transformations\",\"item\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/ocr\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Rotate\",\"item\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate#apireference\",\"headline\":\"Rotate\",\"name\":\"Rotate\",\"description\":\"Rotate one or more pages in a PDF with the Nitro API by specifying page indexes and rotation angles.\",\"url\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate\",\"mainEntityOfPage\":{\"@id\":\"https://developers.gonitro.com/docs/api-reference/platform/transformations/rotate#webpage\"},\"dateModified\":\"2026-11-12T15:51:48.446Z\",\"publisher\":{\"@id\":\"https://developers.gonitro.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.gonitro.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nitro APIs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Nitro APIs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/api-reference/platform/transformations/rotate.md","siteName":"Nitro APIs","nav":{"global":{"anchors":[{"anchor":"Home","icon":"house","href":"/"}]},"products":[{"product":"Nitro PDF \u0026 Sign","icon":"file-signature","tabs":[{"tab":"API Reference","groups":[{"group":"Start Here","icon":"rocket","pages":[{"title":"Access the Nitro APIs","href":"/getting-started/basic-setup"},{"title":"Get API Credentials","href":"/authentication/credentials"},{"title":"Generate Access Tokens","href":"/authentication/token-renew"},{"group":"Authentication API","icon":"shield","pages":[{"title":"Get Access Token","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /oauth/token","href":"/api-reference/authentication/get-access-token"}]}]},{"group":"PDF Services","icon":"file-pdf","pages":[{"group":"Guides","expanded":false,"pages":[{"title":"Optimize PDF Tutorial","href":"/build-nitro/optimize-pdf"},{"title":"Callbacks","href":"/build-nitro/pdf-services-callbacks"},{"title":"Bounding Box Guide","href":"/build-nitro/bounding-box"},{"title":"PDF Services Postman Collection","href":"/build-nitro/pdf-services-postman-collection"}]},{"group":"Transformations","icon":"wand-magic-sparkles","expanded":false,"pages":[{"title":"OCR","openapi":"ocr POST /transformations","href":"/api-reference/platform/transformations/ocr"},{"title":"Optimize","openapi":"optimize POST /transformations","href":"/api-reference/platform/transformations/optimize"},{"title":"Compress","openapi":"compress POST /transformations","href":"/api-reference/platform/transformations/compress"},{"title":"Watermark","openapi":"watermark POST /transformations","href":"/api-reference/platform/transformations/watermark"},{"title":"Redact","openapi":"redact POST /transformations","href":"/api-reference/platform/transformations/redact"},{"title":"Merge","openapi":"merge POST /transformations","href":"/api-reference/platform/transformations/merge"},{"title":"Split","openapi":"split POST /transformations","href":"/api-reference/platform/transformations/split"},{"title":"Flatten","description":"Flatten a PDF with the Nitro API. Convert form fields, annotations, signatures, and layers into static, non-editable page content.","openapi":"flatten POST /transformations","href":"/api-reference/platform/transformations/flatten"},{"title":"Rotate","sidebarTitle":"Rotate","openapi":"rotate POST /transformations","href":"/api-reference/platform/transformations/rotate"},{"title":"Delete Pages","description":"Delete specific pages from a PDF with the Nitro API using a list of zero-based page indices.","openapi":"delete POST /transformations","href":"/api-reference/platform/transformations/delete"},{"title":"Protect","openapi":"protect POST /transformations","href":"/api-reference/platform/transformations/protect"},{"title":"Unprotect","openapi":"unprotect POST /transformations","href":"/api-reference/platform/transformations/unprotect"},{"title":"Set Properties","openapi":"set-properties POST /transformations","href":"/api-reference/platform/transformations/properties"}]},{"group":"Extractions","icon":"file-export","expanded":false,"pages":[{"title":"Text","openapi":"extract-text POST /extractions","href":"/api-reference/platform/extractions/text"},{"title":"Forms","openapi":"forms POST /extractions","href":"/api-reference/platform/extractions/forms"},{"title":"Extract Fillable Form Data","openapi":"extract-fillable-form-data POST /extractions","href":"/api-reference/platform/extractions/extract-fillable-form-data"},{"title":"Smart Detect Form Fields","openapi":"smart-detect-form-fields POST /extractions","href":"/api-reference/platform/extractions/smart-detect-form-fields"},{"title":"Tables","openapi":"tables POST /extractions","href":"/api-reference/platform/extractions/tables"},{"title":"PII Bounding Boxes","openapi":"pii POST /extractions","href":"/api-reference/platform/extractions/pii"},{"title":"Text Bounding Boxes","openapi":"text-box POST /extractions","href":"/api-reference/platform/extractions/text-box"},{"title":"Properties","openapi":"get-properties POST /extractions","href":"/api-reference/platform/extractions/properties"},{"title":"Invoices","openapi":"extract-invoices POST /extractions","href":"/api-reference/platform/extractions/extract-invoices"}]},{"group":"Generations","icon":"file-circle-plus","expanded":false,"pages":[{"title":"Fill Forms","openapi":"fill-forms POST /generations","href":"/api-reference/platform/generations/fill-forms"},{"title":"Create Fillable Forms","openapi":"create-fillable-forms POST /generations","href":"/api-reference/platform/generations/create-fillable-forms"}]},{"group":"Conversions","icon":"arrows-rotate","expanded":false,"pages":[{"title":"PDF to MS Office","openapi":"pdftoms POST /conversions","href":"/api-reference/platform/conversions/pdftoms"},{"title":"MS Office to PDF","openapi":"mstopdf POST /conversions","href":"/api-reference/platform/conversions/mstopdf"},{"title":"PDF to Image","openapi":"pdftoimg POST /conversions","href":"/api-reference/platform/conversions/pdftoimg"},{"title":"Image to PDF","openapi":"imgtopdf POST /conversions","href":"/api-reference/platform/conversions/imgtopdf"},{"title":"Miscellaneous to PDF","openapi":"misctopdf POST /conversions","href":"/api-reference/platform/conversions/misctopdf"},{"title":"PDF to PDF/A","openapi":"pdfa POST /conversions","href":"/api-reference/platform/conversions/pdfa"}]},{"group":"Jobs","icon":"wrench","expanded":false,"pages":[{"title":"Job Status","openapi":"job GET /jobs/{jobID}/status","href":"/api-reference/platform/jobs/status"},{"title":"Job Results","openapi":"job GET /jobs/{jobID}","href":"/api-reference/platform/jobs/result"}]},{"group":"Presigned URLs","icon":"link","expanded":false,"pages":[{"title":"Request Presigned File URLs","openapi":"presigned-file-urls POST /presigned-file-urls","href":"/api-reference/platform/presigned-urls/request"}]}]},{"group":"Sign API","icon":"signature","pages":[{"group":"Guides","expanded":false,"pages":[{"title":"Make your first 'Get Envelopes' API call","href":"/getting-started/first-sign-api-call"},{"title":"Create Envelope Tutorial","href":"/build-nitro/create-envelope"},{"title":"Webhooks","href":"/build-nitro/sign-webhooks"},{"title":"Sign Postman Collection","href":"/build-nitro/sign-postman-collection"}]},{"group":"Envelopes","icon":"envelope","expanded":false,"pages":[{"title":"List Envelopes","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes","href":"/api-reference/sign/list-envelopes"},{"title":"Get Envelope by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}","href":"/api-reference/sign/get-envelope-by-id"},{"title":"Delete Envelope by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json delete /sign/envelopes/{envelopeID}","href":"/api-reference/sign/delete-envelope-by-id"},{"title":"Update Envelope","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json patch /sign/envelopes/{envelopeID}","href":"/api-reference/sign/update-envelope"},{"title":"Create Envelope","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes","href":"/api-reference/sign/create-envelope"},{"title":"Cancel Envelope by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json put /sign/envelopes/{envelopeID}:cancel","href":"/api-reference/sign/cancel-envelope-by-id"},{"title":"Send Envelope for Signing","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes/{envelopeID}:send-for-signing","href":"/api-reference/sign/send-envelope-for-signing"},{"title":"Send Reminders for Envelope","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes/{envelopeID}:send-reminders","href":"/api-reference/sign/send-reminders-for-envelope"},{"title":"Download Sealed Envelope","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}:download-sealed","href":"/api-reference/sign/download-sealed-envelope"},{"title":"Download Original Envelope","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}:download-original","href":"/api-reference/sign/download-original-envelope"},{"title":"Download Audit Trail of Envelope","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}:download-audit-trail","href":"/api-reference/sign/download-audit-trail-of-envelope"}]},{"group":"Documents","icon":"file-pdf","expanded":false,"pages":[{"title":"List Documents by Envelope ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}/documents","href":"/api-reference/sign/list-documents-by-envelope-id"},{"title":"Create Document by Envelope ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes/{envelopeID}/documents","href":"/api-reference/sign/create-document-by-envelope-id"},{"title":"Reorder Documents by Envelope ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json put /sign/envelopes/{envelopeID}/documents:reorder","href":"/api-reference/sign/reorder-documents-by-envelope-id"},{"title":"Get Document by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}/documents/{documentID}","href":"/api-reference/sign/get-document-by-id"},{"title":"Delete Document by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json delete /sign/envelopes/{envelopeID}/documents/{documentID}","href":"/api-reference/sign/delete-document-by-id"},{"title":"Update Document by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json patch /sign/envelopes/{envelopeID}/documents/{documentID}","href":"/api-reference/sign/update-document-by-id"},{"title":"Download Sealed Document by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}/documents/{documentID}:download-sealed","href":"/api-reference/sign/download-sealed-document-by-id"}]},{"group":"Fields","icon":"signature","expanded":false,"pages":[{"title":"Create Field(s) by Document ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes/{envelopeID}/documents/{documentID}/fields","href":"/api-reference/sign/create-fields-by-document-id"},{"title":"List Fields by Document ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}/documents/{documentID}/fields","href":"/api-reference/sign/list-fields-by-document-id"},{"title":"Delete Field by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json delete /sign/envelopes/{envelopeID}/documents/{documentID}/fields/{fieldID}","href":"/api-reference/sign/delete-field-by-id"},{"title":"Delete Fields by Field IDs","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes/{envelopeID}/documents/{documentID}/fields:batch-delete","href":"/api-reference/sign/delete-fields-by-field-ids"},{"title":"Update Field by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json patch /sign/envelopes/{envelopeID}/documents/{documentID}/fields/{fieldID}","href":"/api-reference/sign/update-field-by-id"}]},{"group":"Participants","icon":"users","expanded":false,"pages":[{"title":"Delete Participant by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json delete /sign/envelopes/{envelopeID}/participants/{participantID}","href":"/api-reference/sign/delete-participant-by-id"},{"title":"List Participants by Envelope ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}/participants","href":"/api-reference/sign/list-participants-by-envelope-id"},{"title":"List Participant Signing URLs by Envelope ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /sign/envelopes/{envelopeID}/participants/signing-urls","href":"/api-reference/sign/list-participant-signing-urls-by-envelope-id"},{"title":"Create Participant(s) by Envelope ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes/{envelopeID}/participants","href":"/api-reference/sign/create-participants-by-envelope-id"},{"title":"Delete Participants by Participant IDs","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /sign/envelopes/{envelopeID}/participants:batch-delete","href":"/api-reference/sign/delete-participants-by-participant-ids"},{"title":"Update Participant by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json patch /sign/envelopes/{envelopeID}/participants/{participantID}","href":"/api-reference/sign/update-participant-by-id"}]},{"group":"Webhook configs","icon":"bolt","expanded":false,"pages":[{"title":"List webhook configs for the authenticated application","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /webhooks/configs","href":"/api-reference/webhooks/list-webhook-configs-for-the-authenticated-application"},{"title":"Create webhook config","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /webhooks/configs","href":"/api-reference/webhooks/create-webhook-config"},{"title":"Get webhook config by ID","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /webhooks/configs/{id}","href":"/api-reference/webhooks/get-webhook-config-by-id"},{"title":"Update webhook config","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json patch /webhooks/configs/{id}","href":"/api-reference/webhooks/update-webhook-config"},{"title":"Delete webhook config","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json delete /webhooks/configs/{id}","href":"/api-reference/webhooks/delete-webhook-config"},{"title":"Send a test event to a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json post /webhooks/configs/test","href":"/api-reference/webhooks/send-a-test-event-to-a-webhook-endpoint"},{"title":"List supported webhook event types","deprecated":null,"version":null,"openapi":"https://api.gonitro.dev/openapi.json get /webhooks/configs/event-types","href":"/api-reference/webhooks/list-supported-webhook-event-types"}]}]},{"group":"Reference","icon":"book","pages":[{"title":"Good Development Practices","href":"/build-nitro/good-practices"},{"title":"API Error Codes","href":"/build-nitro/errors"},{"title":"Rotate Credentials","href":"/authentication/credential-rotation"},{"title":"Changelog","href":"/api-reference/changelog"}]}]},{"tab":"Power Automate","icon":"microsoft","pages":[{"title":"Power Automate","href":"/integrations/power-automate/overview"}]},{"tab":"Zapier","icon":"bolt","pages":[{"title":"Zapier","href":"/integrations/zapier/overview"}]},{"tab":"MCP","icon":"plug","hidden":true,"pages":[{"title":"MCP","href":"/integrations/mcp/overview"}]},{"tab":"Automate Workflows","icon":"diagram-project","hidden":true,"pages":[{"title":"Automate Workflows","href":"/integrations/automate-workflows/overview"}]}]},{"product":"Nitro Sign Enterprise Verified","icon":"badge-check","pages":[{"title":"Nitro Sign Enterprise Verified","href":"/nsev/getting-started/overview"}]}]},"basePath":"","title":"Rotate - Nitro APIs","buildId":"dpl_4UDxC3erAcBDHX8QT9FjyxxnLZSQ","deploymentId":"dpl_4UDxC3erAcBDHX8QT9FjyxxnLZSQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CpJ44y6j.js","utils-DRi8JwoB.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D6b6ny2H.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CgBjVdxd.js","snippetPresets-u4Are-mZ.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTFiS5AN.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DuAEpWYt.js","shallow-BzqLj4xC.js","getApiPlaygroundDisplay-CKb7GIdu.js","CodeSnippet-BaOQDoQh.js","CodeSnippets-CNRiM0PE.js","Page-BlovTRO5.js","getPastedJson-qjrnOjTO.js","icon-Dt4VFpdV.js","MethodPill-c-UgMFw3.js","DuplicateIcon-BRwru6S6.js","createIcon-DBGdUgXw.js","DynamicMarkdown-B7gJlzwx.js","SectionHeading-CCarmMPF.js","axios-vUo_bRtp.js","Markdown-DCI2IZwJ.js","clsx-Chpd8_tJ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdcB7h9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-D4Q3xuF7.js"]}