The OData feed is enabled per organisation. To turn it on, contact your Wordsmith account manager. Then an administrator chooses what it publishes under Settings → BI feed.
- Reports: one row per document, with one column per report column, typed as numbers, dates, yes/no or text.
- Usage and value: sessions, interactions, active users, hours saved and cost saved, per day or per user, team, agent or skill.
- Tasks: one row per task, and tasks created and completed per day with their average turnaround.
Tasks needs Tasks, and TaskDaily and TaskDailyCoverage also need the Tasks view of Usage and value.
Choose what is published
Nothing is published until an administrator turns it on. Under Settings → BI feed, an administrator:- Turns on the BI feed. While it is off, every feed request is refused.
-
Chooses the usage tables: Publish usage figures, Include one row per person for
UsageByUserandUsageDailyByUser, and Include one row per session forUsageSessions, which needs one row per person. -
Chooses the task tables: Publish daily task counts (
TaskDaily,TaskDailyCoverage) and Publish the task list (Tasks). The task tables can be limited to tasks assigned to some teams. -
Chooses what
Tasksshows about each task. With Include names and email addresses off, the name and email columns are empty, andCreatorKeyandAssigneeKeyhold a coded ID that stays the same between refreshes. With Include titles, matters and tags off, those columns are empty,MatterMaskedincluded. A task in a matter the key’s user cannot open has an emptyMatterandMatterMaskedset to true. -
Turns on Publish reports for the
Reportstable and each report’s own feed. Reports are then published one at a time: open a report and turn on Available to BI tools in its menu, or setavailable_to_bi_toolswith Update report.Reportslists only published reports. - Chooses who may publish a report. People who manage the BI feed always may. With Let report editors publish their reports on, so may anyone who can edit the report. Anyone who can edit a report can always stop publishing it. A report published while the feed or Publish reports is off says so: BI tools can’t load it until both are on.
See who reads the feed
Under Settings → BI feed, Connected keys lists each API key and connected app that has loaded data from the feed: its owner, the tool (Power BI or Excel, Tableau, or another tool), the tables and reports it read, and when. Reads are noted at most once every 15 minutes per table or report, and the audit log records a BI feed read event at most once a day per key. If writing that event fails, it is tried again at most every 15 minutes, so a short refresh can leave a day without one. A report someone else’s key read shows its name only if you can open that report, and each key lists its 20 most recent reports with a count of older ones. To stop a key reading the feed, revoke it under Settings → API Keys. To stop every key, turn the feed off. A table the feed doesn’t serve to a key is refused with the reason:403 when it isn’t published, or when the key lacks the permission it needs (the message names it, for example usage:read), and 404 when your organisation doesn’t have the feature.
Connect
Every tool connects with an API key and Basic authentication:-
In Wordsmith, create an API key for the user whose view the tool should load. A key limited to some scopes needs
reports:read,usage:readandtasks:readfor the tables it loads. -
Point the tool’s OData connector at the feed URL for your region:
In the US region, use
https://api.us.wordsmith.ai/api/v1/odata. Power BI and Excel take this URL and list every table. Tableau takes it too and lists the tables to drag onto its canvas (see Tableau). - Sign in with Basic authentication (often labelled Username and Password). Enter any user name, and the API key as the password.
Tables
TaskDaily counts completions from each task’s recorded status history. A task created before Wordsmith recorded that history has none, so its completion is missing from Completed and AverageTurnaroundHours. TaskDailyCoverage gives the period’s UntrackedTasks (tasks with no recorded history) and LateHistoryTasks (tasks whose history starts after the day they were created). When either is above zero, completions are undercounted. Load it with the same period options as TaskDaily.
The UsageDailyBy… tables are long tables for slicing activity by any date range: one row per day and person, team, agent, skill, surface (web app, Word, Slack…) or work type. For people, teams, agents and skills, a row’s Key is the same entity’s Key in the matching UsageBy… table, so you can relate the two in your model; surfaces and work types have no period table. People in no team appear in UsageDailyByUser but not in UsageDailyByTeam. Days with no activity have no row, and a count that older data didn’t record is empty rather than zero. People, teams and agents carry their current name. A skill carries the latest name recorded in each week of days, so a skill renamed during the period, or with no recorded name that week, can show a different or empty Name on some days; take one skill name from UsageBySkill through Key. These tables carry activity counts only. For hours and cost saved, use UsageDaily (per day) or the UsageBy… tables (per person, team, agent or skill for the period). A person’s day counts towards every team they belong to, so team rows can add up to more than the organisation total. UsageDailyByUser appears only when per-person usage is published.
UsageSessions shows the sessions behind the usage figures: one row per session for each day it was active. Started is true on the day the session began, the one day it counts as a session. UserKey is the session’s owner, using the same keys as UsageByUser.Key, and AgentKey matches UsageByAgent.Key. In a session several people posted in, every row counts under its owner, whereas UsageDailyByUser credits each person’s own turns. EstimatedMinutes is Wordsmith’s estimate of the manual minutes the session saved, on its first day only. It is empty when the session has no estimate. CalibratedMinutes applies your organisation’s calibration, as the dashboard does, and MainEffortCategory names the kind of work most of those minutes were for. DocumentTypes, Languages and Jurisdictions list what the session dealt with, separated by ; . The table has no titles, prompts or summaries. These minutes don’t add up to UsageDaily’s hours: the daily figures also count report cells, and estimate sessions without their own estimate from their counts. Rows exist only for days Wordsmith has computed per-session rows for, so older days may have none.
Hours and cost saved are estimates priced with your organisation’s rates. Organisation figures include your organisation’s calibration, as on the Usage and value dashboard.
Period and scope
The usage tables andTaskDaily cover the last 30 days unless the URL says otherwise. Add options to the feed URL to change it:
The options on the feed URL carry into each table that takes them. For example, to load the whole of 2026:
https://api.wordsmith.ai/api/v1/odata?period=custom&start=2026-01-01&end=2026-12-31.
Organisation figures need permission to view company analytics. Per-user rows need your organisation to show named users on the dashboard.
A report as a table
Each report has its own feed. Copy it from theFeedUrl column of the Reports table, or build it from the report ID:
In
Rows, a column’s name is the report column’s name, with spaces and punctuation replaced by _. A name that is also a filter keyword, such as null or not, gets _2 added. A number column is followed by a _unit column, such as Rent_unit, holding the answer’s unit or currency. Check it before you add amounts together. The Columns table maps each report column to its names in Rows.
A cell in Rows is empty when Wordsmith has not answered it yet, could not answer it, or gave an answer that is not the column’s type. Each row counts these:
PendingCells: cells still being computed.FailedCells: cells that failed.UntypedCells: answers that do not fit the column’s type, such as “not stated” in a date column.
Cells table keeps every answer as text, with its status.
Filters and limits
The feed applies filters that a tool sends as$filter, as Power BI does. A comparison with an empty value follows OData: a row is kept only when the whole filter is true, so not contains(Title,'x') leaves out rows with no Title. A filter that compares values of different types, such as a number column with text, is refused with 400. It supports comparisons (eq, ne, gt, ge, lt, le), and, or, not, and the functions contains, startswith, endswith, tolower, toupper, trim, length, year, month, day and date.
The feed refuses with 501 what it cannot apply, rather than returning rows a tool would trust as filtered:
- Sorting (
$orderby) and counting ($count). Sort and count in your tool after the table loads. - Other
$filterfunctions and arithmetic operators. Apply that filter in your tool after the table loads.
Tasks pages in the same order as the app’s task list. A task whose priority or position changes while a tool reads the table can be read twice or missed until the next refresh.
Each request counts towards your organisation’s rate limit. A tool reads a table in pages, so a large report takes one request per page. Every refresh reads each table again from the start.
If the feed key is in the URL
If your tool cannot use Basic authentication, add the key to the URL as?api_key= and connect anonymously. The key then appears in the URL and in your workbook or report file, so prefer Basic.