### Install official client libraries
Source: https://ironfang.uk/renderwolf/docs
Commands to install the official Renderwolf SDKs for Node.js and Python.
```bash
npm install @ironfang/renderwolf # TypeScript, Node 20+
pip install ironfang-renderwolf # Python
```
--------------------------------
### Perform a screenshot request with Renderwolf
Source: https://ironfang.uk/renderwolf/docs
Example of a POST request to the Renderwolf API using curl, demonstrating blocking, waiting, and device scaling options.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/screenshot \
-H "Authorization: Bearer if_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"block_ads": true,
"block_cookie_banners": true,
"wait_for_selector": "#main",
"device_scale_factor": 2
}' \
--output shot.png
```
--------------------------------
### GET /v1/templates
Source: https://ironfang.uk/renderwolf/docs
List all templates associated with the account.
```APIDOC
## GET /v1/templates
### Description
Retrieve a list of all stored templates.
### Method
GET
### Endpoint
/v1/templates
```
--------------------------------
### Create a Signed URL
Source: https://ironfang.uk/renderwolf/docs
Generates a stable, signed GET URL for images or screenshots without exposing API keys.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/sign \
-H "Authorization: Bearer if_live_..." \
-d '{"kind": "image", "template": "0198c9f1-5b7a-7c2e-9f1d-3a8b2c4d5e6f", "vars": {"title": "My post"}, "ttl_hours": 0}'
{"url": "https://api.ironfang.uk/v1/r/0/a1b2c3...?kind=image&template=0198c9f1-5b7a-7c2e-9f1d-3a8b2c4d5e6f&v.title=My+post"}
```
--------------------------------
### GET /renderwolf/v1/deliveries
Source: https://ironfang.uk/renderwolf/docs
Retrieves the status of job deliveries.
```APIDOC
## GET /renderwolf/v1/deliveries
### Description
Shows the status and progress of each delivery attempt for jobs.
### Method
GET
### Endpoint
/renderwolf/v1/deliveries
```
--------------------------------
### GET /v1/usage
Source: https://ironfang.uk/renderwolf/docs
Retrieves the current consumption metrics against the account's plan hard cap.
```APIDOC
## GET /v1/usage
### Description
Returns the current usage statistics for the account, including the billing period, credit usage, and plan limit.
### Method
GET
### Endpoint
/v1/usage
### Response
#### Success Response (200)
- **period** (string) - The start date of the current billing cycle.
- **credits** (integer) - The number of credits consumed in the current period.
- **renders** (integer) - Deprecated field, repeats the credits value.
- **limit** (integer) - The hard cap limit for the current plan.
#### Response Example
{
"period": "2026-08",
"credits": 1240,
"renders": 1240,
"limit": 50000
}
```
--------------------------------
### GET /v1/templates/{id}
Source: https://ironfang.uk/renderwolf/docs
Fetch a specific template by its ID.
```APIDOC
## GET /v1/templates/{id}
### Description
Fetch details for a single template.
### Method
GET
### Endpoint
/v1/templates/{id}
### Parameters
#### Path Parameters
- **id** (string) - Required - The UUIDv7 of the template
```
--------------------------------
### POST /v1/sign
Source: https://ironfang.uk/renderwolf/docs
Creates a stable, signed GET URL for use in image elements or meta tags. The signature prevents unauthorized changes and covers all parameters.
```APIDOC
## POST /v1/sign
### Description
Creates a stable GET URL for use in an `
` element or `og:image` meta tag. The URL does not expose the API key or require an application proxy.
### Method
POST
### Endpoint
/v1/sign
### Request Body
- **kind** (string) - Required - `screenshot` or `image`.
- **url** (string) - Optional - Target page (required for `kind: screenshot`).
- **template** (string) - Optional - Template id (required for `kind: image`).
- **vars** (object) - Optional - Template variables (required for `kind: image`).
- **width** (int) - Optional - Dimensions.
- **height** (int) - Optional - Dimensions.
- **full_page** (bool) - Optional - Screenshots only.
- **ttl_hours** (int) - Optional - Expiry. `0` = never expires.
### Response
#### Success Response (200)
- **url** (string) - The full signed URL.
- **path** (string) - The path component of the URL.
```
--------------------------------
### GET /renderwolf/v1/batches/{id}
Source: https://ironfang.uk/renderwolf/docs
Retrieves the status and counts of a specific batch by its ID.
```APIDOC
## GET /renderwolf/v1/batches/{id}
### Description
Poll the status of a batch, including counts by state, completion status, and full job resources for every item in the batch.
### Method
GET
### Endpoint
/renderwolf/v1/batches/{id}
### Parameters
#### Path Parameters
- **id** (string) - Required - The unique identifier of the batch.
```
--------------------------------
### GET /renderwolf/v1/jobs/{id}
Source: https://ironfang.uk/renderwolf/docs
Retrieves the status and result of a previously submitted rendering job.
```APIDOC
## GET /renderwolf/v1/jobs/{id}
### Description
Returns the job status and result details. A succeeded job includes a signed URL valid for 15 minutes.
### Method
GET
### Endpoint
/renderwolf/v1/jobs/{id}
### Parameters
#### Path Parameters
- **id** (string) - Required - The unique identifier of the job.
```
--------------------------------
### Create a Template
Source: https://ironfang.uk/renderwolf/docs
Use this request to store an HTML template with placeholders for dynamic content.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/templates \
-H "Authorization: Bearer if_live_..." \
-d '{
"name": "og-card",
"html": "
",
"width": 1200,
"height": 630
}'
```
--------------------------------
### Request a site preview with fetch
Source: https://ironfang.uk/renderwolf/docs
Use this POST request to initiate a site preview. Ensure the API key is kept secure on the server-side.
```javascript
const response = await fetch(
'https://api.ironfang.uk/renderwolf/v1/site-preview',
{
method: 'POST',
headers: {
Authorization: 'Bearer if_live_...',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com',
motion: 'per_page'
})
}
);
const output = await response.formData();
const poster = output.get('poster'); // poster.jpg, image/jpeg
const video = output.get('video'); // preview.mp4, video/mp4
```
--------------------------------
### POST /renderwolf/v1/site-preview
Source: https://ironfang.uk/renderwolf/docs
Generates a top-to-bottom preview of a public webpage, returning a JPEG poster and an H.264 MP4 video.
```APIDOC
## POST /renderwolf/v1/site-preview
### Description
Turn a public webpage into a top-to-bottom preview. One request returns a JPEG poster from the first frame and a browser-recorded H.264 MP4.
### Method
POST
### Endpoint
https://api.ironfang.uk/renderwolf/v1/site-preview
### Parameters
#### Request Body
- **url** (string) - Required - Public HTTP or HTTPS page to record.
- **width** (int) - Optional - Even output width from 320 to 1280. Default 672.
- **height** (int) - Optional - Even output height from 240 to 1200. Default 494.
- **motion** (string) - Optional - 'per_page' for viewport-sized steps and pauses, or 'single_sweep' for one continuous pass. Default 'per_page'.
- **device** (string) - Optional - 'desktop', 'tablet' or 'mobile'.
- **dark_mode** (bool) - Optional - Record with the page's dark colour scheme. Default false.
- **no_cache** (bool) - Optional - Force a fresh recording. Default false.
### Request Example
{
"url": "https://example.com",
"motion": "per_page"
}
### Response
#### Success Response (200)
- **poster** (file) - JPEG image of the first frame.
- **video** (file) - H.264 MP4 video file.
```
--------------------------------
### POST /renderwolf/v1/screenshot
Source: https://ironfang.uk/renderwolf/docs
Generates a screenshot of the specified URL and returns the binary asset.
```APIDOC
## POST /renderwolf/v1/screenshot
### Description
Generates a screenshot of a provided URL. The response returns the binary asset directly.
### Method
POST
### Endpoint
https://api.ironfang.uk/renderwolf/v1/screenshot
### Request Body
- **url** (string) - Required - The URL to capture.
- **width** (integer) - Optional - The width of the viewport in pixels.
### Request Example
{
"url": "https://example.com",
"width": 1280
}
### Response
#### Success Response (200)
- **Binary Asset** (image/png, image/jpeg, application/pdf) - The rendered file content.
```
--------------------------------
### POST /v1/screenshot
Source: https://ironfang.uk/renderwolf/docs
Capture a URL or raw HTML with a warm Chromium instance.
```APIDOC
## POST /v1/screenshot
### Description
Capture a URL or raw HTML with a warm Chromium instance. Uses 1 credit.
### Method
POST
### Endpoint
https://api.ironfang.uk/renderwolf/v1/screenshot
### Parameters
#### Request Body
- **url** (string) - Optional - Page to capture. Provide url or html, not both.
- **html** (string) - Optional - Raw HTML to render instead of a URL.
- **width** (int) - Optional - Viewport width. Default 1280.
- **height** (int) - Optional - Viewport height. Default 800.
- **device** (string) - Optional - desktop, tablet or mobile.
- **full_page** (bool) - Optional - Capture the full scroll height instead of the viewport.
- **selector** (string) - Optional - CSS selector for capturing a single element.
- **dark_mode** (bool) - Optional - Emulate prefers-color-scheme: dark.
- **format** (string) - Optional - png (default), jpeg or webp.
- **quality** (int) - Optional - JPEG and WebP quality from 1 to 100. Default 85.
- **delay_ms** (int) - Optional - Additional wait time after load for late-rendering content.
- **no_cache** (bool) - Optional - Force a new capture, ignoring any cached render.
- **clip** (object) - Optional - { x, y, width, height } in CSS pixels from the top left.
- **omit_background** (bool) - Optional - Use a transparent background instead of the page background.
- **full_page_max_height** (int) - Optional - Caps a full_page capture.
### Request Example
{
"url": "https://example.com",
"full_page": true,
"dark_mode": true
}
```
--------------------------------
### Capture a mobile-formatted screenshot in WebP
Source: https://ironfang.uk/renderwolf/docs
Uses the POST /v1/screenshot endpoint with the mobile device preset and WebP format.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/screenshot \
-H "Authorization: Bearer if_live_..." \
-d '{"url": "https://example.com", "device": "mobile", "format": "webp"}' \
--output phone.webp
```
--------------------------------
### POST /v1/video
Source: https://ironfang.uk/renderwolf/docs
Generates a video clip based on the provided configuration, including background, captions, and audio.
```APIDOC
## POST /v1/video
### Description
Generates a video clip from structured data, including background, captions, and audio. Returns a video/mp4 file.
### Method
POST
### Endpoint
https://api.ironfang.uk/renderwolf/v1/video
### Parameters
#### Request Body
- **size** (string) - Optional - vertical (default), square, landscape, 720p.
- **duration** (number) - Optional - Seconds of output, 1 to 60. Default 15.
- **captions** (array) - Optional - Up to 12 cards of {text, from, to} in seconds.
- **colour** (string) - Optional - Hex background color. Default #101820.
- **background** (string) - Optional - URL of an image or video.
- **watermark** (string) - Optional - URL of a PNG.
- **audio** (string) - Optional - URL of an audio track.
- **font_size** (int) - Optional - Caption size in pixels.
### Request Example
{
"size": "vertical",
"duration": 15,
"captions": [
{"text": "Ship it on Friday", "from": 0, "to": 5},
{"text": "Find out on Monday", "from": 5, "to": 10},
{"text": "Or gate the deploy", "from": 10, "to": 15}
]
}
### Response
#### Success Response (200)
- **body** (video/mp4) - The rendered video file.
```
--------------------------------
### Render an Image from Template
Source: https://ironfang.uk/renderwolf/docs
Renders a stored template into an image file by providing a map of variables to fill placeholders.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/image/0198c9f1-5b7a-7c2e-9f1d-3a8b2c4d5e6f \
-H "Authorization: Bearer if_live_..." \
-d '{"vars": {"title": "Hello from Renderwolf", "author": "Rick"}}' \
--output og.png
```
--------------------------------
### POST /renderwolf/v1/jobs
Source: https://ironfang.uk/renderwolf/docs
Submits a new rendering job with specified delivery configurations.
```APIDOC
## POST /renderwolf/v1/jobs
### Description
Submits a rendering job. The job results will be delivered to the specified webhook or storage destinations.
### Method
POST
### Endpoint
/renderwolf/v1/jobs
### Request Body
- **kind** (string) - Required - The type of render job (e.g., "screenshot")
- **request** (object) - Required - The request details (e.g., URL to render)
- **external_id** (string) - Optional - A user-provided identifier for the job
- **delivery** (object) - Optional - Delivery configuration including webhook_destination, storage_destination, and storage_key
```
--------------------------------
### POST /renderwolf/v1/batches
Source: https://ironfang.uk/renderwolf/docs
Submits a batch of up to 100 rendering jobs. The request includes a default configuration and a list of items that can override specific fields.
```APIDOC
## POST /renderwolf/v1/batches
### Description
Submit up to 100 jobs in one request. A shared default configuration is applied, with individual items allowed to override specific fields.
### Method
POST
### Endpoint
/renderwolf/v1/batches
### Request Headers
- **Idempotency-Key** (string) - Required - Unique key for the request.
### Request Body
- **kind** (string) - Required - The default rendering kind (e.g., "screenshot").
- **default** (object) - Optional - Default settings applied to all items.
- **external_id** (string) - Optional - Identifier for the batch.
- **items** (array) - Required - List of individual job items.
### Request Example
{
"kind": "screenshot",
"default": { "full_page": true, "block_ads": true },
"external_id": "nightly",
"items": [
{ "request": { "url": "https://example.com/a" }, "external_id": "a" },
{ "request": { "url": "https://example.com/b" }, "external_id": "b" },
{ "kind": "pdf", "request": { "url": "https://example.com/terms" } }
]
}
```
--------------------------------
### POST /v1/templates
Source: https://ironfang.uk/renderwolf/docs
Create a new reusable HTML template.
```APIDOC
## POST /v1/templates
### Description
Create a new reusable HTML template. Variables use {{name}} placeholders and values are HTML-escaped.
### Method
POST
### Endpoint
/v1/templates
### Request Body
- **name** (string) - Required - Name of the template
- **html** (string) - Required - HTML content (max 256KB)
- **width** (integer) - Optional - Width of the image
- **height** (integer) - Optional - Height of the image (default 1200x630, capped 4096)
```
--------------------------------
### POST /v1/qr
Source: https://ironfang.uk/renderwolf/docs
Generate styled QR codes that are verified before delivery. QR requests are free on every plan.
```APIDOC
## POST /v1/qr
### Description
Generate styled QR codes that are verified before delivery. Renderwolf decodes each finished image and compares it with the supplied payload.
### Method
POST
### Endpoint
https://api.ironfang.uk/renderwolf/v1/qr
### Parameters
#### Request Body
- **data** (string) - Required - Payload containing a URL, WiFi string or text up to 1KB.
- **size** (int) - Optional - Square output size from 64 to 2048 pixels. Default 512.
- **ecc** (string) - Optional - Error correction: L, M, Q or H. Default M.
- **dark** (string) - Optional - Hex colour for dark modules.
- **light** (string) - Optional - Hex colour for light modules.
- **dots** (string) - Optional - square or circle.
- **eyes** (string) - Optional - square or rounded.
- **margin** (int) - Optional - Quiet zone from 0 to 8 modules. Default 4.
- **invert** (bool) - Optional - Creates light modules on a dark background.
- **logo** (string) - Optional - Center mark as a base64 data: URI.
- **logo_url** (string) - Optional - Centre mark supplied by URL.
- **logo_size** (float) - Optional - Logo tile as a fraction of the symbol, from 0.12 to 0.30.
- **logo_pad** (bool) - Optional - Adds a knockout tile behind the logo. Default true.
### Request Example
{
"data": "https://example.com/menu",
"dots": "rounded",
"logo_url": "https://example.com/logo.png"
}
```
--------------------------------
### Submit a batch rendering request
Source: https://ironfang.uk/renderwolf/docs
Submits a batch of rendering jobs with a shared default configuration and individual item overrides.
```http
POST /renderwolf/v1/batches
Idempotency-Key: nightly-2026-08-28
{
"kind": "screenshot",
"default": { "full_page": true, "block_ads": true },
"external_id": "nightly",
"items": [
{ "request": { "url": "https://example.com/a" }, "external_id": "a" },
{ "request": { "url": "https://example.com/b" }, "external_id": "b" },
{ "kind": "pdf", "request": { "url": "https://example.com/terms" } }
]
}
```
--------------------------------
### POST /renderwolf/v1/screenshot
Source: https://ironfang.uk/renderwolf/docs
Captures a screenshot of a specified URL with optional blocking, waiting, and device configuration.
```APIDOC
## POST /renderwolf/v1/screenshot
### Description
Captures a screenshot of the target URL. Supports blocking ads and cookie banners, waiting for specific elements or network states, and configuring device pixel density.
### Method
POST
### Endpoint
https://api.ironfang.uk/renderwolf/v1/screenshot
### Parameters
#### Request Body
- **url** (string) - Required - The URL to capture.
- **block_ads** (bool) - Optional - Prevents requests to known ad and tracker networks.
- **block_cookie_banners** (bool) - Optional - Hides supported consent frameworks and removes scroll locks.
- **hide_selectors** (string[]) - Optional - CSS selectors to hide after page load.
- **headers** (object) - Optional - Extra HTTP headers sent with every request.
- **authorization** (string) - Optional - Sets the Authorization header.
- **cookies** (object[]) - Optional - Array of cookies with name, value, domain, and path.
- **user_agent** (string) - Optional - Overrides the default user agent.
- **wait_until** (string) - Optional - Event to wait for: load, domcontentloaded, or networkidle.
- **wait_for_selector** (string) - Optional - CSS selector to wait for before capturing.
- **timeout_ms** (int) - Optional - Per-render timeout in milliseconds.
- **device_scale_factor** (number) - Optional - Pixel density, 1 to 3.
### Request Example
{
"url": "https://example.com",
"block_ads": true,
"block_cookie_banners": true,
"wait_for_selector": "#main",
"device_scale_factor": 2
}
```
--------------------------------
### POST /v1/pdf
Source: https://ironfang.uk/renderwolf/docs
Print a URL or raw HTML to PDF. Each successful PDF uses 2 credits.
```APIDOC
## POST /v1/pdf
### Description
Print a URL or raw HTML to PDF. Each successful PDF uses 2 credits.
### Method
POST
### Endpoint
https://api.ironfang.uk/renderwolf/v1/pdf
### Parameters
#### Request Body
- **url** (string) - Optional - Page to print. Provide url or html.
- **html** (string) - Optional - Raw HTML to print instead of a URL.
- **landscape** (bool) - Optional - Landscape orientation.
- **print_background** (bool) - Optional - Include CSS backgrounds.
- **header_html** (string) - Optional - Chromium header template.
- **footer_html** (string) - Optional - Chromium footer template.
- **scale** (float) - Optional - Print scale. Default 1.0.
- **no_cache** (bool) - Optional - Force a new capture, ignoring any cached render.
- **paper_format** (string) - Optional - a3, a4, a5, letter, legal or tabloid.
- **margin** (object) - Optional - { top, right, bottom, left } in inches.
### Request Example
{
"html": "Invoice #42
",
"print_background": true
}
```
--------------------------------
### POST /v1/image/{id}
Source: https://ironfang.uk/renderwolf/docs
Render a stored template as an image.
```APIDOC
## POST /v1/image/{id}
### Description
Render a stored template as an image with the supplied variables. Each successful render uses 1 credit.
### Method
POST
### Endpoint
/v1/image/{id}
### Parameters
#### Path Parameters
- **id** (string) - Required - The UUIDv7 of the template
#### Request Body
- **vars** (object) - Optional - String map filling the template's placeholders
- **no_cache** (bool) - Optional - Force a new capture, ignoring cached render
- **format** (string) - Optional - png (default), jpeg, or webp
- **qr** (object) - Optional - Named QR specs to be injected as data URIs
```
--------------------------------
### Render a screenshot via cURL
Source: https://ironfang.uk/renderwolf/docs
Sends a POST request to the screenshot endpoint with a URL and width, saving the output as a file.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/screenshot \
-H "Authorization: Bearer if_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "width": 1280}' \
--output shot.png
```
--------------------------------
### Generate PDF from HTML
Source: https://ironfang.uk/renderwolf/docs
Sends a POST request to the PDF endpoint with raw HTML content. Requires a valid Bearer token in the Authorization header.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/pdf \
-H "Authorization: Bearer if_live_..." \
-d '{"html": "Invoice #42
", "print_background": true}' \
--output invoice.pdf
```
--------------------------------
### Generate a video clip with cURL
Source: https://ironfang.uk/renderwolf/docs
Sends a POST request to the Renderwolf API to generate a vertical video clip with scheduled captions.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/video \
-H "Authorization: Bearer if_live_..." \
-d '{
"size": "vertical",
"duration": 15,
"captions": [
{"text": "Ship it on Friday", "from": 0, "to": 5},
{"text": "Find out on Monday", "from": 5, "to": 10},
{"text": "Or gate the deploy", "from": 10, "to": 15}
]
}' --output clip.mp4
```
--------------------------------
### Generate Styled QR Code
Source: https://ironfang.uk/renderwolf/docs
Sends a POST request to the QR endpoint to generate a custom QR code with a logo. The service verifies the output before delivery.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/qr \
-H "Authorization: Bearer if_live_..." \
-d '{"data": "https://example.com/menu", "dots": "rounded",
"logo_url": "https://example.com/logo.png"}' \
--output qr.png
```
--------------------------------
### Render an Image with QR Code
Source: https://ironfang.uk/renderwolf/docs
Generates an image containing an embedded QR code by providing a QR specification in the request body.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/image/0198c9f1-5b7a-7c2e-9f1d-3a8b2c4d5e6f \
-H "Authorization: Bearer if_live_..." \
-d '{"vars": {"invoice": "INV-2041"},
"qr": {"pay": {"data": "https://pay.example/INV-2041", "size": 300}}}' \
--output invoice-card.png
```
--------------------------------
### Capture a full-page screenshot with dark mode
Source: https://ironfang.uk/renderwolf/docs
Uses the POST /v1/screenshot endpoint to capture a full-page screenshot of a URL with dark mode enabled.
```bash
curl -X POST https://api.ironfang.uk/renderwolf/v1/screenshot \
-H "Authorization: Bearer if_live_..." \
-d '{"url": "https://example.com", "full_page": true, "dark_mode": true}' \
--output page.png
```
--------------------------------
### POST /renderwolf/v1/destinations
Source: https://ironfang.uk/renderwolf/docs
Registers a new delivery destination, such as a webhook or S3-compatible bucket, to receive job results.
```APIDOC
## POST /renderwolf/v1/destinations
### Description
Registers a new destination for job delivery. Credentials are provided once during creation and are not stored in job bodies.
### Method
POST
### Endpoint
/renderwolf/v1/destinations
### Request Body
- **type** (string) - Required - The type of destination (e.g., "webhook")
- **name** (string) - Required - A user-defined name for the destination
- **url** (string) - Required - The endpoint URL for webhooks
### Response
#### Success Response (201)
- **id** (string) - The unique identifier for the destination
- **signing_secret** (string) - The secret used for webhook signature verification (shown only once)
- **signing_secret_note** (string) - Note regarding the storage of the signing secret
```
--------------------------------
### Submit a job with delivery
Source: https://ironfang.uk/renderwolf/docs
Include delivery destination IDs in the job request to route results to webhooks or storage buckets.
```json
POST /renderwolf/v1/jobs
{
"kind": "screenshot",
"request": { "url": "https://example.com" },
"external_id": "catalogue-42",
"delivery": {
"webhook_destination": "0198f0a1...",
"storage_destination": "0198f0b2...",
"storage_key": "captures/{date}/{external_id}.png"
}
}
```
--------------------------------
### POST /renderwolf/v1/jobs
Source: https://ironfang.uk/renderwolf/docs
Submits a rendering task as a durable job, returning a 202 status code for asynchronous processing.
```APIDOC
## POST /renderwolf/v1/jobs
### Description
Submits a render task as a durable job. Use this for clips, slow pages, or tasks where you prefer not to hold a connection open.
### Method
POST
### Endpoint
/renderwolf/v1/jobs
### Request Body
- **kind** (string) - Required - `screenshot`, `pdf`, `qr`, `image`, `clip`, or `site_preview`.
- **request** (object) - Required - The specific request parameters for the chosen kind.
- **external_id** (string) - Optional - An identifier for the job.
```
--------------------------------
### PUT /v1/templates/{id}
Source: https://ironfang.uk/renderwolf/docs
Update an existing template.
```APIDOC
## PUT /v1/templates/{id}
### Description
Update an existing template. Edits invalidate the render cache automatically.
### Method
PUT
### Endpoint
/v1/templates/{id}
### Parameters
#### Path Parameters
- **id** (string) - Required - The UUIDv7 of the template
```
--------------------------------
### Retrieve API Usage
Source: https://ironfang.uk/renderwolf/docs
Returns the current consumption metrics for the billing period. The 'renders' field is deprecated; use 'credits' for new integrations.
```json
{"period": "2026-08", "credits": 1240, "renders": 1240, "limit": 50000}
```
--------------------------------
### Register a delivery destination
Source: https://ironfang.uk/renderwolf/docs
Create a new webhook destination to receive job notifications. The signing secret is returned only once upon creation.
```http
POST /renderwolf/v1/destinations
{ "type": "webhook", "name": "Production", "url": "https://hooks.example.com/renderwolf" }
→ 201 { "id": "0198f0a1...", "signing_secret": "...", "signing_secret_note": "store this now; it is not shown again" }
```
--------------------------------
### Submit a Rendering Job
Source: https://ironfang.uk/renderwolf/docs
Submits a durable rendering job for long-running tasks, returning a 202 status code.
```http
POST /renderwolf/v1/jobs
Idempotency-Key: catalogue-42-v1
{
"kind": "screenshot",
"request": { "url": "https://example.com", "full_page": true },
"external_id": "catalogue-42"
}
```
--------------------------------
### DELETE /v1/templates/{id}
Source: https://ironfang.uk/renderwolf/docs
Delete a template.
```APIDOC
## DELETE /v1/templates/{id}
### Description
Delete a stored template.
### Method
DELETE
### Endpoint
/v1/templates/{id}
### Parameters
#### Path Parameters
- **id** (string) - Required - The UUIDv7 of the template
```
--------------------------------
### Verify webhook signature
Source: https://ironfang.uk/renderwolf/docs
Validate the authenticity of incoming webhooks by comparing the signature against the raw request body.
```python
expected = "v1=" + hmac_sha256(secret, timestamp + "." + raw_body).hexdigest()
compare(expected, headers["Renderwolf-Signature"]) # constant time
```
--------------------------------
### Error Response Structure
Source: https://ironfang.uk/renderwolf/docs
The standard JSON format for API errors, including a machine-readable code and descriptive message.
```json
{"error": {"code": "quota_exhausted", "message": "monthly credits exhausted - upgrade your plan or wait for the period to reset"}}
```
=== COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.