Sync Conversion
The /v1/sync endpoint generates a PDF from a URL, HTML, or a published template ID with JSON data and returns a JSON response with a temporary download URL. By default, files stored in PDFBolt's temporary storage expire after 24 hours. Use it when your application needs a download URL instead of PDF bytes. To store the PDF in your own bucket instead, provide customS3PresignedUrl.
Endpoint Details
Method: POST
https://api.pdfbolt.com/v1/sync
Success Example
- Request
- cURL
- Response
Example request body for converting a URL to PDF:
{
"url": "https://example.com"
}
Complete request with authentication:
curl 'https://api.pdfbolt.com/v1/sync' \
-H 'API-KEY: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com"}'
To inspect the rate-limit and conversion-cost response headers, add -D -:
curl -D - 'https://api.pdfbolt.com/v1/sync' \
-H 'API-KEY: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com"}'
{
"requestId": "db347fe5-7b72-45f6-92f9-a7b7755ab6c8",
"status": "SUCCESS",
"errorCode": null,
"errorMessage": null,
"documentUrl": "https://s3.pdfbolt.com/pdfbolt_ec2950a1-f835-4be6-bab2-69490b53b1f9_2026-04-30T10-44-09Z.pdf",
"expiresAt": "2026-05-01T10:44:09Z",
"isAsync": false,
"duration": 606,
"documentSizeMb": 0.02,
"isCustomS3Bucket": false
}
Failure Example
API-level failures return a JSON error object. Infrastructure-generated responses, such as 503 and 504, may use a different format. See Error Handling for shared error codes and recommended actions, and the OpenAPI Reference for the exact responses supported by this endpoint.
- Request
- Response
{
"url": "https://example.com",
"waitForFunction": "() => document.body.innerText.includes('Ready to Download')"
}
{
"timestamp": "2026-04-30T10:25:07Z",
"httpErrorCode": 408,
"errorCode": "CONVERSION_TIMEOUT",
"errorMessage": "Conversion process timed out. Please see https://pdfbolt.com/docs/parameters#timeout, https://pdfbolt.com/docs/parameters#waituntil and https://pdfbolt.com/docs/parameters#waitforfunction parameters."
}
Body Parameters
The parameter below is available on the /v1/sync and /v1/async endpoints. For common Conversion API parameters, see Conversion Parameters.
customS3PresignedUrl
Type: string
Required: No
Details:
Specifies an HTTPS pre-signed PUT URL for direct upload to your S3-compatible bucket. The URL must be no longer than 2048 characters. When provided, documentUrl and expiresAt are null, and isCustomS3Bucket is true. If not provided, the document is stored in PDFBolt's temporary storage for 24 hours.
See Uploading to Your S3 Bucket for setup details.
Usage:
{
"url": "https://example.com",
"customS3PresignedUrl": "https://your-bucket.s3.amazonaws.com/document.pdf?<presigned-query-params>"
}
customS3PresignedUrl is available on paid plans. Free plan users should omit this parameter and use PDFBolt's default temporary storage instead.
Response Parameters
Response fields for successful requests. For failure responses, see Error Response Format.
| Parameter | Type | Description | Possible Values | Example Value |
|---|---|---|---|---|
requestId | string (UUID) |
| Any valid UUID | db347fe5-7b72-45f6-92f9-a7b7755ab6c8 |
status | string (Enum) |
| SUCCESS | SUCCESS |
errorCode | null |
| null | null |
errorMessage | null |
| null | null |
documentUrl | string (URL) or null |
| Any valid URL or null | https://s3.pdfbolt.com/pdfbolt_ec2950a1-f835-4be6-bab2-69490b53b1f9_2026-04-30T10-44-09Z.pdf |
expiresAt | string (ISO 8601) or null |
| ISO 8601 datetime string in UTC or null | 2026-05-01T10:44:09Z |
isAsync | boolean |
| false | false |
duration | integer |
| Any non-negative integer | 606 |
documentSizeMb | number |
| Any non-negative number | 0.02 |
isCustomS3Bucket | boolean |
| truefalse | false |
For response headers, see API Response Headers.
Next Steps
📄️ Quick Start Guide
Node.js, Python, and PHP SDKs, cURL, and REST examples
📄️ Conversion Parameters
Full reference for all PDF generation parameters
📄️ Uploading to Your S3 Bucket
Pre-signed URL setup with Node.js example