getting started

Connect Sanity

Project ID, dataset, write-scope token. We auto-detect the rest.

Sanity uses a token issued from your management dashboard. We need write access to one dataset so we can create posts and upload cover images. Quibo auto-detects your schema: it works out of the box with post, article, blogPost, custom names, custom fields. No adapter required.

What you'll need

  • Your project ID, shown at sanity.io/manage under the project name (and in the Studio URL).
  • The dataset name, usually production (Datasets tab).
  • An API token with Editor permission.

Generate a write-scope token

  1. Go to sanity.io/manage and pick your project.
  2. Open the API tab, then Tokens, then Add API token.
  3. Name it Quibo, choose the Editor permission, and copy the token (you'll only see it once).

Plug it into Quibo

From Sites, then Connect a site pick Sanity and fill in:

  • Site name (e.g. Acme Blog)
  • Site URL, the public front-end that renders the dataset (used to learn your brand voice)
  • Output language
  • Project ID
  • Dataset
  • API token (Editor permission)

Click Connect site. Quibo first verifies the token against your dataset: if the check fails, nothing is stored and the error is shown in the wizard. When it passes, Quibo encrypts the token, learns your brand voice and probes your dataset to discover its post type, body field, fields and referenced entities (authors, categories). Test connection on the site page stays available to re-check the token later.

Auto-discovery (zero config required)

When you connect, Quibo runs a few GROQ queries against the dataset and figures out:

  • Post type, from a candidate list (post, article, blogPost, blog, news, story, entry, page). The first one with at least one document wins. If none match, we fall back to whichever non-system document type has the most documents. An empty dataset falls back to post.
  • Body field, the first array-of-blocks field on the post (body, content, articleBody, pageBuilder, mainContent, blocks, then any other array of blocks).
  • Fields list, the per-field structure derived from sampling up to 100 recent posts. We never write a field name your documents don't use (no orphan fields in Studio).
  • Author and category lists: for every reference field on the post, we list the available documents (capped at 200 each) so you can pick the default byline and the agent can choose an existing category instead of creating duplicates.

The first article we publish will use the discovered shape automatically. When your post type has a reference field named author, Sites, then your site shows a Default author dropdown in the brand profile, populated with the author documents from your dataset. Pick one and click Save brand profile.

Discovery runs again once a day, or whenever you click Re-crawl brand on the site page.

What we publish

For each article we create a document of the discovered post type with: title, slug (as {_type: "slug"}), language, meta title and description, Open Graph title and description (when the schema declares a matching field such as ogTitle or socialTitle), excerpt, cover image (uploaded as a Sanity asset and referenced, with an XMP marking that identifies it as AI-generated), the same asset in an Open Graph image field when there is one, the portable-text body, the FAQ array (with a _key on each item), one category reference (an existing category, or a new one when none fits), the author reference, the structured data as a JSON string, the publish date and an AI-assisted flag, but only for the fields your documents actually declare. Field names are matched against common aliases (for example seoTitle or metaTitle, coverImage or mainImage, faq or faqs, schemaJsonLd or jsonLd).

Only paragraphs, headings, quotes, lists, code blocks and dividers are converted to portable text. Custom Quibo nodes like faqBlock are filtered out of the body before serialization, so they never appear as orphan inline objects in Studio. Inline images from the article body are not sent to Sanity yet, only the cover.

When Quibo refreshes an article later, it patches the same document: the slug, the publish date and the categories are left untouched, the rest is replaced.

Test the connection

In Sites, then your site click Test connection to confirm the token is accepted and the dataset is reachable (Quibo runs a small GROQ query with it).

Revoking access

Delete the token from sanity.io/manage at any time. The next attempted publish fails and the article lands in Failed with the error. To connect with a new token, open the site page in Quibo, use Update credentials in the Credentials card, and the new values are verified against your CMS before they replace the old ones.