[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"title":"A Statamic Blueprint JSON Schema","$id":"https://arroba-it.de/statamic.blueprint.schema.json","$schema":"http://json-schema.org/draft-07/schema#","type":"object","oneOf":[{"required":["tabs"]},{"required":["sections"]}],"properties":{"title":{"type":"string"},"tabs":{"title":"The Tabs","description":"At its most basic, a blueprint has tabs. A tab has a handle, a display name, and an array of sections. Since Statamic 4","type":"object","additionalProperties":false,"patternProperties":{"^[A-Za-z_]+?$":{"description":"The handle (name) of a section. This one is on you.","type":"object","properties":{"display":{"description":"The displayed text.","type":"string"},"sections":{"description":"The Sections of the Tab","type":"array","items":{"type":"object","properties":{"display":{"description":"The displayed text.","type":"string"},"instructions":{"description":"Some instructions","type":"string"},"fields":{"$ref":"#/$defs/fields"}}},"additionalItems":false}}}}},"sections":{"title":"The Sections","description":"At its most basic, a blueprint has sections. A section has a handle, a display name, and an array of fields. Until Statamic 3","type":"object","additionalProperties":false,"patternProperties":{"^[A-Za-z]+?$":{"description":"The handle (name) of a section. This one is on you.","type":"object","properties":{"display":{"description":"The displayed text.","type":"string"},"fields":{"$ref":"#/$defs/fields"}}}}}},"$defs":{"fields":{"description":"Here you define the fields of this section.","type":"array","uniqueItems":true,"uniqueItemProperties":["handle"],"items":{"type":"object","properties":{"handle":{"type":"string","description":"The field's template variable."},"config":{"type":"object","properties":{"display":{"type":"string"}}},"import":{"type":"string"},"prefix":{"type":"string"},"field":{"description":"The definition of a single field.","type":["object","string"],"anyOf":[{"type":"string"},{"$ref":"#/$defs/array"},{"$ref":"#/$defs/assets"},{"$ref":"#/$defs/bard"},{"$ref":"#/$defs/button_group"},{"$ref":"#/$defs/checkboxes"},{"$ref":"#/$defs/code"},{"$ref":"#/$defs/collections"},{"$ref":"#/$defs/color"},{"$ref":"#/$defs/date"},{"$ref":"#/$defs/entries"},{"$ref":"#/$defs/form"},{"$ref":"#/$defs/grid"},{"$ref":"#/$defs/hidden"},{"$ref":"#/$defs/html"},{"$ref":"#/$defs/integer"},{"$ref":"#/$defs/link"},{"$ref":"#/$defs/list"},{"$ref":"#/$defs/markdown"},{"$ref":"#/$defs/radio"},{"$ref":"#/$defs/range"},{"$ref":"#/$defs/replicator"},{"$ref":"#/$defs/revealer"},{"$ref":"#/$defs/section"},{"$ref":"#/$defs/select"},{"$ref":"#/$defs/sites"},{"$ref":"#/$defs/slug"},{"$ref":"#/$defs/structures"},{"$ref":"#/$defs/table"},{"$ref":"#/$defs/taxonomies"},{"$ref":"#/$defs/taggable"},{"$ref":"#/$defs/template"},{"$ref":"#/$defs/terms"},{"$ref":"#/$defs/text"},{"$ref":"#/$defs/textarea"},{"$ref":"#/$defs/time"},{"$ref":"#/$defs/toggle"},{"$ref":"#/$defs/user_groups"},{"$ref":"#/$defs/user_roles"},{"$ref":"#/$defs/users"},{"$ref":"#/$defs/video"},{"$ref":"#/$defs/yaml"}],"required":["type"]}},"dependentRequired":{"field":["handle"]}}},"array":{"description":"This fieldtype is used to manage key: value array data in the right situation.","type":"object","properties":{"display":{"$ref":"#/$defs/display"},"icon":{"$ref":"#/$defs/icon"},"instructions":{"$ref":"#/$defs/instructions"},"instructions_position":{"$ref":"#/$defs/instructions_position"},"listable":{"$ref":"#/$defs/listable"},"required":{"$ref":"#/$defs/required"},"localizable":{"$ref":"#/$defs/localizable"},"validate":{"$ref":"#/$defs/validate"},"type":{"const":"array"},"mode":{"type":"string","enum":["dynamic","keyed"]},"keys":{"type":["object","array"]},"value_header":{"type":"string"},"key_header":{"type":"string"}},"additionalProperties":true},"assets":{"description":"The assets fieldtype is used to manage and relate files with your entries.","type":"object","properties":{"type":{"const":"assets"},"mode":{"type":"string","enum":["grid","list"],"default":"list"},"container":{"type":"string"},"folder":{"type":"string"},"restrict":{"type":"boolean","default":false},"allow_uploads":{"type":"boolean","default":true},"show_filename":{"type":"boolean","default":true},"max_files":{"type":"integer"}},"additionalProperties":true},"bard":{"description":"Bard is our recommended fieldtype for creating long form content from the control panel.","type":"object","properties":{"type":{"const":"bard"},"always_show_set_button":{"description":"Enable to always show the \"Add Set\" button.","type":"boolean","default":false},"sets":{"description":"Sets are configurable blocks of fields that can be inserted anywhere in your Bard content.","type":"object"},"buttons":{"description":"Choose which buttons to show in the toolbar.","type":"array","items":{"type":"string","uniqueItems":true,"enum":["h2","h3","bold","italic","unorderedlist","orderedlist","removeformat","quote","anchor","image","table"]}},"container":{"description":"Choose which asset container to use for this field.","type":"string"},"save_html":{"description":"Save HTML instead of structured data. This simplifies but limits control of your template markup.","type":"boolean","default":false},"toolbar_mode":{"description":"Choose which style of toolbar you prefer.","type":"string","enum":["fixed","floating"],"default":"fixed"},"link_noopener":{"description":"Set rel=\"noopener\" on all links.","type":"boolean","default":false},"link_noreferrer":{"description":"Set rel=\"noreferrer\" on all links.","type":"boolean","default":false},"target_blank":{"description":"Set target=\"_blank\" on all links.","type":"boolean","default":false},"link_collections":{"description":"Entries from these collections will be available in the link selector. Leaving this empty will make all entries available.","type":"array","items":{"type":"string"}},"reading_time":{"description":"Show estimated reading time at the bottom of the field.","type":"boolean","default":false},"fullscreen":{"description":"Enable to toggle into fullscreen mode.","type":"boolean","default":true},"allow_source":{"description":"Allow Source Mode","type":"boolean","default":true},"enable_input_rules":{"description":"Enable Input Rules","type":"boolean","default":true},"enable_paste_rules":{"description":"Enables Markdown-style shortcuts when typing content.","type":"boolean","default":true},"display":{"$ref":"#/$defs/display"},"instructions":{"$ref":"#/$defs/instructions"},"instructions_position":{"$ref":"#/$defs/instructions_position"},"listable":{"$ref":"#/$defs/listable"},"required":{"$ref":"#/$defs/required"},"localizable":{"$ref":"#/$defs/localizable"},"validate":{"$ref":"#/$defs/validate"}},"additionalProperties":true},"button_group":{"description":"The button group fieldtype is a multiple choice input where you only get one choice.","type":"object","properties":{"type":{"const":"button_group"},"options":{"description":"Set the array keys and their optional labels.","type":["object","array"]},"default":{"description":"Set the default value.","type":"string"}},"additionalProperties":true},"checkboxes":{"description":"The checkboxes fieldtype is a multiple choice input.","type":"object","properties":{"type":{"const":"checkboxes"},"inline":{"type":"boolean","default":"false"},"options":{"type":["object","array"]},"default":{"type":"string"}},"additionalProperties":true},"code":{"description":"If your content involves code snippets, this is the fieldtype for you.","type":"object","properties":{"type":{"const":"code"},"theme":{"description":"Choose your preferred theme.","type":"string","enum":["light","material"]},"mode":{"description":"Choose language for syntax highlighting.","type":"string","enum":["clike","css","diff","go","haml","handlebars","htmlmixed","less","markdown","gfm","nginx","text/x-java","javascript","jsx","text/x-objectivec","php","python","ruby","scss","shell","sql","twig","vue","xml","yaml-frontmatter"]},"indent_type":{"description":"Set your preferred type of indentation.","type":"string","enum":["tabs","spaces"]},"indent_size":{"description":"Set your preferred indentation size (in spaces).","type":"integer","default":4},"key_map":{"description":"Choose preferred set of keyboard shortcuts.","type":"string","default":"default","enum":["default","sublime","vim"]},"line_numbers":{"description":"Show Line Numbers","type":"boolean","default":true},"line_wrapping":{"description":"Enable Line Wrapping","type":"boolean","default":true}},"additionalProperties":true},"collections":{"description":"This fieldtype is used to view and select from a list of Collections.","type":"object","properties":{"type":{"const":"collections"},"max_items":{"description":"Set a maximum number of selectable items.","type":"integer"},"mode":{"description":"Choose your preferred UI style.","$ref":"#/$defs/userSelectModes"}},"additionalProperties":true},"color":{"description":"This fieldtype is a highly configurable color picker with simple and advanced UI modes, support for alpha channel, rgba, hsla, hsva, and more.","type":"object","properties":{"type":{"const":"color"},"swatches":{"description":"Pre-define colors that can be selected from a list. Supports all color mode formats.","type":"array","uniqueItems":true},"theme":{"description":"Choose between a classic and a simpler nano (mini) theme. Default: classic.","type":"string","enum":["classic","nano"]},"lock_opacity":{"description":"Disables the alpha slider, preventing adjustments to opacity.","type":"boolean","default":false},"default_color_mode":{"description":"Set which color mode you wish to be the default. Default: hex.","type":"string","default":"HEXA","enum":["HEXA","RGBA","HSLA","HSVA","CMYK"]},"color_modes":{"description":"Choose which color modes you want to enable in the UI. Available choices: hex, rgba, hsla, hsva, and cmyk. Default: hex.","type":"array","uniqueItems":true,"default":"hex","items":{"type":"string","enum":["hex","rgba","hsla","hsva","cmyk"]}}},"additionalProperties":true},"date":{"description":"Work with dates, times, and ranges with a variety of user interface options that make you really enjoy basically just picking numbers from a table.","type":"object","properties":{"columns":{"type":"integer","description":"Show multiple months at one time, in columns and rows. Default: 1.","minimum":1,"default":1},"earliest_date":{"oneOf":[{"format":"date"},{"format":"date-time"}],"type":"string","default":"1900-01-01","description":"Set the earliest selectable date in YYYY-MM-DD format."},"format":{"type":"string","description":"How the date should be stored, using the PHP date format. Default: 'Y-m-d' or 'Y-m-d H:m'","default":"'Y-m-d'"},"full_width":{"type":"boolean","description":"Enable to stretch the calendar out like Stretch Armstrong, using the maximum amount of available horizontal space. Default: false","default":false},"icon":{"type":"string"},"inline":{"type":"boolean","description":"Always show the calendar instead of the text input and dropdown UI. Default: false.","default":false},"mode":{"type":"string","description":"Choose between single or range. Range mode disables the time picker. Default: single.","enum":["single","range"],"default":"single"},"rows":{"type":"integer","description":"Show multiple months at one time, in columns and rows. Default: 1.","minimum":1,"default":1},"time_enabled":{"type":"boolean","description":"Enable/disable the timepicker. Default: false.","default":false},"time_required":{"type":"boolean","description":"Makes the time field visible and non-dismissible. Default: false.","default":false},"type":{"type":"string","const":"date"}},"additionalProperties":true},"entries":{"description":"","type":"object","properties":{"type":{"const":"entries"},"max_items":{"$ref":"#/$defs/max_items"},"mode":{"$ref":"#/$defs/userSelectModes"},"create":{"type":"boolean","default":true},"collections":{"type":"array","uniqueItems":true,"items":{"type":"string"}}},"additionalProperties":true},"form":{"description":"The Form fieldtype is gives your users a way to pick a form to include along with the current entry.","type":"object","properties":{"type":{"const":"form"},"placeholder":{"$ref":"#/$defs/placeholder"},"max_items":{"type":"integer","default":1}},"additionalProperties":true},"grid":{"description":"The grid fieldtype is a meta fieldtype, a fieldtype that serves as a container for more fieldtypes.","type":"object","properties":{"type":{"const":"grid"},"fields":{"description":"A list of fields, each of which create their own column.","type":"array","items":{"type":"object"}},"mode":{"description":"The Grid is displayed as a table by default. If you have a large number of columns it can get pretty crowded. Choose stacked mode to group rows similar to Replicator. When Sneak Peek is enabled, Grids automatically toggle into stacked mode.","type":"string","enum":["table","stacked"]},"min_rows":{"description":"The minimum number of required rows.","type":"integer","minimum":0},"max_rows":{"description":"The maximum number of rows allowed. Once reached the Add Row button will disappear.","type":"integer","minimum":1},"add_row":{"description":"The Add Row button's label.","type":"string","minimum":1},"reorderable":{"description":"The minimum number of required rows.","type":"boolean","default":true}},"additionalProperties":true},"hidden":{"description":"The hidden field is perfect for setting default data when creating new entries.","type":"object","properties":{"type":{"const":"hidden"},"default":{"type":"string"}},"additionalProperties":true},"html":{"description":"If you've ever wanted to add a little HTML to your blueprint, this is the way to do it.","type":"object","properties":{"type":{"const":"html"},"html":{"description":"Store whatever HTML you want \u2014 it's up to you.","type":["string"]}},"additionalProperties":true},"import":{"description":"Importing Fieldsets. They serve to create reusable sets of fields, just like v2.","type":"string"},"integer":{"description":"The integer fieldtype is a text-style input that only accepts integers (numbers) and has increment and decrement controls.","type":"object","properties":{"type":{"const":"integer"},"default":{"type":["string","integer"]}},"additionalProperties":true},"link":{"description":"For when you want to create a link to a URL or entry, this fieldtype is here for you.","type":"object","properties":{"type":{"const":"link"},"collections":{"type":"array"}},"additionalProperties":true},"list":{"description":"For when you want to manage a simple YAML list, this fieldtype is here for you.","type":"object","properties":{"type":{"const":"list"},"default":{"type":"array"}},"additionalProperties":true},"markdown":{"description":"Write Markdown with the help of formatting buttons, assets integration, fullscreen mode, a Markdown cheatsheet, and HTML preview mode.","type":"object","properties":{"type":{"const":"markdown"},"container":{"description":"Set the name of an asset container to enable browsing, uploading, and inserting assets.","type":"string"},"restrict":{"description":"If true, navigation within the asset browser will be disabled. Your users will be restricted to specified the container and folder. Default: false.","type":"boolean","default":false},"automatic_line_breaks":{"description":"Automatically convert line breaks to <br> tags. Default: true.","type":"boolean","default":true},"automatic_links":{"description":"Automatically links any URLs in the text. Default: false.","type":"boolean","default":false},"escape_markup":{"description":"Escapes inline HTML markup. For example, <div> will be replaced with <div>. Default: true.","type":"boolean","default":false},"smartypants":{"description":"Automatically convert straight quotes into curly quotes, dashes into en/em-dashes, and other similar text transformations. Default: false.","type":"boolean","default":false},"antlers":{"$ref":"#/$defs/antlers"},"default":{"description":"Set the default value.","type":"string"}},"additionalProperties":true},"radio":{"description":"The radio fieldtype is a multiple choice input where you only get one choice.","type":"object","properties":{"type":{"const":"radio"},"options":{"description":"Sets of key/value pairs define the values and labels of the radio options.","type":["object","array"]},"inline":{"description":"Show the radio buttons next to each other in a row instead of stacked vertically. Default: false","type":"boolean","default":false},"cast_booleans":{"type":"boolean","default":false}},"additionalProperties":true},"range":{"description":"Range fields let the user choose a numeric value which must be no less than a given value, and no more than another.","type":"object","properties":{"type":{"const":"range"},"step":{"description":"The minimum size between values.","type":"integer","minimum":1,"default":1},"min":{"description":"The minimum, left-most value.","type":"integer","minimum":0,"default":0},"max":{"description":"The maximum, right-most value.","type":"integer","default":100},"default":{"description":"Set the default value.","type":"integer"}},"additionalProperties":true},"replicator":{"description":"The Replicator is a meta fieldtype giving you the ability to define sets of fields that you can dynamically piece together in whatever order and arrangement you imagine.","type":"object","properties":{"type":{"const":"replicator"}},"additionalProperties":true},"revealer":{"description":"The revealer is a simple button that reveals conditional fields without saving any additional data.","type":"object","properties":{"type":{"const":"revealer"}},"additionalProperties":true},"section":{"description":"","type":"object","properties":{"type":{"const":"section"}},"additionalProperties":true},"select":{"description":"Give your users a list of options to choose from.","type":"object","properties":{"type":{"const":"select"},"clearable":{"description":"Allow deselecting any chosen option and making null a possible value. Default: false.","type":"boolean","default":false},"options":{"description":"A set of key/value pairs that define the values and labels. If you don't define the keys, the value and label will be the same.\n\n","type":["array","object"]},"placeholder":{"description":"Set the non-selectable placeholder text. Default: none.","$ref":"#/$defs/placeholder"},"default":{"description":"Set the default option key. Default: none.","type":"string"},"multiple":{"description":"Allow multiple selections. Default: false.","type":"boolean","default":false},"searchable":{"description":"Enable search with suggestions by typing in the select box. Default: true.","type":"boolean","default":true},"taggable":{"description":"Use a \"tag\" style UI when selecting multiples. Default: false.","type":"boolean","default":false},"push_tags":{"description":"Add newly created options to the list. Default: false.","type":"boolean","default":false}},"additionalProperties":true,"required":["options"]},"sites":{"description":"","type":"object","properties":{"type":{"const":"sites"},"max_items":{"$ref":"#/$defs/max_items"},"mode":{"$ref":"#/$defs/userSelectModes"}},"additionalProperties":true},"slug":{"description":"","type":"object","properties":{"type":{"const":"slug"},"generate":{"type":"boolean","default":true}},"additionalProperties":true},"structures":{"description":"Use this fieldtype to create a one-way relationship with one or more structures in your site.","type":"object","properties":{"type":{"const":"structures"},"max_items":{"$ref":"#/$defs/max_items"},"mode":{"$ref":"#/$defs/userSelectModes"}},"additionalProperties":true},"table":{"description":"This fieldtype gives you a way to create flexible tabular data.","type":"object","properties":{"type":{"const":"table"}},"additionalProperties":true},"taggable":{"description":"Users can enter \u201ctaggable\u201d values, which are formatted automatically into a YAML list format.","type":"object","properties":{"type":{"const":"taggable"},"placeholder":{"$ref":"#/$defs/placeholder"}},"additionalProperties":true},"taxonomies":{"description":"","type":"object","properties":{"type":{"const":"taxonomies"},"max_items":{"$ref":"#/$defs/max_items"},"mode":{"$ref":"#/$defs/userSelectModes"}},"additionalProperties":true},"template":{"description":"This is generally used as a \"system\" field to control an entry's template.","type":"object","properties":{"type":{"const":"template"},"hide_partials":{"type":"boolean","default":true}},"additionalProperties":true},"terms":{"description":"Taxonomies are usually relationships established on the collection-configuration level.","type":"object","properties":{"type":{"const":"terms"},"max_items":{"$ref":"#/$defs/max_items"},"mode":{"$ref":"#/$defs/userSelectModes"},"create":{"type":"boolean"},"taxonomies":{"type":"array"}},"additionalProperties":true},"text":{"description":"A text field that has the ability to morph into an intergalactic dragon and devour entire planets!","type":"object","properties":{"type":{"const":"text"},"placeholder":{"$ref":"#/$defs/placeholder"},"input_type":{"type":"string","default":"text","enum":["color","date","email","hidden","month","number","password","tel","text","time","url","week"]},"character_limit":{"type":["integer"]},"antlers":{"$ref":"#/$defs/antlers"},"default":{"type":"string"},"append":{"type":"string"},"prepend":{"type":"string"}},"additionalProperties":true},"textarea":{"description":"A long textarea field that functions like a swimming pool for letters and numbers on a hot day.","type":"object","properties":{"type":{"const":"textarea"},"placeholder":{"$ref":"#/$defs/placeholder"},"character_limit":{"type":["integer","string"]},"antlers":{"$ref":"#/$defs/antlers"},"default":{"type":"string"}},"additionalProperties":true},"time":{"description":"The original time field from the set of Kiefer Sutherland's hit drama \"24\".","type":"object","properties":{"type":{"const":"time"},"default":{"type":"string","pattern":"^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"}},"additionalProperties":true},"toggle":{"description":"A nice little toggle switch generally used to manage settings-type variables.","type":"object","properties":{"type":{"const":"toggle"},"default":{"type":"boolean","default":false}},"additionalProperties":true},"user_groups":{"description":"The User Group fieldtype gives your users a way to pick one or more User Groups to attach to the current entry.","type":"object","properties":{"type":{"const":"user_groups"},"max_items":{"type":["integer","null"],"minimum":1,"default":null},"mode":{"$ref":"#/$defs/userSelectModes"}},"additionalProperties":true},"user_roles":{"description":"The User Role fieldtype gives your users a way to pick one or more User Groups to attach to the current entry.","type":"object","properties":{"type":{"const":"user_roles"},"max_items":{"type":["integer","null"],"minimum":1,"default":null},"mode":{"$ref":"#/$defs/userSelectModes"}},"additionalProperties":true},"users":{"description":"The most common use for the Users fieldtype is to set the \"author\" for entries, but it's not the only use.","type":"object","properties":{"type":{"const":"users"},"max_items":{"type":["integer","null"],"minimum":1,"default":null},"mode":{"$ref":"#/$defs/userSelectModes"},"default":{"type":"string","const":"current"}},"additionalProperties":true},"video":{"description":"","type":"object","properties":{"type":{"const":"video"},"placeholder":{"$ref":"#/$defs/placeholder"},"default":{"type":"string","format":"url"}},"additionalProperties":true},"yaml":{"description":"This field is a code fieldtype that gets saved as YAML instead of a string.","type":"object","properties":{"type":{"const":"yaml"},"default":{"type":["object","string"]}},"additionalProperties":true},"display":{"description":"The label shown above the field.","type":"string"},"icon":{"description":"The icon","type":"string"},"instructions":{"description":"Shown under the field's display label, like this very text. Markdown is supported.","type":"string"},"instructions_position":{"description":"Where the instructions should be positioned relative to the field. Options: Above or Below.","type":"string","enum":["above","below"]},"listable":{"description":"Controls whether the field should be shown in control panel listings.","oneOf":[{"type":"boolean"},{"type":"string","pattern":"hidden"}]},"required":{"description":"Control whether or not this field is required.\n\n","type":"boolean"},"localizable":{"description":"","type":"boolean"},"validate":{"description":"The validation rules for that field","type":"array","items":{"anyOf":[{"$ref":"#/$defs/ruleMin"},{"$ref":"#/$defs/validationRules"}],"minItems":1,"uniqueItems":true}},"ruleMin":{"type":"string","pattern":"^((accepted|declined|exclude)_if:\\S+,\\S+|(after|before):[\\w\\d_-]+|(after|before)_or_equal:[\\w\\d_-]+|between:\\d+,\\d+|date_equals:[\\w\\d_-]+|date_format:[\\w\\d_-]+|different:\\S+|digits:\\d+|digits_between:\\d+,\\d+|ends_with:\\S+,\\S+|exclude_unless:\\S+,\\S+|exclude_without:\\S+|exists:\\S+,\\S+|[lg]t(e)?:\\S+|in:\\S+,\\S+|in_array:\\S+|(min|max):\\d+|mimetypes:\\S+|mimes:\\S+|multiple_of:\\d+|not_in:\\S+,\\S+|(not_)?regex:\\S+|prohibited_(if|unless):[\\S_]+,\\S+|prohibits:(\\S)+,(\\S)+|required_(if|unless):\\S+,\\d+|required_(with|with_all|without|without_all):\\S+,\\S+|same:\\S+|size:\\d+|starts_with:\\S+,\\S+|unique:\\S+,\\S+|unique_user_value:[\\{(collection|id|site)\\}]+)$"},"validationRules":{"type":"string","enum":["accepted","active_url","required","alpha","alpha_dash","alpha_num","array","bail","boolean","confirmed","current_password","date","declined","dimensions","distinct","email","enum","exclude","file","filled","image","integer","ip","ipv4","ipv6","json","nullable","numeric","password","present","prohibited","string","timezone","url","uuid"]},"userSelectModes":{"type":"string","enum":["default","select","typeahead"]},"placeholder":{"type":"string"},"antlers":{"description":"Enable Antlers parsing in this field's content.","type":"boolean","default":false},"max_items":{"type":"integer","minimum":1}}}
</schema>

[User] Provide a JSON object that satisfies the schema "A Statamic Blueprint JSON Schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

A Statamic Blueprint JSON Schema

The Tabs

At its most basic, a blueprint has tabs. A tab has a handle, a display name, and an array of sections. Since Statamic 4

The handle (name) of a section. This one is on you.

The displayed text.

The Sections of the Tab

The displayed text.

Some instructions

The Sections

At its most basic, a blueprint has sections. A section has a handle, a display name, and an array of fields. Until Statamic 3

The displayed text.

Here you define the fields of this section.

The field's template variable.

The definition of a single field.

This fieldtype is used to manage key: value array data in the right situation.

The assets fieldtype is used to manage and relate files with your entries.

Bard is our recommended fieldtype for creating long form content from the control panel.

Enable to always show the "Add Set" button.

Sets are configurable blocks of fields that can be inserted anywhere in your Bard content.

Choose which buttons to show in the toolbar.

h2 h3 bold italic unorderedlist orderedlist removeformat quote anchor image table

Choose which asset container to use for this field.

Save HTML instead of structured data. This simplifies but limits control of your template markup.

Choose which style of toolbar you prefer.

Set rel="noopener" on all links.

Set rel="noreferrer" on all links.

Set target="_blank" on all links.

Entries from these collections will be available in the link selector. Leaving this empty will make all entries available.

Show estimated reading time at the bottom of the field.

Enable to toggle into fullscreen mode.

Allow Source Mode

Enable Input Rules

Enables Markdown-style shortcuts when typing content.

The button group fieldtype is a multiple choice input where you only get one choice.

Set the array keys and their optional labels.

Set the default value.

The checkboxes fieldtype is a multiple choice input.

If your content involves code snippets, this is the fieldtype for you.

Choose your preferred theme.

Choose language for syntax highlighting.

clike css diff go haml handlebars htmlmixed less markdown gfm nginx text/x-java javascript jsx text/x-objectivec php python ruby scss shell sql twig vue xml yaml-frontmatter

Set your preferred type of indentation.

Set your preferred indentation size (in spaces).

Choose preferred set of keyboard shortcuts.

Show Line Numbers

Enable Line Wrapping

This fieldtype is used to view and select from a list of Collections.

Set a maximum number of selectable items.

Choose your preferred UI style.

This fieldtype is a highly configurable color picker with simple and advanced UI modes, support for alpha channel, rgba, hsla, hsva, and more.

Pre-define colors that can be selected from a list. Supports all color mode formats.

Choose between a classic and a simpler nano (mini) theme. Default: classic.

Disables the alpha slider, preventing adjustments to opacity.

Set which color mode you wish to be the default. Default: hex.

Choose which color modes you want to enable in the UI. Available choices: hex, rgba, hsla, hsva, and cmyk. Default: hex.

Work with dates, times, and ranges with a variety of user interface options that make you really enjoy basically just picking numbers from a table.

Show multiple months at one time, in columns and rows. Default: 1.

Set the earliest selectable date in YYYY-MM-DD format.

How the date should be stored, using the PHP date format. Default: 'Y-m-d' or 'Y-m-d H:m'

Enable to stretch the calendar out like Stretch Armstrong, using the maximum amount of available horizontal space. Default: false

Always show the calendar instead of the text input and dropdown UI. Default: false.

Choose between single or range. Range mode disables the time picker. Default: single.

Enable/disable the timepicker. Default: false.

Makes the time field visible and non-dismissible. Default: false.

The Form fieldtype is gives your users a way to pick a form to include along with the current entry.

The grid fieldtype is a meta fieldtype, a fieldtype that serves as a container for more fieldtypes.

A list of fields, each of which create their own column.

The Grid is displayed as a table by default. If you have a large number of columns it can get pretty crowded. Choose stacked mode to group rows similar to Replicator. When Sneak Peek is enabled, Grids automatically toggle into stacked mode.

The minimum number of required rows.

The maximum number of rows allowed. Once reached the Add Row button will disappear.

The Add Row button's label.

The minimum number of required rows.

The hidden field is perfect for setting default data when creating new entries.

If you've ever wanted to add a little HTML to your blueprint, this is the way to do it.

Store whatever HTML you want — it's up to you.

Importing Fieldsets. They serve to create reusable sets of fields, just like v2.

The integer fieldtype is a text-style input that only accepts integers (numbers) and has increment and decrement controls.

For when you want to create a link to a URL or entry, this fieldtype is here for you.

For when you want to manage a simple YAML list, this fieldtype is here for you.

Write Markdown with the help of formatting buttons, assets integration, fullscreen mode, a Markdown cheatsheet, and HTML preview mode.

Set the name of an asset container to enable browsing, uploading, and inserting assets.

If true, navigation within the asset browser will be disabled. Your users will be restricted to specified the container and folder. Default: false.

Automatically convert line breaks to <br> tags. Default: true.

Automatically links any URLs in the text. Default: false.

Escapes inline HTML markup. For example, <div> will be replaced with <div>. Default: true.

Automatically convert straight quotes into curly quotes, dashes into en/em-dashes, and other similar text transformations. Default: false.

Set the default value.

The radio fieldtype is a multiple choice input where you only get one choice.

Sets of key/value pairs define the values and labels of the radio options.

Show the radio buttons next to each other in a row instead of stacked vertically. Default: false

Range fields let the user choose a numeric value which must be no less than a given value, and no more than another.

The minimum size between values.

The minimum, left-most value.

The maximum, right-most value.

Set the default value.

The Replicator is a meta fieldtype giving you the ability to define sets of fields that you can dynamically piece together in whatever order and arrangement you imagine.

The revealer is a simple button that reveals conditional fields without saving any additional data.

Give your users a list of options to choose from.

Allow deselecting any chosen option and making null a possible value. Default: false.

A set of key/value pairs that define the values and labels. If you don't define the keys, the value and label will be the same.

Set the non-selectable placeholder text. Default: none.

Set the default option key. Default: none.

Allow multiple selections. Default: false.

Enable search with suggestions by typing in the select box. Default: true.

Use a "tag" style UI when selecting multiples. Default: false.

Add newly created options to the list. Default: false.

Use this fieldtype to create a one-way relationship with one or more structures in your site.

This fieldtype gives you a way to create flexible tabular data.

Users can enter “taggable” values, which are formatted automatically into a YAML list format.

This is generally used as a "system" field to control an entry's template.

Taxonomies are usually relationships established on the collection-configuration level.

A text field that has the ability to morph into an intergalactic dragon and devour entire planets!

color date email hidden month number password tel text time url week

A long textarea field that functions like a swimming pool for letters and numbers on a hot day.

The original time field from the set of Kiefer Sutherland's hit drama "24".

A nice little toggle switch generally used to manage settings-type variables.

The User Group fieldtype gives your users a way to pick one or more User Groups to attach to the current entry.

The User Role fieldtype gives your users a way to pick one or more User Groups to attach to the current entry.

The most common use for the Users fieldtype is to set the "author" for entries, but it's not the only use.

This field is a code fieldtype that gets saved as YAML instead of a string.

The label shown above the field.

The icon

Shown under the field's display label, like this very text. Markdown is supported.

Where the instructions should be positioned relative to the field. Options: Above or Below.

Controls whether the field should be shown in control panel listings.

Control whether or not this field is required.

The validation rules for that field

accepted active_url required alpha alpha_dash alpha_num array bail boolean confirmed current_password date declined dimensions distinct email enum exclude file filled image integer ip ipv4 ipv6 json nullable numeric password present prohibited string timezone url uuid

Enable Antlers parsing in this field's content.

Provide a JSON object that satisfies the schema "A Statamic Blueprint JSON Schema". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-04/schema#","additionalProperties":false,"default":{"navigationFallback":{"rewrite":"/index.html"}},"definitions":{"route":{"type":"object","required":["route"],"properties":{"route":{"type":"string","description":"Request route pattern to match. May contain valid wildcards. See documentation: https://aka.ms/swa/config-schema"},"methods":{"type":"array","description":"Request method(s) to match","items":{"anyOf":[{"type":"string","enum":["GET","HEAD","POST","PUT","DELETE","PATCH","CONNECT","OPTIONS","TRACE"]}]}},"allowedRoles":{"type":"array","description":"Roles that are allowed to access this route. If not empty, only role(s) listed are authorized to access the route. Roles are only used for authorization; they are not used to evaluate whether the route matches the request.","items":{"anyOf":[{"type":"string","examples":["anonymous","authenticated"]}]}},"headers":{"type":"object","description":"Override any matching global headers","additionalProperties":true},"redirect":{"type":"string","description":"Redirect to a relative or absolute path, or an external URI. Default status code is 302, override with 301."},"statusCode":{"type":"integer","description":"Status code override"},"rewrite":{"type":"string","description":"A path to rewrite the request route to"}},"additionalProperties":false},"auth":{"type":"object","required":["identityProviders"],"properties":{"rolesSource":{"type":"string","description":"Route to API function for assigning roles. For example, \"/api/GetRoles\". See https://aka.ms/swa-roles-function"},"identityProviders":{"type":"object","properties":{"azureActiveDirectory":{"type":"object","required":["registration"],"properties":{"enabled":{"description":"<false> if the azureActiveDirectory provider is not enabled, <true> otherwise","type":"boolean","default":true},"registration":{"type":"object","required":["openIdIssuer","clientSecretSettingName"],"properties":{"openIdIssuer":{"type":"string","description":"The endpoint for the OpenID configuration of the AAD tenant"},"clientIdSettingName":{"type":"string","description":"The name of the application setting containing the Application (client) ID for the Azure AD app registration"},"clientSecretSettingName":{"type":"string","description":"The name of the application setting containing the client secret for the Azure AD app registration"}},"additionalProperties":false},"login":{"type":"object","description":"","properties":{"loginParameters":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"userDetailsClaim":{"type":"string","description":"The name of the claim from which we should read user details"}},"additionalProperties":false},"apple":{"type":"object","required":["registration"],"properties":{"enabled":{"description":"<false> if the apple provider is not enabled, <true> otherwise","type":"boolean","default":true},"registration":{"type":"object","required":["clientSecretSettingName"],"properties":{"clientIdSettingName":{"type":"string","description":"The name of the application setting containing the Client ID"},"clientSecretSettingName":{"type":"string","description":"The name of the application setting containing the Client Secret"}},"additionalProperties":false},"login":{"type":"object","description":"","properties":{"scopes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"userDetailsClaim":{"type":"string","description":"The name of the claim from which we should read user details"}},"additionalProperties":false},"facebook":{"type":"object","required":["registration"],"properties":{"enabled":{"description":"<false> if the facebook provider is not enabled, <true> otherwise","type":"boolean","default":true},"registration":{"type":"object","required":["appSecretSettingName"],"properties":{"appIdSettingName":{"type":"string","description":"The name of the application setting containing the App ID"},"appSecretSettingName":{"type":"string","description":"The name of the application setting containing the App Secret"}},"additionalProperties":false},"login":{"type":"object","description":"","properties":{"scopes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"userDetailsClaim":{"type":"string","description":"The name of the claim from which we should read user details"}},"additionalProperties":false},"github":{"type":"object","required":["registration"],"properties":{"enabled":{"description":"<false> if the gitHub provider is not enabled, <true> otherwise","type":"boolean","default":true},"registration":{"type":"object","required":["clientSecretSettingName"],"properties":{"clientIdSettingName":{"type":"string","description":"The name of the application setting containing the Client ID"},"clientSecretSettingName":{"type":"string","description":"The name of the application setting containing the Client Secret"}},"additionalProperties":false},"login":{"type":"object","description":"","properties":{"scopes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"userDetailsClaim":{"type":"string","description":"The name of the claim from which we should read user details"}},"additionalProperties":false},"google":{"type":"object","required":["registration"],"properties":{"enabled":{"description":"<false> if the google provider is not enabled, <true> otherwise","type":"boolean","default":true},"registration":{"type":"object","required":["clientSecretSettingName"],"properties":{"clientIdSettingName":{"type":"string","description":"The name of the application setting containing the Client ID"},"clientSecretSettingName":{"type":"string","description":"The name of the application setting containing the Client Secret"}},"additionalProperties":false},"login":{"type":"object","description":"","properties":{"scopes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"userDetailsClaim":{"type":"string","description":"The name of the claim from which we should read user details"}},"additionalProperties":false},"twitter":{"type":"object","required":["registration"],"properties":{"enabled":{"description":"<false> if the twitter provider is not enabled, <true> otherwise","type":"boolean","default":true},"registration":{"type":"object","required":["consumerSecretSettingName"],"properties":{"consumerKeySettingName":{"type":"string","description":"The name of the application setting containing the Consumer Key"},"consumerSecretSettingName":{"type":"string","description":"The name of the application setting containing the Consumer Secret"}},"additionalProperties":false},"userDetailsClaim":{"type":"string","description":"The name of the claim from which we should read user details"}},"additionalProperties":false},"customOpenIdConnectProviders":{"type":"object","patternProperties":{".*":{"required":["registration","login"],"properties":{"enabled":{"description":"<false> if the custom OpenID Connect provider is not enabled, <true> otherwise","type":"boolean","default":true},"registration":{"type":"object","required":["clientCredential","openIdConnectConfiguration"],"properties":{"clientIdSettingName":{"type":"string","description":"The name of the application setting containing the Client ID"},"clientCredential":{"type":"object","required":["clientSecretSettingName"],"properties":{"clientSecretSettingName":{"type":"string","description":"The name of the application setting containing the Client Secret"}}},"openIdConnectConfiguration":{"type":"object","properties":{"authorizationEndpoint":{"type":"string","description":"The path to the authorization endpoint"},"tokenEndpoint":{"type":"string","description":"The path to the token endpoint"},"issuer":{"type":"string","description":"The path to the issuer endpoint"},"certificationUri":{"type":"string","description":"The path to the jwks uri"},"wellKnownOpenIdConfiguration":{"type":"string","description":"The path to the well known configuration endpoint"}}}},"additionalProperties":false},"login":{"type":"object","description":"","properties":{"nameClaimType":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"loginParameterNames":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}},"additionalProperties":false}}}},"additionalProperties":false}},"additionalProperties":false}},"description":"Documentation: https://aka.ms/swa/config-schema","id":"https://json.schemastore.org/staticwebapp.config.json","properties":{"$schema":{"type":"string","default":"https://www.schemastore.org/staticwebapp.config.json","description":"JSON schema"},"routes":{"type":"array","description":"Route definitions to modify routing behavior","default":[{"route":"/example","rewrite":"/example.html"}],"items":{"examples":[{"route":"/example","rewrite":"/example.html"},{"route":"/login","redirect":"/.auth/login/github"}],"anyOf":[{"allOf":[{"$ref":"#/definitions/route"}]}]}},"navigationFallback":{"type":"object","description":"A default file to return if the request does not match a resource","default":{"rewrite":"/index.html"},"required":["rewrite"],"properties":{"rewrite":{"type":"string","description":"The default file to return if the request does not match a resource","default":"/index.html"},"exclude":{"type":"array","description":"Paths to exclude from the fallback route. May use valid wildcards. https://aka.ms/swa/config-schema","examples":[["*.{jpg,gif,png}","assets/*"]]}},"additionalProperties":false},"responseOverrides":{"type":"object","description":"Custom error pages or redirects","examples":[{"404":{"rewrite":"/custom_404.html","statusCode":200}}],"propertyNames":{"pattern":"^\\d+$"},"patternProperties":{".*":{"oneOf":[{"type":"object","properties":{"redirect":{"type":"string","description":"Redirect to a relative or absolute path, or an external URI. Default status code is 302, override with 301."},"statusCode":{"type":"integer","description":"Status code"},"rewrite":{"type":"string","description":"A path to rewrite the request route to"}}}]}}},"mimeTypes":{"type":"object","description":"Custom mime types configuration","default":{},"examples":[{".config":"application/xml"}],"patternProperties":{"^\\..+$":{"type":"string"}},"additionalProperties":false},"globalHeaders":{"type":"object","description":"Default headers to set on all responses","additionalProperties":true},"auth":{"$ref":"#/definitions/auth"},"networking":{"type":"object","description":"Networking configuration","properties":{"allowedIpRanges":{"type":"array","description":"Restrict access to one or more IPv4 ranges. Supports CIDR notation (e.g., \"192.168.100.14/24\")","items":{"type":"string"},"examples":[["10.0.0.0/24","192.1.1.1/10"]]}},"additionalProperties":false},"forwardingGateway":{"type":"object","description":"Forwarding gateway configuration","properties":{"allowedForwardedHosts":{"type":"array","description":"The value of `X-Forwarded-Host` to allow to be used when generating redirect URLs","items":{"type":"string"},"examples":[["example.org","www.example.org","staging.example.org"]]},"requiredHeaders":{"type":"object","description":"HTTP header name/value pairs that are required for access","examples":[{"X-Azure-FDID":"10dd26ef"}],"additionalProperties":true}},"additionalProperties":false},"platform":{"type":"object","description":"Platform configuration","properties":{"apiRuntime":{"type":"string","enum":["dotnet:3.1","dotnet:6.0","dotnet-isolated:6.0","dotnet-isolated:7.0","dotnet-isolated:8.0","node:12","node:14","node:16","node:18","node:20","python:3.8","python:3.9","python:3.10"],"description":"Language runtime for the managed functions API"}},"additionalProperties":false},"trailingSlash":{"type":"string","enum":["always","never","auto"],"description":"Trailing slash configuration"}},"title":"Azure Static Web Apps configuration file","type":"object"}
</schema>

[User] Provide a JSON object that satisfies the schema "Azure Static Web Apps configuration file". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

Request route pattern to match. May contain valid wildcards. See documentation: https://aka.ms/swa/config-schema

Request method(s) to match

GET HEAD POST PUT DELETE PATCH CONNECT OPTIONS TRACE

Roles that are allowed to access this route. If not empty, only role(s) listed are authorized to access the route. Roles are only used for authorization; they are not used to evaluate whether the route matches the request.

Override any matching global headers

Redirect to a relative or absolute path, or an external URI. Default status code is 302, override with 301.

Status code override

A path to rewrite the request route to

Route to API function for assigning roles. For example, "/api/GetRoles". See https://aka.ms/swa-roles-function

<false> if the azureActiveDirectory provider is not enabled, <true> otherwise

The endpoint for the OpenID configuration of the AAD tenant

The name of the application setting containing the Application (client) ID for the Azure AD app registration

The name of the application setting containing the client secret for the Azure AD app registration

The name of the claim from which we should read user details

<false> if the apple provider is not enabled, <true> otherwise

The name of the application setting containing the Client ID

The name of the application setting containing the Client Secret

<false> if the facebook provider is not enabled, <true> otherwise

The name of the application setting containing the App ID

The name of the application setting containing the App Secret

<false> if the gitHub provider is not enabled, <true> otherwise

<false> if the google provider is not enabled, <true> otherwise

<false> if the twitter provider is not enabled, <true> otherwise

The name of the application setting containing the Consumer Key

The name of the application setting containing the Consumer Secret

<false> if the custom OpenID Connect provider is not enabled, <true> otherwise

The path to the authorization endpoint

The path to the token endpoint

The path to the issuer endpoint

The path to the jwks uri

The path to the well known configuration endpoint

Documentation: https://aka.ms/swa/config-schema

JSON schema

Route definitions to modify routing behavior

A default file to return if the request does not match a resource

The default file to return if the request does not match a resource

Paths to exclude from the fallback route. May use valid wildcards. https://aka.ms/swa/config-schema

Custom error pages or redirects

Status code

A path to rewrite the request route to

Custom mime types configuration

Default headers to set on all responses

Networking configuration

Restrict access to one or more IPv4 ranges. Supports CIDR notation (e.g., "192.168.100.14/24")

Forwarding gateway configuration

The value of `X-Forwarded-Host` to allow to be used when generating redirect URLs

HTTP header name/value pairs that are required for access

Platform configuration

Language runtime for the managed functions API

Trailing slash configuration

Provide a JSON object that satisfies the schema "Azure Static Web Apps configuration file". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"https://json.schemastore.org/metaschema-draft-07-unofficial-strict.json","title":"strings","description":"Strings of the generated script\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"object","properties":{"usage":{"title":"usage","description":"The caption for the usage patterns\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Usage:"},"options":{"title":"options","description":"The caption for the options section\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Options:"},"global_options":{"title":"global_options","description":"The caption for the options section, when a command has flags and sub-commands\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Options:"},"arguments":{"title":"arguments","description":"The caption for the argument section\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Arguments:"},"commands":{"title":"commands","description":"The caption for the command section\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Commands:"},"examples":{"title":"examples","description":"The caption for the examples section\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Examples:"},"environment_variables":{"title":"environment variables","description":"The caption for the environment variables section\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Environment Variables:"},"group":{"title":"group","description":"The caption template for custom command groups\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"%{group} Commands:"},"command_alias":{"title":"command alias","description":"The string template for a command alias\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Alias: %{alias}"},"default_command_summary":{"title":"default command summary","description":"The string template for the summary of a default command\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"%{summary} (default)"},"required":{"title":"required","description":"The string suffix for required arguments, flags, or commands\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"(required)"},"repeatable":{"title":"repeatable","description":"The string suffix for repeatable arguments, flags, or commands\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"(repeatable)"},"default":{"title":"default","description":"The string template for a default argument or flag\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Default: %{value}"},"allowed":{"title":"allowed","description":"The string template for the list of allowed values\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Allowed: %{values}"},"needs":{"title":"needs","description":"The string template for the list of needed flags\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Needs: %{values}"},"conflicts":{"title":"conflicts","description":"The string template for the list of conflicting flags\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Conflicts: %{values}"},"help_flag_text":{"title":"help flag text","description":"The help message for --help\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Show this help"},"version_flag_text":{"title":"version flag text","description":"The help message for --version\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"Show version number"},"flag_requires_an_argument":{"title":"flag requires an argument","description":"The error message template for missing flag argument\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"%{name} requires an argument: %{usage}"},"flag_needs_another":{"title":"flag needs another flag","description":"The error message template for missing flag needs\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"%{name} needs %{need}"},"invalid_argument":{"title":"invalid argument","description":"The error message template for invalid argument\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"invalid argument: %s"},"invalid_flag":{"title":"invalid flag","description":"The error message template for invalid flag\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"invalid option: %s"},"invalid_command":{"title":"invalid command","description":"The error message template for invalid command\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"invalid command: %s"},"conflicting_flags":{"title":"conflicting flags","description":"The error message template for conflicting flags\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"conflicting options: %s cannot be used with %s"},"missing_required_argument":{"title":"missing required argument","description":"The error message template for missing required argument\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"missing required argument: %{arg}\\nusage: %{usage}"},"missing_required_flag":{"title":"missing required flag","description":"The error message template for missing required flag\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"missing required flag: %{usage}"},"missing_required_environment_variable":{"title":"missing required environment variable","description":"The error message template for missing required environment variable\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"missing required environment variable: %{var}"},"missing_dependency":{"title":"missing dependency","description":"The error message template for missing dependency\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"missing dependency: %{dependency}"},"examples_caption_on_error":{"title":"examples caption on error","description":"The string to show before the examples when show_examples_on_error is enabled\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"examples:"},"disallowed_flag":{"title":"disallowed flag","description":"The error message template for forbidden flag\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"%{name} must be one of: %{allowed}"},"disallowed_argument":{"title":"disallowed argument","description":"The error message template for forbidden argument\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"%{name} must be one of: %{allowed}"},"disallowed_environment_variable":{"title":"disallowed_environment_variable","description":"The error message template for forbidden environment variable\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"%{name} environment variable must be one of: %{allowed}"},"unsupported_bash_version":{"title":"unsupported bash version","description":"The error message for unsupported Bash version\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"bash version 4 or higher is required"},"validation_error":{"title":"validation error","description":"The error message template for failed custom validation\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"validation error in %s:\\n%s"},"environment_variable_validation_error":{"title":"environment variable validation error","description":"The error message template for failed custom validation for environment variables\nhttps://bashly.dev/advanced/strings/#custom-strings","type":"string","minLength":1,"default":"validation error in environment variable %s:\\n%s"}},"additionalProperties":false}
</schema>

[User] Provide a JSON object that satisfies the schema "strings". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

strings

Strings of the generated script
https://bashly.dev/advanced/strings/#custom-strings

usage

The caption for the usage patterns
https://bashly.dev/advanced/strings/#custom-strings

options

The caption for the options section
https://bashly.dev/advanced/strings/#custom-strings

global_options

The caption for the options section, when a command has flags and sub-commands
https://bashly.dev/advanced/strings/#custom-strings

arguments

The caption for the argument section
https://bashly.dev/advanced/strings/#custom-strings

commands

The caption for the command section
https://bashly.dev/advanced/strings/#custom-strings

examples

The caption for the examples section
https://bashly.dev/advanced/strings/#custom-strings

environment variables

The caption for the environment variables section
https://bashly.dev/advanced/strings/#custom-strings

group

The caption template for custom command groups
https://bashly.dev/advanced/strings/#custom-strings

command alias

The string template for a command alias
https://bashly.dev/advanced/strings/#custom-strings

default command summary

The string template for the summary of a default command
https://bashly.dev/advanced/strings/#custom-strings

required

The string suffix for required arguments, flags, or commands
https://bashly.dev/advanced/strings/#custom-strings

repeatable

The string suffix for repeatable arguments, flags, or commands
https://bashly.dev/advanced/strings/#custom-strings

default

The string template for a default argument or flag
https://bashly.dev/advanced/strings/#custom-strings

allowed

The string template for the list of allowed values
https://bashly.dev/advanced/strings/#custom-strings

needs

The string template for the list of needed flags
https://bashly.dev/advanced/strings/#custom-strings

conflicts

The string template for the list of conflicting flags
https://bashly.dev/advanced/strings/#custom-strings

help flag text

The help message for --help
https://bashly.dev/advanced/strings/#custom-strings

version flag text

The help message for --version
https://bashly.dev/advanced/strings/#custom-strings

flag requires an argument

The error message template for missing flag argument
https://bashly.dev/advanced/strings/#custom-strings

flag needs another flag

The error message template for missing flag needs
https://bashly.dev/advanced/strings/#custom-strings

invalid argument

The error message template for invalid argument
https://bashly.dev/advanced/strings/#custom-strings

invalid flag

The error message template for invalid flag
https://bashly.dev/advanced/strings/#custom-strings

invalid command

The error message template for invalid command
https://bashly.dev/advanced/strings/#custom-strings

conflicting flags

The error message template for conflicting flags
https://bashly.dev/advanced/strings/#custom-strings

conflicting options: %s cannot be used with %s

missing required argument

The error message template for missing required argument
https://bashly.dev/advanced/strings/#custom-strings

missing required argument: %{arg}\nusage: %{usage}

missing required flag

The error message template for missing required flag
https://bashly.dev/advanced/strings/#custom-strings

missing required environment variable

The error message template for missing required environment variable
https://bashly.dev/advanced/strings/#custom-strings

missing required environment variable: %{var}

missing dependency

The error message template for missing dependency
https://bashly.dev/advanced/strings/#custom-strings

examples caption on error

The string to show before the examples when show_examples_on_error is enabled
https://bashly.dev/advanced/strings/#custom-strings

disallowed flag

The error message template for forbidden flag
https://bashly.dev/advanced/strings/#custom-strings

disallowed argument

The error message template for forbidden argument
https://bashly.dev/advanced/strings/#custom-strings

disallowed_environment_variable

The error message template for forbidden environment variable
https://bashly.dev/advanced/strings/#custom-strings

%{name} environment variable must be one of: %{allowed}

unsupported bash version

The error message for unsupported Bash version
https://bashly.dev/advanced/strings/#custom-strings

validation error

The error message template for failed custom validation
https://bashly.dev/advanced/strings/#custom-strings

environment variable validation error

The error message template for failed custom validation for environment variables
https://bashly.dev/advanced/strings/#custom-strings

validation error in environment variable %s:\n%s

Provide a JSON object that satisfies the schema "strings". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$id":"https://stripe.com/stripe-app-local.schema.json","$schema":"http://json-schema.org/draft-07/schema","title":"Stripe App local development manifest","description":"A manifest describing a Stripe App.","type":"object","additionalProperties":false,"properties":{"extends":{"description":"The base manifest that this local manifest will extend.","type":"string","pattern":"^(./)?((../)+)?(([a-zA-Z0-9-_]+/)+)?stripe-app(.[a-zA-Z0-9-_]+)?.json$","examples":["stripe-app.json"]},"$schema":{"$ref":"stripe-app.schema.json#/properties/$schema"},"id":{"$ref":"stripe-app.schema.json#/properties/id"},"version":{"$ref":"stripe-app.schema.json#/properties/version"},"name":{"$ref":"stripe-app.schema.json#/properties/name"},"icon":{"$ref":"stripe-app.schema.json#/properties/icon"},"permissions":{"$ref":"stripe-app.schema.json#/properties/permissions"},"post_install_action":{"$ref":"stripe-app.schema.json#/properties/post_install_action"},"allowed_redirect_uris":{"$ref":"stripe-app.schema.json#/properties/allowed_redirect_uris"},"distribution_type":{"$ref":"stripe-app.schema.json#/properties/distribution_type"},"stripe_api_access_type":{"$ref":"stripe-app.schema.json#/properties/stripe_api_access_type"},"sandbox_install_compatible":{"$ref":"stripe-app.schema.json#/properties/sandbox_install_compatible"},"ui_extension":{"description":"Configuration options for how to display the app in the Dashboard.","type":"object","properties":{"views":{"$ref":"stripe-app.schema.json#/properties/ui_extension/properties/views"},"content_security_policy":{"description":"Configure the content security policy for your app.","type":"object","properties":{"connect-src":{"$ref":"stripe-app.schema.json#/properties/ui_extension/properties/content_security_policy/properties/connect-src"},"image-src":{"$ref":"stripe-app.schema.json#/properties/ui_extension/properties/content_security_policy/properties/image-src"},"purpose":{"$ref":"stripe-app.schema.json#/properties/ui_extension/properties/content_security_policy/properties/purpose"}}}}},"constants":{"$ref":"stripe-app.schema.json#/properties/constants"}}}
</schema>

[User] Provide a JSON object that satisfies the schema "Stripe App local development manifest". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

Stripe App local development manifest

A manifest describing a Stripe App.

The base manifest that this local manifest will extend.

Configuration options for how to display the app in the Dashboard.

Configure the content security policy for your app.

Provide a JSON object that satisfies the schema "Stripe App local development manifest". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$id":"https://stripe.com/stripe-app.schema.json","$schema":"http://json-schema.org/draft-07/schema","title":"Stripe App manifest","description":"A manifest describing a Stripe App.","required":["id","version","name","icon","permissions","ui_extension"],"type":"object","additionalProperties":false,"properties":{"$schema":{"type":"string"},"id":{"description":"The unique identifier for an app, for example \"com.invoicing.myapp\".","markdownDescription":"The unique identifier for an app, for example `com.invoicing.myapp`.","type":"string","pattern":"^[a-zA-Z0-9_\\-\\.]+$"},"version":{"description":"An app version that you define. You can use any format you want for version identifiers.","type":"string","minLength":1},"name":{"description":"The name shown in the UI when referring to your app.","type":"string","minLength":1},"icon":{"description":"The relative path to a 300x300 pixel PNG image, for example \"./icon.png\".","markdownDescription":"The relative path to a 300x300 pixel PNG image, for example `./icon.png`.","type":"string","pattern":"^$|^\\./((\\.\\./|[a-zA-Z0-9_/\\-\\\\])[^\\.\\.]*\\.png)$"},"permissions":{"description":"The permissions available to the app. Read more about permissions: https://stripe.com/docs/stripe-apps/reference/permissions","markdownDescription":"The permissions available to the app. [Read more about permissions](https://stripe.com/docs/stripe-apps/reference/permissions).","type":"array","items":{"type":"object","properties":{"permission":{"type":"string","description":"The ID of the permission. Read more about permissions: https://stripe.com/docs/stripe-apps/reference/permissions","markdownDescription":"The ID of the permission. [Read more about permissions](https://stripe.com/docs/stripe-apps/reference/permissions).","enum":["account_link_write","application_fee_read","application_fee_write","apply_pay_domain_read","apply_pay_domain_write","balance_read","balance_transaction_source_read","billing_clock_read","billing_clock_write","capital_for_platforms_financing_offer_read","charge_read","charge_write","checkout_session_read","checkout_session_write","connected_account_read","coupon_read","coupon_write","credit_note_read","credit_note_write","customer_portal_read","customer_portal_write","customer_read","customer_write","dispute_read","dispute_write","edit_link_write","elements_write","event_read","file_read","file_write","invoice_read","invoice_write","issuing_authorization_read","issuing_authorization_write","issuing_card_read","issuing_card_write","issuing_cardholder_read","issuing_cardholder_write","issuing_dispute_read","issuing_dispute_write","issuing_transaction_read","issuing_transaction_write","mandate_read","mandate_write","order_read","order_write","payment_intent_read","payment_intent_write","payment_links_read","payment_links_write","payment_method_read","payment_method_write","payout_read","payout_write","plan_read","plan_write","product_read","product_write","quote_read","quote_write","report_runs_and_report_types_read","secret_write","setup_intent_read","setup_intent_write","shipping_rate_read","shpping_rate_write","sku_read","sku_write","source_read","source_write","stripecli_session_write","subscription_read","subscription_write","tax_rate_read","tax_rate_write","token_read","token_write","top_up_read","top_up_write","transfer_read","transfer_write","usage_record_read","usage_record_write","user_email_read","webhook_read","webhook_write"]},"purpose":{"type":"string","description":"The reason for requesting the permission.","minLength":1}},"additionalProperties":false,"required":["permission","purpose"]}},"post_install_action":{"description":"Specify a recommended action for users to take after installing your app. Read more about post-install actions: https://stripe.com/docs/stripe-apps/post-install-actions","markdownDescription":"Specify a recommended action users should take after installing your app. [Read more about post-install actions](https://stripe.com/docs/stripe-apps/post-install-actions).","oneOf":[{"type":"null"},{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"allOf":[{"$ref":"#/$defs/postInstallActionType"},{"const":"settings"}]}}},{"type":"object","required":["type","url"],"additionalProperties":false,"properties":{"type":{"allOf":[{"$ref":"#/$defs/postInstallActionType"},{"const":"external"}]},"url":{"description":"External URL to redirect users to after installing your app.","type":"string","format":"uri","pattern":"^https?://"}}}]},"ui_extension":{"description":"Configuration options for how to display the app in the Dashboard.","type":"object","properties":{"views":{"description":"Configure where the app appears in the Dashboard.","type":"array","items":{"type":"object","required":["viewport","component"],"properties":{"viewport":{"type":"string","description":"An identifier that indicates where a UI extension appears in the Dashboard. Read more about viewports: https://stripe.com/docs/stripe-apps/reference/viewports","markdownDescription":"An identifier that indicates where a UI extension appears in the Dashboard. [Read more about viewports](https://stripe.com/docs/stripe-apps/reference/viewports).","enum":["settings","stripe.dashboard.balance.overview","stripe.dashboard.billing.overview","stripe.dashboard.customer.detail","stripe.dashboard.customer.list","stripe.dashboard.drawer.default","stripe.dashboard.home.overview","stripe.dashboard.invoice.detail","stripe.dashboard.invoice.list","stripe.dashboard.payment-link.detail","stripe.dashboard.payment-link.list","stripe.dashboard.payment.detail","stripe.dashboard.payment.list","stripe.dashboard.product.detail","stripe.dashboard.product.list","stripe.dashboard.report.overview","stripe.dashboard.revenue-recognition.overview","stripe.dashboard.subscription.detail","stripe.dashboard.subscription.list","stripe.dashboard.tax-report.overview"]},"component":{"type":"string","description":"The name of the React component in the \"src/views\" directory to render.","markdownDescription":"The name of the React component in the `src/views` directory to render.","pattern":"^[a-zA-Z0-9_]{1,}$"}}}},"content_security_policy":{"description":"Configure the content security policy for your app.","type":"object","required":["purpose"],"properties":{"connect-src":{"description":"URLs of permitted third-party APIs. If the URL ends in a slash, all of its children also receive permission. Read about using third-party APIs: https://stripe.com/docs/stripe-apps/build-ui#use-third-party-apis","markdownDescription":"URLs of permitted third-party APIs. If the URL ends in a slash, all of its children also receive permission. [Read about using third-party APIs](https://stripe.com/docs/stripe-apps/build-ui#use-third-party-apis).","type":["array","null"],"items":{"type":"string","format":"uri","pattern":"^https?://.*/.+"}},"image-src":{"description":"URLs the Img component (https://stripe.com/stripe-apps/ui-toolkit/components/img) can load from. If the URL ends in a slash, all trailing paths are also permitted.","markdownDescription":"URLs the [Img component](https://stripe.com/stripe-apps/ui-toolkit/components/img) can load from. If the URL ends in a slash, all trailing paths are also permitted.","type":["array","null"],"items":{"type":"string","format":"uri","pattern":"^https?://.+"}},"purpose":{"description":"A message to show users when the app is installed that explains why the app needs to communicate with external URLs.","type":"string"}}}}},"constants":{"description":"Custom values that are passed through to your views via context props. Read about context props: https://stripe.com/docs/stripe-apps/reference/extensions-sdk-api#props","markdownDescription":"Custom values that are passed through to your views via context props. [Read about context props](https://stripe.com/docs/stripe-apps/reference/extensions-sdk-api#props).","type":["object","null"]},"allowed_redirect_uris":{"description":"A list of allowed urls to which the user can be redirected upon successful install of this app. Read about using allowed redirect urls: https://stripe.com/docs/stripe-apps/reference/app-manifest#allowed-redirect-urls","markdownDescription":"A list of allowed urls to which the user can be redirected upon successful install of this app. [Read about using allowed redirect urls](https://stripe.com/docs/stripe-apps/reference/app-manifest#allowed-redirect-urls).","type":["array","null"],"items":{"type":"string","format":"uri","pattern":"^https?://.*/.+"}},"distribution_type":{"type":"string","description":"Stripe Apps gives you two ways to distribute your apps. You can make them publicly available or privately share them only with your team members. Read about Distribution Type: https://stripe.com/docs/stripe-apps/reference/app-manifest#distribution-type","markdownDescription":"Stripe Apps gives you two ways to distribute your apps. You can make them publicly available or privately share them only with your team member. [Read about specifying Distribution Type](https://stripe.com/docs/stripe-apps/reference/app-manifest#distribution-type).","enum":["public","private"]},"stripe_api_access_type":{"type":"string","description":"A property that describes how your application calls Stripe API. Read about using stripe api access type: https://stripe.com/docs/stripe-apps/reference/app-manifest#stripe-api-access-type","markdownDescription":"A property that describes how your application accesses Stripe API. [Read about specifying Stripe API access type](https://stripe.com/docs/stripe-apps/reference/app-manifest#stripe-api-access-type).","enum":["restricted_api_key","oauth","platform"]},"sandbox_install_compatible":{"type":"boolean","description":"A property that when set to true will allow your app to be installable into a sandbox. Read more about enabling Sandbox support: https://docs.stripe.com/stripe-apps/enable-sandbox-support","markdownDescription":"A property that when set to true will allow your app to be installable into a sandbox. [Read about Sandbox compatibility](https://docs.stripe.com/stripe-apps/enable-sandbox-support)."}},"$defs":{"postInstallActionType":{"description":"The recommended action for users to take after installing your app. Read about post-install actions: https://stripe.com/docs/stripe-apps/post-install-actions","markdownDescription":"The recommended action for users to take after installing your app. [Read about post-install actions](https://stripe.com/docs/stripe-apps/post-install-actions)."}}}
</schema>

[User] Provide a JSON object that satisfies the schema "Stripe App manifest". Here are the required top‑level fields: id, version, name, icon, permissions, ui_extension. Return only the valid JSON object.

Stripe App manifest

A manifest describing a Stripe App.

id version name icon permissions ui_extension

The unique identifier for an app, for example "com.invoicing.myapp".

The unique identifier for an app, for example `com.invoicing.myapp`.

An app version that you define. You can use any format you want for version identifiers.

The name shown in the UI when referring to your app.

The relative path to a 300x300 pixel PNG image, for example "./icon.png".

The relative path to a 300x300 pixel PNG image, for example `./icon.png`.

The permissions available to the app. Read more about permissions: https://stripe.com/docs/stripe-apps/reference/permissions

The permissions available to the app. [Read more about permissions](https://stripe.com/docs/stripe-apps/reference/permissions).

The ID of the permission. Read more about permissions: https://stripe.com/docs/stripe-apps/reference/permissions

The ID of the permission. [Read more about permissions](https://stripe.com/docs/stripe-apps/reference/permissions).

The reason for requesting the permission.

Specify a recommended action for users to take after installing your app. Read more about post-install actions: https://stripe.com/docs/stripe-apps/post-install-actions

Specify a recommended action users should take after installing your app. [Read more about post-install actions](https://stripe.com/docs/stripe-apps/post-install-actions).

External URL to redirect users to after installing your app.

Configure where the app appears in the Dashboard.

An identifier that indicates where a UI extension appears in the Dashboard. Read more about viewports: https://stripe.com/docs/stripe-apps/reference/viewports

An identifier that indicates where a UI extension appears in the Dashboard. [Read more about viewports](https://stripe.com/docs/stripe-apps/reference/viewports).

The name of the React component in the "src/views" directory to render.

The name of the React component in the `src/views` directory to render.

URLs of permitted third-party APIs. If the URL ends in a slash, all of its children also receive permission. Read about using third-party APIs: https://stripe.com/docs/stripe-apps/build-ui#use-third-party-apis

URLs of permitted third-party APIs. If the URL ends in a slash, all of its children also receive permission. [Read about using third-party APIs](https://stripe.com/docs/stripe-apps/build-ui#use-third-party-apis).

URLs the Img component (https://stripe.com/stripe-apps/ui-toolkit/components/img) can load from. If the URL ends in a slash, all trailing paths are also permitted.

URLs the [Img component](https://stripe.com/stripe-apps/ui-toolkit/components/img) can load from. If the URL ends in a slash, all trailing paths are also permitted.

A message to show users when the app is installed that explains why the app needs to communicate with external URLs.

Custom values that are passed through to your views via context props. Read about context props: https://stripe.com/docs/stripe-apps/reference/extensions-sdk-api#props

Custom values that are passed through to your views via context props. [Read about context props](https://stripe.com/docs/stripe-apps/reference/extensions-sdk-api#props).

A list of allowed urls to which the user can be redirected upon successful install of this app. Read about using allowed redirect urls: https://stripe.com/docs/stripe-apps/reference/app-manifest#allowed-redirect-urls

A list of allowed urls to which the user can be redirected upon successful install of this app. [Read about using allowed redirect urls](https://stripe.com/docs/stripe-apps/reference/app-manifest#allowed-redirect-urls).

Stripe Apps gives you two ways to distribute your apps. You can make them publicly available or privately share them only with your team members. Read about Distribution Type: https://stripe.com/docs/stripe-apps/reference/app-manifest#distribution-type

Stripe Apps gives you two ways to distribute your apps. You can make them publicly available or privately share them only with your team member. [Read about specifying Distribution Type](https://stripe.com/docs/stripe-apps/reference/app-manifest#distribution-type).

A property that describes how your application calls Stripe API. Read about using stripe api access type: https://stripe.com/docs/stripe-apps/reference/app-manifest#stripe-api-access-type

A property that describes how your application accesses Stripe API. [Read about specifying Stripe API access type](https://stripe.com/docs/stripe-apps/reference/app-manifest#stripe-api-access-type).

A property that when set to true will allow your app to be installable into a sandbox. Read more about enabling Sandbox support: https://docs.stripe.com/stripe-apps/enable-sandbox-support

A property that when set to true will allow your app to be installable into a sandbox. [Read about Sandbox compatibility](https://docs.stripe.com/stripe-apps/enable-sandbox-support).

The recommended action for users to take after installing your app. Read about post-install actions: https://stripe.com/docs/stripe-apps/post-install-actions

The recommended action for users to take after installing your app. [Read about post-install actions](https://stripe.com/docs/stripe-apps/post-install-actions).

Provide a JSON object that satisfies the schema "Stripe App manifest". Here are the required top‑level fields: id, version, name, icon, permissions, ui_extension. Return only the valid JSON object.