The organization's Insights
const url = 'https://api.asklucy.eu/v1/org/insights?from=2026-04-15&to=2026-04-15';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.asklucy.eu/v1/org/insights?from=2026-04-15&to=2026-04-15' \ --header 'Authorization: Bearer <token>'Adoption, use, cost and where to act, from from to to (UTC dates,
both included, at most 366 days), for the organization or one group
of the identity provider (group).
People are the organization’s active members who are persons
(kind person), of the group when one is given. Use (answers,
messages, weeks, features) counts them only. Cost is the whole
ledger of the organization (its service agents and Lucy’s own work
for it included), or for a group its people’s. month is always the
organization’s current calendar month.
Nothing here says what anyone worked on: no conversations, no
content. What people did by activity or client is Lucy Insights’
(openapi/lucy-insights.yaml), with cells of fewer than
settings.insights_min_group people folded.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”A group’s ID (GET /org/groups); 404 for a group the organization doesn’t have.
Responses
Section titled “Responses”OK
object
Members in scope.
Of them, people who sent a message in the period.
The same in the period of the same length just before.
People whose first message ever was in the period.
People who never sent a message, longest-standing account first (at most 50).
object
object
Zitadel user ID.
service is a customer system’s Zitadel service user; agent is a service agent (its ID is the agt_ ID), the author of its runs’ messages.
When their account was made; null when unknown.
How the people in scope rated the period’s answers: the share of their ratings (thumbs up or down) that are positive, three decimals. Null unless there are at least 30 ratings from at least 5 people: it is never one person’s. Feedback reasons and comments are never read here.
The ratings satisfaction counts, given by the people in scope to the period’s answers.
The 12 weeks (Monday to Sunday, UTC) up to the one with to, oldest first; the last stops at to.
object
Its Monday.
People with a message that week.
The whole organization only (empty for a group): each group of the
identity provider, and a row with group null for members in no
group; the costliest first. Someone in several groups counts in
each.
object
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
As the report’s satisfaction, for the group’s people, with the same rule (30 ratings, 5 people).
How many people in scope used each in the period.
object
People whose own agents ran.
Runs of their agents (and of service agents, for the whole organization).
People who sent a message from the desktop app.
Agents that ran in the period (people in scope’s own, and for the whole organization its service agents), costliest first, at most 10. A schedule’s skipped ticks don’t count as runs.
object
object
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
The latest failed run’s error message, shortened.
Spending by what it paid for. Everything of an agent run is in
agents (its model calls, sandbox and searches alike); then the
sandbox, web searches, Read aloud, and chats, the answers’ model
calls and the summaries continued conversations start from. other
is the rest: conversation titles, memory, search by meaning, and
work for nobody in particular. total is the sum.
object
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
The organization’s report only. What Lucy Insights’ classifier cost the organization (zero for a group).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
The organization’s report only. total over the people who used Lucy (used); zero when nobody did.
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
The answers’ model calls by the model that answered, costliest first.
object
object
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
One entry per day from from to to, oldest first.
object
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
The organization’s current calendar month (UTC), whatever the
period or group: spent so far, the budget that applies (the lower
of the admins’ and the contract’s, as GET /org/quotas), and the
month’s end at the pace so far.
object
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
object
Decimal amount, e.g. “12.50” (up to 6 decimals for small usage).
Something an admin could do, at most one of each kind, the biggest effect first:
model_fit: answers by a chosen model or the organization’s default that Auto would have given for less, for themodelwhere that saves the most:countanswers,people,auto_model(Auto’s most common pick),effectper month (the period’s saving scaled to 30 days).not_started:peoplewho never sent a message, with an account older than a week.agent_failing: theagentwhose runs failed most in the last 7 days (count, at least 2), with itslast_error.limits_reached: thegroup(null: people in no group) whose people a limit refused most in the period:count,people, and thewindowrefused most.budget_forecast: at this pace the month ends over its budget byeffect.requests_waiting:requeststhat have waited more than two days for a decision.
object
object
object
object
Example
{ "group": { "source": "identity_provider" }, "not_started": [ { "user": { "kind": "person" } } ], "satisfaction": 0.874, "by_group": [ { "group": { "source": "identity_provider" }, "cost": { "amount": "50.00", "currency": "EUR" } } ], "agents": [ { "cost": { "amount": "50.00", "currency": "EUR" } } ], "cost": { "total": { "amount": "50.00", "currency": "EUR" }, "chats": { "amount": "50.00", "currency": "EUR" }, "agents": { "amount": "50.00", "currency": "EUR" }, "sandbox": { "amount": "50.00", "currency": "EUR" }, "web_search": { "amount": "50.00", "currency": "EUR" }, "read_aloud": { "amount": "50.00", "currency": "EUR" }, "activities": { "amount": "50.00", "currency": "EUR" }, "other": { "amount": "50.00", "currency": "EUR" }, "per_person": { "amount": "50.00", "currency": "EUR" } }, "by_model": [ { "cost": { "amount": "50.00", "currency": "EUR" } } ], "days": [ { "cost": { "amount": "50.00", "currency": "EUR" } } ], "month": { "spent": { "amount": "50.00", "currency": "EUR" }, "budget": { "amount": "50.00", "currency": "EUR" }, "forecast": { "amount": "50.00", "currency": "EUR" } }, "actions": [ { "kind": "model_fit", "effect": { "amount": "50.00", "currency": "EUR" }, "group": { "source": "identity_provider" }, "window": "five_hours" } ]}The request is invalid; errors lists what’s wrong.
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
Missing, expired or invalid token.
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
The token is valid but lacks the role this needs.
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
No such object in your organization.
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
/org/insights curl "https://api.asklucy.eu/v1/org/insights" \
-H "Authorization: Bearer $LUCY_TOKEN"