Nubu
  • Features
  • How it works
  • Pricing
  • Integrations
  • FAQ
  • Contact
  • Docs
  • Blog
  • Log in
  • Log inSign up
    Nubu

    Creative automation for teams that ship campaigns, not busywork.

    Try for free
    Product
    FeaturesNubu MotionHow it worksPricingIntegrationsFAQ
    Company
    AboutContactDocsBlogLog in
    Legal
    Privacy policyTerms of serviceData deletion
    © 2026 Bear Studios · Nubu
    Introduction
    Templates overviewInstalling Nubu BuilderAdding template compsAdding propertiesAdding footageSetting defaultsExporting your templateUploading a template
    Flows overviewAvailable nodesAdding a nodeConnecting nodesWorking with dataTemplates and outputsUsing AI nodesBuilding a creative
    CampaignsTemplatesAssetsGlossariesRendersSettings
    Connecting Meta AdsConnecting Google AdsConnecting OpenAIConnecting Gemini AI StudioConnecting Anthropic
    AI Assistant overviewPrompt examplesAssistant settings and controls
    Nubu Motion scripts: the reference
    OverviewQuick startDifferences from After EffectsDeterminism
    JavaScript supportReferences and idsProject scriptsState and timeBudgets and errorsFormatting values
    GlobalTime conversionInterpolationVector mathsRandom and noiseColour conversionOther maths
    LayerCompPropertyKeyframePathGeometryProjectComponentConsoleComponentControlExpressionControl
    The property vocabularyAnimators propertiesAudio propertiesContent propertiesContents propertiesEffects propertiesExpression controls propertiesFills propertiesInstance controls propertiesLayer propertiesLayout propertiesMasks propertiesStrokes propertiesText style propertiesRig propertiesRigging propertiesRig controllers propertiesRigging weights propertiesRigging mesh propertiesRig items propertiesRig splines propertiesRig simulation propertiesRig properties propertiesRig drivers propertiesRig draw order propertiesTransform propertiesTrim path properties
    Error codesBudgets
    Changelog
    API overviewAuthentication and keysRate limits and errorsUploading assetsFoldersUploading templatesTriggering a flowRuns and creativesRendersAPI Request deliveryCallbacksConnect an AI client with MCP
    All docs
    API

    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:

    QueryMatches
    statusthe creative's status: rendered, queued, processing, rendering, failed
    campaign_id, flow_idthe campaign or flow the render was built in
    folder_ida render folder and every folder beneath it
    qthe file name and the delivery copy (headline, primary text, description, CTA, final URL)
    typevideo or image
    template_idthe template that built it
    market, language, versionthe creative's axes
    platform, placementthe delivery platform and placement
    integrationa 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.

    ScopeAllows
    renders.readList renders and read one with its download URL
    renders.deleteDelete 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.