Renders
Read the Renders page over the API, download finished files and delete renders exactly as the page does.
Renders are the Renders page over the API: every creative with a finished render attached, with the page's filters, each one's rendered file, and the page's own delete. A render's id is its creative's id, the same id the creatives routes use; the renders row behind it (the attempt the creative points at) rides under render.id.
Listing renders
curl "https://app.nubu.app/api/v1/renders?campaign_id=<campaign id>&type=video" \
-H "Authorization: Bearer nubu_api_..."
GET /renders lists the organisation's renders, newest first, paged like every list (limit, cursor). Each row carries the creative's status (rendered, or queued, processing, rendering and failed while a re-render is in flight or failed after an earlier success), campaign_id, flow_id, folder_id (the render folder on the Renders page), template_id, market, language, version, platform, placement, type (video or image), render (id, content_type, width, height, duration_seconds, size_bytes, rendered_at) and delivered_to (every ad platform the render was uploaded to, with its status).
The filters are the Renders page's:
| Query | Matches |
|---|---|
status | the creative's status: rendered, queued, processing, rendering, failed |
campaign_id, flow_id | the campaign or flow the render was built in |
folder_id | a render folder and every folder beneath it |
q | the file name and the delivery copy (headline, primary text, description, CTA, final URL) |
type | video or image |
template_id | the template that built it |
market, language, version | the creative's axes |
platform, placement | the delivery platform and placement |
integration | a platform the render was delivered to (meta_ads, google_ads) |
A creative without a finished render (one waiting in Review, one still building) is never a render: it lives on the creatives routes alone.
Reading one render
GET /renders/<id> adds attempts (every render attempt the creative made, oldest first) and a download_url for the rendered file, valid for 15 minutes (download_url_expires_at); a render that is being re-rendered has no URL until the new file lands.
Deleting a render
curl -X DELETE https://app.nubu.app/api/v1/renders/<id> \
-H "Authorization: Bearer nubu_api_..."
DELETE /renders/<id> performs exactly the deletion the Renders page performs: the creative and its rendered files go, freeing the storage they used, and the organisation is told as it is told on the page. The answer is { "deleted": true, "id": "...", "render_id": "..." }. A creative that is being re-rendered answers 409 conflict with details.reason locked; wait for the render to finish. Deleting a render is irreversible.
| Scope | Allows |
|---|---|
renders.read | List renders and read one with its download URL |
renders.delete | Delete renders (the creative and its files) |
renders.delete is a scope only the organisation owner can grant, when creating a key in Settings > Integrations > API; give it to the systems that genuinely clear renders, and keep every other key on renders.read.