POST /api/tools/call expose corresponding capabilities — but not identical names or shapes. outlit query maps to outlit_query, customers set-owner maps to outlit_set_customer_owner, and kebab-case flags map to camelCase schema fields (--billing-status → billingStatus). MCP/API readers should follow tool names and input schemas, not CLI spellings.
Evidence rules that apply to every recipe: cite what you retrieved, check content.status and content.data.page.hasMore before treating source content as complete, and treat missing fields, empty results, and absent permalinks as unavailable evidence — never as negative evidence.
Recipe: weekly churn-risk review
Find paying customers that went quiet, then rank by revenue exposure.outlit sources get call <id>).
Recipe: renewal preparation
Assemble the account’s current state and evidence before a renewal conversation.--include relationship returns categorized current statements with the factIds behind them — not source quotes. Use facts get / sources get when you need the underlying records.
Recipe: expansion candidates
Accounts that are healthy enough to expand.unavailable state means a source did not report; it does not mean usage is zero.
Recipe: hand a customer to a teammate
Writes name one customer and one member; discover the member first.user_* ID or email. The CLI does not fuzzy-match for mutations: a name that matches several customers is refused. set-owner previews first; --yes confirms without a terminal. Discovering members requires workspace_members:read; changing customer access requires customer_access:manage.
Recipe: merge a duplicate customer
Two-phase and auditable — preview first, then execute with the returned token.--idempotency-key for an identical retry — it makes the execution idempotent. A different idempotency key on the same pair is a new execution attempt.
Recipe: SQL analytics
Four read-only views:activity, customers, users, revenue. Check the schema before querying:
properties/traits columns are JSON strings — inspect with outlit schema get <view> before filtering nested values.
arr_amount is the annualized revenue run rate, the same figure the Outlit app shows, in the minor units of arr_currency: divide by 10^arr_decimals for the amount (cents for USD, EUR, GBP, and CAD). lifetime_revenue_cents is lifetime revenue in the billing provider’s units. Other currencies follow the provider’s amount rules (see Stripe’s currency docs). arr_currency names the currency of arr_amount (empty when ARR is unknown), so filter to one currency before summing, as above, or GROUP BY arr_currency. arr_estimated marks amounts that include a usage or per-seat estimate, and revenue_lifecycle is the customer’s revenue state. arr_cents, mrr_cents and mrr_status remain on customers until 2026-12-11 but are deprecated: use arr_amount. The revenue view is ARR daily (snapshot_date, arr_amount, arr_currency, arr_decimals) with no MRR columns.
Recipe: check source coverage before trusting empty answers
integrations list reports configuration readiness (not_connected, awaiting_auth, setup_required, ready, requires_intervention) — ready proves the connection is configured, not that data has synced or is fresh. Use it to rule out a broken setup, then enumerate actual records:
Customer identity touchpoints
Reads (
customers get, relationship, timeline, facts, credits, features) accept a domain, UUID, or exact name. Writes accept exact IDs. When in doubt, resolve the UUID with customers get first, then feed it to the write command.
Troubleshooting
Auth, permission, identity, and empty-result failure modes
CLI reference
Full flag and schema detail for every command
