[{"data":1,"prerenderedAt":47},["ShallowReactive",2],{"doc-legal":3},{"html":4,"headings":5},"\u003Cp>Host your privacy policy, terms of service, cookie policy and refund policy on\nHelpBites, so you don't have to host anything. Each document gets a public,\nstyled page you link to from your app, and everything is available over the API.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>This is a drafting tool, not legal advice.\u003C\u002Fstrong> The clause library and the\nrulepacks are a starting point. The packs ship marked as unreviewed\n(\u003Ccode>lastReviewed: null\u003C\u002Fcode>) until a person has compared them with their sources, so\nhave a lawyer review your documents before you rely on them.\u003C\u002Fp>\n\u003Ch2 id=\"how-a-document-is-made\">How a document is made\u003Ca class=\"heading-anchor\" href=\"#how-a-document-is-made\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>From reviewed clauses (no AI).\u003C\u002Fstrong> You answer a short wizard: who you are,\nwhich platforms, which regions your users are in, what you collect, which\nservices you use. HelpBites assembles the document from a library of\nreviewed clauses, keeping only the ones that apply. Most documents never need\nan AI.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Edit it.\u003C\u002Fstrong> Change any section by hand. A section you change is marked\n\u003Ccode>human\u003C\u002Fcode> and is kept when you recompose; you can also \u003Cstrong>lock\u003C\u002Fstrong> a section.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Bring your own.\u003C\u002Fstrong> Already have a policy? Paste it or upload a Markdown,\nHTML or plain text file (\u003Cstrong>New document → I already have one\u003C\u002Fstrong>). It is kept\nword for word, split at its headings into sections you can edit, and is never\nsent to an AI unless you choose to analyse it. See\n\u003Ca href=\"#importing-a-document-you-already-have\">Importing a document you already have\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Ask AI for help, when you want it.\u003C\u002Fstrong> Rewrite one section, write the summary,\ncheck the text against the rules, or have the model write the whole\ndocument. AI needs a provider (the workspace's own key, or the server's\ngateway); without one these calls answer \u003Ccode>501\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The AI is grounded: it is given the requirements that apply to your regions as a\nnumbered list and told to rely only on them. Anything it cites that is not in\nthat list is dropped, it cannot change a locked section, and it never replaces a\nsummary you wrote yourself unless you pass \u003Ccode>force: true\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"quick-start\">Quick start\u003Ca class=\"heading-anchor\" href=\"#quick-start\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Create an admin API key (\u003Cstrong>API keys\u003C\u002Fstrong>), then, with your project id:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton type=\"button\" class=\"copy-btn\" data-copy aria-label=\"Copy to clipboard\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shj-lang-bash\">\u003Ccode>\u003Cspan class=\"shj-syn-var\">HOST\u003C\u002Fspan>\u003Cspan class=\"shj-syn-oper\">=\u003C\u002Fspan>https:\u002F\u002FYOUR-SUPPORT-HOST\n\u003Cspan class=\"shj-syn-var\">KEY\u003C\u002Fspan>\u003Cspan class=\"shj-syn-oper\">=\u003C\u002Fspan>ak_...            \u003Cspan class=\"shj-syn-cmnt\"># an admin API key; a key limited to projects works for those projects\u003C\u002Fspan>\n\n\u003Cspan class=\"shj-syn-cmnt\"># 1. Create a privacy policy from the wizard answers\u003C\u002Fspan>\n\u003Cspan class=\"shj-syn-func\">curl\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -s\u003C\u002Fspan> \u003Cspan class=\"shj-syn-var\">$HOST\u003C\u002Fspan>\u002Fv1\u002Fadmin\u002Flegal\u002Fdocuments\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"authorization: Bearer \u003C\u002Fspan>\u003Cspan class=\"shj-syn-var\">$KEY\u003C\u002Fspan>\u003Cspan class=\"shj-syn-str\">\"\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">'content-type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -d\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">'{\u003C\u002Fspan>\n  \u003Cspan class=\"shj-syn-str\">\"project\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"PROJECT_ID\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"type\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"privacy\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"mode\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"template\"\u003C\u002Fspan>,\n  \u003Cspan class=\"shj-syn-str\">\"answers\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-oper\">{\u003C\u002Fspan>\n    \u003Cspan class=\"shj-syn-str\">\"app_name\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"Acme Notes\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"entity_name\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"Acme Ltd\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"contact_email\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"legal@acme.test\"\u003C\u002Fspan>,\n    \u003Cspan class=\"shj-syn-str\">\"platforms\"\u003C\u002Fspan>: [\u003Cspan class=\"shj-syn-str\">\"ios\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"web\"\u003C\u002Fspan>], \u003Cspan class=\"shj-syn-str\">\"regions\"\u003C\u002Fspan>: [\u003Cspan class=\"shj-syn-str\">\"eu\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"uk\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"us-ca\"\u003C\u002Fspan>],\n    \u003Cspan class=\"shj-syn-str\">\"data_collected\"\u003C\u002Fspan>: [\u003Cspan class=\"shj-syn-str\">\"account\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"analytics\"\u003C\u002Fspan>], \u003Cspan class=\"shj-syn-str\">\"processors\"\u003C\u002Fspan>: [\u003Cspan class=\"shj-syn-str\">\"stripe\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"sentry\"\u003C\u002Fspan>],\n    \u003Cspan class=\"shj-syn-str\">\"children\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"none\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"sells_or_shares_data\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-bool\">false\u003C\u002Fspan>\n  \u003Cspan class=\"shj-syn-oper\">}\u003C\u002Fspan>\n\u003Cspan class=\"shj-syn-oper\">}\u003C\u002Fspan>\u003Cspan class=\"shj-syn-str\">'\u003C\u002Fspan>\n\n\u003Cspan class=\"shj-syn-cmnt\"># 2. Publish it (records version 1)\u003C\u002Fspan>\n\u003Cspan class=\"shj-syn-func\">curl\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -s\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -X\u003C\u002Fspan> POST \u003Cspan class=\"shj-syn-var\">$HOST\u003C\u002Fspan>\u002Fv1\u002Fadmin\u002Flegal\u002Fdocuments\u002FDOC_ID\u002Fpublish\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"authorization: Bearer \u003C\u002Fspan>\u003Cspan class=\"shj-syn-var\">$KEY\u003C\u002Fspan>\u003Cspan class=\"shj-syn-str\">\"\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>It is now public at \u003Ccode>HOST\u002Flegal\u002FPROJECT_PUBLIC_KEY\u002Fprivacy\u003C\u002Fcode>. Put that link in\nyour app, your store listing and your website.\u003C\u002Fp>\n\u003Cp>Document types: \u003Ccode>privacy\u003C\u002Fcode>, \u003Ccode>terms\u003C\u002Fcode>, \u003Ccode>cookies\u003C\u002Fcode>, \u003Ccode>refund\u003C\u002Fcode>. Fetch the questions for\na type with \u003Ccode>GET \u002Fv1\u002Fadmin\u002Flegal\u002Fwizard\u002F:type?project=ID\u003C\u002Fcode>, and preview a result\nwithout saving with \u003Ccode>POST \u002Fv1\u002Fadmin\u002Flegal\u002Fwizard\u002F:type\u002Fcompose\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"answer-the-wizard-once-or-per-document\">Answer the wizard once, or per document\u003Ca class=\"heading-anchor\" href=\"#answer-the-wizard-once-or-per-document\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The wizard's answers belong to the document you make with them. Tick \u003Cstrong>Reuse\nthese answers for my other documents\u003C\u002Fstrong> (\u003Ccode>&quot;saveAnswers&quot;: true\u003C\u002Fcode>) and they are also\nremembered for the project: the next document starts pre-filled, over the API as\nmuch as in the panel, so you answer once for the privacy policy and the cookie\npolicy and terms already know your regions. Leave it off and the answers stay\nwith that one document.\u003C\u002Fp>\n\u003Cp>Reuse only fills what a document asks. A question only one kind of document has,\nlike the refund window or the governing law, is asked for that document and\nnever leaks into the others. Who you are (name, address, contact, DPO) is saved\nto the project's \u003Cstrong>company profile\u003C\u002Fstrong> instead (Project settings → Company, also\nwhat campaigns print), and answers you send always win over saved\nones. \u003Ccode>GET \u002Fv1\u002Fadmin\u002Flegal\u002Fwizard\u002F:type?project=ID\u003C\u002Fcode> returns the pre-filled\n\u003Ccode>defaults\u003C\u002Fcode> and \u003Ccode>shared: true\u003C\u002Fcode> once anything is remembered.\u003C\u002Fp>\n\u003Ch2 id=\"importing-a-document-you-already-have\">Importing a document you already have\u003Ca class=\"heading-anchor\" href=\"#importing-a-document-you-already-have\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cdiv class=\"code-block\">\u003Cbutton type=\"button\" class=\"copy-btn\" data-copy aria-label=\"Copy to clipboard\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shj-lang-bash\">\u003Ccode>\u003Cspan class=\"shj-syn-func\">curl\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -s\u003C\u002Fspan> \u003Cspan class=\"shj-syn-var\">$HOST\u003C\u002Fspan>\u002Fv1\u002Fadmin\u002Flegal\u002Fdocuments\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"authorization: Bearer \u003C\u002Fspan>\u003Cspan class=\"shj-syn-var\">$KEY\u003C\u002Fspan>\u003Cspan class=\"shj-syn-str\">\"\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">'content-type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -d\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">'{\u003C\u002Fspan>\n  \u003Cspan class=\"shj-syn-str\">\"project\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"PROJECT_ID\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"type\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"privacy\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"mode\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"import\"\u003C\u002Fspan>,\n  \u003Cspan class=\"shj-syn-str\">\"text\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"# Privacy Policy\\n\\n## What we collect\\n\\nYour email address.\\n\\n## Contact\\n\\nlegal@acme.test\"\u003C\u002Fspan>,\n  \u003Cspan class=\"shj-syn-str\">\"answers\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-oper\">{\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"regions\"\u003C\u002Fspan>: [\u003Cspan class=\"shj-syn-str\">\"eu\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"uk\"\u003C\u002Fspan>] \u003Cspan class=\"shj-syn-oper\">}\u003C\u002Fspan>\n\u003Cspan class=\"shj-syn-oper\">}\u003C\u002Fspan>\u003Cspan class=\"shj-syn-str\">'\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>\u003Ccode>text\u003C\u002Fcode> is Markdown, HTML or plain text (up to 200,000 characters). \u003Ccode>format\u003C\u002Fcode>\n(\u003Ccode>markdown\u003C\u002Fcode>, \u003Ccode>html\u003C\u002Fcode>, \u003Ccode>text\u003C\u002Fcode>) is detected unless you set it. HTML is converted to\nMarkdown first: headings, paragraphs, lists, links (\u003Ccode>http(s)\u003C\u002Fcode>, \u003Ccode>mailto:\u003C\u002Fcode>,\nrelative) and emphasis survive; scripts and anything else are dropped.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A single top-level \u003Ccode>#\u003C\u002Fcode> heading becomes the title (or pass \u003Ccode>title\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>Sections break at the highest heading level left; deeper headings stay inside\ntheir section, and text before the first heading becomes an &quot;Introduction&quot;.\u003C\u002Fli>\n\u003Cli>Text without Markdown headings splits at numbered (\u003Ccode>2. Sharing\u003C\u002Fcode>) or ALL CAPS\nlines that follow a blank line and carry no punctuation.\u003C\u002Fli>\n\u003Cli>A section longer than 20,000 characters is cut at paragraph breaks.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Imported sections are marked \u003Ccode>human\u003C\u002Fcode>, so a recompose never touches them. \u003Ccode>answers\u003C\u002Fcode>\nis optional; its \u003Ccode>regions\u003C\u002Fcode> decide which rules apply when you analyse. The result\nis a draft like any other: edit, publish, version, serve over the public API.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Analyse it afterwards.\u003C\u002Fstrong> Tick \u003Cstrong>Analyse it against the rules once imported\u003C\u002Fstrong>,\nor call \u003Ccode>POST \u002Fv1\u002Fadmin\u002Flegal\u002Fdocuments\u002F:id\u002Fcheck\u003C\u002Fcode> with \u003Ccode>{ &quot;ai&quot;: true }\u003C\u002Fcode>. The\nmodel reads your text against the requirements for your regions and reports each\nas \u003Ccode>ok\u003C\u002Fcode>, \u003Ccode>unclear\u003C\u002Fcode>, \u003Ccode>missing\u003C\u002Fcode> or \u003Ccode>conflict\u003C\u002Fcode>. Imported text is not tied to\nrequirements, so the document's structural \u003Ccode>coverage\u003C\u002Fcode> has \u003Ccode>mapped: false\u003C\u002Fcode> and\nshows no gaps; only the AI check says anything. Recomposing an imported document\nadds the reviewed clauses it lacks, next to your text. To check text without\nsaving it, use \u003Ccode>POST \u002Fv1\u002Fadmin\u002Flegal\u002Fanalyse\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"suggest-answers-from-your-github-repos\">Suggest answers from your GitHub repos\u003Ca class=\"heading-anchor\" href=\"#suggest-answers-from-your-github-repos\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>If the project has GitHub repos (see \u003Ca href=\"\u002Fdocs\u002Fgithub\">GITHUB.md\u003C\u002Fa>), the wizard shows\n\u003Cstrong>Suggest from my repos\u003C\u002Fstrong>. HelpBites reads each repo's file list and a few\ndependency manifests (\u003Ccode>package.json\u003C\u002Fcode>, \u003Ccode>requirements.txt\u003C\u002Fcode>, \u003Ccode>pyproject.toml\u003C\u002Fcode>,\n\u003Ccode>Gemfile\u003C\u002Fcode>, \u003Ccode>go.mod\u003C\u002Fcode>, \u003Ccode>Cargo.toml\u003C\u002Fcode>, \u003Ccode>composer.json\u003C\u002Fcode>, \u003Ccode>pubspec.yaml\u003C\u002Fcode>, \u003Ccode>Podfile\u003C\u002Fcode>,\n\u003Ccode>build.gradle\u003C\u002Fcode>, \u003Ccode>pom.xml\u003C\u002Fcode>; up to 8 per repo, at most two folders deep), never\nanything else and never with write access. Known SDKs map to answers: Stripe,\nRevenueCat, in-app purchases, Firebase, Google Analytics, PostHog, Mixpanel,\nSentry, AdMob and other ad networks, OpenAI and Anthropic map to the matching\nservice, data kind, cookie type or yes\u002Fno question; the file tree and mobile or\nweb frameworks suggest the platforms. Services with no entry in the service\nlist (Clerk, PayPal, Supabase, …) are added to &quot;Other services&quot;.\u003C\u002Fp>\n\u003Cp>This needs no AI. Each suggestion lists what it was found in, nothing is applied\nuntil you press \u003Cstrong>Use these answers\u003C\u002Fstrong>, and you can edit every answer afterwards.\nIt is a hint from dependency names: a library in a repo does not prove what your\napp collects, so check each answer.\u003C\u002Fp>\n\u003Cp>\u003Ccode>POST \u002Fv1\u002Fadmin\u002Flegal\u002Fwizard\u002F:type\u002Fsuggest\u003C\u002Fcode> with \u003Ccode>{ &quot;project&quot;: &quot;ID&quot; }\u003C\u002Fcode> does the\nsame over the API and returns \u003Ccode>{ answers, evidence, repos, ai }\u003C\u002Fcode>; nothing is\nsaved. Answers are cleaned like any others: only questions that document asks,\nonly real options.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Optional AI.\u003C\u002Fstrong> For the privacy policy you can also tick \u003Cem>Also ask AI about\nother services\u003C\u002Fem> (\u003Ccode>&quot;ai&quot;: true\u003C\u002Fcode>). The model is shown the dependency names the\ntable did not recognise (names only, never code or file contents), under the\nsame grounding as the other AI features, and may name third-party services among\nthem. Each one it names must cite a dependency that really is in your manifests\n(others are dropped), and its name and purpose are reduced to plain text before\nthey are suggested as &quot;Other services&quot;. It uses the workspace's AI provider and\nanswers \u003Ccode>501\u003C\u002Fcode> without one.\u003C\u002Fp>\n\u003Ch2 id=\"sections-provenance-and-the-summary\">Sections, provenance and the summary\u003Ca class=\"heading-anchor\" href=\"#sections-provenance-and-the-summary\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A document is an ordered list of sections \u003Ccode>{ id, heading, body, source, locked }\u003C\u002Fcode>.\n\u003Ccode>source\u003C\u002Fcode> is \u003Ccode>template\u003C\u002Fcode> (from a clause), \u003Ccode>ai\u003C\u002Fcode> or \u003Ccode>human\u003C\u002Fcode>. Edit with\n\u003Ccode>PATCH \u002Fv1\u002Fadmin\u002Flegal\u002Fdocuments\u002F:id\u003C\u002Fcode>; send the full \u003Ccode>sections\u003C\u002Fcode> list. An id you\ndon't know creates a section, a section you leave out is removed, and changing a\ntemplate section's text turns it \u003Ccode>human\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>\u003Ccode>tldr\u003C\u002Fcode> is the short summary shown at the top of the public page. Write it\nyourself (\u003Ccode>PATCH { &quot;tldr&quot;: &quot;…&quot; }\u003C\u002Fcode>, source \u003Ccode>human\u003C\u002Fcode>), or generate one with\n\u003Ccode>POST …\u002Ftldr\u002Fgenerate\u003C\u002Fcode>. Clear it with \u003Ccode>null\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Change your answers and call \u003Ccode>POST …\u002Frecompose\u003C\u002Fcode> to refresh the template sections\nand add or remove clauses for the new regions, without touching anything a\nperson or the AI wrote.\u003C\u002Fp>\n\u003Ch2 id=\"checking-against-the-rules\">Checking against the rules\u003Ca class=\"heading-anchor\" href=\"#checking-against-the-rules\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Ccode>POST \u002Fv1\u002Fadmin\u002Flegal\u002Fdocuments\u002F:id\u002Fcheck\u003C\u002Fcode> returns \u003Ccode>coverage\u003C\u002Fcode>: which applicable\nrequirements some section answers and which none does. That check is structural\nand needs no AI. Add \u003Ccode>{ &quot;ai&quot;: true }\u003C\u002Fcode> and the model reads the text and reports\neach requirement as \u003Ccode>ok\u003C\u002Fcode>, \u003Ccode>unclear\u003C\u002Fcode>, \u003Ccode>missing\u003C\u002Fcode> or \u003Ccode>conflict\u003C\u002Fcode>.\n\u003Ccode>POST \u002Fv1\u002Fadmin\u002Flegal\u002Fanalyse\u003C\u002Fcode> does the same for any text you paste, such as a\npolicy you wrote years ago.\u003C\u002Fp>\n\u003Cp>\u003Ccode>GET \u002Fv1\u002Fadmin\u002Flegal\u002Frulepacks\u003C\u002Fcode> lists the packs: GDPR and ePrivacy, UK GDPR,\nCCPA\u002FCPRA and other US state laws, COPPA, LGPD, PIPEDA, the Australian Privacy\nAct, Apple App Store and Google Play policy, and best-practice checklists for\nterms, cookies and refunds. \u003Ccode>GET \u002Fv1\u002Fadmin\u002Flegal\u002Fclauses\u003C\u002Fcode> lists the clauses.\u003C\u002Fp>\n\u003Ch2 id=\"publishing-and-versions\">Publishing and versions\u003Ca class=\"heading-anchor\" href=\"#publishing-and-versions\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Ccode>publish\u003C\u002Fcode> makes a document public and records a version (a snapshot). Editing a\npublished document changes the live page at once; publish again to record the\nnext version. \u003Ccode>GET …\u002Fversions\u003C\u002Fcode> lists them and \u003Ccode>POST …\u002Fversions\u002F:n\u002Frestore\u003C\u002Fcode> puts\none back as the working draft (it is not republished). Pass \u003Ccode>note\u003C\u002Fcode> to \u003Ccode>publish\u003C\u002Fcode> to say what changed; \u003Ccode>POST …\u002Fchange-note\u003C\u002Fcode> writes one with AI from the difference. \u003Ccode>unpublish\u003C\u002Fcode> takes the page\ndown.\u003C\u002Fp>\n\u003Ch2 id=\"other-languages\">Other languages\u003Ca class=\"heading-anchor\" href=\"#other-languages\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Every document has a \u003Ccode>locale\u003C\u002Fcode>, the language it is written in (\u003Ccode>en\u003C\u002Fcode>, \u003Ccode>es\u003C\u002Fcode>, \u003Ccode>pt-BR\u003C\u002Fcode>…;\nset it when you create the document or with \u003Ccode>PATCH\u003C\u002Fcode>). The same text in another\nlanguage is another document, linked to the original: a draft you can edit, publish\nand unpublish on its own.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Translate with AI\u003C\u002Fstrong> (on the document, or \u003Ccode>POST \u002Fdocuments\u002F:id\u002Ftranslate\u003C\u002Fcode> with\n\u003Ccode>{ &quot;locale&quot;: &quot;es&quot; }\u003C\u002Fcode>) creates that copy. Every section, the title and the summary are\ntranslated; the sections keep their ids, clauses, locks and the requirements they\nanswer, and are marked \u003Ccode>ai\u003C\u002Fcode> so they stand out for review. Nothing is published. A\nlanguage the document already has answers \u003Ccode>409\u003C\u002Fcode>: edit that copy, or delete it first.\nIf the AI loses a link or the structure of a section, that section stays in the\noriginal language for you to fix instead of being saved broken.\u003C\u002Fp>\n\u003Cp>To link documents you wrote yourself, set \u003Ccode>translationOf\u003C\u002Fcode> on one to the id of the\nother (\u003Ccode>PATCH\u003C\u002Fcode>, or \u003Ccode>null\u003C\u002Fcode> to unlink).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>AI translations are drafts, and this is not legal advice.\u003C\u002Fstrong> Have a lawyer who\nreads the language review them before you publish.\u003C\u002Fp>\n\u003Cp>Published documents that share an original link to each other on the public page\n(a \u003Cstrong>Languages\u003C\u002Fstrong> line under the text, plus \u003Ccode>hreflang\u003C\u002Fcode> alternates for search engines\nwhen \u003Ccode>APP_URL\u003C\u002Fcode> is set), and the page's own words (\u003Cem>Effective\u003C\u002Fem>, \u003Cem>Version\u003C\u002Fem>,\n\u003Cem>Contents\u003C\u002Fem>, \u003Cem>In short\u003C\u002Fem>) follow the document's language. The JSON lists the copies\nas \u003Ccode>translations\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"the-public-page\">The public page\u003Ca class=\"heading-anchor\" href=\"#the-public-page\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cdiv class=\"table-wrap\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>URL\u003C\u002Fth>\n\u003Cth>What\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>\u002Flegal\u002F:publicKey\u002F:slug\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The styled page\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>\u002Flegal\u002F:publicKey\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A list of the project's published documents (one per language)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Flegal\u002F:publicKey\u002F:slug\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>JSON: title, summary, \u003Ccode>locale\u003C\u002Fcode>, dates, sections, \u003Ccode>markdown\u003C\u002Fcode>, \u003Ccode>html\u003C\u002Fcode>, and \u003Ccode>translations\u003C\u002Fcode> (\u003Ccode>[{ locale, title, path }]\u003C\u002Fcode>: the same document in other languages)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Flegal\u002F:publicKey\u002F:slug?format=md\u003C\u002Fcode> or \u003Ccode>\u002Fv1\u002Flegal\u002F:publicKey\u002F:slug.md\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Markdown (\u003Ccode>text\u002Fmarkdown\u003C\u002Fcode>), headed by the title and summary\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Flegal\u002F:publicKey\u002F:slug?format=html\u003C\u002Fcode> or \u003Ccode>\u002Fv1\u002Flegal\u002F:publicKey\u002F:slug.html\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A sanitised HTML fragment (\u003Ccode>text\u002Fhtml\u003C\u002Fcode>) to embed in your own page\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Flegal\u002F:publicKey\u002F:slug.json\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The JSON, same as without a suffix\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>The public endpoints need no key, allow any origin (CORS) and are cached for a\nminute, so your own page can fetch the text and style it however it likes.\nDrafts answer \u003Ccode>404\u003C\u002Fcode>. \u003Ccode>:publicKey\u003C\u002Fcode> is the project's public key, the one in the\npublic page URL.\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton type=\"button\" class=\"copy-btn\" data-copy aria-label=\"Copy to clipboard\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shj-lang-js\">\u003Ccode>\u003Cspan class=\"shj-syn-cmnt\">\u002F\u002F Render the privacy policy inside your own page and style it with your own CSS.\n\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\">const\u003C\u002Fspan> res \u003Cspan class=\"shj-syn-oper\">=\u003C\u002Fspan> \u003Cspan class=\"shj-syn-kwd\">await\u003C\u002Fspan> \u003Cspan class=\"shj-syn-func\">fetch\u003C\u002Fspan>(\u003Cspan class=\"shj-syn-str\">'https:\u002F\u002FYOUR-SUPPORT-HOST\u002Fv1\u002Flegal\u002FPROJECT_PUBLIC_KEY\u002Fprivacy.html'\u003C\u002Fspan>)\ndocument\u003Cspan class=\"shj-syn-oper\">.\u003C\u002Fspan>\u003Cspan class=\"shj-syn-func\">querySelector\u003C\u002Fspan>(\u003Cspan class=\"shj-syn-str\">'#policy'\u003C\u002Fspan>)\u003Cspan class=\"shj-syn-oper\">.\u003C\u002Fspan>innerHTML \u003Cspan class=\"shj-syn-oper\">=\u003C\u002Fspan> \u003Cspan class=\"shj-syn-kwd\">await\u003C\u002Fspan> res\u003Cspan class=\"shj-syn-oper\">.\u003C\u002Fspan>\u003Cspan class=\"shj-syn-func\">text\u003C\u002Fspan>()\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The HTML is a fragment, one \u003Ccode>&lt;section id=&quot;…&quot;&gt;&lt;h2&gt;…&lt;\u002Fh2&gt;…&lt;\u002Fsection&gt;\u003C\u002Fcode> per section,\nwith no scripts, event handlers or inline styles, so it is safe to insert. The\nMarkdown is the same text for a renderer of your choice. Both come from the\npublished text, so imported and written documents are served identically.\u003C\u002Fp>\n\u003Ch2 id=\"your-brand\">Your brand\u003Ca class=\"heading-anchor\" href=\"#your-brand\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Set how the pages look, and who you are, once per project:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton type=\"button\" class=\"copy-btn\" data-copy aria-label=\"Copy to clipboard\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shj-lang-bash\">\u003Ccode>\u003Cspan class=\"shj-syn-func\">curl\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -s\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -X\u003C\u002Fspan> PATCH \u003Cspan class=\"shj-syn-var\">$HOST\u003C\u002Fspan>\u002Fv1\u002Fadmin\u002Fprojects\u002FPROJECT_ID\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"authorization: Bearer \u003C\u002Fspan>\u003Cspan class=\"shj-syn-var\">$KEY\u003C\u002Fspan>\u003Cspan class=\"shj-syn-str\">\"\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">'content-type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -d\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">'{\u003C\u002Fspan>\n  \u003Cspan class=\"shj-syn-str\">\"legal\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-oper\">{\u003C\u002Fspan>\n    \u003Cspan class=\"shj-syn-str\">\"entity\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-oper\">{\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"name\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"Acme Ltd\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"address\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"1 High St, London\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"email\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"legal@acme.test\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"dpo\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"\"\u003C\u002Fspan> \u003Cspan class=\"shj-syn-oper\">}\u003C\u002Fspan>,\n    \u003Cspan class=\"shj-syn-str\">\"accent\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"#4f46e5\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"font\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"serif\"\u003C\u002Fspan>, \u003Cspan class=\"shj-syn-str\">\"logoUrl\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"https:\u002F\u002Facme.test\u002Flogo.png\"\u003C\u002Fspan>,\n    \u003Cspan class=\"shj-syn-str\">\"footerText\"\u003C\u002Fspan>: \u003Cspan class=\"shj-syn-str\">\"© Acme Ltd\"\u003C\u002Fspan>\n  \u003Cspan class=\"shj-syn-oper\">}\u003C\u002Fspan>\n\u003Cspan class=\"shj-syn-oper\">}\u003C\u002Fspan>\u003Cspan class=\"shj-syn-str\">'\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>\u003Ccode>entity\u003C\u002Fcode> pre-fills the wizard for every document. It is the project's\n\u003Cstrong>company profile\u003C\u002Fstrong> (\u003Ccode>company\u003C\u002Fcode> on the project: \u003Ccode>name\u003C\u002Fcode>, \u003Ccode>legalName\u003C\u002Fcode>, \u003Ccode>address\u003C\u002Fcode>,\n\u003Ccode>email\u003C\u002Fcode>, \u003Ccode>phone\u003C\u002Fcode>, \u003Ccode>website\u003C\u002Fcode>, \u003Ccode>dpo\u003C\u002Fcode>), the one place those details live: legal\ndocuments, campaign footers (\u003Ccode>{{project.address}}\u003C\u002Fcode>) and email templates\n(\u003Ccode>{{project.company}}\u003C\u002Fcode>, \u003Ccode>{{project.email}}\u003C\u002Fcode>) all read it. Sending \u003Ccode>legal.entity\u003C\u002Fcode>\nstill works and updates it; \u003Ccode>PATCH\u003C\u002Fcode> \u003Ccode>company\u003C\u002Fcode> to set the rest. A project that\npredates it keeps what it had, and the profile starts from it.\u003C\u002Fp>\n\u003Cp>\u003Ccode>accent\u003C\u002Fcode> and \u003Ccode>logoUrl\u003C\u002Fcode> are optional overrides for these pages only. Left empty\nthey follow the project's \u003Ca href=\"\u002Fdocs\u002Fbrand\">Brand kit\u003C\u002Fa>, like every other public page;\n\u003Ccode>font\u003C\u002Fcode> is one of \u003Ccode>system\u003C\u002Fcode>, \u003Ccode>serif\u003C\u002Fcode> or \u003Ccode>mono\u003C\u002Fcode>. Pages follow the reader's light or\ndark setting and print cleanly.\u003C\u002Fp>\n\u003Cp>The pages wear the \u003Ca href=\"\u002Fdocs\u002Fstyle\">project style\u003C\u002Fa> too: its light and dark colours,\ncorner radius, shadow and font. \u003Cstrong>Project → Legal → Style\u003C\u002Fstrong> uses it as it is, or\nlays the pages' own choices over it (\u003Ccode>legal.style\u003C\u002Fcode>, \u003Ccode>{ &quot;source&quot;: &quot;custom&quot;, &quot;custom&quot;: { … } }\u003C\u002Fcode>, same fields as the project style). The \u003Ccode>accent\u003C\u002Fcode> and \u003Ccode>font\u003C\u002Fcode>\nabove stay the pages' own layer on top of both (a \u003Ccode>font\u003C\u002Fcode> left at \u003Ccode>system\u003C\u002Fcode> follows\nthe style's font when it sets one).\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton type=\"button\" class=\"copy-btn\" data-copy aria-label=\"Copy to clipboard\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shj-lang-bash\">\u003Ccode>\u003Cspan class=\"shj-syn-func\">curl\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -X\u003C\u002Fspan> PATCH \u003Cspan class=\"shj-syn-str\">\"https:\u002F\u002FYOUR-SUPPORT-HOST\u002Fv1\u002Fadmin\u002Fprojects\u002FPROJECT_ID\"\u003C\u002Fspan> \\\n \u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"Authorization: Bearer ak_…\"\u003C\u002Fspan>\u003Cspan class=\"shj-syn-kwd\"> -H\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">\"Content-Type: application\u002Fjson\"\u003C\u002Fspan> \\\n \u003Cspan class=\"shj-syn-kwd\"> -d\u003C\u002Fspan> \u003Cspan class=\"shj-syn-str\">'{ \"legal\": { \"style\": { \"source\": \"custom\", \"custom\": { \"light\": { \"background\": \"#fffdf7\" } } } } }'\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Ch3 id=\"links-to-your-documents-in-email\">Links to your documents in email\u003Ca class=\"heading-anchor\" href=\"#links-to-your-documents-in-email\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Once a document is published, \u003Ccode>{{project.privacyUrl}}\u003C\u002Fcode>, \u003Ccode>{{project.termsUrl}}\u003C\u002Fcode>,\n\u003Ccode>{{project.cookiesUrl}}\u003C\u002Fcode> and \u003Ccode>{{project.refundUrl}}\u003C\u002Fcode> in any email template fill in\nwith its public page (blank when there is none). They are kept on the project and\nrefreshed whenever a document is published, unpublished, renamed (its slug) or\ndeleted; see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Felrumo\u002Fhelp-bites-oss\u002Fblob\u002Fmain\u002Fdocs\u002FEMAIL.md#variables\" target=\"_blank\" rel=\"noopener\">Email\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"api-reference\">API reference\u003Ca class=\"heading-anchor\" href=\"#api-reference\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>All admin routes are under \u003Ccode>\u002Fv1\u002Fadmin\u002Flegal\u003C\u002Fcode>, need \u003Ccode>?project=\u003C\u002Fcode> (or \u003Ccode>project\u003C\u002Fcode> in\nthe body) and an operator session or admin API key. The full schema is at\n\u003Ccode>\u002F_docs\u002Fscalar\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cdiv class=\"table-wrap\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Route\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET\u003C\u002Fcode> \u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>List; create (\u003Ccode>mode\u003C\u002Fcode>: \u003Ccode>blank\u003C\u002Fcode>, \u003Ccode>template\u003C\u002Fcode>, \u003Ccode>ai\u003C\u002Fcode>, \u003Ccode>import\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET\u003C\u002Fcode> \u003Ccode>PATCH\u003C\u002Fcode> \u003Ccode>DELETE\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u002F:id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Read (with coverage), edit, delete\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u002F:id\u002Fpublish\u003C\u002Fcode> \u003Ccode>unpublish\u003C\u002Fcode> \u003Ccode>recompose\u003C\u002Fcode> \u003Ccode>check\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Lifecycle and checks\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u002F:id\u002Fsections\u002F:sid\u002Frewrite\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>AI rewrite of one section (\u003Ccode>apply: true\u003C\u002Fcode> to save it)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u002F:id\u002Ftldr\u002Fgenerate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>AI summary\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u002F:id\u002Fchange-note\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>AI note for the next version, from what differs from the last published one (\u003Ccode>{ &quot;note&quot;: &quot;…&quot; }\u003C\u002Fcode>; nothing saved; 409 when nothing differs)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u002F:id\u002Ftranslate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>AI translation into \u003Ccode>{ &quot;locale&quot;: &quot;es&quot; }\u003C\u002Fcode>: a new linked draft\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET\u003C\u002Fcode> \u003Ccode>\u002Fdocuments\u002F:id\u002Fversions\u003C\u002Fcode>, \u003Ccode>POST\u003C\u002Fcode> \u003Ccode>…\u002F:n\u002Frestore\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>History\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET\u003C\u002Fcode> \u003Ccode>\u002Fwizard\u002F:type\u003C\u002Fcode>, \u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fwizard\u002F:type\u002Fcompose\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The questions (with pre-filled \u003Ccode>defaults\u003C\u002Fcode>); a preview\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fwizard\u002F:type\u002Fsuggest\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Suggest answers from the project's GitHub repos\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode> \u003Ccode>\u002Fanalyse\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Check pasted text\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET\u003C\u002Fcode> \u003Ccode>\u002Frulepacks\u003C\u002Fcode>, \u003Ccode>\u002Fclauses\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The catalogue\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>Full AI drafts (\u003Ccode>mode: &quot;ai&quot;\u003C\u002Fcode>) run as one request and can take a minute or two;\nraise your proxy's timeout if it is shorter.\u003C\u002Fp>\n",[6,10,13,16,19,22,25,28,31,34,37,40,44],{"id":7,"text":8,"level":9},"how-a-document-is-made","How a document is made",2,{"id":11,"text":12,"level":9},"quick-start","Quick start",{"id":14,"text":15,"level":9},"answer-the-wizard-once-or-per-document","Answer the wizard once, or per document",{"id":17,"text":18,"level":9},"importing-a-document-you-already-have","Importing a document you already have",{"id":20,"text":21,"level":9},"suggest-answers-from-your-github-repos","Suggest answers from your GitHub repos",{"id":23,"text":24,"level":9},"sections-provenance-and-the-summary","Sections, provenance and the summary",{"id":26,"text":27,"level":9},"checking-against-the-rules","Checking against the rules",{"id":29,"text":30,"level":9},"publishing-and-versions","Publishing and versions",{"id":32,"text":33,"level":9},"other-languages","Other languages",{"id":35,"text":36,"level":9},"the-public-page","The public page",{"id":38,"text":39,"level":9},"your-brand","Your brand",{"id":41,"text":42,"level":43},"links-to-your-documents-in-email","Links to your documents in email",3,{"id":45,"text":46,"level":9},"api-reference","API reference",1792766843062]