When your website has a batch of structured content with identical formats—such as instructors and courses for a tutoring school, portfolio case studies for a design agency, store locations for a chain brand, or FAQs—stuffing them into individual page text boxes makes maintenance extremely difficult.
Collections act like built-in spreadsheets and lightweight databases right inside your website: first, define the fields for your data (e.g., name, avatar, expertise, years of experience), and then fill in the items one by one. Management and retrieval are split into two clear tracks:
https://{your-site}/api/v1/collections/{key}/items), allowing your custom frontends, apps, or external pages to fetch data key-free with global edge caching (see technical specs in the ).Field structures for collections (which fields exist, their types, and whether they are required) are created and modified exclusively by AI via MCP. The dashboard does not provide manual form-builder UI for changing schemas—because telling AI in plain language "what I want to store" is much faster than configuring field types one by one, and AI automatically selects the correct types and adds format validation.
Connect ChatGPT, Claude, Cursor, or Claude Code to Kanorio by following .
Copy and paste either of the following prompts into your chat (adjust to fit your business needs):
Example 1: Create an Instructor Collection
Build an "instructors" (key: teachers) collection for my website with the following fields: name, title, subject (single select: Math / English / Physics), years of experience (integer), bio (long text), contact email, accepting new students (boolean). Populate it with sample data for 3 teachers and publish.
Example 2: Create a Course Collection and Link Instructors
Build a "courses" (key: courses) collection for my website with the following fields: course name, instructor (reference to teachers collection), level (single select: Beginner / Intermediate / Advanced), tuition fee (number), start date (date), tags (multi-select: Online / Weekend / Small Group), registration link (URL). Populate 3 courses and link them to the teachers created earlier.
Return to the "Data & Content › Tables" workspace to see your newly created collection and records. If your site has no collections yet, the overview screen features three ready-to-copy prompts ("Instructors", "Portfolio", "Stores") right in the center.
Click into "Data & Content › Tables". The interface adopts a professional database workspace layout divided into three sections:
Select any collection to switch between three tabs in the top toolbar. Your filters, sorting, pagination, and open records are all preserved in the URL—copy the URL to share the exact view with team members:
text, number, ref → teachers). The first column is fixed as the title field and remains locked during horizontal scrolling. The gray block on the far right contains system fields (status, slug, published_at, updated_at, id).NULL, and empty strings show EMPTY.Enter to open the right-hand record panel, and press ⌘C (Ctrl+C on Windows) to copy the cell content.id), types, required status, uniqueness, constraints, and AI guidance hints (aiHint).Hover over the leftmost row number in the table and click the expand arrow (or double-click any row) to dock the full record panel on the right:
id, slug, publication time, and creation/update timestamps, which can be copied individually on hover.Each record maintains two versions: a Draft (visible in the workspace) and Published (served by the public API), indicated by status dots:
Enter to confirm, Esc to cancel). Composite fields like images, galleries, files, long text, multi-select, and references are edited in the right-hand record panel.⌘S)": Writes changes, immediately updates the public API, and clears edge caches.Default AI Write Behavior: When AI creates or modifies data via MCP or REST API,
publish: trueis set by default (instantly publishing live). If you prefer AI to save drafts for your review, simply say "save as draft" in your prompt.
All field types supported by collections are outlined below. Both AI-generated structures and your JSON/CSV imports must adhere to this table:
| Category | Field Type | Technical Code (type) | Storage & API Format | Configurable Constraints |
|---|---|---|---|---|
| Text | Single-line / General Text | text | String (leading/trailing whitespace automatically removed) | min, max (default 5,000; max 20,000), pattern (Regex), unique, default |
| Text | Long Text (Rich Text) | rich_text | Markdown string (embedded HTML tags automatically stripped) | max (up to 50,000 characters) |
| Contact & Links | email | Lowercase email string (max 254 characters) | unique, |
Title Field (
titleFieldId): Every collection designates atext,urlfield as the title field, which appears in the first table column, serves as display names when referenced by other collections, and automatically generates URL slugs if none are provided.
If your website uses the , 4 locked system collections automatically appear under the "System" group in the left sidebar:
blog (Blog posts)blog_categories (Blog categories)blog_tags (Blog tags)blog_authors (Blog authors)Operational Rules:
items.* Read-Only: To ensure consistency across the article editor, SEO, and version history, system collections are read-only in the collections workspace (and Agent items.* tools). To modify articles, use the Blog page (or ask AI using posts_* tools).blog using collections.update (built-in reserved fields cannot be deleted or modified). Your external frontend can query published posts using the exact same endpoint: /api/v1/collections/blog/items?expand=authors,categories,tags.Click the "More (⋯)" button in the top right of the workspace toolbar to "Export CSV", "Export JSON", or "Import":
id, slug, status, publishedAt). Multi-select, multi-reference, and JSON fields in CSVs are represented as JSON strings.id matching existing records will update; rows without an id will be inserted. Checking "Publish immediately after import" publishes records live upon import.When you or an engineer (or Cursor / Claude Code) build a custom frontend website (e.g., Next.js, Astro, Vue, React Native) to read collection data:
fetch and curl snippets.https://app.example.com or https://preview.vercel.app) and calls the API directly from the browser, go to "Website Settings › Developer" in the dashboard and enter the URL under "Allowed Origins" (restricted to domains starting with https://, without paths or wildcards, up to 20 per site).http://localhost / 127.0.0.1 on any port) require no registration and can be read directly.filter[field][op]=value, sort=-field, fields=field1,field2, expand=reference_field, cursor pagination, and ?preview=1 draft previews. See the for full specifications.Collections only count "the total record count of all custom collections combined across the site (including drafts)". The number of collections, fields, and API read requests are entirely free of charge:
| Item | Free | Pro | Business |
|---|---|---|---|
| Total Collection Items (including drafts; blog system collections excluded) | 50 items | 1,000 items | 10,000 items |
| Monthly Add-ons | Not available | US$1.50/month per 1,000 items (billed in subscription currency) | US$1.50/month per 1,000 items (billed in subscription currency) |
| Maximum Total Item Limit | 50 items | 20,000 items (max 19 add-on tiers) | 200,000 items (max 190 add-on tiers) |
| Technical Limits for Collections & Fields | Max 100 collections per site, max 50 fields per collection | Same as left | Same as left |
| Content Delivery API | Free, no bandwidth fees | Free, no bandwidth fees | Free, no bandwidth fees |
Collections are designed as a "Headless CMS" intended for structured content that is read often and written rarely, maintained by site owners or teams. For the following use cases, please use dedicated features or external services instead:
No, collection schemas are managed exclusively by AI via MCP (or REST API). Simply switch to the collection's "Structure" tab, click "Modify Structure with AI" in the top right to copy the prompt, paste it to ChatGPT, Claude, or Cursor, and tell it what fields to add. Adding fields, changing display names, adding options, and relaxing constraints take effect immediately. Deleting a custom field causes old data in that field to be ignored. If you change a field to an incompatible type (e.g., changing text to a number), AI automatically handles adding new fields, migrating data, and removing old fields.
This means another collection contains records pointing to this record via a reference or multi_reference field (for instance, a course pointing to this instructor). To prevent broken links on the frontend, the system blocks deletion by default. Please reassign those courses to another instructor before deleting (if deleting via API with force=true, forced deletion is allowed, and read endpoints will automatically ignore dead references).
Site Owners, Administrators, Members, and Viewers can access "Data & Content › Tables" to browse schemas, data, and export CSV/JSON (Store Staff roles cannot see this section). Adding, modifying, publishing, deleting, and importing data requires "Manage Collections" permissions (granted by default to Owners, Administrators, and Members). Managing "Allowed Origins (CORS)" requires "Manage Website Basic Settings" permissions, while adding record quotas requires "Manage Subscription Plan" permissions.
Yes. When you generate a website backup under "Website Settings › Website Management", the ZIP archive automatically includes collections/schema.json (field definitions for all collections) along with collections/{key}.json (full drafts and published data for each collection). Media library images and files referenced within collections are also bundled together.
Yes. Whether saving in the workspace, importing CSVs, or creating collections, writing, or publishing data via AI assistants and the REST API, every action is fully logged in the Activity Log with clear indicators of the operator and tool used.
fetch and curl code snippets pre-filled with the collection's field names for engineers or frontend projects.default| Contact & Links | Phone Number | phone | Automatically converted to E.164 international standard (e.g., +886912345678) | defaultCountry (defaults to site location) |
| Contact & Links | URL | url | http:// or https:// URL (max 2,048 characters) | unique, default |
| Contact & Links | Video URL | video_url | YouTube or Vimeo URL | - |
| Numeric & Logic | Number | number | Numeric value (integer or decimal) | integer (integers only), min, max, unique, default |
| Numeric & Logic | Boolean | boolean | true or false | default |
| Date & Time | Date | date | YYYY-MM-DD calendar date (e.g., "2026-11-02", validates real calendar dates) | min, max, default |
| Date & Time | Datetime | datetime | ISO 8601 UTC string (e.g., "2026-10-30T15:59:00.000Z") | min, max, default |
| Options & Appearance | Single Select | select | Option English id string | options: [{ id, label, color? }] (max 100 options), default |
| Options & Appearance | Multi-select | multi_select | Array of option id strings (automatically deduplicated) | options, min, max (max 50), default |
| Options & Appearance | Color | color | Lowercase hex color code (e.g., "#2563eb") | default |
| Media & Files | Image | image | File assetId from the site | Automatically included in media library reference tracking and storage protection |
| Media & Files | Gallery (Multiple Images) | gallery | Array of media library assetIds | min, max (max 50 images) |
| Media & Files | File | file | File assetId from the media library (PDF, audio, documents, etc.) | Automatically included in media library reference tracking |
| Relations & Advanced | Reference (Single) | reference | Target collection item id (validates target existence on write) | targetCollectionKey (key of the target collection) |
| Relations & Advanced | Multi-reference | multi_reference | Array of target item ids (deduplicated and validated) | targetCollectionKey, min, max (max 50 items) |
| Relations & Advanced | JSON Structure | json | Any valid JSON value (object, array, etc.) | Max 10 levels deep, 64 KB limit per column (no filtering or sorting available) |