Skip to content
Coritan Docs

Manage the staff team and console settings

Add team members, change their roles and sign-in, and set your brand's details, feature switches, error page, emails, API keys and notices.

View as Markdown

Three 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 and your API keys. The notices page, /staff/notices, posts the announcements, maintenance windows and incidents your customers read.

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

Task Lowest role Step-up
Add a member, sign a member out, or require two-factor authentication 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 Admin No
Post, change and resolve notices Tier 3 support No
Delete a notice Admin 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 start an invitation.
  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. If the person already has a Coritan account, send the invitation and leave the temporary password empty: a temporary password replaces the password of their Coritan account.

On /staff/team, choose the member's new role 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, open the member on /staff/team, then attach an existing account, create one with their email, or detach the account. 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. We email them a link to /staff/reset-password that works for 2 hours, and a newer link replaces an older one.
  • Set a temporary password when email cannot reach them. It signs them out of every console session.
  • Reset their two-factor authentication when they lost their phone. It removes their second factor and ends their sessions. 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. A new password is also their password on coritan.com. You cannot reset your own two-factor authentication here: turn it off on the My account page, /staff/me, with a current code.

Sign a member out or remove them

Section titled Sign a member out or remove them
  • Sign a member out to end every console session they have, and the storefront sessions those opened. It needs no step-up, and they can sign in again.
  • Remove a member 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.
  2. On /staff/team, turn on the rule that every member needs two-factor authentication.

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.

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. Set it on the support desk tab, /staff/settings?tab=support-desk. 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.

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: the logo beside the brand name, the logo alone, or the name alone.
  • 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 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.
  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.

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.
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.

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. 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. 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 and answers how many sessions ended in revoked.
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.
POST /staff/team/{member_id}/reset-mfa None Removes the second factor 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 PATCH with {"require_mfa": true} sets the rule.

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.

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/policyRequire a second factor of everyone on the brand
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-sessionsStaff revoke member sessions
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/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