{"items":[{"type":"link","fsPath":"developer/index.md","metadata":{"type":"markdown"},"label":"Getting started","link":"/developer","routeSlug":"/developer"},{"type":"link","fsPath":"developer/keys-and-scopes.md","metadata":{"type":"markdown"},"label":"Keys and scopes","link":"/developer/keys-and-scopes","routeSlug":"/developer/keys-and-scopes"},{"type":"link","fsPath":"developer/errors.md","metadata":{"type":"markdown"},"label":"Errors","link":"/developer/errors","routeSlug":"/developer/errors"},{"type":"link","fsPath":"developer/pagination-and-versioning.md","metadata":{"type":"markdown"},"label":"Pagination and versioning","link":"/developer/pagination-and-versioning","routeSlug":"/developer/pagination-and-versioning"},{"type":"link","fsPath":"developer/changelog.md","metadata":{"type":"markdown"},"label":"Changelog","link":"/developer/changelog","routeSlug":"/developer/changelog"},{"type":"separator","label":"Reference"},{"type":"link","label":"API reference","link":"/docs/openapi","routeSlug":"/docs/openapi"},{"type":"separator","label":"Read"},{"type":"group","label":"contracts","link":"/docs/openapi/contracts","routeSlug":"/docs/openapi/contracts","items":[{"label":"Search contracts","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/contracts/listcontracts","routeSlug":"/docs/openapi/contracts/listcontracts","metadata":{"seo":{"title":"Search contracts","description":"Use this to find contracts and solicitations by keyword, place, buyer, code, value or due date. Returns one page of contracts with the true total across every page. Uncapped for every key; your plan only sets how far back the archive reaches."}},"httpPath":"/api/v1/contracts"},{"label":"Read one contract","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/contracts/getcontract","routeSlug":"/docs/openapi/contracts/getcontract","metadata":{"seo":{"title":"Read one contract","description":"Use this when you already have a contract's slug (from a search or a citation). Returns that one contract, or 404 not_found when no contract has the slug."}},"httpPath":"/api/v1/contracts/{slug}"}]},{"type":"group","label":"organizations","link":"/docs/openapi/organizations","routeSlug":"/docs/openapi/organizations","items":[{"label":"Search organizations","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/organizations/listorgs","routeSlug":"/docs/openapi/organizations/listorgs","metadata":{"seo":{"title":"Search organizations","description":"Use this to find hospitals, health systems and other providers by segment, state, metro, size or name. Returns one page of organizations, each with its CCN, NPI and EIN where we hold them, and the true total. Uncapped for every key."}},"httpPath":"/api/v1/market/orgs"}]},{"type":"separator","label":"Artifacts"},{"type":"group","label":"lists","link":"/docs/openapi/lists","routeSlug":"/docs/openapi/lists","items":[{"label":"List your Lists","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/lists/listlists","routeSlug":"/docs/openapi/lists/listlists","metadata":{"seo":{"title":"List your Lists","description":"Your saved Lists of organizations, newest change first, without their rows. Use this when you need a List's id, or want to see which Lists exist before reading one. Newest change first, 25 to a page by default. Following is not listed here. total is null: this read does not count."}},"httpPath":"/api/v1/lists"},{"label":"Make a List","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/lists/createlist","routeSlug":"/docs/openapi/lists/createlist","metadata":{"seo":{"title":"Make a List","description":"Make a new List, optionally with organizations on it. Send an Idempotency-Key so a retry makes one List, not two. Use this when someone asks to save a set of organizations. Answers 201 with the List. The same Idempotency-Key and body again answers 200 with the same id; another body under that key is 409 idempotency_conflict. Rows added here read \"by API key\" in the app."}},"httpPath":"/api/v1/lists"},{"label":"Read a List and a page of its rows","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/lists/readlist","routeSlug":"/docs/openapi/lists/readlist","metadata":{"seo":{"title":"Read a List and a page of its rows","description":"One List and a page of its rows: each organization's name, address and when it was added. Use this when you have a List's id and need the organizations on it. Rows are in the order they were added. An unknown id and another account's List are the same 404."}},"httpPath":"/api/v1/lists/{id}"},{"label":"Rename a List","deprecated":false,"httpVerb":"patch","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/lists/renamelist","routeSlug":"/docs/openapi/lists/renamelist","metadata":{"seo":{"title":"Rename a List","description":"Give a List a new name. Nothing else about it changes. Use this when someone asks to rename a List. Changes the name and nothing else, as one new version."}},"httpPath":"/api/v1/lists/{id}"},{"label":"Add or remove organizations on a List","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/lists/changelistrows","routeSlug":"/docs/openapi/lists/changelistrows","metadata":{"seo":{"title":"Add or remove organizations on a List","description":"Add organizations to a List, take them off, or both, by their ids. Use this when someone asks to change which organizations are on a List. Send add, remove or both; all of it is one new version. An organization already on the List is counted, not added twice; one that is not on it cannot be removed (422 unknown_row). Adding needs no version; a removal is checked against the version current when it arrives."}},"httpPath":"/api/v1/lists/{id}/rows"},{"label":"Archive a List","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/lists/archivelist","routeSlug":"/docs/openapi/lists/archivelist","metadata":{"seo":{"title":"Archive a List","description":"Archive a List, which is how a List is deleted. It leaves every list view; the app can restore it. Use this when someone asks to delete or archive a List. Archiving is how a List is deleted; the owner may restore it in the app. Only the owner may archive (403 owner_only)."}},"httpPath":"/api/v1/lists/{id}/archive"},{"label":"Download a List as CSV","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/lists/exportlist","routeSlug":"/docs/openapi/lists/exportlist","metadata":{"seo":{"title":"Download a List as CSV","description":"A List's rows as a CSV file, the same file the app downloads. Use this when someone wants the whole List in a spreadsheet or another tool. The same file the app downloads: one row per organization, with its note and priority."}},"httpPath":"/api/v1/lists/{id}/export.csv"}]},{"type":"group","label":"actions","link":"/docs/openapi/actions","routeSlug":"/docs/openapi/actions","items":[{"label":"Your steps across every plan","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/actions/mysteps","routeSlug":"/docs/openapi/actions/mysteps","metadata":{"seo":{"title":"Your steps across every plan","description":"Steps across all your plans in one page, with the total: filter by status, due date and who owns them. Use this when someone asks what is due, late or blocked, without reading each plan. One page with the counted total, soonest due first and undated last. dueBefore and dueAfter are inclusive; a step with no due date matches neither. assignee=me (the default) is steps assigned to you; any is every step of a plan you can read."}},"httpPath":"/api/v1/actions/steps"},{"label":"List your action plans","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/actions/listplans","routeSlug":"/docs/openapi/actions/listplans","metadata":{"seo":{"title":"List your action plans","description":"Your action plans, newest change first, without their steps. Use this when you need a plan's id, or want to see which plans exist. Newest change first, without steps. total is null: this read does not count."}},"httpPath":"/api/v1/actions/plans"},{"label":"Make an action plan","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/actions/createplan","routeSlug":"/docs/openapi/actions/createplan","metadata":{"seo":{"title":"Make an action plan","description":"Make a new action plan with its steps. Send an Idempotency-Key so a retry makes one plan, not two. Use this when someone asks to plan the work for an account or a pursuit. Answers 201 with the plan; the same Idempotency-Key and body again answers 200 with the same id."}},"httpPath":"/api/v1/actions/plans"},{"label":"Read an action plan","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/actions/readplan","routeSlug":"/docs/openapi/actions/readplan","metadata":{"seo":{"title":"Read an action plan","description":"One action plan with every step: its status, owner, due date and why it is blocked. Use this when you have a plan's id and need its steps. Every step, in order, with its status, owner, due date and why it is blocked."}},"httpPath":"/api/v1/actions/plans/{id}"},{"label":"Change an action plan","deprecated":false,"httpVerb":"patch","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/actions/editplan","routeSlug":"/docs/openapi/actions/editplan","metadata":{"seo":{"title":"Change an action plan","description":"Change a plan: add, edit, reorder or remove steps, or rename it, in one version. Send the version you read; a newer one is a conflict carrying it. Use this when someone asks to change a plan's steps. ops are the plan's own operations, applied as one new version: add_step, update_step, remove_step, move_step, set_step_status and set_field (title, objective). expectedRevisionNo is required for a plan; a newer version is 409 revision_conflict carrying it."}},"httpPath":"/api/v1/actions/plans/{id}"},{"label":"Move a step to a new status","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/actions/setstepstatus","routeSlug":"/docs/openapi/actions/setstepstatus","metadata":{"seo":{"title":"Move a step to a new status","description":"Move one step to a new status, such as done or blocked (blocked needs a reason). No version id is needed; it refuses only if that step changed first. Use this when someone finishes or is stuck on a step. No version is sent: a change someone else saved first is kept, and this one is applied over it, unless they changed this step, which is 409 step_changed. blocked needs blockedReason."}},"httpPath":"/api/v1/actions/plans/{id}/steps/{stepId}/status"},{"label":"Archive an action plan","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/actions/archiveplan","routeSlug":"/docs/openapi/actions/archiveplan","metadata":{"seo":{"title":"Archive an action plan","description":"Archive an action plan, which is how a plan is deleted; its steps leave every step list. Use this when someone asks to delete or archive a plan. Archiving is how a plan is deleted; its steps leave every step list at once."}},"httpPath":"/api/v1/actions/plans/{id}/archive"}]},{"type":"group","label":"drafts","link":"/docs/openapi/drafts","routeSlug":"/docs/openapi/drafts","items":[{"label":"List your drafts","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/drafts/listdrafts","routeSlug":"/docs/openapi/drafts/listdrafts","metadata":{"seo":{"title":"List your drafts","description":"Your drafts, newest change first, without their text. Use this when you need a draft's id, or want to see which drafts exist or are approved. Newest change first, without their text. approved=true keeps only approved drafts, approved=false only the rest. total is null: this read does not count."}},"httpPath":"/api/v1/drafts"},{"label":"Save a draft","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/drafts/createdraft","routeSlug":"/docs/openapi/drafts/createdraft","metadata":{"seo":{"title":"Save a draft","description":"Save a draft someone wrote, such as an email: its subject and body. It is recorded as their own text. Send an Idempotency-Key so a retry saves one draft. Use this when someone asks to keep a draft in HRC Ledger. The subject is saved as the draft's title and the body as its one section. It is recorded as the key holder's own text with the key, never as written by the assistant. Answers 201 with the draft; the same Idempotency-Key and body again answers 200 with the same id."}},"httpPath":"/api/v1/drafts"},{"label":"List approved drafts with their text","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/drafts/listapproveddrafts","routeSlug":"/docs/openapi/drafts/listapproveddrafts","metadata":{"seo":{"title":"List approved drafts with their text","description":"Approved drafts with their full text, ready to send or import. Use this when moving approved emails, notes or briefs into another tool. Newest change first. Each subject and body is exactly what the app's Copy and \"Open in email\" give: a record link in the text is written as its name and address, or its name alone where you may not open it. A draft edited after its approval leaves this list until it is approved again. total is null: this read does not count."}},"httpPath":"/api/v1/drafts/approved"},{"label":"Read a draft","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/drafts/readdraft","routeSlug":"/docs/openapi/drafts/readdraft","metadata":{"seo":{"title":"Read a draft","description":"One draft with its text, its evidence and whether it is approved. Use this when you have a draft's id and need what it says. sections hold the stored text, record links as written, which is what an edit sends back; body is the text as the app's Copy gives it. approval is null unless this version is approved."}},"httpPath":"/api/v1/drafts/{id}"},{"label":"Change a draft","deprecated":false,"httpVerb":"patch","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/drafts/editdraft","routeSlug":"/docs/openapi/drafts/editdraft","metadata":{"seo":{"title":"Change a draft","description":"Change a draft's text or fields in one version. Send the version you read; a newer one is a conflict carrying it. Use this when someone asks to edit a saved draft. ops are the draft's own operations, applied as one new version: replace_text, rewrite, add_section, update_section, remove_section, move_section and set_field (title, purpose, audience). expectedRevisionNo is required; a newer version is 409 revision_conflict carrying it. The version is the key holder's own text, recorded with the key and never as written by the assistant, and it is not run through the assistant's drafting checks. A change takes an approved draft back out of review."}},"httpPath":"/api/v1/drafts/{id}"},{"label":"Archive a draft","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/drafts/archivedraft","routeSlug":"/docs/openapi/drafts/archivedraft","metadata":{"seo":{"title":"Archive a draft","description":"Archive a draft, which is how a draft is deleted. Use this when someone asks to delete or archive a draft. Archiving is how a draft is deleted; it leaves every draft list, and the app can restore it."}},"httpPath":"/api/v1/drafts/{id}/archive"}]},{"type":"group","label":"reviews","link":"/docs/openapi/reviews","routeSlug":"/docs/openapi/reviews","items":[{"label":"Approve a draft or plan version","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/reviews/approvereview","routeSlug":"/docs/openapi/reviews/approvereview","metadata":{"seo":{"title":"Approve a draft or plan version","description":"Approve the version of a draft or plan you read, as the key's owner: a draft needs drafts:approve and a plan needs actions:approve. The approval covers that version's text only and its history reads \"via API key\". Send revisionNo as the version you read; a newer one is 409 revision_conflict carrying it. It never decides a change the assistant proposed: that address answers 403 person_required, whatever the key's scopes."}},"httpPath":"/api/v1/reviews/{artifactId}/approve"}]},{"type":"group","label":"conversations","link":"/docs/openapi/conversations","routeSlug":"/docs/openapi/conversations","items":[{"label":"List your conversations","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/conversations/listconversations","routeSlug":"/docs/openapi/conversations/listconversations","metadata":{"seo":{"title":"List your conversations","description":"Your conversations with the assistant, newest first, without their turns. Use this when you need a conversation's id, or want to find an earlier answer. Newest activity first, without their turns. Only your own conversations, never a teammate's; a deleted one is not listed. total is null: this read does not count."}},"httpPath":"/api/v1/conversations"},{"label":"Read a conversation","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/conversations/readconversation","routeSlug":"/docs/openapi/conversations/readconversation","metadata":{"seo":{"title":"Read a conversation","description":"One conversation with its turns: each question, answer, the records it cited and the work it saved. Use this when you need what the assistant already said. turns is a page, oldest first, with total counting every turn; cursor and limit page it. Each answer's citations carry the address you may open, or null; artifacts are what that turn saved that you may open. Another person's conversation, a deleted one and an unknown id are all 404."}},"httpPath":"/api/v1/conversations/{id}"},{"label":"Rename a conversation","deprecated":false,"httpVerb":"patch","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/conversations/renameconversation","routeSlug":"/docs/openapi/conversations/renameconversation","metadata":{"seo":{"title":"Rename a conversation","description":"Give a conversation a new title, or null to go back to its first question. Use this when someone asks to rename a conversation. The same rename the app makes: at most 80 characters, trimmed; null goes back to the first question. Only your own conversation."}},"httpPath":"/api/v1/conversations/{id}"},{"label":"Delete a conversation","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/conversations/deleteconversation","routeSlug":"/docs/openapi/conversations/deleteconversation","metadata":{"seo":{"title":"Delete a conversation","description":"Delete a conversation, as the app does: it leaves your list and its address stops opening. It answers 204 with no body, and deleting it twice is fine. Use this when someone asks to delete a conversation. The same delete the app makes: an answer still being written in it is stopped first, the conversation leaves your list, and its address answers 404 from then on. The Lists and drafts it saved stay. Deleting it again answers 204 too. Only your own conversation."}},"httpPath":"/api/v1/conversations/{id}"}]},{"type":"group","label":"memory","link":"/docs/openapi/memory","routeSlug":"/docs/openapi/memory","items":[{"label":"Read what HRC Ledger knows about your company","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/memory/readmemory","routeSlug":"/docs/openapi/memory/readmemory","metadata":{"seo":{"title":"Read what HRC Ledger knows about your company","description":"What HRC Ledger knows about your company: the confirmed entries, each with where it came from and whether it was said or inferred, at most 200, with the total. Use this when you need the customer's ideal prospects, exclusions or tone. The entries the assistant is given, each in words: basis says whether someone said it or HRC Ledger inferred it, source where it came from, updatedAt when. An entry waiting for a person to confirm it never appears. A company with nothing confirmed yet has no entries. total counts every confirmed entry, so fewer entries than total means the read was cut at 200."}},"httpPath":"/api/v1/memory"}]},{"type":"separator","label":"The agent"},{"type":"group","label":"agent","link":"/docs/openapi/agent","routeSlug":"/docs/openapi/agent","items":[{"label":"Ask the assistant a question","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/docs/openapi/agent/ask","routeSlug":"/docs/openapi/agent/ask","metadata":{"seo":{"title":"Ask the assistant a question","description":"Use this to ask the HRC Ledger assistant one question and get its answer, the records it cites and what it read. Requires the agent:ask scope, which is separate from the read scopes because asking spends money. It does not stream, does not write and does not read the web. A run that stopped at a ceiling is a 200 carrying status: \"partial\" and a stopped_reason — an incomplete answer the caller can tell is incomplete, not an error. Bounded to 200 runs per key per UTC day."}},"httpPath":"/api/v1/ask"}]}]}