List Workspace Logs
Retrieve a paginated, trimmed list of render and API logs for your workspace
Retrieve render and API logs for the workspace linked to your API key. Results are
returned newest-first and paginated with an opaque cursor. Each entry is a trimmed
summary of the request — the render response (output urls and metadata) is included,
while heavier fields (request body, previews, AI generation details) are omitted.
Endpoint#
https://api.orshot.com/v1/workspace/logsQuery Parameters#
| Parameter | Type | Description |
|---|---|---|
limit | Number | Number of logs to return. 1–50, defaults to 50. |
cursor | Number | next_cursor from a previous response — fetches the next (older) page. |
status | String | Filter by outcome: 200 for successful renders, error for failures. |
source | String | Filter by request source, e.g. api, signed-url, webhook. |
template_id | String | Filter by template — matches both library and studio template ids. |
format | String | Filter by output format, e.g. png, jpg, pdf, mp4. |
from | String | ISO timestamp — only return logs created at or after this time. |
to | String | ISO timestamp — only return logs created at or before this time. |
Request#
await fetch("https://api.orshot.com/v1/workspace/logs?limit=50", {
method: "GET",
headers: {
Authorization: "Bearer <ORSHOT_API_KEY>",
},
});Pagination#
Logs are paginated with an opaque cursor based on the log id (stable as new logs
arrive). To fetch the next page, pass the next_cursor from the previous response as
the cursor parameter. When has_more is false, next_cursor is null and there
are no more logs.
// Page 1
const page1 = await fetch(
"https://api.orshot.com/v1/workspace/logs?limit=50",
{ headers: { Authorization: "Bearer <ORSHOT_API_KEY>" } },
).then((r) => r.json());
// Page 2 — pass the cursor from page 1
const page2 = await fetch(
`https://api.orshot.com/v1/workspace/logs?limit=50&cursor=${page1.pagination.next_cursor}`,
{ headers: { Authorization: "Bearer <ORSHOT_API_KEY>" } },
).then((r) => r.json());Response Fields#
| Field | Type | Description |
|---|---|---|
data | Array | List of log entries, newest first. |
data[].id | Number | Unique log id. Also used as the pagination cursor. |
data[].created_at | String | ISO timestamp of when the request was made. |
data[].status | Number | HTTP status code of the render (200 on success). |
data[].source | String | Where the request originated, e.g. api, signed-url. |
data[].template_id | String|Number | Library template slug or studio template id used. |
data[].template_type | String | library or studio. |
data[].format | String | Output format, e.g. png, jpg, pdf, mp4. |
data[].type | String | Response type, url or binary. |
data[].response_time_ms | Number | Time taken to render, in milliseconds. |
data[].response | Object|null | Render output — urls and metadata. null for failed renders. |
data[].credits_used | Number | Credits consumed by the render (0 for failures). |
data[].is_overage | Boolean | Whether the render was billed as overage. |
data[].error | String|null | Error message when the render failed, otherwise null. |
pagination.limit | Number | The page size used for this response. |
pagination.has_more | Boolean | Whether more logs are available beyond this page. |
pagination.next_cursor | Number|null | Cursor for the next page, or null when there are no more logs. |
Error Responses#
Bad Request (400)#
Returned when cursor is not a valid log id.
{
"error": "Invalid cursor",
"message": "cursor must be a log id"
}Forbidden (403)#
Returned when the API key is missing or invalid.
{
"error": "Access Forbidden"
}Rate Limits#
- 20 requests per minute per API key
Ready to automate?
Start rendering images, PDFs and videos from your templates in under 2 minutes. Free plan, no credit card.
Get your API key- Image, PDF and video generation via API
- Visual editor with AI and smart layouts
- Zapier, Make, MCP and 50+ integrations
- White-label embed for your own app
- 30 free credits — no credit card required