CnterDocumentationSign in

Start here

  • What Cnter is
  • Core concepts
  • Quickstart

Platform

  • Authentication
  • Conventions
  • Errors
  • Organization
  • The dashboard

Modules

  • Content Management
  • Online Ordering
  • Restaurant Ordering
  • Promotions
  • Reservations
  • Bookings
  • Contact Form

Payments

  • AgnusPAY
  • Tax

Services

  • Address autocomplete
  • Video
  • Email

Reference

  • API reference

Start here

Core concepts

Organizations, roles, modules, publishing and timezones. The words the rest of these pages assume.

A full brief for whoever builds against this.

Six ideas carry the whole platform. They are worth ten minutes now, because every module reuses them and none of them is explained twice.

Organization#

The tenant. One restaurant, one clinic, one shop. Every row in the system belongs to exactly one organization, and no query crosses the boundary: an API key issued for one organization cannot see another, no matter what id is passed alongside it.

A person can be a member of several organizations with a different role in each. The dashboard switches between them; the API does not, because a key belongs to one.

Identified by
A UUID, stable for the life of the account
Carried in
The URL for public endpoints, the API key otherwise
Owns
Content, orders, reservations, keys, payouts, members, settings

Members and roles#

People are invited to an organization by email and land on one of three roles. Roles govern the dashboard and the session-authenticated endpoints behind it. They have nothing to do with API key scopes, which are a separate system described in Authentication.

RoleCan doCannot do
ownerEverything within their organization: settings, members, modules, keys, payouts.Assign the admin role, or reach another organization.
adminEverything an owner can, plus assigning the admin role.Nothing within the organization.
managerDay to day work: content, orders, reservations, bookings.Organization settings, members, API keys, payouts.

A manager is the role most staff should get. It is the one that cannot rotate the key your integration runs on.

Modules and feature flags#

Each module is a flag on the organization. Turning one on adds its area to the dashboard, its panel to settings and its endpoints to the API. Turning it off removes all three.

An endpoint belonging to a module that is off answers 403, not 404 and not an empty list. Treat it as "this customer does not use that feature" and render your page without the section. It is not an error your visitor should ever read about.

Content types and items#

Content Management is the module the others lean on. A content type is a schema your customer defines: a name, a slug and a set of fields. A content item is one entry of that type.

The slug matters more than it looks. It is how you ask for one type instead of all of them, and the single most common integration bug is leaving it out. See Content Management.

Catalogs live here too. A restaurant menu is a content type; an order line references a content item by id, and the server prices it from that item. There is no second product table to keep in sync.

Draft and published#

An item is either a draft or published. The API returns published items only, which is the point: your customer can write next week's menu today without it appearing on the site tonight.

The practical consequence is that "it is in the dashboard but not on my site" is almost always a draft, not a bug. Check the status before you check your code.

Time and timezone#

Every timestamp crossing the API is ISO 8601 in UTC. That includes what you send: a reservation at 18:00 local time is sent as the UTC instant it corresponds to.

Calendar rules are different. Opening hours, closed days and slot times are expressed as a local date and a wall clock time, because "closed on 25 December" means the venue's 25 December. The zone they resolve against is a property of the organization, set under Settings then Organization then General, and returned as calendar_timezone from the reservation settings endpoint.

Use the venue zone, not the visitor's

A booking widget that generates slots in the browser's timezone puts a Dutch restaurant's 18:00 sitting at 12:00 for a visitor in New York. Read calendar_timezone and resolve dates against it.

Money and prices#

Prices are decimal numbers in the organization's currency, not cents. The server is authoritative for every amount that ends up on a payment screen: you send item ids and quantities, and the total comes back. That is the quote, on Online Ordering — the checkout commits an order and answers with the order, not with a price list.

A price you send is ignored rather than trusted, which is deliberate. It means a stale cached menu on your site cannot undercharge, and a manipulated cart in a browser cannot either. Show your own prices per line if you like, but take the amount due from the server rather than adding them up. Tax follows the same rule, in Tax.

AuthenticationKeys, scopes and the headers every request carries.ConventionsResponse envelope, pagination and CORS.
PreviousWhat Cnter isNextQuickstart

On this page

  • Organization
  • Members and roles
  • Modules and feature flags
  • Content types and items
  • Draft and published
  • Time and timezone
  • Money and prices