{"id":3430,"date":"2026-02-01T21:48:00","date_gmt":"2026-02-01T21:48:00","guid":{"rendered":"https:\/\/formsbridge.codeccoop.org\/?page_id=3430"},"modified":"2026-02-02T08:19:52","modified_gmt":"2026-02-02T08:19:52","slug":"grist","status":"publish","type":"page","link":"https:\/\/formsbridge.codeccoop.org\/documentation\/grist\/","title":{"rendered":"Grist"},"content":{"rendered":"\n<div class=\"wp-block-group alignfull has-accent-1-background-color has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide has-global-padding is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-df8dc8f7 wp-block-group-is-layout-constrained\" style=\"margin-top:var(--wp--preset--spacing--40);margin-bottom:var(--wp--preset--spacing--80)\">\n<div style=\"height:var(--wp--preset--spacing--50)\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-x-small-font-size wp-block-paragraph\" style=\"margin-top:0;margin-bottom:var(--wp--preset--spacing--10)\"><a href=\"https:\/\/formsbridge.codeccoop.org\/documentation\/#addons\" data-type=\"page\" data-id=\"322\">\u2190 Documentation<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\" style=\"margin-top:0\">Grist<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Grist<\/strong> is an open-source, self-hostable alternative to spreadsheets that combines the simplicity of a spreadsheet with the power of a relational database, enabling real-time collaboration, customizable workflows, and automation\u2014ideal for teams and developers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>Grist add-on<\/strong> allows you to seamlessly integrate WordPress form submissions directly to your spreadsheet tables, transforming how you manage and analyze form data.<\/p>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"538\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-6-1024x538.png\" alt=\"\" class=\"wp-image-3431 lazyload\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-6-1024x538.png 1024w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-6-300x158.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-6-768x403.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-6.png 1200w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/538;\" \/><\/figure>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">The add-on<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/support.getgrist.com\/rest-api\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grist REST API<\/a> can be used to integrate your data in Grist with any external system. The API closely follows REST semantics, uses JSON to encode objects, and relies on standard HTTP codes to signal operation outcomes. To talk with this API the add-on implements a custom bridge class based on the generic REST bridge that requires Bearer credentials.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A <strong>Grist bridge<\/strong> will store your form submissions as entries in your Grist spreadsheets. Each field of your forms will be translated to a table column, and every form submission inserted as a new row of the table.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In addition, the add-on comes with a bridge template to create dynamic forms based on your tables.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to use<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The first step to use the add-on is to activate it in the add-ons table in the general settings tab.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a26dd0f135c4&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a26dd0f135c4\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"495\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-7-1024x495.png\" alt=\"Screenshot of the add-on panel on the general settings tab with the Grist add-on activated\" class=\"wp-image-3437 lazyload\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-7-1024x495.png 1024w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-7-300x145.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-7-768x371.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-7-1536x743.png 1536w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-7.png 1913w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/495;\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once activated, a new tab will be visible in the settings page. If it&#8217;s your first time, it should looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"495\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-8-1024x495.png\" alt=\"Grist tab out of the box without bridge configurations.\" class=\"wp-image-3438 lazyload\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-8-1024x495.png 1024w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-8-300x145.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-8-768x371.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-8-1536x743.png 1536w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-8.png 1913w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/495;\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">The template wizard<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The recommended way to set up a new bridge is to use a template as a starter point. The add-on&#8217;s template wizard will set up a new Bearer credential, a backend connection and a form, all of them linked with a new bridge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With this setup ready, you can edit the bridge&#8217;s form to fit your requirements or manually add new forms and bridge them with the backend \/ credential you&#8217;ve configured on the previous step.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The template wizard will lead you through four steps:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Credential<\/h4>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a26dd0f13df4&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a26dd0f13df4\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"495\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-9-1024x495.png\" alt=\"Screenshot of the credential step of the add-on's template wizard. The form has name and the access token fields.\" class=\"wp-image-3441 lazyload\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-9-1024x495.png 1024w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-9-300x145.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-9-768x371.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-9-1536x743.png 1536w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-9.png 1913w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/495;\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In this step, Forms Bridge will register a new Bearer credential. To set up this authentication, you have to register a new <strong>API key<\/strong> in your <a href=\"https:\/\/docs.getgrist.com\/account\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/docs.getgrist.com\/account\" rel=\"noreferrer noopener\">Grist account<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-320e646c wp-block-group-is-layout-constrained\" style=\"border-left-color:var(--wp--preset--color--accent-1);border-left-width:4px;margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--40)\">\n<p class=\"wp-block-paragraph\" style=\"margin-top:0;margin-bottom:0\">This API key can be used to access your account via the API. Don\u2019t share your API key with anyone.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-320e646c wp-block-group-is-layout-constrained\" style=\"border-left-color:var(--wp--preset--color--accent-3);border-left-width:4px;margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--40)\">\n<p class=\"wp-block-paragraph\" style=\"margin-top:0;margin-bottom:0\">If you already have a Bearer credential registered, the template wizard allows you to reuse it. If you want to get multiple Grist bridges, the recommended way to proceed is to register a Bearer credential and reuse it on your bridges.<\/p>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"554\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-10-1024x554.png\" alt=\"Screenshot of an Grist account dashboard\" class=\"wp-image-3442 lazyload\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-10-1024x554.png 1024w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-10-300x162.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-10-768x415.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-10-1536x830.png 1536w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-10.png 1861w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/554;\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">2. Backend<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Grist can be self-hosted or used as a cloud service. Based on your setup, this step will require different configurations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start by defining a unique name to identify the backend connection. After that, you have to configure the <strong>base URL<\/strong> of the backend. By default the add-on will propose <code>https:\/\/docs.getgrist.com<\/code>, but you can change the URL in case you&#8217;re self hosting Grist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The last field, the <strong>Team ID<\/strong>, is the identifier of your Grist site. In the cloud service of Grist it is the subdomain of your team site (e.g. <code>example<\/code> in <code>https:\/\/example.getgrist.com<\/code>). In self hosted instances, it can be extracted from the URL path (i.e. <code>example<\/code> in <code>http:\/\/localhost:8484\/o\/example<\/code>).<\/p>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-320e646c wp-block-group-is-layout-constrained\" style=\"border-left-color:var(--wp--preset--color--accent-3);border-left-width:4px;margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--40)\">\n<p class=\"wp-block-paragraph\" style=\"margin-top:0;margin-bottom:0\">If you already have the Grist API registered as a backend, the template wizard allows you to reuse it. If you want to get multiple Grist bridges, the recommended way to proceed is to register the backend once and reuse it on your bridges.<\/p>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"495\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-11-1024x495.png\" alt=\"Screenshot of the add-on's template wizard backend step with three visible fields: Backend name, base URL and team ID.\" class=\"wp-image-3443 lazyload\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-11-1024x495.png 1024w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-11-300x145.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-11-768x371.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-11-1536x743.png 1536w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-11.png 1917w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/495;\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">3. Form<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In this step you have to choose the title of the form the template are going to create. The add-on will create a new form with a dynamic set of fields based on the table you decide to integrate with.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. Bridge<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In the last step of the wizard, you have to set a unique name for the new bridge and select the <strong>table<\/strong> you want your form to get bridged.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a26dd0f14b11&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a26dd0f14b11\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"495\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-12-1024x495.png\" alt=\"Screenshot of the bridge step of the add-on's template wizard with two fields: Bridge name and a selector with available Grist tables\" class=\"wp-image-3447 lazyload\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-12-1024x495.png 1024w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-12-300x145.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-12-768x371.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-12-1536x743.png 1536w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2026\/02\/imatge-12.png 1917w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/495;\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After that, click on <mark style=\"background-color:#43437a\" class=\"has-inline-color has-base-color\">submit<\/mark> and Forms Bridge will generate the credential, backend, form and bridge setting. <strong>It only remains to publish the new form on a public page and wait for a new form submission!<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Manual set up<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With templates, you can save a lot of time while configuring your bridges, but you can achieve the same result with a manual set up.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A <strong>Grist bridge<\/strong> will require the following components:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Credential<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">As mentioned before, the Grist API works with Bearer tokens to grant access to its resources. To solve this authentication requirement, the add-on requires you to register an <strong>API key<\/strong> in your <a href=\"https:\/\/docs.getgrist.com\/account\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/docs.getgrist.com\/account\" rel=\"noreferrer noopener\">Grist account<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you have the token, you have to go to <code>Settings &gt; Forms Bridge &gt; HTTP &gt; Authentication<\/code> and register a new authentication credential. Select <strong>Bearer<\/strong> as the authentication schema and put the key value as the <strong>Access token<\/strong> field.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. Backend<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To configure the Grist API as a backend, follow this steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Register a new backend with a unique name (<em>Grist API<\/em>, for example), and a URL with <code>https:\/\/docs.getgrist.com<\/code> as value for cloud services, or the base URL of your self hosted Grist instance.<\/li>\n\n\n\n<li>Select <code>JSON<\/code> as the <strong>Encoding Schema<\/strong><\/li>\n\n\n\n<li>Select the Bearer credential you&#8217;ve configured on the previous step.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">3. Form<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The add-on supports any kind of form. Get your preferred form builder and create a new form. Once created, you can choose it as the target form to be bridged on the bridges panel of the add-on.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. Bridge<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The add-on\u2019s bridge is an extension of the generic REST bridge. Because of this they looks so similar. Like the REST bridge, the add-on\u2019s bridge requires a unique name, a backend, a form, an endpoint and an HTTP method.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The endpoint of a Grist bridge should be like <code>\/api\/docs\/{docId}\/tables\/{tableName}\/records<\/code>. The <strong>docId<\/strong> can be extracted from the table URL. For example, the in the URL <code>https:\/\/docs.getgrist.com\/abc123456789\/Example\/p\/1<\/code> the baseId is &#8220;abc123456789&#8221;. The <strong>tableName <\/strong>parameter of the URL is the name of your table.<\/p>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-7cdf1d71 wp-block-group-is-layout-constrained\" style=\"border-left-color:var(--wp--preset--color--accent-3);border-left-width:4px;margin-bottom:var(--wp--preset--spacing--40);padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--40)\">\n<p class=\"wp-block-paragraph\" style=\"margin-top:0;margin-bottom:0\">Despite the different methods available (GET, POST, PUT, DELETE, PATCH), the most common case is to use the POST as the bridge method to write new rows to your spreadsheets. The other available methods are useful for API introspection or to set up workflow automations, but are not designed to be used as the bridge method.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To troubleshooting your bridges you can use the plugin&#8217;s debug console from the General Settings page. Enable the debug mode and submit a sample form response to see what&#8217;s going on under the hood.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Common issues<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Authentication failures<\/strong>\n<ul class=\"wp-block-list\">\n<li>Verify API key<\/li>\n\n\n\n<li>Verify backend URL<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Missing data<\/strong>\n<ul class=\"wp-block-list\">\n<li>Verify table endpoints<\/li>\n\n\n\n<li>Verify column names<\/li>\n\n\n\n<li>Check field mapping<\/li>\n\n\n\n<li>Consider API quotas and potential costs<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"margin-top:var(--wp--preset--spacing--50)\">Add-on templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The add-on comes packed with the following template:<\/p>\n\n\n<ul class=\"wp-block-list\"><li class='wpct-fb-modal__trigger' data-dialog-title='From table'><p><a href='\/bridge-template\/grist-from-table\/'><b>From table <span style='font-size:0.9em'>\ud83d\udd0e<\/span><\/a><\/b><br\/>Create a bridge and a form based on an existing table<\/p><\/li><\/ul>\n\n\n\n<div style=\"height:var(--wp--preset--spacing--40)\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group alignwide has-global-padding is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-d525c45f wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading\">Supported form builders<\/h2>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-ffc72a0a wp-block-columns-is-layout-flex\" style=\"margin-top:var(--wp--preset--spacing--70);margin-bottom:var(--wp--preset--spacing--70)\">\n<div class=\"wp-block-column is-vertically-aligned-stretch flex justify-center is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-2486140b wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-medium is-resized\"><a href=\"https:\/\/contactform7.com\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" width=\"300\" height=\"231\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/contactoform7-300x231.png\" alt=\"Contact Form 7\" class=\"wp-image-47 lazyload\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/231;object-fit:contain;width:120px;height:90px\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/contactoform7-300x231.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/contactoform7.png 429w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-stretch flex justify-center is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-53ed2625 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-medium is-resized\"><a href=\"https:\/\/wpforms.com\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" width=\"300\" height=\"253\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/wpforms-300x253.png\" alt=\"WP Forms\" class=\"wp-image-98 lazyload\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/253;object-fit:contain;width:120px;height:90px\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/wpforms-300x253.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/wpforms.png 758w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-stretch flex justify-center is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-53ed2625 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-medium is-resized\"><a href=\"https:\/\/www.gravityforms.com\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" width=\"300\" height=\"225\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/gravityforms-300x225.png\" alt=\"Gravity Forms\" class=\"wp-image-43 lazyload\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/225;object-fit:contain;width:120px;height:90px\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/gravityforms-300x225.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/gravityforms-768x576.png 768w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/gravityforms.png 771w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-stretch flex justify-center is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-53ed2625 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/ninjaforms.com\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" width=\"207\" height=\"162\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/04\/ninjaforms.png\" alt=\"Ninja Forms\" class=\"wp-image-49 lazyload\" style=\"--smush-placeholder-width: 207px; --smush-placeholder-aspect-ratio: 207\/162;object-fit:contain;width:120px;height:90px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-stretch flex justify-center is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-53ed2625 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/woocommerce.com\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" width=\"1000\" height=\"511\" data-src=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/05\/Woo_logo_color.png\" alt=\"\" class=\"wp-image-1474 lazyload\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/511;object-fit:contain;width:180px;height:90px\" data-srcset=\"https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/05\/Woo_logo_color.png 1000w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/05\/Woo_logo_color-300x153.png 300w, https:\/\/formsbridge.codeccoop.org\/wp-content\/uploads\/2025\/05\/Woo_logo_color-768x392.png 768w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u2190 Documentation Grist Grist is an open-source, self-hostable alternative to spreadsheets that combines the simplicity of a spreadsheet with the power of a relational database, enabling real-time collaboration, customizable workflows, and automation\u2014ideal for teams and developers. The Grist add-on allows you to seamlessly integrate WordPress form submissions directly to your spreadsheet tables, transforming how you [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":322,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3430","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/pages\/3430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/comments?post=3430"}],"version-history":[{"count":7,"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/pages\/3430\/revisions"}],"predecessor-version":[{"id":3460,"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/pages\/3430\/revisions\/3460"}],"up":[{"embeddable":true,"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/pages\/322"}],"wp:attachment":[{"href":"https:\/\/formsbridge.codeccoop.org\/wp-json\/wp\/v2\/media?parent=3430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}