The staff console
The console and staff API your team uses to look after customers, servers, billing and support, each member within their role.
The staff console is where your team looks after customers from day to day: their accounts, servers and services, invoices and refunds, and their support conversations. Every member of your organization can sign in to it, and their role decides what they see and change. When Coritan serves your storefront's site, the console is part of it at /staff/ on your storefront domain; if you build your own storefront, the same staff routes of the Organization API are there for your team's tools.
What your team can do
Section titled What your team can do- Sign in to the staff console: passwords, two-factor authentication, remembered browsers, the step-up check and sessions.
- Look after customers: find an account, correct it, add credit, end its sessions, keep notes and see the storefront as the customer does.
- Handle billing: invoices, payments, refund requests, disputes, failed charges, coupons, orders and the services customers hold.
- Manage customer servers: find any server, then its power, console, files, backups, databases and installs.
- Watch your game network's deliveries: which ranks and credit packs reached the game, sending one again, players and whether your network still reports.
- Stop a wave of abusive sign-ups: patterns across new accounts, blocked email domains, networks and server names, and one action over every matching account.
- Answer customer conversations: the support inbox, its queue, escalation between tiers and access to a customer's logs or server.
- Watch visitors on the Live page: who is on the site now, how far they get and what sold today.
- Set up alerts: rules that watch a queue or a figure and tell the team through the bell, email, Discord and push.
- Build campaign links and run referrals: the Marketing page's Campaigns and Referrals tabs.
- Manage subscribers, email flows, reviews and announcements: the Marketing page's other three tabs.
- Manage the staff team and console settings: members and roles, the brand's settings, email design, the notices customers see and each member's own account page.
- Run a community with a server list, forum and guides: moderating what customers post.
- Moderate the community chat: hide messages, work through reports, mute, ban and block, and pause web chat during a raid.
- Run Mail Hosting for your customers: the console's mail pages use the same routes.
Find your way around
Section titled Find your way aroundThe console opens on the Desk. A sidebar, a top bar, a search with commands, keyboard shortcuts and saved views then get you to any page and back. The same tools work on every list and every page.
A list shows its rows first, and the tiles and counts above it fill in a moment later. Rows are current when the page asks for them. A figure that counts a whole directory, such as every customer, order or invoice of your brand, is worked out once for your whole team and can be a little old. Each page gives its figures' usual age. On the first screen after the console has been quiet for a while, a figure can be older than that, by up to 30 minutes for the slowest, and it catches up within a few seconds.
The Desk
Section titled The DeskThe Desk is the console's home page, at /staff. Press g then h from anywhere to reach it. It shows what needs a person first, worst first, and every row opens its record.
The page greets you by first name. "Updated 3m ago" beside the refresh button says how old the numbers are. The counts read again every minute while the tab is visible. The counts for your brand as a whole, such as the Desk's tiles and the counts beside sidebar items, are normally no more than 20 seconds old, and on the first screen after a quiet spell they can be up to 200 seconds old. The numbers that are yours, such as the bell and the tickets assigned to you, are always current. The audience switch at the top of the sidebar (Paying, Everyone or Free) sets which customers every number on the page covers.
| Part | What it shows | Who sees it |
|---|---|---|
| A callout above the tiles | Names anything late: tickets past their first-reply target, servers that need attention, orders stuck for over an hour, invoices whose automatic retries all failed. | Each item follows the role of the page it opens. |
| Needs attention | A tile for each queue that needs a person, described below. | Each tile follows its page. |
| Waiting for a first reply and My tickets | The ticket queue in the order the Take next button hands tickets out, and the tickets on your name. | Tier 1 support or higher |
| How the brand is doing | Six figures for Today, 7 days or 30 days, each set against the period before. | Billing |
| Stuck orders and Recent orders | Paid orders not built yet, and the newest orders. | Every role |
| Patterns to review | The open abuse patterns, and the ones blocked automatically whose block has not lifted. The panel is there only while there is one. | Tier 3 support or higher |
| Latest across the brand | One feed of orders, staff actions, notices and fired alerts, newest first. | Every role, with the limits below |
| Latest alerts | The five newest alerts, unread ones in bold, and a button that opens Alerts. | Every role |
| Keyboard | A card of the keys that matter most. | Every role |
The tiles are in order of need: red tiles with work in them first, then amber ones, then the quiet ones. A tile at zero turns dashed and muted, so only the tiles that need someone are loud. Each tile opens the list behind it, already filtered.
| Tile | Opens | Lowest role | Red when |
|---|---|---|---|
| Tickets waiting | The inbox | Tier 1 support | The oldest ticket has waited over an hour. Otherwise amber. |
| Past SLA | The open tickets that are late | Tier 1 support | Always, while above zero. |
| Refunds waiting | Refunds | Tier 3 support | Never. Amber. |
| Overdue invoices | Invoices that are overdue | Tier 3 support | An invoice has used every automatic retry. Otherwise amber. |
| Stuck orders | Orders that are stuck | Read-only | Never. Amber. |
| Servers to check | Servers that need attention | Tier 2 support | Always, while above zero. |
| Abuse patterns | Abuse | Tier 3 support | Never. Amber. |
| Community reports | Moderation | Read-only | Never. Amber. Chat reports show as "more in chat" for Tier 1 support or higher. |
The two ticket panels sit side by side, so the queue is on the first screen. Waiting for a first reply shows "Live" with a dot while the console follows the inbox. When the link drops it shows "Reconnecting", and the page reads the queue again every 8 seconds. In My tickets, the Take next button claims the ticket at the front of the queue and opens it. It stays off while nobody is waiting, and at your claim limit it stays off and says how many tickets you hold. Below Tier 1 support, a note says that tickets open for the support tiers and higher.
In How the brand is doing, Today is set against yesterday, 7 days against the 7 days before, and 30 days against the 30 days before. The choice stays in the address as range. Each tile shows an arrow and a percentage, green when the change is better and red when it is worse. A rise in refunds or in the first reply time counts as worse. Net revenue, Payments, Refunds, New customers and Orders placed also draw a small line of the period. Money in a second currency is named under the tile and never added in. A tile opens Analytics for the same period, set against the one before.
In the feed, admins and owners read every staff action. Tier 1 support and higher read their own actions, and Tier 3 support and higher also see notices. The link under the feed opens Activity for an admin, and your own actions for everyone else.
Select the cross on the Keyboard card to hide it. It stays hidden on this browser until you choose "Show the welcome card again" under My account, Appearance.
The sidebar, the top bar and the bell
Section titled The sidebar, the top bar and the bellThe sidebar groups the pages by the work. A page that has a lowest role is not shown to a role below it. The Inbox shows to every role but opens tickets for Tier 1 support or higher, and a Read-only member reads a note that says so. A number beside a page comes from the operations summary: open tickets, servers that need attention, refund requests waiting, unread alerts, orders that need a person, unpaid invoices and open community reports. Press g, then the key in the table, within a second to open a page.
| Group | Page | Key | Shown from |
|---|---|---|---|
| Operations | Home | h | Read-only |
| Operations | Inbox | i | Read-only |
| Operations | Servers | s | Tier 2 support |
| Operations | Refunds | r | Tier 3 support |
| Operations | Activity | a | Tier 1 support |
| Operations | Live | w | Tier 1 support |
| Operations | Alerts | x | Read-only |
| Billing | Orders | o | Read-only |
| Billing | Invoices | v | Tier 3 support |
| Billing | Payments | p | Billing |
| Billing | Coupons | u | Billing |
| People | Customers | c | Read-only |
| People | Abuse | b | Tier 3 support |
| People | l | Read-only | |
| People | Team | t | Read-only |
| Community | Moderation | d | Read-only |
| Community | Chat | k | Tier 1 support |
| Community | Notices | n | Read-only |
| Insight | Analytics | y | Billing |
| Insight | Marketing | f | Billing |
| Brand | Settings | e | Admin |
Your name at the foot of the sidebar opens My account (g then m), and the sign-out button is beside it. Collapse sidebar folds the sidebar to icons, and Expand sidebar opens it again; the choice stays on this browser. Between 1024 and 1279 pixels wide the sidebar folds on its own until you choose. On a phone the sidebar is a drawer behind the menu button.
The top bar holds the search button, a Storefront link that opens your site in a new tab, the bell and your avatar, which opens My account. The bell shows how many alerts you have not read, "9+" above nine and nothing at zero. It opens Alerts. The bell holds fired alerts only. News about the work, such as a new ticket or a refund request, reaches you through push notifications and the Desk's feed, as Manage the staff team and console settings explains.
Search and commands
Section titled Search and commandsPress Ctrl K (Cmd K on a Mac) anywhere, or select the search button in the top bar. On a page that has no search box of its own, / opens it too. Press the same keys again to close it, or press Esc. The search loads in the background a moment after the page settles, so it can take a moment to open only right after a page loads. If it could not load, the console says so, and the next press tries again. When trying again cannot work, the message tells you to reload the page.
With nothing typed, the search shows the pages you opened last, the records you opened last, the commands and every page you may open. As you type, it scores the pages by name and keyword ("tickets" finds the Inbox), adds your recent records, and after a short pause asks the console search for customers, orders, servers, invoices, tickets and coupons. Search across the console says what each one matches. On a large store a word that many customers, orders or invoices match lists the newest matches, paying customers first, so type more of the address, name or number to find an older one. Use the arrow keys to move and Enter to open the highlighted result. When nothing matches, Enter searches the customer directory for what you typed.
A few forms open a record straight away:
#1842opens the ticket with that number.- An invoice number, such as letters followed by digits, finds that invoice.
- A server UUID opens that server.
- A bare number offers the ticket, customer, order and invoice that carry it.
A prefix narrows the search to one kind of record. Type it before the words.
| Prefix | Searches | Lowest role |
|---|---|---|
ticket: |
Tickets, by number or subject | Tier 1 support |
inv: |
Invoices, by number | Tier 3 support |
server: |
Servers, by hostname or server UUID | Read-only |
email: |
Customers, by email address | Read-only |
ip: |
Customers, by the IP address they signed up from. It needs the whole address. | Read-only |
Type > to list commands only. A command also shows among the pages when its words match what you typed. A role that cannot use a command is not offered it.
| Command | What it does | Lowest role |
|---|---|---|
| Open the live view | Opens Live. | Tier 1 support |
| Open alerts | Opens Alerts. | Read-only |
| Open the refunds waiting | Opens Refunds. | Tier 3 support |
| Open overdue invoices | Opens Invoices filtered to the overdue ones. | Tier 3 support |
| Open servers needing attention | Opens Servers filtered to the ones that need attention. | Tier 2 support |
| New notice | Opens Notices with the new notice form open. | Tier 3 support |
| New coupon | Opens Coupons with the new coupon form open. | Billing |
| Take the next ticket | Claims the ticket at the front of the queue and opens it. | Tier 1 support |
| Compact density or Comfortable density | Switches the table density to the other one. | Read-only |
Keyboard shortcuts
Section titled Keyboard shortcutsPress ? anywhere to open "Shortcuts and the console map", which lists every key and shows how the console is organised. Like the search, it loads in the background after the page settles. The keys wait while you type in a field and while a dialog is open.
| Keys | What they do |
|---|---|
| Ctrl K or Cmd K | Search the console. |
| / | Focus the list's search box, or open the search. |
| ? | Show the shortcuts. |
| Esc | Close a dialog, drawer or menu. |
| g then a letter | Go to a page, as the sidebar table above lists. |
| j and k | In the first table on a page, move down and up a row. |
| Enter | Open the active row as a quick view, or as its own page where it has no quick view. |
| o | Open the active row's own page. |
| x | Tick the active row, in a table that has a tick column. |
Quick view
Section titled Quick viewA quick view shows a record beside the list, so you keep your place. Select a row, or press Enter on the active one. The drawer shows the record's facts, its lists and its links, and a button such as Open customer goes to the full page. Hold Cmd or Ctrl while you select a row, or use the middle button, to open the full page in a new tab.
| Quick view | Lowest role |
|---|---|
| Customers and orders | Read-only |
| Tickets | Tier 1 support |
| Servers | Tier 2 support |
| Invoices, coupons and refund requests | Tier 3 support |
Below that role a row stays a plain link and the record opens as before.
Saved views
Section titled Saved viewsA saved view keeps a list's filters under a name. Customers, Servers, Orders, Invoices, the Inbox, Refunds, Coupons and Activity each have a Views menu beside their filters.
- The menu lists Built in views, My views and views Shared with the team. Choose one to put its filters on the list. They go into the address, so the list can also be sent as a link.
- Save this view… keeps what the list shows now. Give it a name of up to 80 characters. Tick Share with the team to show it to everyone, which needs Tier 3 support or higher. Tick Pin as a tab to show it as a button beside the menu.
- Manage views… renames, pins, shares and deletes your own views.
- A view keeps filters and leaves out the page number. A pinned view that you share shows as a button for everyone on the team.
- Only the person who saved a view changes or deletes it. Every role can save views for themselves, Read-only included.
- You can keep 50 views for each list, and a name is used once for each list.
My account, Saved views lists every view you saved and opens, renames, pins or deletes it.
Choose a period
Section titled Choose a periodAnalytics, Reports and Activity set their period with one picker. It has a button for the period, a button for what it is set against, and a Swap the two ranges button between them. Activity has no comparison.
Presets for the period, in the order the picker lists them: Today, Yesterday, This week, Last week, This month, Last month, Year to date, All time, Last 7 days, Last 14 days, Last 30 days, Last 90 days, Quarter to date, Last year, Last 12 months and Custom range. Weeks run Monday to Sunday.
Presets for the comparison: Previous period, Same days last week, Same days last month, Same days last year, Custom dates and No comparison. Previous period is the same number of days just before the period. A whole calendar month, or a month so far, is set against the month before it. All time has no comparison.
A custom range opens a calendar of two months, one on a phone, with weeks from Monday and no days in the future. Choose the first and last day, then Apply.
- A period is at most 366 days. All time asks for the last 366 days and the page says so.
- The presets pick their days from your browser's calendar. Analytics and Reports then count each day in the time zone of your brand's settings, and Activity counts days in UTC.
- The period is in the address as
range,from,to,compare,cfromandcto, so a link carries it. - A page starts on the last preset you chose in this browser, or on Last 30 days against the Previous period the first time. Custom dates are never remembered.
Table density
Section titled Table densityDensity sets how much room a table row takes. Comfortable is the default. Compact trims the padding of every row, so more of a list fits on screen. Change it under My account, Appearance, Density, or with the density command in the search. The choice stays on this browser.
What a role cannot use
Section titled What a role cannot useA page your role cannot open is left out of the sidebar, the search and every link. If someone opens its address anyway, the page shows its header and a note that names the roles that can open it, and asks the API for nothing.
On a page you can open, a control your role cannot use stays where it is, dimmed, with a tip that names the role it needs, such as "Needs billing or higher". A role that sees a figure but not what stands behind it sees plain text where others see a link. Organization roles and permissions lists the lowest role for each area.
Read how the brand is doing
Section titled Read how the brand is doingAnalytics, at /staff/insights (g then y), is for billing or higher. A lower role who opens its address reads a note that names the roles that can.
Pick a period at the top of the page. Six figures lead: Net revenue, Payments, Refunds, New customers, Orders placed and First reply. Each shows its change against the comparison, a small line of the period and a link to the list it counts. The page then charts Revenue, Orders and Support by day, week or month, whichever fits the period, and draws the comparison dashed. Under them are Support speed (First reply, Resolution and Within SLA), Refunds, Churn, Revenue by product, Tickets by department, Right now (Recurring revenue, Active services and Outstanding invoices, which ignore the period), Storefront visitors and Acquisition. Acquisition says where visits, sign-ups and orders came from, with the return on your ad spend; Read the acquisition report explains each panel. Every figure, chart point and bar opens the list it counts, so you can check a number.
The page reads every amount in one currency, the one with the most payments in the period, and never adds money across currencies.
- Build a report… opens the report builder for the same period.
- Export CSV downloads the daily figures of the period as
insights-<from>-to-<to>.csv. It counts towards the limit of 12 exports an hour.
Build a report
Section titled Build a reportThe report builder, at /staff/insights/reports, is for billing or higher. It reads as a sentence: "Show a figure by a split as a chart", and a "top" count for a split by category. The builder offers only the pairs the API accepts.
| Figure | Splits it takes |
|---|---|
| Net revenue, Payments, Refunds | Day, Week, Month, Product type, Plan, Payment method, Coupon, Customer type |
| New customers | Day, Week, Month, Customer type, and the attribution splits below |
| Orders placed, Orders failed | Day, Week, Month, Product type, Plan, Location, Coupon, Customer type |
| Net revenue, Payments, Refunds, Orders placed and New customers | Also the attribution splits: Channel, First channel, Source, Medium, Campaign, Landing page, Device, Heard about us and Coupon campaign. They read each order's attribution record, and an order with none falls in the group Unknown. |
| Visits, Conversion rate | Day, Week, Month, Channel, Source, Medium, Campaign, Landing page, Device. Conversion rate is paid orders over visits, shown as a percentage such as 3.42%. |
| Tickets opened, Median first reply | Day, Week, Month, Department |
| Active services | Product type, Plan, Location, Customer type. It is what is active now, so it has no comparison and no line. |
A split by Day, Week or Month draws a Line, Bars or Table only. A split by a category draws Bars, Ranked bars or Table only, for the top 5, 10, 20 or 50 groups. Under the chart, the table lists the figures with their total, and each row opens the list it counts. Export CSV downloads that table as report-<figure>-by-<split>-<from>-to-<to>.csv. The whole builder is in the address, so a link sends a colleague the same report.
The panel Saved reports keeps reports under a name.
- Save as new… asks for a Name. Share with the team shows the report to everyone and needs Tier 3 support or higher, which every role that can open the builder has.
- Mail it sends the report on a schedule: Off, Daily at 07:00 or Weekly on Monday at 07:00, in your brand's time. Send it to takes up to 20 addresses, and only billing or higher can receive a report.
- A mailed report covers the same number of days each time, ending the day before. The email shows the top 12 rows and attaches a CSV of up to 500.
- Load puts a saved report on the builder. Update… replaces it with the report on screen, and Delete… removes it. Only the person who saved a report changes it.
Read the activity log
Section titled Read the activity logActivity, at /staff/activity (g then a), reads the organization's audit log, newest first. It is for Tier 1 support or higher.
- Admins and owners read the whole log. A switch between Everyone and Mine narrows it to their own actions.
- Every other role reads their own actions, on a page titled My activity. They read the rest through the Activity tab of a customer, an order or a server.
- Chips above the list name each area of the log with how many entries it holds, biggest first. Choose one to narrow the list. The counts leave out the area and action filters, so the other chips keep their numbers. With no other filter on, an admin's counts and the list of actions in the Action choice are normally no more than a minute old, and up to 10 minutes old on the first screen after a quiet spell. The list of entries is always current.
- The filters are a search for an action word or a record number, a period without a comparison, the Record, the Action and, for Admins, Who. A Views menu keeps them, with Money moves and Support sessions built in.
- A row that names a customer, an order, an invoice or a server opens a quick view of it.
- Export CSV downloads the filtered log. Only admins and owners can use it.
The console and the dashboard
Section titled The console and the dashboardThe organization's tabs in the Coritan dashboard are where owners and admins set the organization up: its settings, members, API keys, products and prices, payouts, DNS, mail, integrations and webhooks. Organizations lists them. Both places use the same roles and read the same customers, services and invoices, so a change made in one shows in the other. The support inbox, the tools for customers' servers, refund requests, coupons, notices, alerts and community moderation are in the staff console only.
Limits
Section titled Limits- Each area needs a role. Organization roles and permissions lists the lowest role for each, and a call below it answers
403withSupport access required,Tier 2 support access required,Billing access requiredorAdmin access required. - Actions that move money, end things or open a customer's account also need a step-up in the last 10 minutes, as Sign in to the staff console explains.
- The console works only while your organization is
active. For any other status every staff route answers404 Organization not found. - Actions that are easy to repeat by mistake have hourly limits for each member, such as 30 credit changes or 12 exports an hour. Past a limit the route answers
429withrate_limited, theactionit counts andretry_after_seconds, and sends aRetry-Afterheader. - Each member keeps up to 50 saved views for each list.
With the API
Section titled With the APIThe console's pages call the Organization API under https://api.coritan.com/api/v1/orgs/{org_slug}/staff/, and the support inbox calls /chat/staff/. Your own tools can call the same routes as a member, with either credential in Authorization: Bearer:
- A console session from staff sign-in, which starts with
ost_. Only a console session can make a step-up, so use one for the actions that need it. - The member's Coritan access token,
$CORITAN_TOKENin the examples on other pages. It reaches every staff route except those actions.
A Coritan account that is not a member gets 403 Not a member of this organization. The examples below use $STAFF_TOKEN for either credential.
Find the reference for each area
Section titled Find the reference for each areaThe API reference lists every staff route with its parameters and answers:
| Area | Reference |
|---|---|
| Sign-in, two-factor authentication and sessions | Staff sign-in |
| The operations summary, search, orders and refund requests | Staff operations |
| Activity and insights | Staff insight |
| Saved views | Staff views |
| Alerts and the bell | Staff alerts |
| Game network deliveries | Staff network |
| Push notifications | Staff push |
| Email digests | Staff digest |
| Customers | Customers in the staff console |
| Invoices | Invoices in the staff console |
| Transactions, disputes and failed charges | Staff billing |
| Customer services | Services in the staff console |
| Coupons | Staff coupons |
| Servers | Servers in the staff console |
| The support inbox | Staff support and your server access |
| The team | Staff team and the assignee list |
| Brand settings | Settings in the staff console and console API keys |
| Notices | Staff notices |
| Community moderation | Staff community |
Read the operations summary
Section titled Read the operations summaryAny member can read the counts behind the console's home page:
curl "https://api.coritan.com/api/v1/orgs/acme/staff/ops-summary?audience=paid" \
-H "Authorization: Bearer $STAFF_TOKEN"
| Field | What it counts |
|---|---|
open_tickets |
Conversations that are open, in progress, or waiting on your team or the customer. |
sla_breached |
Of those, the ones still waiting on your team for a first reply past its target. A conversation waiting on the customer or on hold is not counted (Support inbox). |
assigned_to_me |
Open conversations assigned to you. |
pending_refunds |
Refund requests waiting for a decision. |
unpaid_invoices |
Invoices with the status unpaid, and in unpaid_invoices_24h the ones raised in the last 24 hours. |
dunning_failing |
Unpaid or overdue invoices whose automatic charge attempts have run out. |
pending_services |
Orders that are pending or failed and are not waiting for their invoice to be paid. |
orders_24h |
Orders placed in the last 24 hours. |
customers |
Customer accounts, and in signups_24h the ones created in the last 24 hours. Placeholders for forum authors moved from your old site are not accounts and are not counted. |
servers_attention |
Servers whose install failed, that are being moved, or that have been installing for more than 180 seconds. |
community_open |
Forum reports, guide proposals, comments and guide reports waiting for a moderator. |
chat_reports_open |
Community chat messages with an open report. |
unread_alerts |
Fired alerts your role can read, that you have not opened, from the last 30 days. It is your own count, and it is the number on the bell. |
audience_counts |
Paid and free totals of customers (accounts only), orders, invoices and tickets. |
The counts of your brand as a whole (every field except assigned_to_me and unread_alerts) are the same for every member. They are normally no more than 20 seconds old, and audience_counts no more than 60 seconds. The first request after a quiet spell can show numbers up to 200 seconds old for the first group and 10 minutes old for audience_counts. assigned_to_me and unread_alerts are read on every call.
audience is paid, free or all, the default. A paid customer holds at least one service that is not on your free tier; everyone else, including a customer with no services, is free. A service is on the free tier when its product is a free tier or when the server that belongs to it sleeps when nobody plays. The server linked to the service decides on its own, and a $0 promotion does not make a service free. It narrows open_tickets, sla_breached, the unpaid invoice counts, pending_services, orders_24h and customers, and the other counts cover everyone. The console's lists take the same parameter and put paid customers first.
Search across the console
Section titled Search across the consolecurl "https://api.coritan.com/api/v1/orgs/acme/staff/search?q=alex%40example.com" \
-H "Authorization: Bearer $STAFF_TOKEN"
q takes 1–200 characters, and audience works as above. Any member can search, and the answer groups what matched:
| Group | Matches on | At most |
|---|---|---|
customers |
Email, first or last name, username, company, or the customer's ID | 20 |
invoices |
Part of the invoice number | 10 |
services |
Part of the hostname | 10 |
servers |
Part of the server's UUID, when q has 8 characters or more |
10 |
tickets |
Part of the subject, or the ticket number such as #1042 |
10 |
coupons |
Part of the code, for Tier 3 support and above; empty for other roles | 6 |
Customers, invoices, services and servers carry is_free, and paid customers come first. The answer is always current. Customers, invoices and services list paying ones first, then the newest first. The search reads the newest 300 paying matches and the newest 300 others of each kind (for invoices, the highest numbers), so a paying match is listed however many newer matches do not pay, and a very broad q lists the newest matches, not every match. Under paid or free only that group is read. Tickets are listed newest activity first, inside the audience. Accounts whose address or username starts with q are read first, and when 20 or more start with it the other columns are not searched. A q with an @ is matched against email addresses only. A q that is a whole server UUID also finds every service whose record names it. The search prefixes of the console, such as ticket:, are not part of the API: the console removes the prefix and sends the words after it as q, except ip:, which it sends to GET /staff/customers instead.
Read the activity log
Section titled Read the activity logThe activity routes read the organization's audit log, newest first:
curl "https://api.coritan.com/api/v1/orgs/acme/staff/activity?customer_id=812&since=2026-09-01&limit=50" \
-H "Authorization: Bearer $STAFF_TOKEN"
| Parameter | What it keeps |
|---|---|
customer_id |
Entries about the customer and about any of their services. |
service_id |
Entries about one customer service. |
server_uuid |
Entries about one server. |
actor_id |
Entries made by one person. For a member, it is the user_id that GET /staff/auth/me answers. |
action |
Actions whose name starts with this, such as customer. or invoice.marked_paid. |
resource_type |
Entries about one kind of record, such as customer. |
since and until |
Dates in UTC, such as 2026-09-01. Both days are included. |
q |
Part of an action name, or a record's ID. |
limit and offset |
1–200 entries a page, 50 by default. |
Each entry has id, at, action, actor_type, actor_id, actor_name, resource_type, resource_id, details and ip_address. What a role may read:
- Owners and admins read the whole log.
- Tier 3 support and billing must pass
customer_id,service_id,server_uuidor their ownactor_id, or the route answers403 Name a customer, order or server; the whole log is for org admins. - Tiers 1 and 2 must pass their own
actor_id, or it answers403 Your own actions are the part of the log your tier may read. - Read-only members get
403 Support access required.
GET /staff/activity/actions lists the action names that occur, with a count for each, most frequent first and at most 100. Below Tier 3 it lists only your own.
GET /staff/activity/facets takes the same filters and follows the same role rules. It answers the entries it matches by area, for the chips above the console's list:
{
"areas": [
{"key": "customer", "label": "Customer", "count": 41, "prefix": "customer."},
{"key": "invoice", "label": "Invoice", "count": 17, "prefix": "invoice."}
],
"total": 58
}
An area is the text of an action before its first dot, biggest first. prefix is the action value that narrows GET /staff/activity to the area. total is the sum of the counts.
GET /staff/activity/export.csv takes the same filters and downloads the log as CSV. It is for owners and admins. It carries at most 50,000 entries, newest first, with the columns time, action, actor_type, actor_id, actor_name, resource_type, resource_id, details and ip_address. Times are UTC in ISO 8601, such as 2026-09-28T12:00:00Z. A text that a spreadsheet would run as a formula starts with an apostrophe. It counts towards the 12 exports an hour that every staff export shares.
Read the insights
Section titled Read the insightsBilling, admin and owner members can read how the organization is doing over a period, in whole days of the brand's time zone, and set it against another period:
curl "https://api.coritan.com/api/v1/orgs/acme/staff/insights?from=2026-09-01&to=2026-09-30&compare=previous" \
-H "Authorization: Bearer $STAFF_TOKEN"
| Parameter | What it sets |
|---|---|
days |
The last this many days, ending today. 7–365, and 30 by default. Ignored when from or to is given. |
from and to |
The first and last day, YYYY-MM-DD, both included. to is today when left out, and from is days days back from it. A period is at most 366 days. |
compare |
What to set the period against: previous (the same number of days just before it, and the prior month for a calendar month), week, month or year (the same days that much earlier), custom or none. none when left out. |
compare_from and compare_to |
The days of the comparison for custom. Naming both without compare is the same as custom. |
A word that is not one of those, a period over 366 days, a period that ends before it starts, or custom without both days answers 422 and says what to change. The brand's time zone is the timezone of its settings, so a day starts and ends at its local midnight, and a day with a clock change is 23 or 25 hours long.
The answer has these keys:
period:from,to,daysandbucket, the grain a chart groups by.bucketishourup to 2 days,dayup to 92,weekup to 220 andmonthbeyond.compare: thefromandtoof the other period, ornullwithout a comparison.totalsandprevious_totals:payments,refunds(money handed back, as a positive amount),net,orders_placed,orders_failed,new_customers,tickets_opened,median_first_reply_seconds,mrr,active_services,currencyandby_currency.previous_totalsisnullwithout a comparison.mrris what is recurring now, so it isnullfor a period that ended before today and inprevious_totals.serieslists the days, and each daily list below follows it, whatever the bucket.revenue: payments and refunds per day with their totals,net,mrr(the prices of active services as a monthly figure),active_services, the unpaid and overdue invoices inoutstanding_countandoutstanding_total, and inby_productthe 12 products that brought in the most on paid invoices. Refunds are negative amounts here, andnetis the payments plus them.orders: orders placed, failed and ended per day.customers: new customer accounts per day. Placeholders for moved forum authors are not counted.support: conversations opened per day, how many closed,first_response_median_seconds,resolution_median_seconds,sla_compliance_percentand a countby_department.
Money is never added across currencies. totals.currency is the currency with the most payments in the period, every money figure is in it, and totals.by_currency lists each currency with its payments, refunds and net.
GET /staff/insights/export.csv takes days, from and to and downloads one row a day, with the columns day, payments, refunds, payment_count, refund_count, orders_placed, orders_failed, services_ended, new_customers and tickets_opened. It counts towards the limit of 12 exports an hour.
Run a report
Section titled Run a reportGET /staff/insights/report/registry lists what a report can count and split by. Each metric has its key, label, format (money, count or duration in seconds), description and the dimensions it takes, and history is false for a figure that is the state now. Each dimension has its key, label, kind (time or category) and bucket. The metrics are net_revenue, payments, refunds, new_customers, orders_placed, orders_failed, active_services, tickets_opened and median_first_reply. The dimensions are day, week, month, product, plan, location, gateway, coupon, department and customer_type.
curl "https://api.coritan.com/api/v1/orgs/acme/staff/insights/report?metric=net_revenue&dimension=plan&from=2026-09-01&to=2026-09-30&compare=previous&limit=10" \
-H "Authorization: Bearer $STAFF_TOKEN"
The route needs billing or higher and takes metric, dimension, the period words of GET /staff/insights (the last 30 days when left out) and limit, 1–50 and 10 by default, for a split by category. A split by time answers every bucket and ignores limit. A metric that does not suit the dimension answers 422 and names the dimensions it takes.
{
"metric": {"key": "net_revenue", "label": "Net revenue", "format": "money"},
"dimension": {"key": "plan", "label": "Plan", "bucket": null},
"rows": [
{"key": "Paper", "label": "Paper", "value": "1840.00", "previous": "1522.00",
"filter": {"path": "/staff/orders", "query": {"plan": "Paper"}}}
],
"total": "2610.00",
"previous_total": "2195.00",
"currency": "USD"
}
The answer also has period, compare, series (the figure over the period by its bucket, each point with key, x, label, value, previous and filter) and currencies. filter is the console list behind a row or a point, as a path and a query, so a page can link every number to what it counts. When there is more than one currency, currency is the one with the most money, every figure is in it, and a row's by_currency carries the rest. truncated is true when a median read only the newest 20,000 tickets. active_services has no previous and no series.
Save a view
Section titled Save a viewA saved view keeps the filters of one list under a name. The entity is customers, servers, orders, invoices, inbox, refunds, coupons, activity or report, and query holds exactly what the console keeps in the address for that list, without paging, as at most 40 text or number values.
curl -X POST https://api.coritan.com/api/v1/orgs/acme/staff/views \
-H "Authorization: Bearer $STAFF_TOKEN" \
-H "Content-Type: application/json" \
-d '{"entity": "customers", "name": "Past due this month", "query": {"segment": "past_due"}, "shared": false, "pinned": true}'
| Route | What it does |
|---|---|
GET /staff/views |
Lists the views you can use, your own first and then every view the team shared, each group by name. entity narrows it to one list. Any member can read them. |
POST /staff/views |
Saves a view and answers 201 with it. Any member can save one for themselves, Read-only included. |
PATCH /staff/views/{view_id} |
Changes name, query, shared, pinned, schedule or recipients of a view you saved. |
DELETE /staff/views/{view_id} |
Deletes a view you saved. |
A view is id, entity, name, query, shared, pinned, mine, owner_name, schedule, recipients, created_at and updated_at.
nametakes 1–80 characters and is used once for each list and member. A repeat answers409.sharedneeds Tier 3 support or higher, or the route answers403.schedule(dailyorweekly) andrecipients(up to 20 addresses) are forreportviews only, and setting either needs billing or higher. A schedule needs at least one recipient. Therecipientsof a report you did not save show to billing or higher only.- A member keeps 50 views for each list. The 51st answers
409. - Only the person who saved a view can change or delete it. Another member's view answers
404: withOnly the person who saved a view can change it.when it is shared, and withView not found.when it is private.
API operations on this page
| Method | Path | What it does |
|---|---|---|
GET | /api/v1/orgs/{org_slug}/staff/ops-summary | The numbers on the console's badges and the desk, for one audience view |
GET | /api/v1/orgs/{org_slug}/staff/insights | Money, orders, customers and support over a period, by day, and set against another period |
GET | /api/v1/orgs/{org_slug}/staff/insights/acquisition | Acquisition report |
GET | /api/v1/orgs/{org_slug}/staff/insights/export.csv | Staff insights export |
GET | /api/v1/orgs/{org_slug}/staff/insights/report | One figure split by one dimension over a period, against another period |
GET | /api/v1/orgs/{org_slug}/staff/insights/report/registry | What the report builder can count and split by |
GET | /api/v1/orgs/{org_slug}/staff/search | Search accounts, invoices, orders, servers, tickets and coupons from one box |
GET | /api/v1/orgs/{org_slug}/staff/activity | The org's audit log, newest first |
GET | /api/v1/orgs/{org_slug}/staff/activity/actions | Staff activity actions |
GET | /api/v1/orgs/{org_slug}/staff/activity/export.csv | The filtered audit log as a CSV, newest first |
GET | /api/v1/orgs/{org_slug}/staff/activity/facets | Counts of the log's entries by area, for the chips above the list |
GET | /api/v1/orgs/{org_slug}/staff/views | List the saved views you can use: your own, then every view the team shared |
POST | /api/v1/orgs/{org_slug}/staff/views | Save the filters of a list under a name |
PATCH | /api/v1/orgs/{org_slug}/staff/views/{view_id} | Change a view you saved: its name, filters, sharing, pin, schedule or recipients |
DELETE | /api/v1/orgs/{org_slug}/staff/views/{view_id} | Delete a view you saved |