{"openapi":"3.1.0","info":{"title":"Cadenzova API","version":"1.0.0","description":"Plan, create, schedule and measure a brand's social media. Same tools as the Cadenzova MCP server. Authenticate with an API key from Cadenzova → AI agents."},"servers":[{"url":"https://cadenzova-mcp.onrender.com"}],"components":{"schemas":{"Pinterest":{"properties":{"board":{"description":"Board name, from list_boards","title":"Board","type":"string"},"title":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"https:// link the pin opens","title":"Link"}},"required":["board"],"title":"Pinterest","type":"object"},"Post":{"description":"One piece of content and every place it goes.","properties":{"platforms":{"description":"Connected platform ids from list_channels","items":{"type":"string"},"minItems":1,"title":"Platforms","type":"array"},"caption":{"default":"","description":"Caption for every platform, hashtags included","title":"Caption","type":"string"},"captions":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Per-platform captions that replace `caption`, e.g. {'x': '…'}","title":"Captions"},"image_asset_ids":{"description":"From search_media or the media tools","items":{"type":"string"},"title":"Image Asset Ids","type":"array"},"video_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Video Asset Id"},"cover_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Cover image; required for a Pinterest video pin","title":"Cover Asset Id"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ISO 8601 with a timezone, e.g. 2026-12-01T09:30:00+00:00","title":"Scheduled At"},"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The product this post promotes, from list_products","title":"Product Id"},"pinterest":{"anyOf":[{"$ref":"#/components/schemas/Pinterest"},{"type":"null"}],"default":null},"youtube_title":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"title":"Youtube Title"},"tiktok":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"TikTok needs {privacy_level, allow_comment, allow_duet, allow_stitch}","title":"Tiktok"},"first_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Instagram first comment","title":"First Comment"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Image description (Bluesky and Pinterest)","title":"Alt Text"}},"required":["platforms"],"title":"Post","type":"object"}},"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer"}}},"security":[{"apiKey":[]}],"paths":{"/v1/tools/get_started":{"post":{"operationId":"get_started","summary":"Get started","description":"Call this first. Returns what this connection may do, the brands it can see and what each one still needs (products, connected channels) before you can plan and post.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_startedArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/list_brands":{"post":{"operationId":"list_brands","summary":"List brands","description":"The brands this connection can work on, with their ids.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_brandsArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_brand_brief":{"post":{"operationId":"get_brand_brief","summary":"Brand brief","description":"Who the brand is: description, niche, voice, audience and personas, content focus, the owner's standing instructions, colours, and the learned writing style when one exists. Read it before writing anything in the brand's name.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"title":"get_brand_briefArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/list_products":{"post":{"operationId":"list_products","summary":"List products","description":"What the brand sells: name, description, price, link, status. Use product_id when a post is about a product, so results and revenue can be traced back to it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"},"limit":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"},"offset":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},"title":"list_productsArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/list_channels":{"post":{"operationId":"list_channels","summary":"List channels","description":"Every platform the brand can post to: whether it is connected and healthy, caption, title and hashtag limits, which media it accepts and whether media is required. Also the plan's usage (posts this month, channels). Check it before choosing platforms.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"title":"list_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_calendar":{"post":{"operationId":"get_calendar","summary":"Calendar","description":"What is scheduled, waiting for approval, publishing, failed, or went out today, soonest first. Read it before planning so new posts fill gaps instead of doubling up.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"title":"get_calendarArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_performance":{"post":{"operationId":"get_performance","summary":"Performance","description":"Results across platforms for the last N days against the N days before: posts, engagement and impressions per platform, best hours and days, top content types and the top posts. 'measured' is how many posts have numbers; a low count means weak evidence.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"},"days":{"default":30,"maximum":90,"minimum":1,"title":"Days","type":"integer"}},"title":"get_performanceArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_playbook":{"post":{"operationId":"get_playbook","summary":"Platform playbook","description":"For one platform: Cadenzova's playbook for it (what the platform rewards, formats, hooks) and what this brand's own history shows: best content types, timing, which products are over- or under-promoted, and what to make next. Use it to decide what to post.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"description":"pinterest, instagram, tiktok, youtube, facebook, x, bluesky, linkedin or threads","title":"Platform","type":"string"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["platform"],"title":"get_playbookArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_best_times":{"post":{"operationId":"get_best_times","summary":"Best time to post","description":"The next good slot for a platform. 'learned' is true when it comes from this brand's own results, false when it is a general default.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"title":"Platform","type":"string"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["platform"],"title":"get_best_timesArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/search_media":{"post":{"operationId":"search_media","summary":"Search media","description":"The brand's media library, newest first: the user's uploads, product photos, or media Cadenzova generated. Returns asset ids to attach to posts and short-lived preview links.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"},"source":{"default":"uploads","description":"uploads, products or generated","title":"Source","type":"string"}},"title":"search_mediaArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_notes":{"post":{"operationId":"get_notes","summary":"Read notes","description":"Notes kept for this brand by you or any other assistant the user connected: strategy, decisions, what was tried and learned. Read them at the start of a session.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"title":"get_notesArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/save_note":{"post":{"operationId":"save_note","summary":"Save a note","description":"Keep something for future sessions and other assistants: the strategy you agreed, a decision and why, a lesson from results. One topic per key; saving the same key again replaces it. An empty body deletes the note. Never store passwords or personal data.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"key":{"description":"Short topic name, e.g. 'strategy' or 'q4-campaign'","maxLength":80,"minLength":1,"title":"Key","type":"string"},"body":{"maxLength":8000,"title":"Body","type":"string"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["key","body"],"title":"save_noteArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_usage":{"post":{"operationId":"get_usage","summary":"Plan and usage","description":"The account's plan, posts used this month against the limit, connected channels, AI credits left and where to upgrade. Check it before a large batch.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_usageArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/validate_post":{"post":{"operationId":"validate_post","summary":"Check a post","description":"Dry run. Checks a post against each platform's rules (length, media, required fields, connection) and warns about wording that reads as AI-written, near-repeats of recent posts and weak openings. Writes nothing. Run it before create_post and fix what it reports.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post":{"$ref":"#/components/schemas/Post"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["post"],"title":"validate_postArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/create_post":{"post":{"operationId":"create_post","summary":"Create a post","description":"Create one post for one or more platforms. when: 'queue' = the brand's next free posting time, 'schedule' = at scheduled_at, 'now' = publish immediately, 'draft' = leave it for the user. On a 'Draft and approve' connection the post is always HELD for the user's approval and the result says so; do not retry it. One post counts once against the monthly limit however many platforms it goes to. Safe to retry: the same content is never written twice.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post":{"$ref":"#/components/schemas/Post"},"when":{"anyOf":[{"enum":["draft","queue","schedule","now"],"type":"string"},{"type":"null"}],"default":null,"title":"When"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"},"idempotency_key":{"anyOf":[{"pattern":"^[A-Za-z0-9_-]{8,64}$","type":"string"},{"type":"null"}],"default":null,"title":"Idempotency Key"}},"required":["post"],"title":"create_postArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/create_posts":{"post":{"operationId":"create_posts","summary":"Create several posts","description":"Create up to 30 posts in one call, each with its own scheduled_at: the way to plan a week. All or nothing: if one post is invalid, none are written and the error names it. On a 'Draft and approve' connection they are all HELD for approval. The free plan takes 5 per call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"posts":{"items":{"$ref":"#/components/schemas/Post"},"maxItems":30,"minItems":1,"title":"Posts","type":"array"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"},"idempotency_key":{"anyOf":[{"pattern":"^[A-Za-z0-9_-]{8,64}$","type":"string"},{"type":"null"}],"default":null,"title":"Idempotency Key"}},"required":["posts"],"title":"create_postsArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_post":{"post":{"operationId":"get_post","summary":"Look at a post","description":"The current state of one post on every platform it goes to: held, scheduled, publishing, published (with its link) or failed (with the reason).","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"post_id from create_post, create_posts or get_calendar","title":"Post Id","type":"string"}},"required":["post_id"],"title":"get_postArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/update_post":{"post":{"operationId":"update_post","summary":"Edit a post","description":"Change the caption of a post that has not gone out yet: `caption` for every platform, or `captions` per platform. Pinterest title and link can be changed too.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"post_id from create_post, create_posts or get_calendar","title":"Post Id","type":"string"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Caption"},"captions":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Captions"},"pinterest_title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Pinterest Title"},"pinterest_link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Pinterest Link"}},"required":["post_id"],"title":"update_postArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/move_post":{"post":{"operationId":"move_post","summary":"Move a post","description":"Change when a post goes out. A held post keeps waiting for approval with the new time.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"post_id from create_post, create_posts or get_calendar","title":"Post Id","type":"string"},"scheduled_at":{"description":"ISO 8601 with a timezone, in the future","title":"Scheduled At","type":"string"}},"required":["post_id","scheduled_at"],"title":"move_postArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/delete_post":{"post":{"operationId":"delete_post","summary":"Delete a post","description":"Remove a post that has not gone out yet from every platform it was going to. Cannot be undone. A 'Draft and approve' connection can delete only posts still waiting for approval.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"post_id from create_post, create_posts or get_calendar","title":"Post Id","type":"string"}},"required":["post_id"],"title":"delete_postArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/list_boards":{"post":{"operationId":"list_boards","summary":"Pinterest boards","description":"The Pinterest boards this brand can pin to. A pin must name one.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"title":"list_boardsArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/import_media":{"post":{"operationId":"import_media","summary":"Import an image","description":"Bring one image into the brand's library from a public https link and get an asset id to use in a post. Images only; the user uploads videos in Cadenzova.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"title":"Url","type":"string"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["url"],"title":"import_mediaArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/list_pin_templates":{"post":{"operationId":"list_pin_templates","summary":"Pin templates","description":"The free Pinterest pin layouts render_pin_template can make, with what each needs.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_pin_templatesArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/render_pin_template":{"post":{"operationId":"render_pin_template","summary":"Make a pin image","description":"Lay out a Pinterest pin (1000×1500) from the brand's own photos, a title and optional subtitle and footer, in the brand's colours. Free. Returns an image asset id.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"template":{"title":"Template","type":"string"},"title":{"title":"Title","type":"string"},"image_asset_ids":{"default":[],"items":{"type":"string"},"maxItems":4,"title":"Image Asset Ids","type":"array"},"subtitle":{"default":"","title":"Subtitle","type":"string"},"footer":{"default":"","title":"Footer","type":"string"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["template","title"],"title":"render_pin_templateArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/create_video":{"post":{"operationId":"create_video","summary":"Make a short video","description":"Render a vertical video from the brand's own material. style 'slideshow': up to 10 photos with optional text per photo. style 'kinetic': up to 8 lines of animated text. Costs 10 credits. Returns a job_id: poll get_job until it is done, then use result.video_asset_id (and cover_asset_id) in a post.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"style":{"enum":["slideshow","kinetic"],"title":"Style","type":"string"},"texts":{"default":[],"items":{"type":"string"},"title":"Texts","type":"array"},"image_asset_ids":{"default":[],"items":{"type":"string"},"maxItems":10,"title":"Image Asset Ids","type":"array"},"seconds_per_slide":{"default":2.5,"maximum":8,"minimum":1,"title":"Seconds Per Slide","type":"number"},"with_music":{"default":true,"title":"With Music","type":"boolean"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["style"],"title":"create_videoArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/generate_image":{"post":{"operationId":"generate_image","summary":"Generate an image","description":"Make one new image from a description, in the brand's visual style, and add it to the library. Photographic and text-free: for words on an image use render_pin_template. Costs 21 credits. Returns a job_id: poll get_job until it is done, then use result.asset_id in a post. Prefer the brand's own photos (search_media) when they fit.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"prompt":{"maxLength":1500,"minLength":10,"title":"Prompt","type":"string"},"orientation":{"default":"square","enum":["square","portrait","story"],"title":"Orientation","type":"string"},"style":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Replaces the brand's saved image style","title":"Style"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["prompt"],"title":"generate_imageArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/get_job":{"post":{"operationId":"get_job","summary":"Job status","description":"Progress of a job started by another tool (video render, publishing). status is queued, running, done or failed; `result` holds the output when done.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"job_id":{"title":"Job Id","type":"string"}},"required":["job_id"],"title":"get_jobArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/suggest_captions":{"post":{"operationId":"suggest_captions","summary":"Caption suggestions","description":"Optional: have Cadenzova write one caption per platform in the brand's voice from your draft and/or an image. Costs 3 credits. You can write captions yourself for free; use this only when the user asks for Cadenzova's version.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platforms":{"items":{"type":"string"},"title":"Platforms","type":"array"},"draft":{"default":"","title":"Draft","type":"string"},"image_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Image Asset Id"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["platforms"],"title":"suggest_captionsArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}},"/v1/tools/ask_strategist":{"post":{"operationId":"ask_strategist","summary":"Ask Cadenzova's strategist","description":"Optional second opinion: ask Cadenzova's own strategist a question about this brand's results or what to post next. It answers from the brand's data. Costs 3 credits. You are not bound by its answer.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"question":{"maxLength":2000,"minLength":3,"title":"Question","type":"string"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brand id from list_brands. Leave out when the connection has one brand.","title":"Brand Id"}},"required":["question"],"title":"ask_strategistArguments","type":"object"}}}},"responses":{"200":{"description":"The tool's result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"402":{"description":"Plan limit reached (see upgrade_url)"},"403":{"description":"This key's permission level does not allow it"},"429":{"description":"Rate or credit limit reached"}}}}}}