Skip to content
Coritan Docs

Manage the staff team and console settings

Add team members, set their roles and sign-in, change your brand's settings and notices, and set up your own account, push notifications and email digest.

View as Markdown

Four pages of the staff console set up the console and what customers see of your brand. The team page, /staff/team, lists everyone who works on your brand with their role, their last sign-in, whether they use two-factor authentication and which storefront account they have. The settings page, /staff/settings, holds your brand's details, its feature switches, the Tier 1 claim limit, the error page, the look of your emails, your search appearance, your marketing (tags, server-side conversions and ad spend) and your API keys. The notices page, /staff/notices, posts the announcements, maintenance windows and incidents your customers read. My account, /staff/me, holds each member's own settings: their name, password and two-factor authentication, push notifications, email digest, table density and saved views.

Any member can see the team. What else each task needs:

Task Lowest role Step-up
Add a member, sign a member out, require two-factor authentication, or choose how long a browser is remembered Admin No
Change a role, remove a member, send a password link or set a password, reset two-factor authentication, or change a storefront account Admin Yes
Open the settings page and change anything on it, the claim limit included Admin No
Turn on a conversion platform, send a test event, connect an ad account or add spend by hand (all on the marketing tab) Admin No
Post, change and resolve notices Tier 3 support No
Delete a notice Admin No
Change anything on My account Your own account, any role No
Choose a daily or weekly email digest Billing No

The owner counts as an admin. Nobody can change the owner's role, remove the owner or reset the owner's two-factor authentication from the console: ownership moves only when Coritan support transfers it.

A step-up is a fresh password or authenticator code, which lasts 10 minutes; Sign in to the staff console explains it. The same team is on the organization's Members tab in the Coritan dashboard, which Manage members and roles covers, and Organization roles and permissions says what each role can do.

  1. Open /staff/team and choose "Invite member…".
  2. Enter their email, a name if you like, and their role: readonly, support_tier1, support_tier2, support_tier3, billing or admin. New members get support_tier1 unless you choose another.
  3. Choose how they get a password. Send the invitation email, which is the default, or set a temporary password and give it to them yourself.
  4. Choose their storefront account, as Change a member's storefront account explains. The default gives them the customer account with their email.

The invitation links to /staff/reset-password on your storefront domain and works for 2 hours. A temporary password needs 8 to 128 characters, with a lowercase letter, an uppercase letter, a digit and a special character. Each admin can add 20 members an hour.

Warning

Members sign in with their Coritan account, the same email and password they use on coritan.com. A temporary password is only for an email that is new to Coritan, or an account that has never had a password of its own and that no other organization holds. For anyone else, send the invitation: they keep the password they have, and the console says so under the password if you set one.

On /staff/team, open the menu at the end of the member's row and choose "Change role…". Pick the new role in the "Change role" dialog and confirm it is you if the console asks. The change applies at once. It signs the member out of every console session, so their next session carries the new role. A member moved below Tier 2 also loses any access to a customer's server that a conversation lent them.

You cannot change your own role. Ask another admin.

Change a member's storefront account

Section titled Change a member's storefront account

Signing in to the console also signs a member in to your storefront as a customer, so they can use your product the way customers do. Their storefront account is one of these:

  • By default, the customer account with the member's email. We find it, or create it the first time they sign in to the console.
  • An existing customer account you attach, whatever its email. Use it for someone who was your customer before they joined the team.
  • None. The member uses the console only.

To change it, select the storefront account under the member's name on /staff/team. The "Storefront account" dialog offers "Attach an existing customer", "Create a new account" and "Detach". Confirm it is you if the console asks. Only an active account can be attached, and one account belongs to one member. Detaching keeps the customer account with its services and invoices. Storefront sessions the console opened on the previous account end.

  • Send a password link: choose "Reset password…" in the menu of the member's row. We email them a link to /staff/reset-password that works for 2 hours, and a newer link replaces an older one.
  • Through the API, set a temporary password when email cannot reach them, only for an invited account that has never had a password of its own and that no other organization holds. The console sends a link. A member with their own password gets a link instead, because their password is also their coritan.com password. It signs them out of every console session.
  • Reset their two-factor authentication when they lost their phone, with "Reset two-factor…" in the same menu. It removes their second factor, ends their sessions and forgets the browsers they remembered. They sign in with their password and, if your brand requires two-factor authentication, set it up again straight away.

Each of these needs a step-up. You cannot reset your own two-factor authentication here: turn it off on My account, under Security, with a current code, as Sign in to the staff console explains.

Sign a member out or remove them

Section titled Sign a member out or remove them
  • Sign a member out with "Sign out everywhere…" in the menu of their row to end every console session they have, and the storefront sessions those opened. It also forgets the browsers they remembered, so their next sign-in asks for a code. It needs a step-up, and they can sign in again.
  • Remove a member with "Remove…" in the menu to take away their access to the console and the organization. It ends their sessions and any access to a customer's server that a conversation lent them. Their Coritan account and their storefront account stay. You cannot remove yourself.

Require two-factor authentication

Section titled Require two-factor authentication
  1. Set up your own two-factor authentication first, as Sign in to the staff console explains. The console refuses the rule while you have none: the switch stays off and says "Set up your own two-factor first, from My account".
  2. Open /staff/team and find the "Sign-in policy" panel. Turn on "Require two-factor for staff". The panel's subtitle then reads "Two-factor is required of everyone", and a confirmation asks you to choose "Require two-factor".

From their next sign-in, a member without two-factor authentication must set it up before the console opens, and nobody can turn theirs off while the rule is on. The feature switches on the settings page change the same rule.

While the rule is on, a callout above the team table names the members who have no two-factor authentication yet, with a "Show them" button. The "Two-factor off" tile counts them, and the "Two-factor" column of the table shows each member's state. A member who lost their phone is helped with "Reset two-factor…" in the row's menu.

Choose how long a browser is remembered

Section titled Choose how long a browser is remembered

A member who signs in with a code can tick "Remember this browser", and that browser then skips the code at their next sign-ins (Remember this browser). The password and the step-up for money and server actions are asked as usual. You set how many days a browser stays remembered. The default is 30.

  1. Open /staff/team and find the "Sign-in policy" panel.
  2. In the "Remember this browser" select, choose Never, 7 days, 14 days, 30 days, 60 days or 90 days. A member below admin sees the select but cannot change it, and the tip says "Needs admin or higher".
  3. If you choose fewer days than before, the console asks you to confirm. "Remember browsers for 7 days?" stops the browsers remembered more than 7 days ago from skipping the code at once, and keeps the others until 7 days after they were remembered. "Stop remembering browsers?" stops every remembered browser from skipping the code, so every sign-in asks for one. Choose "Shorten the period", or "Stop remembering" for Never.

Choosing more days does not lengthen the browsers already remembered, which keep the number of days they were remembered for. Through the API you can set any whole number from 0 to 90.

The settings page, /staff/settings, changes the details your storefront, emails and invoices show. They are the same details as on the organization's Settings tab on coritan.com.

  • Brand: the brand name, the time zone as a name such as Europe/London, the support and billing email addresses, the logo and favicon URLs, the primary and secondary colours as #rrggbb, and the terms and privacy URLs. Every URL starts with https://.
  • Legal: the legal name, registration number, tax ID, two-letter country code and registered address.
  • Invoicing: the invoice prefix (1–20 letters, digits, - and _) for new invoices, the default currency, the tax rate from 0 to 100%, the payment terms from 0 to 120 days, and an invoice footer of up to 4,000 characters. The currency must be one Coritan has enabled.

Emptying a text field clears it, except the invoice prefix, country and currency. The custom domain, outgoing mail, organization name and billing mode are on coritan.com only, as Change organization settings explains. The settings page shows the custom domain and whether Coritan has verified it.

The features tab of the settings page, /staff/settings?tab=features, has five switches:

Switch What it does
coupons Lets customers enter coupon codes at checkout. While it is off, the checkout shows no code field and refuses every code. A billing member can also turn it on, as Offer coupon codes explains.
require_mfa Requires two-factor authentication of every member, as in Require two-factor authentication.
require_customer_mfa Requires two-factor authentication of every customer. From their next sign-in, a customer without it must set it up, and no customer can turn theirs off.
maintenance Shows visitors a maintenance page instead of your storefront. Members signed in to the console still see the whole site, and the API keeps answering.
free_port_requests Makes customers on your free tier ask for an extra port through a conversation, as Add a port for a port request explains. Paid servers are not affected.

A Tier 1 member can hold only so many open conversations at once, which keeps the queue moving. The limit is 10 until an admin changes it, and it takes a whole number from 1 to 100.

  1. Open /staff/settings?tab=support-desk, the support desk tab.
  2. In the "Support desk" panel, enter a number in "Tickets Tier 1 may hold at once". The hint says that Take next, replying to an unclaimed ticket and being assigned one all stop at this many open tickets.
  3. Choose "Save claim limit", or "Discard" to keep the old number.

It applies from the next conversation a Tier 1 member takes, and nobody loses a conversation they already hold. Tier 2 and every role above it have no limit. Answer customer conversations explains what a member sees at the limit.

Under the claim limit, the "Who holds what" panel lists everyone who answers tickets: every member except Read-only members and those who have not signed in yet. It shows the open tickets on each person's name against how many they may hold, so you can see who is full and who has room. Members with no tickets still have a row.

Column What it shows
Person The member's name, with their role under it.
Holding Open tickets on their name, as "3 of 10" with a bar for a member who has a limit, and "no limit" for the others.
Last reply When they last replied on one of those tickets. It turns red when that was over 24 hours ago, or when they hold tickets and have not replied yet, because a customer is waiting behind a name.

The people holding the most tickets come first. Select a row to open that person's open tickets in the inbox, or choose "Open the inbox" for every open ticket.

When your storefront, or a site on one of your customers' services, does not answer, our network shows visitors an error page with the status 502 or 504. Until you turn yours on, visitors see Coritan's standard page. Set yours on the error page tab, /staff/settings?tab=error-page:

  • The words: a heading of up to 80 characters and a message of up to 500.
  • How much it tells a visitor: reference (the default) adds one line with the request ID and time for a customer to quote to support, minimal shows only your words and links, and full adds the connection diagram and the diagnostics.
  • The links: a support button (an https:// URL or a mailto: address) and an updates button (an https:// URL, such as your status page), each with a label of up to 40 characters. The page shows a button only when you set its link.
  • The look: a light or dark theme, your own background, card, text and accent colours over it, sharp, soft or round corners, the Inter font or the visitor's own, and one of four styles for the status line.

The logo and accent colour default to your brand's own. Preview the page with either status before you turn it on, since the preview works while the page is off. The Error 502 or Error 504 label, the Coritan footer and our response headers stay on every page, so visitors and support can tell which network answered. A site with an error page of its own keeps its page.

Every email your brand sends uses one design. Set it on the emails tab, /staff/settings?tab=emails:

  • A light or dark theme, with your own accent, background, card and text colours over it.
  • sharp, soft or round corners, and the reader's system font, Inter, or IBM Plex Sans with Syne headings.
  • The header: chosen by the logo's shape (the default, which shows a wide logo alone and a square one beside the brand name), the logo beside the brand name, the logo alone, or the name alone. The logo always keeps its own proportions.
  • A one-line footer of up to 200 characters, and whether to show your legal name and registered address under it.
  • Up to 3 footer links, each with a label of up to 30 characters and an https:// or mailto: address.

The accent colour and logo default to your brand's own. Preview four samples before you save: a welcome email, an invoice, a notice that a service was suspended, and the email a customer gets when your team replies to a conversation. Send yourself a test to see one in a real mail client; each member can send 10 tests an hour.

The marketing tab of the settings page, /staff/settings?tab=marketing, is Settings › Marketing. It holds three sections one after the other: "Tags and pixels", "Conversions" and "Ad spend". Only an admin or the owner reads or changes any of them.

"Tags and pixels" has one panel for Google Analytics 4, Google Ads, Meta, TikTok, Microsoft Advertising, Reddit, X and Google Tag Manager. Paste each platform's ID, use "Clear" to empty a panel and "Save tags" to save every panel at once. Add analytics and ad tags to your storefront says where to find each ID and how to check it.

Send purchases from our servers

Section titled Send purchases from our servers

A browser can block a tag, so the "Conversions" section makes our servers send each paid purchase, renewal, sign-up and refund to the platforms you turn on as well. Send purchases to your ad platforms explains what is sent, and what a buyer's cookie choice changes. This section is where you set it up from the console.

You need an account on each platform, with its pixel or data source already made, and its ID and secret to hand. Set up each platform says where to find them.

The section has one panel for each of Google Analytics 4, Google Ads, Meta Conversions API, TikTok Events API, Microsoft Ads, Reddit Conversions API and X Conversions API. Each panel names its platform and shows its state as a pill: "On", "Off" or "Test mode". Under the pill:

  • "Last delivery": the newest event the platform was sent, its status ("Sent", "Failed" or "Skipped"), when, and the reason when it did not go through.
  • "Last 30 days": how many of your paid first purchases the platform was sent, as "Sent for 87 of 92 paid orders · 94.6%". Renewals, upgrades and free servers are not counted. With no paid orders in the 30 days the percentage reads a lone dash.
  1. Open Settings › Marketing and find the platform's panel under "Conversions".
  2. Fill in its settings. The fields differ by platform:
    • Google Analytics 4: "Measurement ID".
    • Google Ads: "Conversion ID" and "Conversion labels", one each for "Purchase", "Renewal", "Sign-up" and "Lead". Set at least the purchase label.
    • Meta Conversions API: "Pixel ID" and, to use test mode, a "Test event code".
    • TikTok Events API: "Pixel code" and, to use test mode, a "Test event code".
    • Microsoft Ads: "Conversion goal name", "Look back (days)" (1 to 90, 30 unless you set it), "Wait for the browser (minutes)" (60 to 1440, 120 unless you set it) and "List purchases with only an email" (on unless you turn it off).
    • Reddit Conversions API: "Pixel ID".
    • X Conversions API: "Pixel ID" and "Event IDs", one each for "Purchase", "Renewal", "Sign-up" and "Lead", each starting with tw-. Set at least the purchase ID.
  3. Paste the platform's secret under its label: "API secret" for Google Analytics 4, "Access token" for Meta and TikTok, "Conversion access token" for Reddit, and the four "OAuth credentials" for X ("Consumer key", "Consumer secret", "Access token" and "Access token secret"; X needs all four). Google Ads and Microsoft Ads take no secret.
  4. Turn on "Send conversions" (on the Microsoft Ads panel, "Serve the offline conversion file").
  5. Select "Save changes". The footer names what you changed before you save, such as "Unsaved changes: settings and secret". Each panel saves on its own.

You have finished when a toast says "Meta Conversions API turned on", the pill reads "On" and the footer reads "Saved just now". After the next paid order, "Last delivery" shows what was sent and "Last 30 days" counts it. A value the platform's format refuses appears under its own field with the reason, and the field takes focus; nothing is saved.

A saved secret is never shown again. The panel says "A secret is saved" with "Replace" and "Clear…". "Replace" opens the box for a new one. "Clear…" asks first, then turns the platform off and removes the secret, so turning it on again needs a new one.

"Send renewals" is off by default. Turn it on to send each paid renewal as its own conversion.

"Test mode" sends every event as a test:

  • Meta and TikTok send each event with the test event code, so it shows under Test events in the platform and not in live reporting. Test mode needs that code.
  • Google Analytics 4 sends to Google's validation endpoint, and Reddit sends its test flag.
  • Google Ads, Microsoft Ads and X have no test mode. While "Test mode" is on for one of them, nothing is sent.

"Send test event" sends one made-up purchase of one currency unit, named "Test product", with nothing about a person, and shows the event, the status and the platform's error. It uses the saved settings, so the button waits while the panel has unsaved changes. It is not on the Google Ads, Microsoft Ads and X panels. You can send 10 test events an hour for each platform; after that the panel says "At most 10 test events an hour for each integration. Try again later." A test is not logged as a delivery and does not count in "Last 30 days".

Send purchases to Microsoft Advertising

Section titled Send purchases to Microsoft Advertising

Microsoft Advertising fetches a file from us instead of receiving events. When you turn on the Microsoft Ads panel and save for the first time, the panel shows the file's whole address once, under "Copy this address now". Copy it with the copy button into a schedule in Microsoft Advertising, then select "I copied it". We cannot show it again: from then on the panel shows the address with its token hidden, as ********abcd, with "Last fetch" and "Rows in the last file". "Replace address…" makes a new address and the old one stops working at once; it asks you to type replace address first. Put the new address in the schedule, or the file stops updating. Send purchases to Microsoft Advertising has the schedule steps.

Connect ad accounts and add spend

Section titled Connect ad accounts and add spend

The "Ad spend" section reads what you spend on Google Ads, Meta Ads, TikTok Ads, Microsoft Ads and Reddit Ads, and takes spend you type in for any other channel. Return on ad spend, CAC and ROAS are in Analytics, not here. Connect ad accounts and see what ads return explains how orders are matched to a platform and how those figures are worked out.

You need an account on the platform that can open the ad account. We ask only for the right to read cost, clicks, impressions and conversions, and we never change a campaign or a budget. A platform that shows "Not set up" cannot be connected until Coritan adds its sign-in app: the row says "Not set up on this platform yet. Ask Coritan support."

  1. Open Settings › Marketing and find "Platforms" under "Ad spend". It has one row for each platform, with its status, how many accounts we read and when we last read one.
  2. Select "Connect" on the platform's row. The window goes to the platform's own sign-in page. Sign in with the account that can see your ad accounts and allow access. The link works for 15 minutes.
  3. The platform sends you back to Settings › Marketing. A green note says "Connected. Pick the accounts to read." If the sign-in failed, a red note says "did not connect" with the platform's reason; select "Dismiss" and try again.
  4. In the platform's accounts panel, such as "Google Ads accounts", tick the accounts that belong to your brand and select "Save accounts". A sign-in to a manager account can list accounts that are not yours, so pick only your own. You can pick up to 50 accounts for one platform. The footer says how many are picked and "Unsaved changes" until you save.

You have finished when the row reads "Connected" with a count such as "2 of 3 read", and each picked account shows "Last read", "History read back to" a date and its spend for 30 days. We read each picked account every 15 minutes for the last 3 days and once a night for the last 35 days, and a new account reads 13 months of history first.

  • "Connected": we read your accounts.
  • "Pick accounts": you signed in but picked no account yet. Select "Pick accounts".
  • "Failing": an account has had errors and no good read for an hour. The account's own line shows the error. Select "Sync now" on it to try again, and select "Reconnect" if it keeps failing.
  • "Sign in again": the platform ended the sign-in, so nothing is read until you select "Reconnect". The row warns when a sign-in ends within 14 days.
  • "Not connected": nothing is connected. Select "Connect".
  • "Not set up": see above.

Select "Sync now" on a picked account to read it again at once. The read runs in the background, and "Last read" updates within a minute or two. You can read one account 4 times an hour; the fifth time the toast says how long to wait, such as "You can read an account again at most 4 times an hour. Try again in about 1 hour." An account whose sign-in ended needs "Reconnect" first.

Select "Disconnect…" on an account, or "Disconnect…" in the ⋯ menu of a platform's row to remove every account of that platform. A dialog names what you are disconnecting. We delete the saved sign-in and stop reading, and the spend already read stays in your reports. Connect the platform again to read it again.

"Manual spend" is for a channel with no connection, such as X, LinkedIn, Snapchat, Pinterest or Other, or a platform you have not connected.

  1. Choose the "Channel".
  2. Write what the spend was for under "What it was for", up to 120 characters.
  3. Check the "Currency" (three letters, such as USD) and type the "Amount" in whole units and decimals, such as 1250.50. The amount is the total for the days below, and we spread it evenly over them.
  4. Choose the "First day" and the "Last day". One entry covers at most 400 days, and the last day can be at most 31 days ahead.
  5. Select "Add spend".

The entry joins the table with its channel, amount, days and a column "In reports". A toast says, for example, "X Ads spend added". A connected platform refuses an entry for its own channel, with "Google Ads is connected, so its spend is read from the platform." The same refusal comes for days we already read from a platform. If you connect a platform after you typed spend for it, those entries read "Ignored", because the platform's own numbers cover them. To remove an entry, select the bin on its row and confirm with "Remove entry"; reports stop counting it. An organization can keep 1,000 entries.

The SEO tab of the settings page, /staff/settings?tab=seo, sets how your storefront appears in search results and on social cards. Its panels are "Search appearance" (the site name, the home page title and description, and the share picture), "Social profiles", "Verification" (the codes Google, Bing and Yandex ask for), "Robots" (extra blocked paths and "Hold indexing"), "Redirects" and "IndexNow". The first four share one "Save search settings" bar. Redirects, the IndexNow key and "Hold indexing" save as you act. Only an admin or the owner reads or changes it. Set how your storefront appears in search has every field, limit and check.

The developers tab, /staff/settings?tab=developers, lists every API key your organization has, including those created on coritan.com, and revokes them. You can create a key here with a label, a rate limit of 60–100,000 requests an hour (4,000 by default) and an allow-list of up to 50 addresses. We show the key once.

Note

A key made in the console has no scopes, so the Commerce API refuses it. Create a key that needs to work with the scopes it needs, as Create organization API keys shows.

  1. Open /staff/notices and start a new notice. The address /staff/notices?new=1, and the "New notice" command in the console's search, open the form at once.
  2. Choose its kind: info for something to know, maintenance for planned work, or incident for something wrong now.
  3. Write a title of up to 200 characters and, if you like, a body of up to 8,000.
  4. Choose where it shows: over your customers' dashboard, on your public status page, or both.
  5. Choose who sees it on the dashboard: everyone, paying customers or free customers.
  6. Set a start and an end if the notice belongs to a window.
  7. Publish it, or save it as a draft.

A paying customer has at least one service that is not on your free tier, and every other signed-in customer counts as free. Visitors who are not signed in see only notices for everyone. The status page is public, so the audience does not apply there. It lists maintenance and incident notices only, and keeps a resolved one for 24 hours.

A published notice shows from its start, or at once without one, until its end or until you resolve it. Each place shows up to 10 notices at a time.

  • Post an update to follow an incident: investigating, identified, monitoring, update or resolved, with up to 4,000 characters. Customers see the updates under the notice, newest first. An update on a draft publishes it, and a resolved update resolves the notice.
  • Edit a notice to change its words, where it shows, its audience or its window.
  • Resolve a notice to take it down. Reopening it puts it back up. Its updates stay on record.
  • As an admin, delete a notice to remove it and its updates.

Change your own settings on My account

Section titled Change your own settings on My account

My account is each member's own page, at /staff/me. Open it from your name at the foot of the sidebar, from your avatar in the top bar, or with g then m. Every setting on it belongs to you, and nobody else reads or changes it, so every role has all of them, Read-only included. A few need a higher role and say so beside the control.

A list of sections runs down the left, and tabs replace it on a phone. The section stays in the address as tab, such as /staff/me?tab=security.

Section What it holds
Profile Your name, email, role and last sign-in.
Security Your password, two-factor authentication, remembered browsers and sessions.
Notifications Push notifications for your devices and the email digest.
Appearance Table density and the shortcuts.
Saved views Every view you saved.
Linked account Your customer account on the storefront.

The "Profile" panel has a "Name" field of up to 200 characters. Customers see it on your ticket replies. Change it and choose "Save name". Under the field, the panel lists your email, your role, when you joined and your last sign-in, or "This is your first".

The "Security" section holds four panels: "Password", "Two-factor", "Remembered browsers" and "Sessions". Sign in to the staff console explains each of them: setting up two-factor authentication, remembering a browser and ending sessions.

Push notifications tell you about the work on a device you choose, with the console closed. They are news about a new ticket, a customer reply, a refund request, an order, a dispute or an abuse pattern. The bell holds fired alerts only, so push is where the rest reaches you.

  • Use Chrome, Edge, Firefox, or Safari 16 or later. A browser that cannot receive notifications says so in a note.
  • On an iPhone or iPad, Apple allows notifications only for a site added to the Home Screen. Open the console in Safari, tap Share, choose Add to Home Screen, open the console from the Home Screen, sign in, and come back to this page. The note on the page says the same.
  • Your brand needs a notification service. If it has none, the note says "This brand cannot send notifications yet."
  1. Open My account and choose "Notifications".
  2. In the "Push notifications" panel, switch on "Notifications on this browser". The browser asks for permission. Allow it.
  3. The toast says "Notifications are on for this browser", and the browser is listed under "Your devices" with "This browser" beside it. If you said no, the note says "Notifications are blocked for this site in the browser". Allow them in the browser's settings for the site, then switch the setting on again.
  4. Under "What you are told about", switch on the kinds you want, as the table below lists.
  5. Choose "Send a test" under "Your devices" to check. It sends "Test notification" to every device you have, whatever the switches say, and the toast says how many took it, such as "Test sent to 1 of 1 device".

Do the same on your phone to get notifications there. To stop on one browser, switch off "Notifications on this browser". To remove another device, choose "Remove" on its row. A member keeps up to 10 devices, and adding another drops the oldest. A device the push service has lost is removed on its own.

Switch You are told when Lowest role On at the start
New tickets A ticket arrives: "New ticket #1842: Server will not start". Tier 1 support Yes
Customer replies A customer replies: "Alex replied to #1842". On a ticket assigned to someone, only that person is told. Tier 1 support Yes
Refund requests A refund request arrives: "Refund request: $9.00 from Alex". Tier 3 support Yes
New orders A paid invoice leaves services to build: "New order #12: $9.00". Free invoices and renewals send nothing. Tier 3 support No
Disputes opened A dispute opens: "Dispute opened: $25.00". Billing Yes
Abuse patterns A new abuse pattern waits for review: "Abuse pattern to review: example.com". Tier 3 support Yes
Alerts An alert fires. The message is the alert's title. Read-only Yes

A switch your role cannot read is dimmed and says what it needs, such as "Needs Tier 3 support or higher". When more than five events of one kind arrive together, one message stands for all of them, such as "7 new tickets". Selecting a message opens the console page it is about, in a console tab that is already open when there is one. We send each message once and do not retry it.

The email digest is one email with the day or the week in it. It holds the payments, refunds and net revenue, the new customers, orders and tickets, the median first reply, each against the period before, where the period's visits and orders came from, what needs attention, and the alerts that fired. It goes to billing, admin and owner members only, because it holds money figures.

  1. Open My account and choose "Notifications".
  2. In the "Email digest" panel, choose Off, Daily or "Weekly (Mondays)". A member below billing can choose Off only. The other two are dimmed, with "Needs billing or higher" beside them.
  3. Choose "Preview…" to see the email as it would arrive. The "Digest preview" drawer shows the last period that ended, with a Daily and a Weekly choice.

The panel says when it is sent, such as "Sent at 07:00 Europe/London". That is 07:00 in the time zone of your brand's settings. A daily digest comes every day and covers yesterday against the day before. A weekly digest comes on Monday and covers the Monday to Sunday that ended against the 7 days before. A digest you choose after 07:00 starts with the next send.

The "Acquisition" section follows the customers, orders and support figures. It shows the visits, sign-ups, paid orders and new customers of the period, the revenue in each currency (never added across currencies), and the three channels with the most orders, each against the period before. A paid order is an order that is not free and whose invoice is paid. The section is left out when your storefront had no visits and no orders in the period. Read the acquisition report explains the figures.

The alerts in the digest are the ones that fired in the period and went to the bell, which is the "In the bell" channel of an alert. Alerts you tested are left out. Set up alerts explains them.

The "Density" panel offers Comfortable and Compact. Compact trims the padding of every table row, so more of a list fits on screen. It applies on this browser only. The "Shortcuts" panel lists the keys, with "All shortcuts" to open the full sheet. Once you hide the keyboard card on the Desk, a "Show the welcome card again" button appears here and brings it back. The staff console lists the shortcuts.

The "Saved views" panel lists the views you saved, with the list each one belongs to, whether it is shared with the team or only yours, whether it is pinned and when it changed. Choose "Open" to put a view on its list. The row's menu has "Rename…", "Pin" or "Unpin", and "Delete…", which asks you to confirm with "Delete view". To save a view, use the Views menu on a list, as The staff console explains.

The "Your customer account" panel says which storefront account the console signs you in to, as Change a member's storefront account explains. It links to the storefront ("Open the storefront") and to your account as a customer ("See yourself as a customer"). When you have a storefront account and Tier 1 support or higher, the "Servers I can access" panel lists the customer servers that account is a subuser on, with "Open" and "Leave…". Answer customer conversations explains how a ticket adds a server there.

Changes take effect at once, and the audit log records each one with who made it, as Read the organization audit log explains. A changed error page goes out to our network straight away.

User is already a member
That email is on the team already. Change their role instead.
That email belongs to a suspended or closed platform account
The person's Coritan account is suspended or closed, so it cannot join a team. Invite another address, or ask them to contact Coritan support.
Set a temporary password or send an invite email
The email is new to Coritan, so the member needs a way to sign in. Send the invitation or set a temporary password.
That account already has a password, and joining a team does not change it. Leave the password out, or reset it from the member's row.
The person already has a Coritan account with its own password. Choose to email them a link instead; they sign in with the password they have.
This member's account has a password of its own. Send them a reset link instead; only they can choose a new one.
Only an account your invitation made, which nobody has claimed yet, takes a temporary password. Send a password link.
Use transfer-ownership to assign owner
You chose the owner role. Only Coritan support transfers ownership.
The owner's role moves only through transfer-ownership
The owner's membership does not change from the console. The same goes for The owner cannot be removed; transfer ownership first and The owner's second factor is not reset from here. Contact support to transfer ownership.
Ask another admin to change your own role
Admins cannot change their own role or remove themselves (You cannot remove yourself). Another admin has to do it.
Turn off your own two-factor from My account
You tried to reset your own second factor. Turn it off on /staff/me with a current code instead.
Turn on your own two-factor before requiring it of the team
Set up your own two-factor authentication, then turn on the rule.
Only an active customer account can be attached
The account is suspended, banned or closed. Pick another account, or reactivate this one first.
That customer account already belongs to another team member
One account belongs to one member. Detach it from the other member first.
A customer account with their email already exists; attach that one instead
Choose to attach an existing account, and pick the one with their email.
Invalid or expired reset token
The link is more than 2 hours old, or a newer link replaced it. Send the member a new password link.
429 with rate_limited
You added 20 members, or sent 10 test emails, in the last hour. Wait the number of seconds in Retry-After.
Admin access required
The task needs an owner or admin. Notices need Tier 3 support or above, and a lower role gets Support access required.
Unknown timezone
Use a time zone name from the IANA database, such as Europe/London or America/New_York.
Currency CHF is not enabled on the platform
Choose a currency Coritan has enabled, or contact support to ask for another.
The invoice prefix is letters, digits, - and _ only
Remove spaces and other characters from the prefix.
Unknown feature switch: invoices
Only the five switches in Turn features on or off exist.
The brand's mail server did not accept the test email
Check how your email leaves, as Change organization settings explains, then send the test again.
The notice must end after it starts
Move the end after the start, or clear one of them.
The notice does not show on the status page
The status page lists maintenance and incident notices only. Show an info notice on the dashboard.
The "Notifications on this browser" switch is off and cannot be turned on
Read the note under it. The browser cannot receive notifications, or it blocks them for this site, or your brand cannot send them yet, or you are on an iPhone or iPad and have not added the console to the Home Screen.
Turn on notifications on a device first
You chose "Send a test" with no device saved. Switch on "Notifications on this browser" first.
429 with rate_limited after "Send a test"
Each member may send 10 test notifications an hour. Wait the number of seconds in Retry-After.
Meta pixel id must be 8 to 20 digits (or a similar sentence about another platform's ID)
The value under that field does not match what the platform issues. Copy it again from the platform, as Set up each platform shows.
Set the Pixel ID before turning Meta Conversions API on.
A platform needs its required settings, and its secret where it takes one, before "Send conversions" can be on. The sentence names the one that is missing.
At most 10 test events an hour for each integration. Try again later.
You sent 10 test events to that platform in the last hour. Wait, or read the platform's own test view for the events already sent.
<Platform> cannot be connected yet. Its app credentials have not been added to this platform.
Coritan has not set up that platform's sign-in app. The row reads "Not set up". Ask Coritan support.
You can read an account again at most 4 times an hour.
Each account allows 4 reads an hour from "Sync now". The toast says how long to wait. The scheduled reads are not counted.
Digests hold money figures. Billing and up can receive them.
Only billing, admin and owner members can choose a daily or weekly digest and preview one. Any member can choose Off.
The weekly digest has not come
It comes on Monday at 07:00 in your brand's time zone, and covers the week before. A digest chosen after 07:00 starts with the next send.

These routes live under https://api.coritan.com/api/v1/orgs/{org_slug}/staff/, and take a console session or a member's access token as The staff console explains. A step-up needs a console session. The reference lists them under Staff team, the assignee list, Settings in the staff console, API keys and Staff notices.

Shell
curl https://api.coritan.com/api/v1/orgs/acme/staff/team/detail \
  -H "Authorization: Bearer $STAFF_TOKEN"

The answer has members, each with id, role, email, name, last_staff_login_at, mfa_enabled, can_sign_in, is_me and customer_link, plus the roles you can assign, my_role and the policy with require_mfa and remember_device_days. GET /staff/team is the short list the inbox picks an assignee from: each member's user_id, member_id, email, name, role, can_sign_in and is_me.

Shell
curl -X POST https://api.coritan.com/api/v1/orgs/acme/staff/team \
  -H "Authorization: Bearer $STAFF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email": "alex@example.com", "name": "Alex Example", "role": "support_tier2"}'

The body takes email, name (up to 200 characters), role (support_tier1 when you leave it out), send_invite_email (true when you leave it out), password, customer_link (auto, existing, create or none) and customer_id for existing. It answers 201 with the member, created_user (whether the email was new to Coritan) and invite_sent. A password for an account that already has one of its own answers 409, and nothing changes. invite_sent does not confirm delivery: if no email arrives, send a password link.

The other routes act on one member, by the id in members:

Route Body What it does
PATCH /staff/team/{member_id} role Changes the role and answers id, user_id and role.
DELETE /staff/team/{member_id} None Removes the member.
POST /staff/team/{member_id}/revoke-sessions None Signs the member out, forgets their remembered devices and answers how many sessions ended in revoked. Needs a step-up.
POST /staff/team/{member_id}/reset-password send_email (true when you leave it out), password Sends a link, sets a password, or both, and answers link_sent. A password for an account with a password of its own answers 409.
POST /staff/team/{member_id}/reset-mfa None Removes the second factor, forgets the member's remembered devices and answers had_mfa and sessions_ended.
GET /staff/team/{member_id}/customer-link None Answers the storefront account: mode (auto, linked or none), customer_id and customer.
PUT /staff/team/{member_id}/customer-link mode, customer_id existing attaches customer_id, create makes an account with the member's email, auto goes back to the default and none detaches.
DELETE /staff/team/{member_id}/customer-link None Makes the member console-only.

GET /staff/team/policy answers require_mfa and remember_device_days. PATCH sets either or both, as in {"require_mfa": true} or {"remember_device_days": 14}, and answers the whole policy. remember_device_days takes 0 to 90.

Shell
curl -X PATCH https://api.coritan.com/api/v1/orgs/acme/staff/settings \
  -H "Authorization: Bearer $STAFF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"support_email": "support@example.com", "payment_terms_days": 14, "features": {"maintenance": true}}'

GET /staff/settings answers the fields in Change the brand's details by their names (company_name, legal_name, registration_number, tax_id, registered_address, country_code, support_email, billing_email, terms_url, privacy_url, logo_url, favicon_url, primary_color, secondary_color, invoice_prefix, invoice_footer, default_currency, tax_rate, payment_terms_days and timezone), with custom_domain, custom_domain_verified and the five features. PATCH takes any of them, and features as an object of switch names and true or false. It answers what changed, each field with from and to, and the new settings. A body with no fields answers 400 Nothing to change.

GET /staff/settings/support-desk answers tier1_claim_limit with the default_tier1_claim_limit, min and max. PATCH with {"tier1_claim_limit": 15} changes it.

Preview the error page and emails

Section titled Preview the error page and emails

GET /staff/settings/error-page answers the saved config, the brand defaults it falls back on, the effective page and the preview_host it names. PATCH takes enabled, heading, message, detail, logo_url, accent_color, support_url, support_label, updates_url, updates_label, theme, background_color, surface_color, text_color, radius, font and status_style. A field sent as null goes back to the default, and an unknown field answers 422. To see a page before you save it:

Shell
curl -X POST https://api.coritan.com/api/v1/orgs/acme/staff/settings/error-page/preview \
  -H "Authorization: Bearer $STAFF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"error_page": {"heading": "We will be right back", "detail": "minimal", "theme": "dark"}, "status": 504}' \
  -o preview.html

The answer is the page as HTML. Leave out error_page to preview the saved one.

GET /staff/settings/email-design answers the saved design, its defaults and the options each field takes. PATCH takes theme, accent_color, background_color, surface_color, text_color, radius, font, header, logo_url, footer_text, links (a list of label and url) and show_address, and null returns a field to the default. POST /staff/settings/email-design/preview with email_design and a sample (welcome, invoice, action or reply) answers the email as HTML. POST /staff/settings/email-design/test with the same body sends it to your own address and answers sent, to and sample.

GET /staff/settings/api-keys lists every key with its label, permissions, rate_limit_per_hour, ip_whitelist, is_active, last_used_at and created_at. POST with label, rate_limit_per_hour and ip_whitelist answers 201 with the key in raw_key, and it takes no scopes. DELETE /staff/settings/api-keys/{key_id} revokes a key and answers {"ok": true}, or 404 API key not found.

Shell
curl -X POST https://api.coritan.com/api/v1/orgs/acme/staff/notices \
  -H "Authorization: Bearer $STAFF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"kind": "maintenance", "title": "Network maintenance on Sunday", "placement": "both", "status": "live", "starts_at": "2026-10-04T01:00:00Z", "ends_at": "2026-10-04T02:00:00Z"}'
Field Values Default
kind info, maintenance or incident info
title 1–200 characters Required
body Up to 8,000 characters None
audience all, paying or free all
placement dashboard, status or both dashboard
status draft, live or resolved draft
starts_at, ends_at Times in UTC None

Send times in UTC with a Z: we drop any other offset without converting the time. It answers 201 with the notice.

GET /staff/notices lists up to 200 notices, newest first, each with its updates and is_showing, which is true while customers can see it. status narrows the list to draft, live or resolved. PATCH /staff/notices/{notice_id} takes the same fields, plus clear_starts_at and clear_ends_at to remove a start or an end. POST /staff/notices/{notice_id}/updates with state and body posts an update and answers 201. DELETE /staff/notices/{notice_id} deletes the notice.

Save a browser for push notifications

Section titled Save a browser for push notifications

The routes under /staff/push/ belong to the member who calls them: a member reads, changes and deletes only their own devices and settings, and a Read-only member may use all of them. A call with no member behind it, such as an API key, answers 403. The reference lists them under Staff push.

GET /staff/push/config answers supported and public_key. A browser subscribes with that key. supported is false, and public_key is null, when your brand's console has no notification worker. Then save the subscription the browser makes:

Shell
curl -X POST https://api.coritan.com/api/v1/orgs/acme/staff/push/subscriptions \
  -H "Authorization: Bearer $STAFF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"endpoint": "https://push.example.net/send/abc123", "p256dh": "BNc...", "auth": "k8J..."}'

endpoint is the push service address the browser gave the subscription, up to 1,024 characters, over https and on a push service we allow. p256dh and auth are the browser's keys in base64url. user_agent is read from the request when you leave it out. A new browser answers 201. Sending the same browser again updates its keys and answers 200 with the same device. An address we do not accept answers 422.

Route What it does
GET /staff/push/subscriptions Your devices, oldest first, each with id, label (such as Safari on iPhone), created_at and last_sent_at.
DELETE /staff/push/subscriptions/{subscription_id} Stops notifications to one of your devices. Another member's device answers 404.
GET /staff/push/preferences The kinds of event, each with kind, label, enabled, allowed and reason.
PUT /staff/push/preferences Turns kinds on or off with a body such as {"kinds": {"order_placed": true}}, and answers the same list. A kind you leave out keeps its setting.
POST /staff/push/test Sends "Test notification" to every device of yours, whatever the kinds say. It answers devices and sent.

A member keeps up to 10 devices, and saving another drops the oldest. The kinds are ticket_new, ticket_reply, refund_requested, order_placed, dispute_opened, abuse_pattern and alert_fired, and order_placed is off until you turn it on. A kind your role cannot read has allowed set to false, enabled set to false and, in reason, the role it needs, such as Needs Tier 3 support or higher. Turning one on answers 403 with that reason, and turning it off always works. An unknown kind answers 422 and names the kinds there are. POST /staff/push/test answers 409 when you have no device and 429 after 10 tests an hour.

A message is title, body, url (an address on your brand's own host) and tag. Messages with the same tag replace each other on a device.

GET /staff/digest answers the digest you get:

JSON
{
  "kind": "daily",
  "can_receive": true,
  "reason": null,
  "send_time": "07:00",
  "timezone": "Europe/London",
  "weekly_day": "Monday"
}

kind is off, daily or weekly. can_receive is false below billing, and reason then says who can. PUT /staff/digest with {"kind": "weekly"} chooses one and answers the same shape. Any member can choose off. Choosing daily or weekly below billing answers 403 with Digests hold money figures. Billing and up can receive them. A member with no row on the team, such as an API key, answers 409.

GET /staff/digest/preview?kind=daily answers the email the member would get as an HTML page, built from the last period that ended: yesterday for daily, or the last whole week from Monday to Sunday for weekly. It needs billing or higher, answers 403 below that, and takes 30 previews an hour. The page carries a sandbox policy and is never cached, so show it in a sandboxed frame.

API operations on this page

MethodPathWhat it does
GET/api/v1/orgs/{org_slug}/staff/teamThe people a ticket can be assigned to: every member of this brand
POST/api/v1/orgs/{org_slug}/staff/teamStaff invite member
GET/api/v1/orgs/{org_slug}/staff/team/detailEveryone on the brand, with role, last sign-in and whether they can sign in at all
GET/api/v1/orgs/{org_slug}/staff/team/policyStaff team policy
PATCH/api/v1/orgs/{org_slug}/staff/team/policyStaff set team policy
PATCH/api/v1/orgs/{org_slug}/staff/team/{member_id}Staff change role
DELETE/api/v1/orgs/{org_slug}/staff/team/{member_id}Staff remove member
GET/api/v1/orgs/{org_slug}/staff/team/{member_id}/customer-linkWhich storefront customer account a teammate is, if any
PUT/api/v1/orgs/{org_slug}/staff/team/{member_id}/customer-linkAttach a teammate to an existing customer account, or make them one with their email
DELETE/api/v1/orgs/{org_slug}/staff/team/{member_id}/customer-linkMake a teammate console-only
POST/api/v1/orgs/{org_slug}/staff/team/{member_id}/reset-mfaFor a teammate who lost their phone: remove their second factor and end their sessions
POST/api/v1/orgs/{org_slug}/staff/team/{member_id}/reset-passwordStaff reset member password
POST/api/v1/orgs/{org_slug}/staff/team/{member_id}/revoke-sessionsEnd every staff console session a teammate has open
GET/api/v1/orgs/{org_slug}/staff/settingsStaff get settings
PATCH/api/v1/orgs/{org_slug}/staff/settingsStaff patch settings
GET/api/v1/orgs/{org_slug}/staff/settings/api-keysStaff list API keys
POST/api/v1/orgs/{org_slug}/staff/settings/api-keysA key for the brand's own integrations
DELETE/api/v1/orgs/{org_slug}/staff/settings/api-keys/{key_id}Staff revoke API key
GET/api/v1/orgs/{org_slug}/staff/settings/email-designStaff get email design
PATCH/api/v1/orgs/{org_slug}/staff/settings/email-designChange how the brand's email looks
POST/api/v1/orgs/{org_slug}/staff/settings/email-design/previewStaff preview email design
POST/api/v1/orgs/{org_slug}/staff/settings/email-design/testStaff test email design
GET/api/v1/orgs/{org_slug}/staff/settings/error-pageStaff get error page
PATCH/api/v1/orgs/{org_slug}/staff/settings/error-pageReword the page, pick its level of detail, switch it on or off
POST/api/v1/orgs/{org_slug}/staff/settings/error-page/previewThe page as a visitor would get it, for a block that is not saved yet
GET/api/v1/orgs/{org_slug}/staff/settings/seoStaff get seo
PUT/api/v1/orgs/{org_slug}/staff/settings/seoSave the brand's search settings
POST/api/v1/orgs/{org_slug}/staff/settings/seo/indexnow-keyMake a new IndexNow key
DELETE/api/v1/orgs/{org_slug}/staff/settings/seo/indexnow-keyRemove the IndexNow key
POST/api/v1/orgs/{org_slug}/staff/settings/seo/indexnow/submitSend every page in the sitemap to IndexNow now
GET/api/v1/orgs/{org_slug}/staff/settings/seo/test-pathStaff test path
GET/api/v1/orgs/{org_slug}/staff/settings/support-deskStaff get support desk
PATCH/api/v1/orgs/{org_slug}/staff/settings/support-deskStaff patch support desk
GET/api/v1/orgs/{org_slug}/staff/noticesStaff list notices
POST/api/v1/orgs/{org_slug}/staff/noticesStaff create notice
PATCH/api/v1/orgs/{org_slug}/staff/notices/{notice_id}Staff patch notice
DELETE/api/v1/orgs/{org_slug}/staff/notices/{notice_id}Staff delete notice
POST/api/v1/orgs/{org_slug}/staff/notices/{notice_id}/updatesA line on the timeline
GET/api/v1/orgs/{org_slug}/staff/push/configStaff push config
GET/api/v1/orgs/{org_slug}/staff/push/preferencesStaff push preferences
PUT/api/v1/orgs/{org_slug}/staff/push/preferencesStaff push set preferences
GET/api/v1/orgs/{org_slug}/staff/push/subscriptionsStaff push devices
POST/api/v1/orgs/{org_slug}/staff/push/subscriptionsSave the calling member's browser for notifications
DELETE/api/v1/orgs/{org_slug}/staff/push/subscriptions/{subscription_id}Stop sending notifications to one of the calling member's devices
POST/api/v1/orgs/{org_slug}/staff/push/testSend "Test notification" to every device of the calling member, whatever their kinds say
GET/api/v1/orgs/{org_slug}/staff/digestWhich digest the signed-in member gets: off, daily or weekly
PUT/api/v1/orgs/{org_slug}/staff/digestChoose the signed-in member's digest: off, daily or weekly
GET/api/v1/orgs/{org_slug}/staff/digest/previewStaff preview digest