List projects
well_list_projectsList the projects of the workspace, newest first, at most 100 per page. A project is any tracked business object with a name, a kind and a status: deal, pipeline, pipeline_stage, cost_center, property, project, campaign, audience, flow, ad_set, ad, experiment. Each row gives its project_id, name, kind, status, dates, amount and currency, the project it nests under (parent_project_id), for a deal its stage_project_id and stage_name (both null when unstaged), owner_person_id, counterparty_company_id or counterparty_person_id, probability (a percentage) and position, for a project its billing_method (project_rate, service_rate, person_rate, fixed_fee, non_billable, or null when none is stated), for a campaign its channel (google_ads, linkedin_ads, reddit_ads, chatgpt_ads, meta_ads, tiktok_ads, pinterest_ads), objective (awareness, traffic, engagement, leads, sales), included_audience_project_id and excluded_audience_project_id, for a flow its trigger_audience_project_id, and whether a connected tool synced it in (synced: Well neither deletes such a project nor changes the fields that tool writes), plus its provenance (well unless a connector wrote the row or the stage whose name it embeds, in which case it is connector). Pipelines and their stages are projects too: list kind pipeline, then kind pipeline_stage, to find the stage a deal sits on.
An experiment row includes experiment_outcome. An ad set can include or exclude audiences.
Use it to answer "which deals are open?", "which stage is this deal in?" or "list my campaigns", and to find the project_id that well_update_project and well_delete_project take. A row's dates are not its history: for what changed on a project or deal, and when, pass its project_id to well_list_project_changes, which reads the changes Well recorded. Filter with kind or status. Page with cursor from the previous result's next_cursor. It reads projects, not the workspace's customers: use well_list_customers for the companies it sells to.
A first-page call with kind deal or no kind also returns exact open-deal totals, separate by currency, with a per-workspace block, its stage totals in per_stage, source counts, the undated count and the largest eligible deal in each currency. For a by-stage question, read per_stage and never regroup page rows. A deal in excluded_deals is left out of the totals: name each one with its reason, give raw_amount only when it is present, say it is flagged for review when flagged_for_review is true, and say nothing changed in the source. scope defaults to this_workspace; pass all_my_workspaces when the person asks across their workspaces. That scope reads only the live real-workspace set authorized for this call, keeps guest project sharing in each workspace, and counts no deal twice across different workspace records. It counts only workspaces with a proven own-company anchor, connector holder or manual books confirmation; scope.excluded_unconfirmed_workspace_count gives the number of authorized workspaces left out for lack of that proof. A truncated proof makes the totals partial. No currency conversion is applied. Global totals are null when a workspace read fails, hits a row limit or is omitted; per-workspace subtotals remain labeled with their read state. The project page and its cursor stay independent of these totals; a call with cursor or another kind returns the page alone.
When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only the projects of this kind: deal, pipeline, pipeline_stage, cost_center, property, project, campaign, audience, flow, ad_set, ad, experiment. | |
| limit | No | Rows to return, at most 100. Default 20. | |
| scope | No | Measure this workspace only or all_my_workspaces across the authorized real workspaces of the signed-in person. | |
| cursor | No | The next_cursor of the previous page. | |
| hidden | No | true lists only the projects a person hid from Well, to show one again. Omit to list the shown ones. | |
| status | No | Only the projects in this status: draft, active, paused, won, lost, archived, completed. | |
| purpose | No | A metadata read instead of a page: pass cash_forecast_offer with kind deal (and no cursor, scope omitted or this_workspace) to count the deals a cash forecast could offer before consenting to their amounts. | |
| workspace_id | No | Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which. | |
| conversation_id | No | The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation. | |
| workspace_scope | No | Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | ||
| scope | No | ||
| success | Yes | ||
| projects | No | ||
| next_cursor | No | ||
| per_workspace | No | ||
| forecast_offer | No | ||
| conversation_id | No | The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation. | |
| newly_connected | No | Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later. | |
| weighted_totals | No | ||
| resolved_workspace | No | The workspace that answered, when the caller named none and the token authorizes several. | |
| conversation_id_note | No | Present only when the server opened a fresh lane, stating that no choice recorded earlier was read. | |
| all_workspaces_totals | No | ||
| conversation_id_source | No | Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened. | |
| workspace_order_by_currency | No | ||
| omitted_total_currency_count | No | ||
| weighted_incomplete_deal_count | No | ||
| omitted_weighted_currency_count | No | ||
| omitted_workspace_order_currency_count | No |