addedInput schema / $defs / AudienceRequest / description
Added value: +"Deprecated: use `delivery.entry_points`. Who may answer the project without an\ninvitation, and where they answer.\n\nStill read and written. It cannot describe a project whose Discord post answers in\nDiscord while its web link is on (it reads back as `private` + `discord`); sending\nback what you read leaves such a project as it is. Never send it together with\n`entry_points`."
addedInput schema / $defs / AudienceRequest / properties / participation / description
Added value: +"`private`: with `response_channel` `discord`, members of the community's Discord server answer from the Discord post. With `response_channel` `web` the project also gets a web link (`delivery.share_url`) that asks respondents to sign in: with Discord, or with one of `verified_source_ids` when set (only those check membership). `open_web`: public web link, anyone who has it can answer. An `open_web` link identifies only respondents already signed in to Subo with Discord, members of the server or not: they can be rewarded (XP, roles, achievements) when rewards are on, and everyone else answers unidentified and cannot be. Set `settings.privacy_mode` to `anonymous` to identify nobody; privacy applies to the whole project, the Discord post included."
addedInput schema / $defs / AudienceRequest / properties / required_role_ids / description
Added value: +"Discord role snowflakes; a member needs at least one of them (any-of). Empty means no role is required. Checked wherever Subo checks someone is in the Discord server: pressing the Discord post, and signing in with Discord on the web link. Not on an `open_web` link, and not for Twitch or YouTube sources. Invitations from journeys and campaigns skip this check."
addedInput schema / $defs / AudienceRequest / properties / response_channel / description
Added value: +"Where a member who presses the Discord post answers. `discord`: in Discord (a thread or a DM, in the order `answer_surfaces` sets), and the project has no web link. `web`: the post hands each member who presses it a personal link, so they answer on the web as themselves; the project also gets a web link. Ignored with `open_web`, which always answers on the web."
addedInput schema / $defs / AudienceRequest / properties / verified_source_ids / description
Added value: +"Audience source ids (from GET /communities/{communityId}/sources) a respondent may verify with on the web link, any-of: a Discord source admits members of that server, a Twitch source its followers, a YouTube source its subscribers. Requires participation `private` and response_channel `web`. Omit to keep the current sources; without any, the link asks for a Discord sign-in."
addedInput schema / $defs / ClosingRequest / properties / mode / description
Added value: +"`manual`: the project closes when you close it. `scheduled`: it closes itself at `time`."
addedInput schema / $defs / ClosingRequest / properties / time / description
Added value: +"Required when mode is `scheduled`. The project closes itself at this time."
addedInput schema / $defs / DeliveryRequest / properties / answer_surfaces / description
Added value: +"Ordered fallback chain of surfaces a Convo is attempted on, first to last. `null` means no override: the project follows Subo's default rules, which are resolved at press time and can differ between two posts of the same project in different channels. Send `null` to clear an override; an empty array is rejected."
addedInput schema / $defs / DeliveryRequest / properties / audience / description
Added value: +"Deprecated, use `entry_points`. Who may answer without an invitation, and where they answer. Never send it together with `entry_points`."
addedInput schema / $defs / DeliveryRequest / properties / clear_conversation / description
Added value: +"Purge the respondent's thread transcript once they COMPLETE the Convo. Never fires on a timeout: a timed-out Convo is resumable and the respondent returns to it. Defaults to false. Only honored on a thread: Subo can bulk-delete in a thread but only its own messages in a DM, so a project with this on AND a `dm` step in `answer_surfaces` fails script validation and will not open. A web Convo carries no durable transcript, so the flag is inert there."
addedInput schema / $defs / DeliveryRequest / properties / closing / description
Added value: +"When the project closes."
addedInput schema / $defs / DeliveryRequest / properties / entry_points
Added value: +{
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/$defs/EntryPointRequest"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "The ways into the project, each with its own rule: the Discord post and the web link, on independently. Send only the ones you change. A member invited by a journey or a campaign is admitted by that invitation, whatever these say; GET project lists those as read-only `invitation` entries.",
+ "title": "Entry Points"
+}
addedInput schema / $defs / DeliveryRequest / properties / invitation / description
Added value: +"The Discord post: where it goes and how its embed looks."
addedInput schema / $defs / DeliveryRequest / properties / opening / description
Added value: +"When the project opens."
addedInput schema / $defs / EmbedConfigRequest / properties / info_display / description
Added value: +"`embed`: project info shows inside the invitation embed; `button`: behind a button."
addedInput schema / $defs / EmbedConfigRequest / properties / rows / description
Added value: +"Per-row visibility toggles for the invitation embed (open map, e.g. status/privacyMode/roles/xpReward)"
addedInput schema / $defs / EntryPointRequest
Added value: +{
+ "description": "One way into the project. Send only the entry points you change; each is matched\non `type`, and an omitted field keeps its value.",
+ "properties": {
+ "answers_on": {
+ "anyOf": [
+ {
+ "enum": [
+ "discord",
+ "web"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "`discord_post` only. Where a member who presses the post answers. `discord`: in Discord (thread or DM, in the order `answer_surfaces` sets). `web`: the post hands that member a personal link and they answer on the web as themselves, whatever the web link says. Polls answer in Discord only.",
+ "title": "Answers On"
+ },
+ "enabled": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "`discord_post`: on when the project has a post channel. `false` clears `delivery.invitation.post_channel_id`; `true` needs that channel, already set or sent in the same request. `web_link`: turns the link on or off. With the link off, members who press the Discord post still answer on the web when its `answers_on` is `web`.",
+ "title": "Enabled"
+ },
+ "required_role_ids": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "`discord_post` only, but it applies to every Discord check: a member needs at least one of these role snowflakes (any-of) to start from the post, and to sign in with Discord on a `verified` web link. Empty means no role is required. Not checked on an `anyone` link, nor for Twitch or YouTube sources.",
+ "title": "Required Role Ids"
+ },
+ "sign_in_with": {
+ "anyOf": [
+ {
+ "items": {
+ "enum": [
+ "discord",
+ "twitch",
+ "google",
+ "steam"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "`web_link` only, with `who` `signed_in`: the platforms a respondent may sign in with (any Subo supports; nothing to connect first). `google` is a Google account, not a YouTube channel; `steam` only once Subo's Steam key is set. Omit to keep the current list; a new `signed_in` link defaults to `discord`. Rewards (XP, roles, achievements) reach only respondents who sign in with Discord.",
+ "title": "Sign In With"
+ },
+ "type": {
+ "description": "`discord_post`: the invitation posted in a Discord channel, answered by members of the community's server. `web_link`: the project's link (`url` on read), which works anywhere. `invitation` entries (journeys and campaigns) are read-only.",
+ "enum": [
+ "discord_post",
+ "web_link"
+ ],
+ "title": "Type",
+ "type": "string"
+ },
+ "verified_source_ids": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "`web_link` only, implies `who` `verified`. Audience source ids (from GET /communities/{communityId}/sources): a Discord source admits members of that server, a Twitch source its followers, a YouTube source its subscribers. Omit to keep the current sources.",
+ "title": "Verified Source Ids"
+ },
+ "who": {
+ "anyOf": [
+ {
+ "enum": [
+ "anyone",
+ "signed_in",
+ "verified"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "`web_link` only. `anyone`: anyone who has the link answers; only respondents already signed in to Subo with Discord are identified (members of the server or not) and can be rewarded, everyone else answers unidentified. Set `settings.privacy_mode` to `anonymous` to identify nobody. `signed_in`: a respondent signs in with one of `sign_in_with` and is named; nothing about them is checked (no server, no roles). `verified`: a respondent signs in and must verify with one of `verified_source_ids` (any-of); a Discord source is checked live, with the post's `required_role_ids`. Turning the link on without `who` uses `verified` with the community's Discord server.",
+ "title": "Who"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "title": "EntryPointRequest",
+ "type": "object"
+}
addedInput schema / $defs / InvitationRequest / properties / answer_button_color / description
Added value: +"Discord button style for the answer button (1 primary, 2 secondary, 3 success, 4 danger). Premium only."
addedInput schema / $defs / InvitationRequest / properties / answer_button_label / description
Added value: +"Custom label for the answer/vote button. Premium only."
addedInput schema / $defs / InvitationRequest / properties / border_color / description
Added value: +"6-digit hex color without '#' for the embed border when the project is open (e.g. `e1287e`). A leading '#' is accepted and removed; anything else is a 400."
addedInput schema / $defs / InvitationRequest / properties / border_color_closed / description
Added value: +"6-digit hex color without '#' for the embed border when the project is closed (e.g. `745399`). A leading '#' is accepted and removed. Premium only."
addedInput schema / $defs / InvitationRequest / properties / embed_config / description
Added value: +"Invitation embed layout: whether project info shows inline (`embed`) or behind a button, plus per-row visibility toggles"
addedInput schema / $defs / InvitationRequest / properties / footer / description
Added value: +"Text shown below the invitation embed. Premium only."
addedInput schema / $defs / InvitationRequest / properties / image_url / description
Added value: +"Image URL shown in the invitation embed"
addedInput schema / $defs / InvitationRequest / properties / message / description
Added value: +"Custom invitation message (Markdown)"
addedInput schema / $defs / InvitationRequest / properties / post_channel_id / description
Added value: +"Discord channel snowflake where the invitation embed is posted. For a project answered on the web (`open_web`, or `private` with `response_channel` `web`) it is the only place the invitation is posted: `null` or an empty string means post nowhere, and respondents come in through `delivery.share_url`. A project answered in Discord needs it to open. On update and open: omit to leave it, send `null` or an empty string to clear it."
addedInput schema / $defs / InvitationRequest / properties / thumbnail_url / description
Added value: +"Thumbnail image URL shown in the invitation embed"
addedInput schema / $defs / OpeningRequest / properties / mode / description
Added value: +"`manual`: the project opens when you open it. `scheduled`: it opens itself at `time`."
addedInput schema / $defs / OpeningRequest / properties / time / description
Added value: +"Required when mode is `scheduled`. The project opens itself at this time (UTC unless the value carries an offset) and posts its invitation then; do not also call open. Set it on an inactive project."