{"openapi":"3.0.3","info":{"title":"Spica Post API","version":"1.0.0","description":"Schedule and publish posts to your connected social accounts from your own code. Make a key on your account page and send it as a Bearer token. Each route does what the assistant tool of the same name (its operationId) does, on your plan and within its limits."},"servers":[{"url":"https://app.spicapost.com"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"A key from your account page, starting with sp_live_."}}},"tags":[{"name":"Accounts"},{"name":"Media"},{"name":"Drafts"},{"name":"Publishing"},{"name":"Results"},{"name":"Plan"},{"name":"Webhooks"}],"paths":{"/v1/accounts":{"get":{"operationId":"accounts_list","tags":["Accounts"],"summary":"The social accounts connected to this workspace: each one’s id, network, name and status.","description":"The social accounts connected to this workspace: each one’s id, network, name and status. Drafts are written for these ids. An account whose status is disconnected has to be connected again on the user’s account page before anything can be posted to it.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/accounts/connect-links":{"get":{"operationId":"accounts_connect","tags":["Accounts"],"summary":"Links the user opens to connect their social accounts, one per network, with what is already connected on each.","description":"Links the user opens to connect their social accounts, one per network, with what is already connected on each. A link opens their account page on that network: they press Connect and sign in on the network’s own page, so you never see a password. Give them the link for each network they use, then call accounts_list to see what arrived. A network that cannot be connected yet answers ready: false and no link; say so instead of sending the user to it. Use it for a first connection and for one that needs reconnecting. Changes nothing.","parameters":[{"name":"network","in":"query","required":false,"description":"One network by its key in capabilities, such as \"instagram\". Leave it out for every network that can be connected.","schema":{"anyOf":[{"not":{}},{"type":"string","nullable":true}],"description":"One network by its key in capabilities, such as \"instagram\". Leave it out for every network that can be connected."}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/accounts/{accountId}/recent-posts":{"get":{"operationId":"posts_recent","tags":["Accounts"],"summary":"What one connected account has posted lately, read from the network itself: each post’s words, when it went out, what kind it is and its link, with likes and comments where the network gives them.","description":"What one connected account has posted lately, read from the network itself: each post’s words, when it went out, what kind it is and its link, with likes and comments where the network gives them. Read it during setup to hear how the business already writes, and before a new set of posts so nothing is said twice. Works for Bluesky, Instagram, Facebook Pages and Threads; for other networks read the account’s public page yourself. Changes nothing.","parameters":[{"name":"accountId","in":"path","required":true,"description":"An account id from accounts_list.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many posts to read, newest first, from 1 to 25. Ten when left out.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":25}],"description":"How many posts to read, newest first, from 1 to 25. Ten when left out."}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/accounts/{id}":{"delete":{"operationId":"accounts_disconnect","tags":["Accounts"],"summary":"Disconnect one account.","description":"Disconnect one account. Its stored connection is deleted and its queued posts are cancelled, so nothing more is sent to it; posts already made stay in the history. The account stays in the list as disconnected until the user connects it again on their account page. Ask the user first.","parameters":[{"name":"id","in":"path","required":true,"description":"An account id from accounts_list.","schema":{"type":"string"}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/capabilities":{"get":{"operationId":"capabilities","tags":["Accounts"],"summary":"What each network takes here: the longest caption and how it is counted, which file types, how many files (and whether a post needs one), and whether it has stories.","description":"What each network takes here: the longest caption and how it is counted, which file types, how many files (and whether a post needs one), and whether it has stories. Read it before writing for a network.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/media":{"get":{"operationId":"media_list","tags":["Media"],"summary":"Every uploaded file: id, name, type, size and alt text.","description":"Every uploaded file: id, name, type, size and alt text. A file with purgedAt has been removed from storage and can no longer be attached.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}},"post":{"operationId":"media_upload","tags":["Media"],"summary":"Upload one picture or video to attach to drafts: PNG, JPEG, WebP or MP4, up to 10 MB.","description":"Upload one picture or video to attach to drafts: PNG, JPEG, WebP or MP4, up to 10 MB. Answers its media id. A file that no draft uses is removed 24 hours after upload.","parameters":[{"name":"name","in":"query","required":false,"description":"The file name, for your own list.","schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"description":"The file itself, with its format as Content-Type and its size as Content-Length. A JSON body with name, mimeType and base64 is also taken.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}},"video/mp4":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":200,"description":"The file name, for the user’s own list."},"mimeType":{"type":"string","enum":["image/png","image/jpeg","image/webp","video/mp4"],"description":"The file’s real format. A file whose bytes do not match is refused."},"base64":{"type":"string","maxLength":14000000,"description":"The file’s bytes in standard base64, with no data: prefix. Up to 10 MB of file."},"alt":{"type":"string","maxLength":1000,"description":"What the picture shows, for people who cannot see it. Kept with the file."}},"required":["name","mimeType","base64"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/media/from-url":{"post":{"operationId":"media_from_url","tags":["Media"],"summary":"Add one picture or video by its public web address instead of sending the file: PNG, JPEG, WebP or MP4, up to 10 MB.","description":"Add one picture or video by its public web address instead of sending the file: PNG, JPEG, WebP or MP4, up to 10 MB. The service fetches it once and stores it; answers its media id, as media_upload does. Use it when the user points at a file that is already online. Refused when the address is not a public https one, cannot be fetched, is too large, or leads to a page instead of a file.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"The https address of the file itself, one that opens the picture or video in a browser without signing in. Not the address of a page that shows it."},"name":{"type":"string","maxLength":200,"description":"A file name for the user’s own list. Taken from the address when left out."},"alt":{"type":"string","maxLength":1000,"description":"What the picture shows, for people who cannot see it. Kept with the file."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/media/{id}":{"delete":{"operationId":"media_delete","tags":["Media"],"summary":"Remove one uploaded file from storage now.","description":"Remove one uploaded file from storage now. Refused with 409 while a draft uses it, while it is part of the saved brand, or while a post that uses it is still queued or not yet confirmed.","parameters":[{"name":"id","in":"path","required":true,"description":"A media id from media_upload or media_list.","schema":{"type":"string"}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/drafts":{"get":{"operationId":"drafts_list","tags":["Drafts"],"summary":"Every draft in the workspace, with its current version and the link that opens it in the user’s composer.","description":"Every draft in the workspace, with its current version and the link that opens it in the user’s composer.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}},"post":{"operationId":"drafts_create","tags":["Drafts"],"summary":"Create a draft: a title and one variant per account, each with its own text and media.","description":"Create a draft: a title and one variant per account, each with its own text and media. Nothing is sent. Answers the draft with its id and version. Check it with drafts_validate and show it to the user before publish or schedule.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","maxLength":200,"description":"A name for the draft in the user’s own list. It is never posted."},"variants":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string","minLength":1,"description":"An account id from accounts_list."},"text":{"type":"string","maxLength":20000,"description":"The caption for this account, within that network’s limit (see capabilities). Empty for a story. On YouTube the first line is the video title."},"mediaIds":{"type":"array","items":{"type":"string","minLength":1},"maxItems":20,"description":"Media ids from media_upload, media_list or templates_render, in the order they should appear. Empty for a text post."},"kind":{"type":"string","enum":["post","story"],"description":"Leave out for an ordinary post. \"story\" sends exactly one photo or video as an Instagram or Facebook story, with empty text."},"options":{"type":"object","properties":{"visibility":{"type":"string","enum":["public","unlisted","private"],"description":"YouTube only: who can see this video. Ask the user; left out, the video is public."},"board":{"type":"string","maxLength":180,"description":"Pinterest only: the board this pin goes to, by its name as shown on Pinterest or its id (boards_list lists them). Left out, the pin goes to the account’s chosen board."},"link":{"type":"string","maxLength":2048,"description":"Pinterest only: the https address the pin leads to, such as a page of the business’s website. Left out, the first https address in the description is used."},"thread":{"type":"boolean","description":"X only: true posts the pictures as a thread, the first on the post with its text and each next one on a reply of its own, up to 10. X crops several pictures on one post into small tiles, so a carousel goes to X this way, drawn in the landscape cut (templates_render)."},"firstReply":{"type":"string","maxLength":1000,"description":"X only: the text of a reply posted right under the post, up to 280 weighted characters. The place for a link: the post itself reads better without one. With thread, it rides on the first reply with the second picture."},"type":{"type":"string","enum":["update","offer","event"],"description":"\"update\" (the default), \"offer\" or \"event\"."},"language":{"type":"string","maxLength":20,"description":"The language the post is written in, as a code such as en or es."},"button":{"type":"object","properties":{"action":{"type":"string","enum":["book","order","shop","learn_more","sign_up","call"],"description":"What the button says. \"call\" rings the phone number on the profile."},"url":{"type":"string","maxLength":2000,"description":"Where the button leads, starting with https://. Leave out for \"call\"."}},"required":["action"],"additionalProperties":false,"description":"One button on an update or an event. An offer has none."},"title":{"type":"string","maxLength":58,"description":"The name of the offer or event, up to 58 characters. Needed for both."},"start":{"type":"string","maxLength":16,"description":"The first day of the offer or event, as YYYY-MM-DD, or with a time as YYYY-MM-DDTHH:MM, in the business’s own local time. Needed for both."},"end":{"type":"string","maxLength":16,"description":"The last day, written the same way as start. Give a time for both or for neither."},"offer":{"type":"object","properties":{"code":{"type":"string","maxLength":58,"description":"The code a customer gives, up to 58 characters."},"url":{"type":"string","maxLength":2000,"description":"Where the offer is redeemed online, starting with https://."},"terms":{"type":"string","maxLength":5000,"description":"The terms of the offer."}},"additionalProperties":false,"description":"An offer only: what the customer needs to redeem it."}},"additionalProperties":false,"description":"What a post carries besides its text and media, on the four networks that take it; leave out everywhere else. YouTube: visibility. Pinterest: board and link. X: thread and firstReply. Google Business Profile: a button, or the details of an offer or an event (every field but visibility, board, link, thread and firstReply)."}},"required":["accountId","text","mediaIds"],"additionalProperties":false},"maxItems":100,"description":"One entry per account the post goes to, each with its own text and media."}},"required":["title","variants"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/drafts/{id}":{"get":{"operationId":"drafts_get","tags":["Drafts"],"summary":"One draft: its title, its version and the text and media for each account.","description":"One draft: its title, its version and the text and media for each account. mediaRemovalAt, when present, is when its files will be removed if the draft is left unposted.","parameters":[{"name":"id","in":"path","required":true,"description":"The draft id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}},"patch":{"operationId":"drafts_edit","tags":["Drafts"],"summary":"Replace a draft’s title and variants.","description":"Replace a draft’s title and variants. Send the whole draft, not only what changed, with the version you last read; the answer carries the next version. Refused with 409 when the draft changed in the meantime: read it again with drafts_get. Posts already queued keep the content they were queued with.","parameters":[{"name":"id","in":"path","required":true,"description":"The draft id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"The draft’s version as you last read it. A different number is refused, so nothing goes out with content the user did not see."},"title":{"type":"string","maxLength":200,"description":"A name for the draft in the user’s own list. It is never posted."},"variants":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string","minLength":1,"description":"An account id from accounts_list."},"text":{"type":"string","maxLength":20000,"description":"The caption for this account, within that network’s limit (see capabilities). Empty for a story. On YouTube the first line is the video title."},"mediaIds":{"type":"array","items":{"type":"string","minLength":1},"maxItems":20,"description":"Media ids from media_upload, media_list or templates_render, in the order they should appear. Empty for a text post."},"kind":{"type":"string","enum":["post","story"],"description":"Leave out for an ordinary post. \"story\" sends exactly one photo or video as an Instagram or Facebook story, with empty text."},"options":{"type":"object","properties":{"visibility":{"type":"string","enum":["public","unlisted","private"],"description":"YouTube only: who can see this video. Ask the user; left out, the video is public."},"board":{"type":"string","maxLength":180,"description":"Pinterest only: the board this pin goes to, by its name as shown on Pinterest or its id (boards_list lists them). Left out, the pin goes to the account’s chosen board."},"link":{"type":"string","maxLength":2048,"description":"Pinterest only: the https address the pin leads to, such as a page of the business’s website. Left out, the first https address in the description is used."},"thread":{"type":"boolean","description":"X only: true posts the pictures as a thread, the first on the post with its text and each next one on a reply of its own, up to 10. X crops several pictures on one post into small tiles, so a carousel goes to X this way, drawn in the landscape cut (templates_render)."},"firstReply":{"type":"string","maxLength":1000,"description":"X only: the text of a reply posted right under the post, up to 280 weighted characters. The place for a link: the post itself reads better without one. With thread, it rides on the first reply with the second picture."},"type":{"type":"string","enum":["update","offer","event"],"description":"\"update\" (the default), \"offer\" or \"event\"."},"language":{"type":"string","maxLength":20,"description":"The language the post is written in, as a code such as en or es."},"button":{"type":"object","properties":{"action":{"type":"string","enum":["book","order","shop","learn_more","sign_up","call"],"description":"What the button says. \"call\" rings the phone number on the profile."},"url":{"type":"string","maxLength":2000,"description":"Where the button leads, starting with https://. Leave out for \"call\"."}},"required":["action"],"additionalProperties":false,"description":"One button on an update or an event. An offer has none."},"title":{"type":"string","maxLength":58,"description":"The name of the offer or event, up to 58 characters. Needed for both."},"start":{"type":"string","maxLength":16,"description":"The first day of the offer or event, as YYYY-MM-DD, or with a time as YYYY-MM-DDTHH:MM, in the business’s own local time. Needed for both."},"end":{"type":"string","maxLength":16,"description":"The last day, written the same way as start. Give a time for both or for neither."},"offer":{"type":"object","properties":{"code":{"type":"string","maxLength":58,"description":"The code a customer gives, up to 58 characters."},"url":{"type":"string","maxLength":2000,"description":"Where the offer is redeemed online, starting with https://."},"terms":{"type":"string","maxLength":5000,"description":"The terms of the offer."}},"additionalProperties":false,"description":"An offer only: what the customer needs to redeem it."}},"additionalProperties":false,"description":"What a post carries besides its text and media, on the four networks that take it; leave out everywhere else. YouTube: visibility. Pinterest: board and link. X: thread and firstReply. Google Business Profile: a button, or the details of an offer or an event (every field but visibility, board, link, thread and firstReply)."}},"required":["accountId","text","mediaIds"],"additionalProperties":false},"maxItems":100,"description":"One entry per account the post goes to, each with its own text and media."}},"required":["version","title","variants"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}},"delete":{"operationId":"drafts_delete","tags":["Drafts"],"summary":"Delete a draft, and with it each of its files that no other draft uses.","description":"Delete a draft, and with it each of its files that no other draft uses. Refused with 409 while one of its posts is queued or not yet confirmed. Posts already made stay in the history.","parameters":[{"name":"id","in":"path","required":true,"description":"The draft id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/drafts/{id}/validate":{"post":{"operationId":"drafts_validate","tags":["Drafts"],"summary":"Check a draft against the rules of every network it goes to.","description":"Check a draft against the rules of every network it goes to. Answers valid, and errors as plain sentences that say what to fix. Changes nothing. publish and schedule run the same check and refuse a draft that fails it.","parameters":[{"name":"id","in":"path","required":true,"description":"The draft id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"The draft’s version as you last read it. A different number is refused, so nothing goes out with content the user did not see."}},"required":["version"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/check":{"post":{"operationId":"post_check","tags":["Drafts"],"summary":"Would each network take this post? Give the text, the networks and how many photos and videos; answers for each network whether it is ready, what is wrong, and the length used against the limit.","description":"Would each network take this post? Give the text, the networks and how many photos and videos; answers for each network whether it is ready, what is wrong, and the length used against the limit. Needs no draft and changes nothing.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":20000,"description":"The caption to check."},"networks":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":12,"description":"Network keys to check against: x, linkedin, instagram, facebook, threads, bluesky, tiktok, youtube, google (Google Business Profile), pinterest."},"images":{"type":"integer","minimum":0,"maximum":20,"description":"How many photos would be attached."},"videos":{"type":"integer","minimum":0,"maximum":20,"description":"How many videos would be attached."},"story":{"type":"boolean","description":"True to check it as a story instead of a post."}},"required":["text","networks"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/posts":{"post":{"operationId":"posts_create","tags":["Publishing"],"summary":"Writes a post and sends it in one request: now, at scheduledAt, or into the next free posting time.","description":"Writes a post and sends it in one request: now, at scheduledAt, or into the next free posting time. It is checked against every network it goes to first, and if anything is refused nothing is kept. For different words or settings per account, make a draft and schedule it instead.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":20000,"description":"The words of the post, the same for every account named. On YouTube and Pinterest the first line is the title."},"accountIds":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100,"description":"The accounts it goes to, by id from GET /v1/accounts, each once."},"mediaIds":{"type":"array","items":{"type":"string","minLength":1},"maxItems":20,"description":"Files from POST /v1/media, in the order they should appear. The same for every account."},"title":{"type":"string","maxLength":200,"description":"A name for the draft in your own list; never posted. The first line of the text when left out."},"scheduledAt":{"type":"string","format":"date-time","description":"When to post, in UTC ending in Z. Left out (and no queue), it goes out now."},"queue":{"type":"boolean","description":"true puts it in the next free posting time instead. Not with scheduledAt."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":190,"description":"A key you make up for this one post (a UUID works). Repeating the request with it answers the same post and never posts twice."}},"required":["text","accountIds","idempotencyKey"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/drafts/{id}/publish":{"post":{"operationId":"publish","tags":["Publishing"],"summary":"Post a draft now to every account in it.","description":"Post a draft now to every account in it. Call it only after the user said yes to this post. Answers one delivery per account in state queued, which means accepted, not posted: read jobs_get for the outcome and the link to the live post. One call counts as one post on the plan.","parameters":[{"name":"id","in":"path","required":true,"description":"The draft id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"The draft’s version as you last read it. A different number is refused, so nothing goes out with content the user did not see."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"A key you make up for this one request, 8 to 200 characters (a UUID works). Repeating the request with the same key answers the same deliveries and never posts twice, so reuse it after a timeout. A key already used for another draft, version or time is refused."}},"required":["version","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/drafts/{id}/schedule":{"post":{"operationId":"schedule","tags":["Publishing"],"summary":"Queue a draft to post at a later time, to every account in it.","description":"Queue a draft to post at a later time, to every account in it. Call it only after the user said yes to this post and this time. Answers one delivery per account in state queued; a warning on a delivery means that account’s connection will lapse before then and the user should reconnect it. Refused when the time is further ahead than the plan schedules (usage_get says how far).","parameters":[{"name":"id","in":"path","required":true,"description":"The draft id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"The draft’s version as you last read it. A different number is refused, so nothing goes out with content the user did not see."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"A key you make up for this one request, 8 to 200 characters (a UUID works). Repeating the request with the same key answers the same deliveries and never posts twice, so reuse it after a timeout. A key already used for another draft, version or time is refused."},"scheduledAt":{"type":"string","format":"date-time","description":"When to post, in UTC and ending in Z, for example 2026-11-06T14:00:00Z. Work it out from the user’s local time (usage_get names the workspace time zone). It must be in the future."}},"required":["version","idempotencyKey","scheduledAt"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/drafts/{id}/queue":{"post":{"operationId":"queue_add","tags":["Publishing"],"summary":"Queue a draft for the next free posting time, to every account in it, without choosing a date.","description":"Queue a draft for the next free posting time, to every account in it, without choosing a date. Call it only after the user said yes to this post; tell them the time it was given. The time is the next of the saved posting times at which none of the draft’s accounts already has a post. Answers one delivery per account in state queued, with its scheduledAt. Refused when no posting times are saved yet (queue_set) or when every one the plan can schedule for is taken.","parameters":[{"name":"id","in":"path","required":true,"description":"The draft id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"The draft’s version as you last read it. A different number is refused, so nothing goes out with content the user did not see."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"A key you make up for this one request, 8 to 200 characters (a UUID works). Repeating the request with the same key answers the same deliveries and never posts twice, so reuse it after a timeout. A key already used for another draft, version or time is refused."}},"required":["version","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/queue":{"get":{"operationId":"queue_get","tags":["Publishing"],"summary":"The saved posting times: each day’s own times (week), the time zone they are read in, and the next five.","description":"The saved posting times: each day’s own times (week), the time zone they are read in, and the next five. times and days say the same the short way, and uniform is true when every posting day has the same times. set is false until the user has chosen them.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}},"put":{"operationId":"queue_set","tags":["Publishing"],"summary":"Save the posting times the queue uses, replacing the ones saved before: either the same times on some days (times and days), or each day’s own (week).","description":"Save the posting times the queue uses, replacing the ones saved before: either the same times on some days (times and days), or each day’s own (week). To change one day, read queue_get, change that day in week and send the whole week back. Ask the user which days and times they want first. Posts that are already scheduled keep their times.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"times":{"type":"array","items":{"type":"string"},"description":"The short way, for the same times on several days: one to twelve times of day on the 24-hour clock with two digits each, such as \"09:00\" or \"17:30\". They are read in the workspace time zone. Leave out when sending week."},"days":{"type":"array","items":{"type":"string"},"description":"With times: the days to post on, from mon, tue, wed, thu, fri, sat, sun. Every day when left out."},"week":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Each day’s own times, for days that differ, such as { \"mon\": [\"17:30\"], \"tue\": [\"09:00\", \"17:30\"] }. A day left out has none. Send this or times and days, not both."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/jobs":{"get":{"operationId":"jobs_list","tags":["Publishing"],"summary":"Every delivery, one per post per account: queued, posted, failed or cancelled, with its time, state, error and receipt.","description":"Every delivery, one per post per account: queued, posted, failed or cancelled, with its time, state, error and receipt.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/jobs/{id}":{"get":{"operationId":"jobs_get","tags":["Publishing"],"summary":"One delivery and its outcome.","description":"One delivery and its outcome. state is queued, provider_accepted (the network has it and is still processing), published (receipt.url is the live post), failed (error says why), unknown (the outcome could not be confirmed: do not send it again, read it again later) or cancelled.","parameters":[{"name":"id","in":"path","required":true,"description":"A delivery id from publish, schedule or jobs_list.","schema":{"type":"string"}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/jobs/{id}/cancel":{"post":{"operationId":"jobs_cancel","tags":["Publishing"],"summary":"Cancel one delivery that is still queued.","description":"Cancel one delivery that is still queued. Refused with 409 once it is being sent or has been sent. Each account of a post is its own delivery, so cancel each one that should not go out.","parameters":[{"name":"id","in":"path","required":true,"description":"A delivery id from publish, schedule or jobs_list.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/jobs/{id}/reschedule":{"post":{"operationId":"jobs_reschedule","tags":["Publishing"],"summary":"Move one delivery that is still queued to another time in the future.","description":"Move one delivery that is still queued to another time in the future. Refused with 409 once it is being sent or has been sent. Each account of a post is its own delivery.","parameters":[{"name":"id","in":"path","required":true,"description":"A delivery id from publish, schedule or jobs_list.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scheduledAt":{"type":"string","format":"date-time","description":"When to post, in UTC and ending in Z, for example 2026-11-06T14:00:00Z. Work it out from the user’s local time (usage_get names the workspace time zone). It must be in the future."}},"required":["scheduledAt"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/results":{"get":{"operationId":"results_get","tags":["Results"],"summary":"How the posts of the last 7, 30 or 90 days did, the same numbers as the Results page: how many went out, their likes, comments and shares, views and reach where a network reports them, the same for the period before, each network’s share, the five posts that did best with their links, the times of the week the posts did best at (bestTimes, from the last 90 days; times is empty until enough posts have results), and what a post got on average with each hashtag (hashtags).","description":"How the posts of the last 7, 30 or 90 days did, the same numbers as the Results page: how many went out, their likes, comments and shares, views and reach where a network reports them, the same for the period before, each network’s share, the five posts that did best with their links, the times of the week the posts did best at (bestTimes, from the last 90 days; times is empty until enough posts have results), and what a post got on average with each hashtag (hashtags). Use it when the user asks how their posts are doing or what to post more of. notReported names networks posted to that gave no numbers. A post is read 1 hour, 1 day, 3 days and 7 days after it goes out, so a new post may have nothing yet. Where a Google Business Profile is connected, google holds what the profile itself got, by Google’s own count, over the same number of days ending three days ago (period): how many people called (calls), asked for directions (directions) or opened the website from it (websiteClicks), and how often it was seen (views, split into viewsInSearch and viewsInMaps). totals adds up every profile that was read and profiles lists each one; a profile whose state is no_reading gave no numbers just now, so say that and ask again later, and reconnect means the user reconnects it on their account page. google is null when no profile is connected. Part of Studio and Pro. Changes nothing.","parameters":[{"name":"days","in":"query","required":false,"description":"How far back to look: 7, 30 or 90 days. 30 when left out.","schema":{"anyOf":[{"not":{}},{"type":"integer"}],"description":"How far back to look: 7, 30 or 90 days. 30 when left out."}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/usage":{"get":{"operationId":"usage_get","tags":["Plan"],"summary":"What the plan includes and what is used this month: posts, accounts and uploads, the workspace time zone, when the month ends, and the latest time a post can be scheduled for right now.","description":"What the plan includes and what is used this month: posts, accounts and uploads, the workspace time zone, when the month ends, and the latest time a post can be scheduled for right now. Check it before queuing a batch.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/webhooks":{"get":{"operationId":"webhooks_list","tags":["Webhooks"],"summary":"Your webhook endpoints: each one’s address, events, whether it is on, and how its last delivery went.","description":"Your webhook endpoints: each one’s address, events, whether it is on, and how its last delivery went. Never the secret.","parameters":[],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}},"post":{"operationId":"webhooks_create","tags":["Webhooks"],"summary":"Adds an endpoint.","description":"Adds an endpoint. The answer carries its secret, which starts with whsec_ and is shown only here: keep it to check the Spica-Signature header of each request. Up to 5 endpoints.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"description":"The https address events are sent to."},"events":{"type":"array","items":{"type":"string","enum":["post.published","post.failed","post.needs_check","post.cancelled","account.needs_reconnect"]},"minItems":1,"description":"Which events to send: post.published, post.failed, post.needs_check, post.cancelled, account.needs_reconnect. Every one when left out."},"description":{"type":"string","maxLength":120,"description":"A note for your own list."}},"required":["url"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/webhooks/{id}":{"patch":{"operationId":"webhooks_update","tags":["Webhooks"],"summary":"Changes an endpoint’s address, events, note, or whether it is on.","description":"Changes an endpoint’s address, events, note, or whether it is on. Its secret stays the same.","parameters":[{"name":"id","in":"path","required":true,"description":"A webhook id from GET /v1/webhooks.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"description":"A new https address."},"events":{"type":"array","items":{"type":"string","enum":["post.published","post.failed","post.needs_check","post.cancelled","account.needs_reconnect"]},"minItems":1,"description":"Which events to send: post.published, post.failed, post.needs_check, post.cancelled, account.needs_reconnect. Every one when left out."},"description":{"type":"string","maxLength":120,"description":"A note for your own list."},"enabled":{"type":"boolean","description":"false stops sending to it; true starts again."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}},"delete":{"operationId":"webhooks_delete","tags":["Webhooks"],"summary":"Removes an endpoint and every event still waiting for it.","description":"Removes an endpoint and every event still waiting for it.","parameters":[{"name":"id","in":"path","required":true,"description":"A webhook id from GET /v1/webhooks.","schema":{"type":"string"}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/webhooks/{id}/test":{"post":{"operationId":"webhooks_test","tags":["Webhooks"],"summary":"Sends a ping event to an endpoint within the minute, signed like any other.","description":"Sends a ping event to an endpoint within the minute, signed like any other. Its outcome is in the endpoint’s events.","parameters":[{"name":"id","in":"path","required":true,"description":"A webhook id from GET /v1/webhooks.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}},"/v1/webhooks/{id}/events":{"get":{"operationId":"webhooks_events","tags":["Webhooks"],"summary":"What was sent to an endpoint, newest first: the event, how many tries, the last answer, and when the next try is due.","description":"What was sent to an endpoint, newest first: the event, how many tries, the last answer, and when the next try is due.","parameters":[{"name":"id","in":"path","required":true,"description":"A webhook id from GET /v1/webhooks.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many, newest first. 20 when left out.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many, newest first. 20 when left out."}}],"responses":{"200":{"description":"Done. The body is the result, as the assistant tool of the same name answers it.","content":{"application/json":{"schema":{}}}},"400":{"description":"The request is not right; error says what to change.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"401":{"description":"No key, or a key that is not (or no longer) valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"403":{"description":"The plan does not include this, or a limit was reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"404":{"description":"No such record or route.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"409":{"description":"The record changed, or the request cannot be done in its current state.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}},"429":{"description":"Too many requests. Retry-After says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence a person can act on."},"code":{"type":"string","description":"A stable name for the kind of refusal, where there is one."},"help":{"type":"string","description":"The help article that explains it, where there is one."}},"required":["error"]}}}}}}}}}