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
- Go to sanity.io/manage and pick your project.
- Open the API tab, then Tokens, then Add API token.
- 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 topost. - 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.
Set the post address
Sanity stores your posts but does not know the site that shows them, so it cannot tell Quibo where a post is live. Quibo needs that address to link the live post from the article page, match Search Console data to each article, offer your posts as internal links and list them in client reports and the calendar feed.
On Sites, then your site, the Post address card asks for a pattern: the address of any post on your site with {slug} where its slug goes, for example https://example.com/blog/{slug}. Quibo puts each post's slug (the one it writes to the document's slug field) in its place.
- Suggested from your sitemap. When your sitemap lists posts Quibo published, the card shows the pattern they follow. Tap Use this pattern to save it. When none are listed yet, it may suggest the blog folder your sitemap uses most. Suggestions only use addresses on your site's domain or its subdomains.
- Checks. The pattern must start with
https://(orhttp://), contain{slug}once, after the domain, and be on your site's domain or one of its subdomains. A front end on another domain works too: type its pattern and tick the confirmation that appears. - Posts already published. Saving the pattern fills the live address of every published post that has none yet, at once. If you change the pattern later, or remove it and set a new one, the posts the old pattern addressed move to the new one, at once and again in the daily check. An address you typed yourself, with Mark as published, is never changed.
- No pattern yet. Posts still publish as usual, they just have no live address. Once a day Quibo looks for each of them in your sitemap and records the address on your site's domain that ends with the post's slug, when exactly one does.
- Studio addresses. Posts published before this setting existed may have stored their Studio address as the live one. The daily check replaces it with the live address, or removes it when there is none yet, so reports and the calendar feed never link to your Studio.
Studio link (optional). In the same card, add the address your Sanity Studio opens at, for example https://your-studio.sanity.studio (the name you chose when you deployed it), or https://example.com/studio when the Studio is part of your site. Leave out the tool name at the end, such as /structure or /content. Each published post then gets an Open in Sanity Studio link on its article page. Without it there is no Studio link, since only you know where your Studio lives. After saving, use Open your newest post in Sanity Studio under the field to check it.
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: the article goes back to Ready with the error on its page and, if it was scheduled, stays on its date marked Publish failed. It does not publish by itself. 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. Then click Publish now on the article, or pick a new date under Schedule publish.