{
  "openapi": "3.1.0",
  "info": {
    "title": "Flung API",
    "version": "2026-10-28",
    "description": "Schedule, publish and automate social media posts."
  },
  "servers": [
    {
      "url": "https://api.flung.dev",
      "description": "Production"
    },
    {
      "url": "https://api-preview.flung.dev",
      "description": "Preview"
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "An API key (flung_sk_...), an OAuth access token from Flung's authorization server (/.well-known/oauth-authorization-server), or, for the few calls a connect panel makes, a connect token (flung_ct_...)."
      }
    },
    "schemas": {
      "Post": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "post_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "status": {
            "type": "string",
            "enum": [
              "scheduled",
              "publishing",
              "published",
              "partially_published",
              "failed",
              "cancelled"
            ]
          },
          "content": {
            "type": "string"
          },
          "mediaIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "platformOverrides": {
            "type": "object",
            "properties": {
              "x": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "instagram": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "facebook": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "threads": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "linkedin": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "tiktok": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "youtube": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "pinterest": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "bluesky": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "mastodon": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "discord": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "farcaster": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "publishAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "targets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PostTarget"
            }
          }
        },
        "required": [
          "id",
          "status",
          "content",
          "mediaIds",
          "platformOverrides",
          "publishAt",
          "createdAt",
          "updatedAt",
          "targets"
        ]
      },
      "PostTarget": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "accountId": {
            "type": "string"
          },
          "platform": {
            "$ref": "#/components/schemas/Platform"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "publishing",
              "published",
              "failed",
              "cancelled"
            ]
          },
          "platformPostId": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "error": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ]
          },
          "publishedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "accountId",
          "platform",
          "status",
          "platformPostId",
          "url",
          "error",
          "publishedAt"
        ]
      },
      "Platform": {
        "type": "string",
        "enum": [
          "x",
          "instagram",
          "facebook",
          "threads",
          "linkedin",
          "tiktok",
          "youtube",
          "pinterest",
          "bluesky",
          "mastodon",
          "discord",
          "farcaster"
        ]
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "unauthorized",
                  "forbidden",
                  "validation_failed",
                  "not_found",
                  "unknown_accounts",
                  "platform_not_supported",
                  "media_required",
                  "account_needs_reconnect",
                  "not_configured",
                  "connect_failed",
                  "platform_error",
                  "post_not_editable",
                  "unknown_variable",
                  "rate_limited",
                  "unsupported_media",
                  "media_too_large",
                  "unknown_media",
                  "media_not_ready",
                  "text_too_long",
                  "publish_at_in_past",
                  "idempotency_key_reused",
                  "internal_error"
                ]
              },
              "message": {
                "type": "string"
              },
              "details": {}
            },
            "required": [
              "code",
              "message"
            ]
          }
        },
        "required": [
          "error"
        ]
      },
      "PostList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PostSummary"
            }
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "required": [
          "data",
          "hasMore"
        ]
      },
      "PostSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "post_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "status": {
            "type": "string",
            "enum": [
              "scheduled",
              "publishing",
              "published",
              "partially_published",
              "failed",
              "cancelled"
            ]
          },
          "content": {
            "type": "string"
          },
          "mediaIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "platformOverrides": {
            "type": "object",
            "properties": {
              "x": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "instagram": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "facebook": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "threads": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "linkedin": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "tiktok": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "youtube": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "pinterest": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "bluesky": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "mastodon": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "discord": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              },
              "farcaster": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "publishAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "status",
          "content",
          "mediaIds",
          "platformOverrides",
          "publishAt",
          "createdAt",
          "updatedAt"
        ]
      },
      "AccountList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Account"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Account": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "acct_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "platform": {
            "$ref": "#/components/schemas/Platform"
          },
          "platformUserId": {
            "type": "string"
          },
          "username": {
            "type": [
              "string",
              "null"
            ]
          },
          "profileId": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "needs_reconnect",
              "disconnected"
            ],
            "description": "`needs_reconnect`: the platform refused the token; start a reconnect."
          },
          "renewal": {
            "type": "string",
            "enum": [
              "automatic",
              "manual",
              "not_needed"
            ],
            "description": "`automatic`: Flung refreshes the token before it expires, until `reconnectBy` if set. `manual`: only a reconnect renews it, by `reconnectBy`. `not_needed`: the token does not expire."
          },
          "tokenExpiresAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z",
            "description": "When the current access token expires. Flung renews `automatic` ones about a day before."
          },
          "reconnectBy": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z",
            "description": "The last moment the account works without a reconnect; null when it renews indefinitely. Flung sends `account.reconnect_required_soon` a week before."
          },
          "defaultBoard": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "id",
              "name"
            ],
            "description": "Pinterest only: where pins go unless a post picks another board."
          },
          "inbox": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Whether comments and mentions are read. null is the platform's default: on, except X, where reading costs money."
              },
              "readAt": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "example": "2026-11-01T09:00:00.000Z"
              },
              "error": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Why the last read failed, such as a missing permission."
              }
            },
            "required": [
              "enabled",
              "readAt",
              "error"
            ],
            "description": "Reading comments and mentions into GET /v1/inbox."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "platform",
          "platformUserId",
          "username",
          "profileId",
          "status",
          "renewal",
          "tokenExpiresAt",
          "reconnectBy",
          "defaultBoard",
          "inbox",
          "createdAt",
          "updatedAt"
        ]
      },
      "RefreshResult": {
        "type": "object",
        "properties": {
          "result": {
            "type": "string",
            "enum": [
              "refreshed",
              "not_needed",
              "reconnect_required",
              "failed"
            ],
            "description": "`refreshed`: a new token is stored. `not_needed`: this account has nothing to refresh. `reconnect_required`: the platform refused; the account is now `needs_reconnect`. `failed`: a temporary platform failure; try again later."
          },
          "account": {
            "$ref": "#/components/schemas/Account"
          }
        },
        "required": [
          "result",
          "account"
        ]
      },
      "BoardList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Board"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Board": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ]
      },
      "PostingOptions": {
        "type": "object",
        "properties": {
          "creatorName": {
            "type": [
              "string",
              "null"
            ]
          },
          "privacyLevels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The audiences this account may post to now; pass one as platformOverrides.tiktok.privacyLevel.",
            "example": [
              "PUBLIC_TO_EVERYONE",
              "SELF_ONLY"
            ]
          },
          "commentsDisabled": {
            "type": "boolean",
            "description": "The creator turned comments off; posts cannot allow them."
          },
          "duetDisabled": {
            "type": "boolean"
          },
          "stitchDisabled": {
            "type": "boolean"
          },
          "maxVideoSeconds": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "creatorName",
          "privacyLevels",
          "commentsDisabled",
          "duetDisabled",
          "stitchDisabled",
          "maxVideoSeconds"
        ]
      },
      "CreatedWebhookEndpoint": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "whe_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "url": {
            "type": "string"
          },
          "events": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "enabled": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "secret": {
            "type": "string",
            "description": "The signing secret (Standard Webhooks, `whsec_...`). Shown only in this response; store it now.",
            "example": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
          }
        },
        "required": [
          "id",
          "url",
          "events",
          "enabled",
          "createdAt",
          "secret"
        ]
      },
      "WebhookEvent": {
        "type": "string",
        "enum": [
          "post.published",
          "post.partially_published",
          "post.failed",
          "target.published",
          "target.failed",
          "account.connected",
          "account.disconnected",
          "account.token_refresh_failed",
          "account.reconnect_required_soon",
          "inbox.received"
        ]
      },
      "WebhookEndpointList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEndpoint"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "WebhookEndpoint": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "whe_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "url": {
            "type": "string"
          },
          "events": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "enabled": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "url",
          "events",
          "enabled",
          "createdAt"
        ]
      },
      "RotatedSecret": {
        "type": "object",
        "properties": {
          "secret": {
            "type": "string",
            "description": "The new signing secret. Shown only in this response."
          },
          "previousSecretExpiresAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z",
            "description": "Until then, deliveries carry signatures from both secrets."
          }
        },
        "required": [
          "secret",
          "previousSecretExpiresAt"
        ]
      },
      "PingSent": {
        "type": "object",
        "properties": {
          "eventId": {
            "type": "string"
          }
        },
        "required": [
          "eventId"
        ]
      },
      "WebhookDeliveryList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookDelivery"
            }
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "required": [
          "data",
          "hasMore"
        ]
      },
      "WebhookDelivery": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "eventId": {
            "type": "string"
          },
          "eventType": {
            "type": "string",
            "description": "An event type, or `webhook.ping` for a test."
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "delivered",
              "failed"
            ],
            "description": "`pending` while retries remain."
          },
          "attempts": {
            "type": "integer"
          },
          "responseStatus": {
            "type": [
              "integer",
              "null"
            ]
          },
          "lastError": {
            "type": [
              "string",
              "null"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "eventId",
          "eventType",
          "status",
          "attempts",
          "responseStatus",
          "lastError",
          "createdAt",
          "updatedAt"
        ]
      },
      "ConnectToken": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Hand this to the page (`<flung-connect token>`). It can only list, connect, reconnect and disconnect accounts.",
            "example": "flung_ct_eyJ3Ijoid3NfMSJ9.c2ln"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "origins": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "profileId": {
            "type": [
              "string",
              "null"
            ]
          },
          "platforms": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Platform"
            }
          }
        },
        "required": [
          "token",
          "expiresAt",
          "origins",
          "profileId",
          "platforms"
        ]
      },
      "ConnectSession": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cs_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "platform": {
            "$ref": "#/components/schemas/Platform"
          },
          "accountId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The account being reconnected; null for a new connection."
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "connected",
              "failed",
              "expired"
            ],
            "description": "`pending` until the person finishes on the platform; `expired` when they did not by `expiresAt`."
          },
          "authorizationUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "Send the person here: the platform's own consent page. Null once the session has ended."
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z",
            "description": "The person must finish by then."
          },
          "accountIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The accounts stored, once `connected`. Facebook connects one per page."
          },
          "error": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "description": "Why it `failed`: `access_denied`, `wrong_account`, `platform_error` and so on."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "completedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "platform",
          "accountId",
          "status",
          "authorizationUrl",
          "expiresAt",
          "accountIds",
          "error",
          "createdAt",
          "completedAt"
        ]
      },
      "CreatedApiKey": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "key_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "name": {
            "type": "string"
          },
          "prefix": {
            "type": "string",
            "description": "The start of the key, to tell keys apart.",
            "example": "flung_sk_live_abcd"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lastUsedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "expiresAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "revokedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "key": {
            "type": "string",
            "description": "The secret key. Shown only in this response; store it now."
          }
        },
        "required": [
          "id",
          "name",
          "prefix",
          "scopes",
          "lastUsedAt",
          "expiresAt",
          "revokedAt",
          "createdAt",
          "key"
        ]
      },
      "ApiKeyList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiKey"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "ApiKey": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "key_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "name": {
            "type": "string"
          },
          "prefix": {
            "type": "string",
            "description": "The start of the key, to tell keys apart.",
            "example": "flung_sk_live_abcd"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lastUsedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "expiresAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "revokedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "name",
          "prefix",
          "scopes",
          "lastUsedAt",
          "expiresAt",
          "revokedAt",
          "createdAt"
        ]
      },
      "Me": {
        "type": "object",
        "properties": {
          "workspaceId": {
            "type": "string"
          },
          "via": {
            "type": "string",
            "enum": [
              "api_key",
              "oauth"
            ],
            "description": "How this request authenticated."
          },
          "userId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The person who approved the app, for an OAuth token; null for an API key."
          },
          "email": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "workspaceId",
          "via",
          "userId",
          "email"
        ]
      },
      "MemberList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Member"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Member": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "example": "usr_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "member"
            ],
            "description": "`owner` may add and remove members; both may connect apps to the workspace."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "userId",
          "email",
          "role",
          "createdAt"
        ]
      },
      "MediaUpload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Media"
          },
          {
            "type": "object",
            "properties": {
              "uploadUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uri",
                "description": "For a file up to 100 MB: PUT it here, with your credential and its Content-Length. Null for a multipart upload."
              },
              "multipart": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "partSize": {
                    "type": "integer",
                    "description": "Every part but the last is exactly this many bytes."
                  },
                  "partCount": {
                    "type": "integer"
                  },
                  "partUrl": {
                    "type": "string",
                    "description": "PUT each part to this address with `{partNumber}` replaced by 1 to partCount, in any order."
                  },
                  "completeUrl": {
                    "type": "string",
                    "format": "uri",
                    "description": "POST here once every part is in."
                  }
                },
                "required": [
                  "partSize",
                  "partCount",
                  "partUrl",
                  "completeUrl"
                ],
                "description": "For a file over 100 MB: how to send it in parts."
              }
            },
            "required": [
              "uploadUrl",
              "multipart"
            ]
          }
        ]
      },
      "MediaType": {
        "type": "string",
        "enum": [
          "image/jpeg",
          "image/png",
          "image/webp",
          "image/gif",
          "video/mp4",
          "video/quicktime"
        ],
        "description": "What the file really is, read from its first bytes once uploaded."
      },
      "Media": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "med_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "contentType": {
            "$ref": "#/components/schemas/MediaType"
          },
          "filename": {
            "type": [
              "string",
              "null"
            ]
          },
          "bytes": {
            "type": [
              "integer",
              "null"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "ready",
              "failed"
            ],
            "description": "`pending` until its bytes arrive; `ready` once a post can use it."
          },
          "preview": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "processing",
                  "ready",
                  "failed",
                  "skipped"
                ],
                "description": "`skipped` when the video is over 100 MB or this month's thumbnail allowance is used up. Posts never wait for a preview; they use the file as uploaded."
              },
              "thumbnailUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "A JPEG frame one second in, 640 pixels wide, at an address that does not expire."
              },
              "hlsUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Always null for now: streaming versions are not made."
              },
              "dashUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Always null for now."
              },
              "durationSeconds": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Always null for now."
              }
            },
            "required": [
              "status",
              "thumbnailUrl",
              "hlsUrl",
              "dashUrl",
              "durationSeconds"
            ],
            "description": "Videos only, where previews are set up: a thumbnail. Read the file again while `processing`."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "contentType",
          "filename",
          "bytes",
          "status",
          "preview",
          "createdAt"
        ]
      },
      "UploadedPart": {
        "type": "object",
        "properties": {
          "partNumber": {
            "type": "integer"
          },
          "bytes": {
            "type": "integer"
          }
        },
        "required": [
          "partNumber",
          "bytes"
        ]
      },
      "MediaList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Media"
            }
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "required": [
          "data",
          "hasMore"
        ]
      },
      "Template": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "tpl_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "name": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "mediaIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "accountIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "platformOverrides": {
            "type": "object",
            "properties": {
              "x": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "instagram": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "facebook": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "threads": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "linkedin": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "tiktok": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "youtube": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "pinterest": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "bluesky": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "mastodon": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "discord": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              },
              "farcaster": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string"
                  },
                  "boardId": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "name",
          "content",
          "mediaIds",
          "accountIds",
          "platformOverrides",
          "createdAt",
          "updatedAt"
        ]
      },
      "TemplateList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Template"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "VariableList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Variable"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Variable": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "name",
          "value",
          "updatedAt"
        ]
      },
      "Feed": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "feed_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "url": {
            "type": "string"
          },
          "accountIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "template": {
            "type": "string",
            "description": "The post text: `{{title}}`, `{{link}}`, `{{summary}}` from each item, and workspace variables."
          },
          "enabled": {
            "type": "boolean"
          },
          "lastCheckedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "lastError": {
            "type": [
              "string",
              "null"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "url",
          "accountIds",
          "template",
          "enabled",
          "lastCheckedAt",
          "lastError",
          "createdAt"
        ]
      },
      "FeedList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Feed"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "PlatformList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlatformInfo"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "PlatformInfo": {
        "type": "object",
        "properties": {
          "platform": {
            "$ref": "#/components/schemas/Platform"
          },
          "connectable": {
            "type": "boolean",
            "description": "Whether this Flung has the platform's app credentials, so accounts can be connected."
          },
          "maxTextLength": {
            "type": "integer"
          },
          "requiresMedia": {
            "type": "boolean",
            "description": "Refuses text-only posts."
          },
          "maxImages": {
            "type": "integer",
            "description": "Images in one post; 0 when images are not accepted."
          },
          "video": {
            "type": "boolean",
            "description": "Takes one video per post."
          },
          "maxImageBytes": {
            "type": "integer"
          },
          "maxVideoBytes": {
            "type": "integer"
          },
          "postsPerHour": {
            "type": "integer",
            "description": "How fast Flung publishes to one account, to stay inside the platform's limits."
          },
          "tokensExpire": {
            "type": "boolean",
            "description": "Whether connections expire; Flung renews them before they do where the platform allows."
          },
          "destinations": {
            "type": "boolean",
            "description": "Posts go to a destination chosen per post (Pinterest boards)."
          }
        },
        "required": [
          "platform",
          "connectable",
          "maxTextLength",
          "requiresMedia",
          "maxImages",
          "video",
          "maxImageBytes",
          "maxVideoBytes",
          "postsPerHour",
          "tokensExpire",
          "destinations"
        ]
      },
      "PostingTimes": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "publishAt": {
                  "type": "string",
                  "example": "2026-11-03T10:00:00+10:00"
                },
                "day": {
                  "type": "string"
                },
                "localHour": {
                  "type": "integer"
                },
                "rank": {
                  "type": "integer",
                  "description": "1 is the platform's best slot of the week."
                }
              },
              "required": [
                "publishAt",
                "day",
                "localHour",
                "rank"
              ]
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Usage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "credential": {
                  "type": "string",
                  "description": "`key:<api key id>` or `app:<OAuth client id>`.",
                  "example": "key:key_aaaaaaaaaaaaaaaaaaaaaaaa"
                },
                "day": {
                  "type": "string",
                  "example": "2026-10-29"
                },
                "requests": {
                  "type": "integer"
                },
                "errors": {
                  "type": "integer",
                  "description": "Answers of 400 or more, rate limits included."
                }
              },
              "required": [
                "credential",
                "day",
                "requests",
                "errors"
              ]
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Stats": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "posts": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            },
            "description": "Posts due in the window, by status.",
            "example": {
              "published": 40,
              "failed": 2,
              "scheduled": 5
            }
          },
          "platforms": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "platform": {
                  "$ref": "#/components/schemas/Platform"
                },
                "targets": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  },
                  "description": "Publishes to accounts on this platform, by status."
                }
              },
              "required": [
                "platform",
                "targets"
              ]
            }
          },
          "accounts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "platform": {
                  "$ref": "#/components/schemas/Platform"
                },
                "accounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  },
                  "description": "Accounts now, by status."
                }
              },
              "required": [
                "platform",
                "accounts"
              ]
            }
          },
          "media": {
            "type": "object",
            "properties": {
              "files": {
                "type": "integer"
              },
              "bytes": {
                "type": "integer"
              }
            },
            "required": [
              "files",
              "bytes"
            ]
          }
        },
        "required": [
          "from",
          "to",
          "posts",
          "platforms",
          "accounts",
          "media"
        ]
      },
      "InboxList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InboxItem"
            }
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "required": [
          "data",
          "hasMore"
        ]
      },
      "InboxItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "ibx_aaaaaaaaaaaaaaaaaaaaaaaa"
          },
          "accountId": {
            "type": "string"
          },
          "platform": {
            "$ref": "#/components/schemas/Platform"
          },
          "kind": {
            "type": "string",
            "enum": [
              "comment",
              "mention"
            ],
            "description": "`comment`: a reply to one of the account's posts. `mention`: the account named elsewhere."
          },
          "status": {
            "type": "string",
            "enum": [
              "unread",
              "read",
              "replied",
              "archived"
            ]
          },
          "text": {
            "type": "string"
          },
          "author": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "handle": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "id",
              "name",
              "handle"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "platformItemId": {
            "type": "string"
          },
          "platformPostId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The platform post it answers."
          },
          "targetId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The Flung post target it answers, when that post went out through Flung."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          },
          "repliedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z"
          }
        },
        "required": [
          "id",
          "accountId",
          "platform",
          "kind",
          "status",
          "text",
          "author",
          "url",
          "platformItemId",
          "platformPostId",
          "targetId",
          "createdAt",
          "repliedAt"
        ]
      },
      "InboxSync": {
        "type": "object",
        "properties": {
          "added": {
            "type": "integer",
            "description": "New items read."
          }
        },
        "required": [
          "added"
        ]
      },
      "PostMetrics": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "targetId": {
                  "type": "string"
                },
                "accountId": {
                  "type": "string"
                },
                "platform": {
                  "$ref": "#/components/schemas/Platform"
                },
                "metrics": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "views": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "likes": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "comments": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "reposts": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "quotes": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "views",
                    "likes",
                    "comments",
                    "reposts",
                    "quotes"
                  ],
                  "description": "null when the platform has no counts for Flung, or could not be read now (see `error`)."
                },
                "error": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "targetId",
                "accountId",
                "platform",
                "metrics",
                "error"
              ]
            }
          },
          "totals": {
            "type": "object",
            "properties": {
              "views": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "likes": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "comments": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "reposts": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "quotes": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "views",
              "likes",
              "comments",
              "reposts",
              "quotes"
            ]
          }
        },
        "required": [
          "data",
          "totals"
        ]
      },
      "Experience": {
        "type": "object",
        "properties": {
          "xp": {
            "type": "integer"
          },
          "level": {
            "type": "integer"
          },
          "xpIntoLevel": {
            "type": "integer"
          },
          "xpForNextLevel": {
            "type": "integer"
          },
          "streakDays": {
            "type": "integer",
            "description": "Days in a row with a published post, up to today or yesterday."
          },
          "leaderboardName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The name on the public leaderboard; null when the workspace is not on it."
          },
          "achievements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Achievement"
            }
          }
        },
        "required": [
          "xp",
          "level",
          "xpIntoLevel",
          "xpForNextLevel",
          "streakDays",
          "leaderboardName",
          "achievements"
        ]
      },
      "Achievement": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "first-post"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "rarity": {
            "type": "string",
            "enum": [
              "common",
              "rare",
              "epic",
              "legendary"
            ]
          },
          "xp": {
            "type": "integer"
          },
          "unlocked": {
            "type": "boolean"
          },
          "unlockedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "example": "2026-11-01T09:00:00.000Z",
            "description": "When Flung first saw it earned."
          },
          "progress": {
            "type": "object",
            "properties": {
              "current": {
                "type": "integer"
              },
              "target": {
                "type": "integer"
              }
            },
            "required": [
              "current",
              "target"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "category",
          "rarity",
          "xp",
          "unlocked",
          "unlockedAt",
          "progress"
        ]
      },
      "Leaderboard": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "rank": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "level": {
                  "type": "integer"
                },
                "xp": {
                  "type": "integer"
                },
                "you": {
                  "type": "boolean"
                }
              },
              "required": [
                "rank",
                "name",
                "level",
                "xp",
                "you"
              ]
            }
          }
        },
        "required": [
          "data"
        ]
      }
    },
    "parameters": {}
  },
  "paths": {
    "/v1/posts": {
      "post": {
        "operationId": "posts.create",
        "tags": [
          "Posts"
        ],
        "summary": "Schedule a post",
        "description": "Schedules one post to one or more connected accounts. Send an `Idempotency-Key` header so a retry never posts twice.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Any unique string, such as a UUID. A retry with the same key and body within 24 hours gets the first answer instead of running again."
            },
            "required": false,
            "description": "Any unique string, such as a UUID. A retry with the same key and body within 24 hours gets the first answer instead of running again.",
            "name": "idempotency-key",
            "in": "header"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000,
                    "example": "Launching today."
                  },
                  "accountIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "maxItems": 25,
                    "description": "The connected accounts to publish to.",
                    "example": [
                      "acct_aaaaaaaaaaaaaaaaaaaaaaaa"
                    ]
                  },
                  "mediaIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10,
                    "default": []
                  },
                  "publishAt": {
                    "type": "string",
                    "format": "date-time",
                    "description": "When to publish. Omit to publish now."
                  },
                  "profileId": {
                    "type": "string"
                  },
                  "platformOverrides": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "instagram": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "facebook": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "threads": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "linkedin": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "tiktok": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "youtube": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "pinterest": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "bluesky": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "mastodon": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "discord": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "farcaster": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      }
                    },
                    "default": {},
                    "description": "Per platform: replaces the content, picks a Pinterest board, or sets TikTok's audience and interactions.",
                    "example": {
                      "x": {
                        "content": "Launching today. #launch"
                      }
                    }
                  },
                  "variables": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "maxLength": 2000
                    },
                    "description": "Values for `{{name}}` placeholders in the text, over the workspace variables of the same name.",
                    "example": {
                      "product": "Flung"
                    }
                  }
                },
                "required": [
                  "content",
                  "accountIds"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The post was scheduled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "posts.list",
        "tags": [
          "Posts"
        ],
        "summary": "List posts",
        "description": "Newest first. Pass the last id of a page as `startingAfter` to get the next one.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "description": "The id of the last post of the previous page."
            },
            "required": false,
            "description": "The id of the last post of the previous page.",
            "name": "startingAfter",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "scheduled",
                "publishing",
                "published",
                "partially_published",
                "failed",
                "cancelled"
              ]
            },
            "required": false,
            "name": "status",
            "in": "query"
          },
          {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Platform"
                },
                {
                  "description": "Only posts with a target on this platform."
                }
              ]
            },
            "required": false,
            "description": "Only posts with a target on this platform.",
            "name": "platform",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "description": "Only posts with a target on this account."
            },
            "required": false,
            "description": "Only posts with a target on this account.",
            "name": "accountId",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of posts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/posts/{id}": {
      "get": {
        "operationId": "posts.get",
        "tags": [
          "Posts"
        ],
        "summary": "Get a post",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The post with the result for each account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such post in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "posts.update",
        "tags": [
          "Posts"
        ],
        "summary": "Change a scheduled post",
        "description": "Its content, media, publish time or per-platform overrides, until it starts publishing. Its accounts stay as they are.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000,
                    "example": "Launching today."
                  },
                  "mediaIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10
                  },
                  "publishAt": {
                    "type": "string",
                    "format": "date-time",
                    "description": "When to publish. Omit to publish now."
                  },
                  "platformOverrides": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "instagram": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "facebook": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "threads": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "linkedin": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "tiktok": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "youtube": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "pinterest": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "bluesky": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "mastodon": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "discord": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "farcaster": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The post.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such post in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "posts.delete",
        "tags": [
          "Posts"
        ],
        "summary": "Delete a post",
        "description": "Removes it from Flung, cancelling it if scheduled. Anything already published stays on the platforms.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such post in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/posts/{id}/cancel": {
      "post": {
        "operationId": "posts.cancel",
        "tags": [
          "Posts"
        ],
        "summary": "Cancel a scheduled post",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The post, cancelled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such post in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/posts/{id}/retry": {
      "post": {
        "operationId": "posts.retry",
        "tags": [
          "Posts"
        ],
        "summary": "Retry the failed accounts of a post",
        "description": "Schedules the targets that failed for now; those already published are left alone.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The post, scheduled again.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such post in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts": {
      "get": {
        "operationId": "accounts.list",
        "tags": [
          "Accounts"
        ],
        "summary": "List connected accounts",
        "description": "Filter with `reconnectBefore` to find the accounts a person must reconnect soon.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "needs_reconnect",
                "disconnected"
              ]
            },
            "required": false,
            "name": "status",
            "in": "query"
          },
          {
            "schema": {
              "$ref": "#/components/schemas/Platform"
            },
            "required": false,
            "name": "platform",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "format": "date-time",
              "description": "Only accounts that need a reconnect before this time: already `needs_reconnect`, or `reconnectBy` earlier.",
              "example": "2026-11-30T00:00:00Z"
            },
            "required": false,
            "description": "Only accounts that need a reconnect before this time: already `needs_reconnect`, or `reconnectBy` earlier.",
            "name": "reconnectBefore",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Every account connected to the workspace, newest first.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{id}": {
      "get": {
        "operationId": "accounts.get",
        "tags": [
          "Accounts"
        ],
        "summary": "Get a connected account",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The account. Its tokens are never returned.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "accounts.disconnect",
        "tags": [
          "Accounts"
        ],
        "summary": "Disconnect an account",
        "description": "Deletes the stored tokens. The account stays listed as `disconnected` so past posts keep their results.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The disconnected account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "accounts.update",
        "tags": [
          "Accounts"
        ],
        "summary": "Change an account's settings",
        "description": "Sets the default Pinterest board, or whether comments and mentions are read into the inbox.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "defaultBoardId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 64,
                    "description": "Pinterest only: the board pins go to by default; one of GET /v1/accounts/{id}/boards."
                  },
                  "inboxEnabled": {
                    "type": [
                      "boolean",
                      "null"
                    ],
                    "description": "Read comments and mentions (true), stop (false), or go back to the platform's default (null)."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{id}/refresh": {
      "post": {
        "operationId": "accounts.refresh",
        "tags": [
          "Accounts"
        ],
        "summary": "Refresh an account now",
        "description": "Renews the access token now instead of waiting for the hourly renewal, and reports whether the platform still accepts the account. Most callers never need this.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "What the refresh did, and the account after it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RefreshResult"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{id}/boards": {
      "get": {
        "operationId": "accounts.boards",
        "tags": [
          "Accounts"
        ],
        "summary": "List Pinterest boards",
        "description": "The boards a Pinterest account can pin to, read from Pinterest now, so a person can pick the default.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The boards.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoardList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{id}/posting-options": {
      "get": {
        "operationId": "accounts.postingOptions",
        "tags": [
          "Accounts"
        ],
        "summary": "Read what a post may choose",
        "description": "TikTok only: the creator's name, the audiences they may post to, which interactions they turned off and the longest video allowed, read from TikTok now. TikTok asks apps to show these and let the person choose before each post.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The options.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostingOptions"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/webhook-endpoints": {
      "post": {
        "operationId": "webhookEndpoints.create",
        "tags": [
          "Webhooks"
        ],
        "summary": "Add a webhook endpoint",
        "description": "Flung POSTs each subscribed event to the URL, signed to the Standard Webhooks spec with the returned secret, and retries failures with backoff for about 15 hours.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Any unique string, such as a UUID. A retry with the same key and body within 24 hours gets the first answer instead of running again."
            },
            "required": false,
            "description": "Any unique string, such as a UUID. A retry with the same key and body within 24 hours gets the first answer instead of running again.",
            "name": "idempotency-key",
            "in": "header"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri",
                    "example": "https://example.com/webhooks/flung"
                  },
                  "events": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/WebhookEvent"
                    },
                    "minItems": 1,
                    "example": [
                      "post.published",
                      "post.failed"
                    ]
                  }
                },
                "required": [
                  "url",
                  "events"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The endpoint, with its signing secret.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedWebhookEndpoint"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "webhookEndpoints.list",
        "tags": [
          "Webhooks"
        ],
        "summary": "List webhook endpoints",
        "security": [
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "The endpoints, without their secrets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/webhook-endpoints/{id}/rotate-secret": {
      "post": {
        "operationId": "webhookEndpoints.rotateSecret",
        "tags": [
          "Webhooks"
        ],
        "summary": "Rotate a signing secret",
        "description": "Issues a new secret. For 24 hours every delivery is signed with both the new and the old secret, so you can deploy the new one without missing events; after that only the new one signs.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The new secret.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RotatedSecret"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such endpoint in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/webhook-endpoints/{id}": {
      "delete": {
        "operationId": "webhookEndpoints.delete",
        "tags": [
          "Webhooks"
        ],
        "summary": "Delete a webhook endpoint",
        "description": "Stops deliveries at once, including retries already waiting.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such endpoint in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "webhookEndpoints.update",
        "tags": [
          "Webhooks"
        ],
        "summary": "Change an endpoint",
        "description": "Its URL, its events, or whether it is enabled. The signing secret stays; rotate it separately.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri"
                  },
                  "events": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/WebhookEvent"
                    },
                    "minItems": 1
                  },
                  "enabled": {
                    "type": "boolean",
                    "description": "false pauses deliveries; events in the meantime are not sent."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpoint"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such endpoint in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/webhook-endpoints/{id}/ping": {
      "post": {
        "operationId": "webhookEndpoints.ping",
        "tags": [
          "Webhooks"
        ],
        "summary": "Send a test event",
        "description": "Delivers a signed `webhook.ping` event to the endpoint, with the usual retries; its outcome shows in the deliveries.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "202": {
            "description": "The test event is on its way.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PingSent"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such endpoint in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/webhook-endpoints/{id}/deliveries": {
      "get": {
        "operationId": "webhookEndpoints.deliveries",
        "tags": [
          "Webhooks"
        ],
        "summary": "List deliveries",
        "description": "Recent deliveries to the endpoint, newest first, with their attempts and the endpoint's last answer.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "startingAfter",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of deliveries.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDeliveryList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such endpoint in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/connect-tokens": {
      "post": {
        "operationId": "connectTokens.create",
        "tags": [
          "Accounts"
        ],
        "summary": "Make a connect token for a page",
        "description": "Lets a page in a browser show \"connect your accounts\" without holding your API key: make the token on your server, hand it to the page, and the page (with `<flung-connect>` from `@flung.dev/connect`, or its own calls) can list, connect, reconnect and disconnect accounts until it expires, from the listed origins only. Needs a full-access credential.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "origins": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 253
                    },
                    "minItems": 1,
                    "maxItems": 10,
                    "description": "The pages that will use the token, as origins. https only, except `http://localhost` and `http://127.0.0.1` for trying it out.",
                    "example": [
                      "https://app.example.com"
                    ]
                  },
                  "profileId": {
                    "type": "string",
                    "description": "Accounts connected with the token join this profile, and the token sees only that profile's accounts. Omit it for the whole workspace."
                  },
                  "platforms": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Platform"
                    },
                    "minItems": 1,
                    "description": "The platforms the token may connect. Omit it for every platform.",
                    "example": [
                      "x",
                      "linkedin",
                      "bluesky"
                    ]
                  },
                  "expiresIn": {
                    "type": "integer",
                    "minimum": 60,
                    "maximum": 86400,
                    "default": 3600,
                    "description": "Seconds until the token stops working. Default one hour, at most one day."
                  }
                },
                "required": [
                  "origins"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectToken"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/connect/{platform}": {
      "post": {
        "operationId": "accounts.connect",
        "tags": [
          "Accounts"
        ],
        "summary": "Start connecting an account",
        "description": "Starts a connect session. Send the person to its `authorizationUrl`, the platform's consent page. When they finish, Flung stores the account and sends them to `redirectUrl`, or shows its own page when there is none; poll `GET /v1/connect-sessions/{id}` or listen for `account.connected`. Facebook connects one account per page the person can post to.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "example": "linkedin"
            },
            "required": true,
            "name": "platform",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "redirectUrl": {
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri",
                    "description": "Where Flung sends the person when the flow ends, with `flung_session_id`, `flung_status` (`connected` or `error`), and `flung_account_ids` or `flung_error` in the query. Omit it and Flung shows its own \"you can close this tab\" page; poll the session instead.",
                    "example": "https://app.example.com/settings/social"
                  },
                  "profileId": {
                    "type": "string",
                    "description": "The profile the connected accounts belong to."
                  },
                  "handle": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 253,
                    "description": "Bluesky: the handle signing in, such as `alice.bsky.social` (omit to sign in through bsky.social). Mastodon: the instance, such as `mastodon.social` or `@you@mastodon.social` (required).",
                    "example": "alice.bsky.social"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The session is ready.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectSession"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{id}/reconnect": {
      "post": {
        "operationId": "accounts.reconnect",
        "tags": [
          "Accounts"
        ],
        "summary": "Start reconnecting an account",
        "description": "For an account that is `needs_reconnect` or `disconnected`. The person must sign in as the same platform user; another user is refused.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "redirectUrl": {
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri",
                    "description": "Where Flung sends the person when the flow ends, with `flung_session_id`, `flung_status` (`connected` or `error`), and `flung_account_ids` or `flung_error` in the query. Omit it and Flung shows its own \"you can close this tab\" page; poll the session instead.",
                    "example": "https://app.example.com/settings/social"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The session is ready.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectSession"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/connect-sessions/{id}": {
      "get": {
        "operationId": "connectSessions.get",
        "tags": [
          "Accounts"
        ],
        "summary": "Get a connect session",
        "description": "Poll this after sending the person to `authorizationUrl` until `status` is no longer `pending`.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The session.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectSession"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such session in this workspace, or it ended more than a week ago.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/api-keys": {
      "post": {
        "operationId": "apiKeys.create",
        "tags": [
          "API keys"
        ],
        "summary": "Create an API key",
        "description": "To rotate a key: create the new one, deploy it, then revoke the old one. The new key has full access.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Any unique string, such as a UUID. A retry with the same key and body within 24 hours gets the first answer instead of running again."
            },
            "required": false,
            "description": "Any unique string, such as a UUID. A retry with the same key and body within 24 hours gets the first answer instead of running again.",
            "name": "idempotency-key",
            "in": "header"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100,
                    "example": "Production server"
                  },
                  "expiresAt": {
                    "type": "string",
                    "format": "date-time",
                    "description": "When the key stops working. Omit for a key that does not expire."
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The key, shown once.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedApiKey"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "This key cannot manage API keys.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "apiKeys.list",
        "tags": [
          "API keys"
        ],
        "summary": "List API keys",
        "security": [
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Every key of the workspace, without secrets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiKeyList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "This key cannot manage API keys.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/api-keys/{id}": {
      "delete": {
        "operationId": "apiKeys.revoke",
        "tags": [
          "API keys"
        ],
        "summary": "Revoke an API key",
        "description": "The key stops working at once. Revoking the key that makes this request is allowed.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Revoked."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "This key cannot manage API keys.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such live key in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/me": {
      "get": {
        "operationId": "me.get",
        "tags": [
          "Members"
        ],
        "summary": "Who is calling",
        "description": "The workspace this credential acts on, and the person behind it for an OAuth token. A cheap way for an app to check a token still works.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "The caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/members": {
      "get": {
        "operationId": "members.list",
        "tags": [
          "Members"
        ],
        "summary": "List members",
        "description": "The people who may sign in and connect apps to this workspace with OAuth.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Every member.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemberList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "members.add",
        "tags": [
          "Members"
        ],
        "summary": "Add a member",
        "description": "Lets a person, by email, sign in to Flung and connect apps to this workspace. Adding an existing member changes their role.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "maxLength": 254,
                    "format": "email",
                    "description": "They sign in with this address; nothing is sent to it now.",
                    "example": "sam@example.com"
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "owner",
                      "member"
                    ],
                    "default": "member",
                    "description": "`owner` may add and remove members; both may connect apps to the workspace."
                  }
                },
                "required": [
                  "email"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The member.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Member"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Only an owner, or an API key, may change members.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/members/{userId}": {
      "delete": {
        "operationId": "members.remove",
        "tags": [
          "Members"
        ],
        "summary": "Remove a member",
        "description": "Every app the person connected to this workspace stops working at once.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "userId",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Removed."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Only an owner, or an API key, may change members.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such member.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/media": {
      "post": {
        "operationId": "media.create",
        "tags": [
          "Media"
        ],
        "summary": "Start an upload",
        "description": "Reserves a file and says how to send it: one PUT to `uploadUrl` up to 100 MB, or `multipart` parts for a larger video (give `bytes`). Use the id in `mediaIds` once the file is `ready`.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "contentType": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/MediaType"
                      },
                      {
                        "description": "What you are about to upload. JPEG, PNG and WebP up to 20 MB, GIF 15 MB, MP4 and QuickTime 1 GB."
                      }
                    ]
                  },
                  "filename": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 255
                  },
                  "bytes": {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The file's size. Required over 100 MB, which then uploads in parts."
                  }
                },
                "required": [
                  "contentType"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The reserved file and its upload address.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaUpload"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "media.list",
        "tags": [
          "Media"
        ],
        "summary": "List files",
        "description": "Newest first. Pass the last id of a page as `startingAfter` to get the next one.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "description": "The id of the last file of the previous page."
            },
            "required": false,
            "description": "The id of the last file of the previous page.",
            "name": "startingAfter",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of files.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/media/{id}/parts/{partNumber}": {
      "put": {
        "operationId": "media.uploadPart",
        "tags": [
          "Media"
        ],
        "summary": "Upload one part",
        "description": "One part of a multipart upload, as the raw body with its Content-Length. Sending a part again replaces it.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000
            },
            "required": true,
            "name": "partNumber",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The part was stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadedPart"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such file in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/media/{id}/complete": {
      "post": {
        "operationId": "media.complete",
        "tags": [
          "Media"
        ],
        "summary": "Finish a multipart upload",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The file, now `ready`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such file in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/media/{id}/content": {
      "put": {
        "operationId": "media.upload",
        "tags": [
          "Media"
        ],
        "summary": "Upload the bytes",
        "description": "The raw file as the body, with its Content-Length. Flung reads its real type from the first bytes and refuses anything that is not an accepted image or video.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The file, now `ready`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such file in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/media/import": {
      "post": {
        "operationId": "media.import",
        "tags": [
          "Media"
        ],
        "summary": "Import a file from a URL",
        "description": "Flung fetches a public https file and keeps its own copy, ready to post. The simplest path for agents and for files already online.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri",
                    "description": "A public https address of the file. Flung fetches it once and keeps its own copy.",
                    "example": "https://example.com/launch.jpg"
                  },
                  "filename": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 255
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The file, `ready`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/media/{id}": {
      "get": {
        "operationId": "media.get",
        "tags": [
          "Media"
        ],
        "summary": "Get a file",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The file.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such file in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "media.delete",
        "tags": [
          "Media"
        ],
        "summary": "Delete a file",
        "description": "Removes the file. Posts already published keep what the platforms received.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such file in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/templates": {
      "post": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "templates.create",
        "tags": [
          "Templates"
        ],
        "summary": "Create a template",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000,
                    "example": "Launching today."
                  },
                  "mediaIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10,
                    "default": []
                  },
                  "platformOverrides": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "instagram": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "facebook": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "threads": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "linkedin": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "tiktok": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "youtube": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "pinterest": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "bluesky": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "mastodon": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "discord": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "farcaster": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      }
                    },
                    "default": {},
                    "description": "Per platform: replaces the content, picks a Pinterest board, or sets TikTok's audience and interactions.",
                    "example": {
                      "x": {
                        "content": "Launching today. #launch"
                      }
                    }
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "accountIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 25,
                    "default": [],
                    "description": "The accounts a deploy posts to unless it names others."
                  }
                },
                "required": [
                  "content",
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The template.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "templates.list",
        "tags": [
          "Templates"
        ],
        "summary": "List templates",
        "responses": {
          "200": {
            "description": "Every template, newest change first.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/templates/{id}": {
      "get": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "templates.get",
        "tags": [
          "Templates"
        ],
        "summary": "Get a template",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The template.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such template in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "templates.update",
        "tags": [
          "Templates"
        ],
        "summary": "Change a template",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "content": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000,
                    "example": "Launching today."
                  },
                  "mediaIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10
                  },
                  "accountIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 25
                  },
                  "platformOverrides": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "instagram": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "facebook": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "threads": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "linkedin": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "tiktok": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "youtube": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "pinterest": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "bluesky": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "mastodon": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "discord": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      },
                      "farcaster": {
                        "type": "object",
                        "properties": {
                          "content": {
                            "type": "string",
                            "minLength": 1
                          },
                          "boardId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64,
                            "description": "Pinterest only: the board to pin to, instead of the account's default board."
                          },
                          "privacyLevel": {
                            "type": "string",
                            "enum": [
                              "PUBLIC_TO_EVERYONE",
                              "MUTUAL_FOLLOW_FRIENDS",
                              "FOLLOWER_OF_CREATOR",
                              "SELF_ONLY"
                            ],
                            "description": "TikTok only: who sees the video, one of the account's `privacyLevels` (GET /v1/accounts/{id}/posting-options). Defaults to the most public one allowed."
                          },
                          "allowComments": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned comments off."
                          },
                          "allowDuet": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned duets off."
                          },
                          "allowStitch": {
                            "type": "boolean",
                            "description": "TikTok only. Default true, unless the creator turned stitches off."
                          },
                          "promotesOwnBrand": {
                            "type": "boolean",
                            "description": "TikTok only: the video promotes the creator's own business."
                          },
                          "brandedContent": {
                            "type": "boolean",
                            "description": "TikTok only: a paid partnership promoting a third party. Not allowed with SELF_ONLY."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The template.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such template in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "templates.delete",
        "tags": [
          "Templates"
        ],
        "summary": "Delete a template",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such template in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/templates/{id}/deploy": {
      "post": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "templates.deploy",
        "tags": [
          "Templates"
        ],
        "summary": "Schedule a post from a template",
        "description": "Creates a post from the template, to its accounts or the ones given, filling `{{variables}}`. The same checks as POST /v1/posts apply.",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accountIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "maxItems": 25,
                    "description": "Overrides the template's accounts."
                  },
                  "publishAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "variables": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "maxLength": 2000
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The post.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such template in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/variables": {
      "get": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "variables.list",
        "tags": [
          "Variables"
        ],
        "summary": "List variables",
        "description": "`{{name}}` values filled into post text when a post is created.",
        "responses": {
          "200": {
            "description": "Every variable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/variables/{name}": {
      "put": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "variables.set",
        "tags": [
          "Variables"
        ],
        "summary": "Set a variable",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z][A-Za-z0-9_]{0,39}$"
            },
            "required": true,
            "name": "name",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "string",
                    "maxLength": 2000
                  }
                },
                "required": [
                  "value"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The variable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Variable"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "variables.delete",
        "tags": [
          "Variables"
        ],
        "summary": "Delete a variable",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z][A-Za-z0-9_]{0,39}$"
            },
            "required": true,
            "name": "name",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such variable in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/feeds": {
      "post": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "feeds.create",
        "tags": [
          "Feeds"
        ],
        "summary": "Follow an RSS or Atom feed",
        "description": "Every new item becomes a post to the accounts, written from the template. Checked about every 15 minutes; items already in the feed are not posted.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri",
                    "description": "An RSS or Atom feed. Items already in it when it is added are not posted."
                  },
                  "accountIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "maxItems": 25
                  },
                  "template": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 5000,
                    "default": "{{title}} {{link}}"
                  }
                },
                "required": [
                  "url",
                  "accountIds"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The feed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Feed"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "feeds.list",
        "tags": [
          "Feeds"
        ],
        "summary": "List feeds",
        "responses": {
          "200": {
            "description": "Every feed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/feeds/{id}": {
      "patch": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "feeds.update",
        "tags": [
          "Feeds"
        ],
        "summary": "Change a feed",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accountIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "maxItems": 25
                  },
                  "template": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 5000
                  },
                  "enabled": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The feed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Feed"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such feed in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "apiKey": []
          }
        ],
        "operationId": "feeds.delete",
        "tags": [
          "Feeds"
        ],
        "summary": "Stop following a feed",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such feed in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/platforms": {
      "get": {
        "operationId": "platforms.list",
        "tags": [
          "Platforms"
        ],
        "summary": "List platforms and their limits",
        "description": "What each platform accepts, so a post can be checked before it is sent.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Every platform.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/posting-times": {
      "get": {
        "operationId": "platforms.postingTimes",
        "tags": [
          "Platforms"
        ],
        "summary": "Suggest when to post",
        "description": "The next times a platform's audience is usually most active, in the audience's time zone, as instants to pass to publishAt. General guidance from large studies, not this workspace's own audience.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "$ref": "#/components/schemas/Platform"
            },
            "required": true,
            "name": "platform",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "UTC",
              "description": "The audience's IANA time zone.",
              "example": "Australia/Brisbane"
            },
            "required": false,
            "description": "The audience's IANA time zone.",
            "name": "timeZone",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 6,
              "default": 3
            },
            "required": false,
            "name": "count",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The next suggested times, soonest first.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostingTimes"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/usage": {
      "get": {
        "operationId": "analytics.usage",
        "tags": [
          "Analytics"
        ],
        "summary": "API requests per credential per day",
        "description": "Each API key and OAuth app's requests and errors per UTC day, oldest first. Kept for 90 days.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 90,
              "default": 30
            },
            "required": false,
            "name": "days",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Usage"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/stats": {
      "get": {
        "operationId": "analytics.stats",
        "tags": [
          "Analytics"
        ],
        "summary": "Workspace statistics",
        "description": "Posts due in a window by status, publishes per platform by status, and the accounts and stored media now. The window defaults to the last 30 days.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "required": false,
            "name": "from",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "required": false,
            "name": "to",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The statistics.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stats"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/inbox": {
      "get": {
        "operationId": "inbox.list",
        "tags": [
          "Inbox"
        ],
        "summary": "List comments and mentions",
        "description": "Comments on the accounts' posts and mentions of them, newest first, read from each platform about every 15 minutes. For the next page pass the last id as startingAfter while hasMore is true.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string",
              "enum": [
                "unread",
                "read",
                "replied",
                "archived"
              ]
            },
            "required": false,
            "name": "status",
            "in": "query"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "accountId",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "description": "Only comments on this Flung post."
            },
            "required": false,
            "description": "Only comments on this Flung post.",
            "name": "postId",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "required": false,
            "name": "limit",
            "in": "query"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "startingAfter",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of items.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InboxList"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/inbox/{id}": {
      "get": {
        "operationId": "inbox.get",
        "tags": [
          "Inbox"
        ],
        "summary": "Get an inbox item",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The item.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InboxItem"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such item in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "inbox.update",
        "tags": [
          "Inbox"
        ],
        "summary": "Mark an item read, unread or archived",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "unread",
                      "read",
                      "archived"
                    ]
                  }
                },
                "required": [
                  "status"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The item.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InboxItem"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such item in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/inbox/{id}/reply": {
      "post": {
        "operationId": "inbox.reply",
        "tags": [
          "Inbox"
        ],
        "summary": "Reply publicly",
        "description": "Answers the comment or mention on the platform, as the account it was addressed to, and marks it replied.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  }
                },
                "required": [
                  "text"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The item, replied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InboxItem"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such item in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/accounts/{id}/inbox/sync": {
      "post": {
        "operationId": "accounts.syncInbox",
        "tags": [
          "Inbox"
        ],
        "summary": "Read an account's inbox now",
        "description": "Reads new comments and mentions now rather than at the next 15-minute read.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "How many were new.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InboxSync"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such account in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/posts/{id}/metrics": {
      "get": {
        "operationId": "posts.metrics",
        "tags": [
          "Posts"
        ],
        "summary": "Read a post's counts",
        "description": "Views, likes, comments, reposts and quotes for each account the post was published to, read from the platforms now. A platform leaves out what it does not report; LinkedIn, TikTok, Pinterest and Discord report nothing to Flung.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "id",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "The counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMetrics"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such post in this workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/experience": {
      "get": {
        "operationId": "experience.get",
        "tags": [
          "Experience"
        ],
        "summary": "Read XP, level and achievements",
        "description": "XP for each published post and each achievement, counted from the workspace's own activity. Achievements stay earned.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "The workspace's experience.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Experience"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/leaderboard": {
      "get": {
        "operationId": "experience.leaderboard",
        "tags": [
          "Experience"
        ],
        "summary": "Read the leaderboard",
        "description": "Workspaces that chose to be listed, most XP first. A workspace is listed only after PUT /v1/leaderboard/entry.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            },
            "required": false,
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "The top workspaces.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Leaderboard"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/leaderboard/entry": {
      "put": {
        "operationId": "experience.joinLeaderboard",
        "tags": [
          "Experience"
        ],
        "summary": "Join the leaderboard",
        "description": "Lists the workspace under `name`, which every Flung customer can see. Its XP and level are shown; nothing else.",
        "security": [
          {
            "apiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 40
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The workspace's experience, now listed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Experience"
                }
              }
            }
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "experience.leaveLeaderboard",
        "tags": [
          "Experience"
        ],
        "summary": "Leave the leaderboard",
        "security": [
          {
            "apiKey": []
          }
        ],
        "responses": {
          "204": {
            "description": "No longer listed."
          },
          "401": {
            "description": "Missing, unknown, revoked or expired API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "The request failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests for this credential; wait for `retry-after` seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "webhooks": {}
}
