{"openapi":"3.0.3","info":{"title":"Rolodex API","version":"0.1.0","description":"Workspace-scoped CRM. Keys from Settings. Archive via PATCH.\nRecord supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.\nSuggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.\nUse validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nRead the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.\nUse IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.\nTo archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.\nWorkflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.\nPeople/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.\nCreating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.\nNotes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."},"servers":[{"url":"https://api.rolodex.interfacingresearchlaboratory.com/api/v1"}],"security":[{"apiKey":[]}],"paths":{"/people":{"get":{"operationId":"peopleList","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"archived","in":"query","schema":{"type":"boolean","default":false}},{"name":"companyId","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","total","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Person"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List people","x-cli-command":"rolodex people list","description":"Individual contacts and their company, role, contact details and relationship context.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset."},"post":{"operationId":"peopleCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Person"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create people","x-cli-command":"rolodex people create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Individual contacts and their company, role, contact details and relationship context.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset."}},"/people/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"peopleGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Person"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get people","x-cli-command":"rolodex people get ID","description":"Individual contacts and their company, role, contact details and relationship context.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset."},"patch":{"operationId":"peopleUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update people","x-cli-command":"rolodex people update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Individual contacts and their company, role, contact details and relationship context.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset."}},"/companies":{"get":{"operationId":"companiesList","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"archived","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","total","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List companies","x-cli-command":"rolodex companies list","description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification."},"post":{"operationId":"companiesCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create companies","x-cli-command":"rolodex companies create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification."}},"/companies/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"companiesGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get companies","x-cli-command":"rolodex companies get ID","description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification."},"patch":{"operationId":"companiesUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Company"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update companies","x-cli-command":"rolodex companies update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification."}},"/whoami":{"get":{"operationId":"whoami","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"workspaceId":{"type":"string"},"scope":{"type":"string","enum":["read","write"]},"capabilities":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/interactions":{"get":{"operationId":"interactionsList","parameters":[{"name":"recordId","in":"query","schema":{"type":"string"}},{"name":"groupId","in":"query","schema":{"type":"string"}},{"name":"meetingId","in":"query","schema":{"type":"string"}},{"name":"opportunityId","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Return archived entries. Alias of status=archived."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Interactions"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List interactions","x-cli-command":"rolodex interactions list","description":"Draft outreach and actual communication events linked to people/companies.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ntype and participants are required; participants may be inherited from a linked meeting/opportunity when omitted.\nUse type=draft with outreachFormat for composed outreach. The CLI does not send it. Record sent and immutable sent snapshots use interactions confirm-sent, not generic update.\nOnly log outbound_message, invitation_sent, invitation_accepted or inbound_reply when the event occurred. replyToId/threadId reference interactions.\nA recorded sent snapshot is immutable; create a new draft for another attempt."},"post":{"operationId":"interactionsCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionsCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Interactions"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create interactions","x-cli-command":"rolodex interactions create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Draft outreach and actual communication events linked to people/companies.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ntype and participants are required; participants may be inherited from a linked meeting/opportunity when omitted.\nUse type=draft with outreachFormat for composed outreach. The CLI does not send it. Record sent and immutable sent snapshots use interactions confirm-sent, not generic update.\nOnly log outbound_message, invitation_sent, invitation_accepted or inbound_reply when the event occurred. replyToId/threadId reference interactions.\nA recorded sent snapshot is immutable; create a new draft for another attempt."}},"/interactions/{id}/history":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"interactionsHistory","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"revision":{"type":"integer"},"snapshot":{"type":"string"},"actor":{"type":"string"},"createdAt":{"type":"number"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Read revision history for interactions","x-cli-command":"rolodex interactions history ID","description":"Draft outreach and actual communication events linked to people/companies.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ntype and participants are required; participants may be inherited from a linked meeting/opportunity when omitted.\nUse type=draft with outreachFormat for composed outreach. The CLI does not send it. Record sent and immutable sent snapshots use interactions confirm-sent, not generic update.\nOnly log outbound_message, invitation_sent, invitation_accepted or inbound_reply when the event occurred. replyToId/threadId reference interactions.\nA recorded sent snapshot is immutable; create a new draft for another attempt."}},"/interactions/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"interactionsGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Interactions"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get interactions","x-cli-command":"rolodex interactions get ID","description":"Draft outreach and actual communication events linked to people/companies.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ntype and participants are required; participants may be inherited from a linked meeting/opportunity when omitted.\nUse type=draft with outreachFormat for composed outreach. The CLI does not send it. Record sent and immutable sent snapshots use interactions confirm-sent, not generic update.\nOnly log outbound_message, invitation_sent, invitation_accepted or inbound_reply when the event occurred. replyToId/threadId reference interactions.\nA recorded sent snapshot is immutable; create a new draft for another attempt."},"patch":{"operationId":"interactionsUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionsUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Interactions"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update interactions","x-cli-command":"rolodex interactions update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Draft outreach and actual communication events linked to people/companies.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ntype and participants are required; participants may be inherited from a linked meeting/opportunity when omitted.\nUse type=draft with outreachFormat for composed outreach. The CLI does not send it. Record sent and immutable sent snapshots use interactions confirm-sent, not generic update.\nOnly log outbound_message, invitation_sent, invitation_accepted or inbound_reply when the event occurred. replyToId/threadId reference interactions.\nA recorded sent snapshot is immutable; create a new draft for another attempt."}},"/meetings":{"get":{"operationId":"meetingsList","parameters":[{"name":"recordId","in":"query","schema":{"type":"string"}},{"name":"groupId","in":"query","schema":{"type":"string"}},{"name":"meetingId","in":"query","schema":{"type":"string"}},{"name":"opportunityId","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Return archived entries. Alias of status=archived."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Meetings"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List meetings","x-cli-command":"rolodex meetings list","description":"Scheduled, completed or cancelled meetings, with participants, preparation and debrief context.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nUse purposeType for meeting purpose; purpose and manual follow-up fields are retired.\nDebrief status is derived from debrief content and meeting status; never write a debrief-status field.\nNewly linked people also add their active company to participants. Missing participants may inherit from a linked opportunity/meeting; inspect the saved result.\nnextMeetingId explicitly links the follow-up meeting. Empty string clears it and suppresses chronological fallback. Cycles and archived next meetings are rejected.\noccurredAt accepts a calendar date or ISO datetime; use a timezone offset for actual scheduled times. Omit unknown dates."},"post":{"operationId":"meetingsCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingsCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Meetings"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create meetings","x-cli-command":"rolodex meetings create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Scheduled, completed or cancelled meetings, with participants, preparation and debrief context.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nUse purposeType for meeting purpose; purpose and manual follow-up fields are retired.\nDebrief status is derived from debrief content and meeting status; never write a debrief-status field.\nNewly linked people also add their active company to participants. Missing participants may inherit from a linked opportunity/meeting; inspect the saved result.\nnextMeetingId explicitly links the follow-up meeting. Empty string clears it and suppresses chronological fallback. Cycles and archived next meetings are rejected.\noccurredAt accepts a calendar date or ISO datetime; use a timezone offset for actual scheduled times. Omit unknown dates."}},"/meetings/{id}/history":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"meetingsHistory","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"revision":{"type":"integer"},"snapshot":{"type":"string"},"actor":{"type":"string"},"createdAt":{"type":"number"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Read revision history for meetings","x-cli-command":"rolodex meetings history ID","description":"Scheduled, completed or cancelled meetings, with participants, preparation and debrief context.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nUse purposeType for meeting purpose; purpose and manual follow-up fields are retired.\nDebrief status is derived from debrief content and meeting status; never write a debrief-status field.\nNewly linked people also add their active company to participants. Missing participants may inherit from a linked opportunity/meeting; inspect the saved result.\nnextMeetingId explicitly links the follow-up meeting. Empty string clears it and suppresses chronological fallback. Cycles and archived next meetings are rejected.\noccurredAt accepts a calendar date or ISO datetime; use a timezone offset for actual scheduled times. Omit unknown dates."}},"/meetings/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"meetingsGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Meetings"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get meetings","x-cli-command":"rolodex meetings get ID","description":"Scheduled, completed or cancelled meetings, with participants, preparation and debrief context.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nUse purposeType for meeting purpose; purpose and manual follow-up fields are retired.\nDebrief status is derived from debrief content and meeting status; never write a debrief-status field.\nNewly linked people also add their active company to participants. Missing participants may inherit from a linked opportunity/meeting; inspect the saved result.\nnextMeetingId explicitly links the follow-up meeting. Empty string clears it and suppresses chronological fallback. Cycles and archived next meetings are rejected.\noccurredAt accepts a calendar date or ISO datetime; use a timezone offset for actual scheduled times. Omit unknown dates."},"patch":{"operationId":"meetingsUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingsUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Meetings"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update meetings","x-cli-command":"rolodex meetings update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Scheduled, completed or cancelled meetings, with participants, preparation and debrief context.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nUse purposeType for meeting purpose; purpose and manual follow-up fields are retired.\nDebrief status is derived from debrief content and meeting status; never write a debrief-status field.\nNewly linked people also add their active company to participants. Missing participants may inherit from a linked opportunity/meeting; inspect the saved result.\nnextMeetingId explicitly links the follow-up meeting. Empty string clears it and suppresses chronological fallback. Cycles and archived next meetings are rejected.\noccurredAt accepts a calendar date or ISO datetime; use a timezone offset for actual scheduled times. Omit unknown dates."}},"/documents":{"get":{"operationId":"documentsList","parameters":[{"name":"recordId","in":"query","schema":{"type":"string"}},{"name":"groupId","in":"query","schema":{"type":"string"}},{"name":"meetingId","in":"query","schema":{"type":"string"}},{"name":"opportunityId","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Return archived entries. Alias of status=archived."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Documents"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List documents","x-cli-command":"rolodex documents list","description":"External attachment links, surfaced as Attachments in the app; CLI/API resource name remains documents.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nUse title as the attachment name and an HTTP(S) url. This does not upload, fetch, read or version the external file.\nbody is retained for compatibility, but new attachments should use links. Attachment revision history tracks CRM metadata, not external content."},"post":{"operationId":"documentsCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentsCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Documents"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create documents","x-cli-command":"rolodex documents create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"External attachment links, surfaced as Attachments in the app; CLI/API resource name remains documents.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nUse title as the attachment name and an HTTP(S) url. This does not upload, fetch, read or version the external file.\nbody is retained for compatibility, but new attachments should use links. Attachment revision history tracks CRM metadata, not external content."}},"/documents/{id}/history":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"documentsHistory","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"revision":{"type":"integer"},"snapshot":{"type":"string"},"actor":{"type":"string"},"createdAt":{"type":"number"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Read revision history for documents","x-cli-command":"rolodex documents history ID","description":"External attachment links, surfaced as Attachments in the app; CLI/API resource name remains documents.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nUse title as the attachment name and an HTTP(S) url. This does not upload, fetch, read or version the external file.\nbody is retained for compatibility, but new attachments should use links. Attachment revision history tracks CRM metadata, not external content."}},"/documents/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"documentsGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Documents"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get documents","x-cli-command":"rolodex documents get ID","description":"External attachment links, surfaced as Attachments in the app; CLI/API resource name remains documents.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nUse title as the attachment name and an HTTP(S) url. This does not upload, fetch, read or version the external file.\nbody is retained for compatibility, but new attachments should use links. Attachment revision history tracks CRM metadata, not external content."},"patch":{"operationId":"documentsUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentsUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Documents"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update documents","x-cli-command":"rolodex documents update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"External attachment links, surfaced as Attachments in the app; CLI/API resource name remains documents.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nUse title as the attachment name and an HTTP(S) url. This does not upload, fetch, read or version the external file.\nbody is retained for compatibility, but new attachments should use links. Attachment revision history tracks CRM metadata, not external content."}},"/evidence":{"get":{"operationId":"evidenceList","parameters":[{"name":"recordId","in":"query","schema":{"type":"string"}},{"name":"groupId","in":"query","schema":{"type":"string"}},{"name":"meetingId","in":"query","schema":{"type":"string"}},{"name":"opportunityId","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Return archived entries. Alias of status=archived."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Evidence"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List evidence","x-cli-command":"rolodex evidence list","description":"Explicit facts linked to people or companies, displayed in profile fact sections; not an approval queue.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ntitle is the concise fact; body can add context. sourceNote, sourceId (attachment), and url preserve optional provenance.\nDo not present inference as a fact. Record attribution and uncertainty; leave unsupported conclusions out.\nPeople dimensions: Work, Interests, Personal context, Current priorities. Company dimensions: Business, Market & customers, Company context, Current priorities. Use the subject-appropriate category.\nEmployee-only facts do not become company facts automatically. Link the company explicitly only when the fact is about it.\nLegacy confidence/status/approval/temporal metadata is rejected. Use archived to retire a fact; history preserves revisions."},"post":{"operationId":"evidenceCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create evidence","x-cli-command":"rolodex evidence create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Explicit facts linked to people or companies, displayed in profile fact sections; not an approval queue.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ntitle is the concise fact; body can add context. sourceNote, sourceId (attachment), and url preserve optional provenance.\nDo not present inference as a fact. Record attribution and uncertainty; leave unsupported conclusions out.\nPeople dimensions: Work, Interests, Personal context, Current priorities. Company dimensions: Business, Market & customers, Company context, Current priorities. Use the subject-appropriate category.\nEmployee-only facts do not become company facts automatically. Link the company explicitly only when the fact is about it.\nLegacy confidence/status/approval/temporal metadata is rejected. Use archived to retire a fact; history preserves revisions."}},"/evidence/{id}/history":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"evidenceHistory","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"revision":{"type":"integer"},"snapshot":{"type":"string"},"actor":{"type":"string"},"createdAt":{"type":"number"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Read revision history for evidence","x-cli-command":"rolodex evidence history ID","description":"Explicit facts linked to people or companies, displayed in profile fact sections; not an approval queue.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ntitle is the concise fact; body can add context. sourceNote, sourceId (attachment), and url preserve optional provenance.\nDo not present inference as a fact. Record attribution and uncertainty; leave unsupported conclusions out.\nPeople dimensions: Work, Interests, Personal context, Current priorities. Company dimensions: Business, Market & customers, Company context, Current priorities. Use the subject-appropriate category.\nEmployee-only facts do not become company facts automatically. Link the company explicitly only when the fact is about it.\nLegacy confidence/status/approval/temporal metadata is rejected. Use archived to retire a fact; history preserves revisions."}},"/evidence/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"evidenceGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get evidence","x-cli-command":"rolodex evidence get ID","description":"Explicit facts linked to people or companies, displayed in profile fact sections; not an approval queue.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ntitle is the concise fact; body can add context. sourceNote, sourceId (attachment), and url preserve optional provenance.\nDo not present inference as a fact. Record attribution and uncertainty; leave unsupported conclusions out.\nPeople dimensions: Work, Interests, Personal context, Current priorities. Company dimensions: Business, Market & customers, Company context, Current priorities. Use the subject-appropriate category.\nEmployee-only facts do not become company facts automatically. Link the company explicitly only when the fact is about it.\nLegacy confidence/status/approval/temporal metadata is rejected. Use archived to retire a fact; history preserves revisions."},"patch":{"operationId":"evidenceUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Evidence"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update evidence","x-cli-command":"rolodex evidence update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Explicit facts linked to people or companies, displayed in profile fact sections; not an approval queue.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ntitle is the concise fact; body can add context. sourceNote, sourceId (attachment), and url preserve optional provenance.\nDo not present inference as a fact. Record attribution and uncertainty; leave unsupported conclusions out.\nPeople dimensions: Work, Interests, Personal context, Current priorities. Company dimensions: Business, Market & customers, Company context, Current priorities. Use the subject-appropriate category.\nEmployee-only facts do not become company facts automatically. Link the company explicitly only when the fact is about it.\nLegacy confidence/status/approval/temporal metadata is rejected. Use archived to retire a fact; history preserves revisions."}},"/swarms":{"get":{"operationId":"swarmsList","parameters":[{"name":"recordId","in":"query","schema":{"type":"string"}},{"name":"groupId","in":"query","schema":{"type":"string"}},{"name":"meetingId","in":"query","schema":{"type":"string"}},{"name":"opportunityId","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Return archived entries. Alias of status=archived."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Swarms"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List swarms","x-cli-command":"rolodex swarms list","description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields."},"post":{"operationId":"swarmsCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmsCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Swarms"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create swarms","x-cli-command":"rolodex swarms create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields."}},"/swarms/{id}/history":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"swarmsHistory","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"revision":{"type":"integer"},"snapshot":{"type":"string"},"actor":{"type":"string"},"createdAt":{"type":"number"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Read revision history for swarms","x-cli-command":"rolodex swarms history ID","description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields."}},"/swarms/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"swarmsGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Swarms"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get swarms","x-cli-command":"rolodex swarms get ID","description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields."},"patch":{"operationId":"swarmsUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmsUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Swarms"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update swarms","x-cli-command":"rolodex swarms update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields."}},"/opportunities":{"get":{"operationId":"opportunitiesList","parameters":[{"name":"recordId","in":"query","schema":{"type":"string"}},{"name":"groupId","in":"query","schema":{"type":"string"}},{"name":"meetingId","in":"query","schema":{"type":"string"}},{"name":"opportunityId","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Return archived entries. Alias of status=archived."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Opportunities"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List opportunities","x-cli-command":"rolodex opportunities list","description":"Distinct commercial opportunities linked to one or more people/companies, each with its own sales stage and value.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nstatus and participants are required. One company may have multiple opportunities. Do not put deal stage on a person/company.\ndealValue is nonnegative; null/omitted is unknown and zero is valid. currency is an uppercase three-letter code. Do not combine values across currencies without conversion.\nLink related meetings/interactions/documents through opportunityId; participants inherit when omitted. Opportunities cannot belong to other opportunities.\nexpectedCloseDate is YYYY-MM-DD. contractDurationMonths must be positive when set. Closed time and derived reports are managed by the app."},"post":{"operationId":"opportunitiesCreate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunitiesCreate"}}}},"responses":{"200":{"description":"No-write preview when dryRun=true","content":{"application/json":{"schema":{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}}}},"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Opportunities"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Create opportunities","x-cli-command":"rolodex opportunities create --body-file input.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Distinct commercial opportunities linked to one or more people/companies, each with its own sales stage and value.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nstatus and participants are required. One company may have multiple opportunities. Do not put deal stage on a person/company.\ndealValue is nonnegative; null/omitted is unknown and zero is valid. currency is an uppercase three-letter code. Do not combine values across currencies without conversion.\nLink related meetings/interactions/documents through opportunityId; participants inherit when omitted. Opportunities cannot belong to other opportunities.\nexpectedCloseDate is YYYY-MM-DD. contractDurationMonths must be positive when set. Closed time and derived reports are managed by the app."}},"/opportunities/{id}/history":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"opportunitiesHistory","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"revision":{"type":"integer"},"snapshot":{"type":"string"},"actor":{"type":"string"},"createdAt":{"type":"number"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Read revision history for opportunities","x-cli-command":"rolodex opportunities history ID","description":"Distinct commercial opportunities linked to one or more people/companies, each with its own sales stage and value.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nstatus and participants are required. One company may have multiple opportunities. Do not put deal stage on a person/company.\ndealValue is nonnegative; null/omitted is unknown and zero is valid. currency is an uppercase three-letter code. Do not combine values across currencies without conversion.\nLink related meetings/interactions/documents through opportunityId; participants inherit when omitted. Opportunities cannot belong to other opportunities.\nexpectedCloseDate is YYYY-MM-DD. contractDurationMonths must be positive when set. Closed time and derived reports are managed by the app."}},"/opportunities/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"opportunitiesGet","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Opportunities"}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Get opportunities","x-cli-command":"rolodex opportunities get ID","description":"Distinct commercial opportunities linked to one or more people/companies, each with its own sales stage and value.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nstatus and participants are required. One company may have multiple opportunities. Do not put deal stage on a person/company.\ndealValue is nonnegative; null/omitted is unknown and zero is valid. currency is an uppercase three-letter code. Do not combine values across currencies without conversion.\nLink related meetings/interactions/documents through opportunityId; participants inherit when omitted. Opportunities cannot belong to other opportunities.\nexpectedCloseDate is YYYY-MM-DD. contractDurationMonths must be positive when set. Closed time and derived reports are managed by the app."},"patch":{"operationId":"opportunitiesUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunitiesUpdate"}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Opportunities"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update opportunities","x-cli-command":"rolodex opportunities update ID --body-file changes.json","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Distinct commercial opportunities linked to one or more people/companies, each with its own sales stage and value.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nstatus and participants are required. One company may have multiple opportunities. Do not put deal stage on a person/company.\ndealValue is nonnegative; null/omitted is unknown and zero is valid. currency is an uppercase three-letter code. Do not combine values across currencies without conversion.\nLink related meetings/interactions/documents through opportunityId; participants inherit when omitted. Opportunities cannot belong to other opportunities.\nexpectedCloseDate is YYYY-MM-DD. contractDurationMonths must be positive when set. Closed time and derived reports are managed by the app."}},"/swarms/{id}/members":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"get":{"operationId":"swarmMembers","parameters":[{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string"},"companyId":{"type":"string"},"archived":{"type":"boolean"}}}},"isDone":{"type":"boolean"},"continueCursor":{"type":"string"},"memberCount":{"type":"integer"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List explicit targets for swarms","x-cli-command":"rolodex swarms members ID","description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields."},"patch":{"operationId":"swarmUpdateMembers","description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nAdd/remove at most 100 memberships per request. Never replaces the complete target set.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["add","remove","expectedRevision"],"properties":{"add":{"type":"array","items":{"type":"string"},"maxItems":100},"remove":{"type":"array","items":{"type":"string"},"maxItems":100},"expectedRevision":{"type":"integer","minimum":1}}}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Entry"},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update swarms","x-cli-command":"rolodex swarms add-members/remove-members ID RECORD_ID... --revision N","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}]}},"/inbox":{"get":{"operationId":"inboxList","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"state":{"type":"string","enum":["inbox","shortlist","hold"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"List inbox","x-cli-command":"rolodex inbox list","description":"Separate prospect review queue: inbox, shortlist or hold. Removing an entry does not delete the underlying contact.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nUse inbox set ID --state inbox|shortlist|hold; inbox remove ID clears only queue membership.\nQueue state is not opportunity stage, relationship strength, or outreach sent status."}},"/inbox/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"patch":{"operationId":"inboxSet","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["state"],"properties":{"state":{"type":"string","nullable":true,"enum":["inbox","shortlist","hold",null]}},"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"recordId":{"type":"string"},"state":{"type":"string","nullable":true}}},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Update inbox","x-cli-command":"rolodex inbox set ID --state STATE (or remove ID)","parameters":[{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"description":"Separate prospect review queue: inbox, shortlist or hold. Removing an entry does not delete the underlying contact.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nUse inbox set ID --state inbox|shortlist|hold; inbox remove ID clears only queue membership.\nQueue state is not opportunity stage, relationship strength, or outreach sent status."}},"/swarms/{id}/refresh-report":{"post":{"operationId":"swarmsrefreshreportID","x-cli-command":"rolodex swarms refresh-report ID","summary":"Request asynchronous report recalculation. Read report readiness before using results.","description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nRequest asynchronous report recalculation. Read report readiness before using results.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/meetings/{id}/follow-up":{"post":{"operationId":"meetingsfollowupIDrevisionN","x-cli-command":"rolodex meetings follow-up ID --revision N","summary":"Create and link an undated follow-up atomically. Identical retries with original revision recover the same meeting.","description":"Scheduled, completed or cancelled meetings, with participants, preparation and debrief context.\nCreate and link an undated follow-up atomically. Identical retries with original revision recover the same meeting.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nUse purposeType for meeting purpose; purpose and manual follow-up fields are retired.\nDebrief status is derived from debrief content and meeting status; never write a debrief-status field.\nNewly linked people also add their active company to participants. Missing participants may inherit from a linked opportunity/meeting; inspect the saved result.\nnextMeetingId explicitly links the follow-up meeting. Empty string clears it and suppresses chronological fallback. Cycles and archived next meetings are rejected.\noccurredAt accepts a calendar date or ISO datetime; use a timezone offset for actual scheduled times. Omit unknown dates.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0},"title":{"type":"string"}},"required":["expectedRevision"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/interactions/{id}/confirm-sent":{"post":{"operationId":"interactionsconfirmsentIDrevisionNrecipientVALUEbodyfileFILEoccurredatTIME","x-cli-command":"rolodex interactions confirm-sent ID --revision N --recipient VALUE --body-file FILE --occurred-at TIME","summary":"Record actual externally completed outreach and freeze its sent snapshot. Never sends. Subject is required for email. Identical retries use the original draft revision.","description":"Draft outreach and actual communication events linked to people/companies.\nRecord actual externally completed outreach and freeze its sent snapshot. Never sends. Subject is required for email. Identical retries use the original draft revision.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ntype and participants are required; participants may be inherited from a linked meeting/opportunity when omitted.\nUse type=draft with outreachFormat for composed outreach. The CLI does not send it. Record sent and immutable sent snapshots use interactions confirm-sent, not generic update.\nOnly log outbound_message, invitation_sent, invitation_accepted or inbound_reply when the event occurred. replyToId/threadId reference interactions.\nA recorded sent snapshot is immutable; create a new draft for another attempt.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0},"recipient":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"},"occurredAt":{"type":"string"}},"required":["expectedRevision","recipient","subject","body","occurredAt"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/people/{id}/pin":{"post":{"operationId":"peoplepinunpinIDFACTIDexpectedupdatedatTIMESTAMP","x-cli-command":"rolodex people pin/unpin ID FACT_ID --expected-updated-at TIMESTAMP","summary":"Pin/unpin a linked fact; at most six pins. Checks profile version and fact ownership.","description":"Individual contacts and their company, role, contact details and relationship context.\nPin/unpin a linked fact; at most six pins. Checks profile version and fact ownership.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedUpdatedAt":{"type":"integer","minimum":0},"evidenceId":{"type":"string"},"pinned":{"type":"boolean"}},"required":["expectedUpdatedAt","evidenceId","pinned"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/people/{id}/photo":{"post":{"operationId":"peoplephotosetremoveIDexpectedupdatedatTIMESTAMP","x-cli-command":"rolodex people photo set/remove ID --expected-updated-at TIMESTAMP","summary":"Supply base64 JPEG under 750 KB or remove:true, exclusively. Version checked before replacing. Preview stores no file.","description":"Individual contacts and their company, role, contact details and relationship context.\nSupply base64 JPEG under 750 KB or remove:true, exclusively. Version checked before replacing. Preview stores no file.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedUpdatedAt":{"type":"integer","minimum":0},"base64":{"type":"string","maxLength":1000000},"remove":{"type":"boolean","enum":[true]}},"required":["expectedUpdatedAt"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"peoplePhotoGet","x-cli-command":"rolodex people photo get ID","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Photo URL or null, recordId and updatedAt","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"summary":"Get people","description":"Individual contacts and their company, role, contact details and relationship context.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset."}},"/companies/{id}/pin":{"post":{"operationId":"companiespinunpinIDFACTIDexpectedupdatedatTIMESTAMP","x-cli-command":"rolodex companies pin/unpin ID FACT_ID --expected-updated-at TIMESTAMP","summary":"Pin/unpin a linked fact; at most six pins. Checks profile version and fact ownership.","description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nPin/unpin a linked fact; at most six pins. Checks profile version and fact ownership.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedUpdatedAt":{"type":"integer","minimum":0},"evidenceId":{"type":"string"},"pinned":{"type":"boolean"}},"required":["expectedUpdatedAt","evidenceId","pinned"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/companies/{id}/photo":{"post":{"operationId":"companiesphotosetremoveIDexpectedupdatedatTIMESTAMP","x-cli-command":"rolodex companies photo set/remove ID --expected-updated-at TIMESTAMP","summary":"Supply base64 JPEG under 750 KB or remove:true, exclusively. Version checked before replacing. Preview stores no file.","description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nSupply base64 JPEG under 750 KB or remove:true, exclusively. Version checked before replacing. Preview stores no file.\nWrites workspace data. Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","schema":{"type":"boolean","default":false},"description":"Validate with live data and return normalized changes, including removed entries/descriptions. Performs no writes and accepts read-only keys. Requires the action's documented create key or version precondition. Inbox is an idempotent desired-state operation without a version precondition."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedUpdatedAt":{"type":"integer","minimum":0},"base64":{"type":"string","maxLength":1000000},"remove":{"type":"boolean","enum":[true]}},"required":["expectedUpdatedAt"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated record, or a no-write preview when dryRun=true","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"object","required":["valid","dryRun","writesPerformed","changes"],"properties":{"valid":{"type":"boolean","enum":[true]},"dryRun":{"type":"boolean","enum":[true]},"writesPerformed":{"type":"boolean","enum":[false]},"changes":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"before":{},"after":{},"removedItems":{"type":"array","items":{}},"removedDescriptions":{"type":"array","items":{"type":"string"}}}}},"normalized":{"type":"object","additionalProperties":true},"replay":{"type":"boolean"},"recordId":{"type":"string"}},"additionalProperties":true}]}}}},"400":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"428":{"description":"Missing required record version. Read the record and supply expectedUpdatedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Action failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"companiesPhotoGet","x-cli-command":"rolodex companies photo get ID","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Photo URL or null, recordId and updatedAt","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"summary":"Get companies","description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification."}},"/swarms/{id}/report":{"get":{"operationId":"swarmReport","x-cli-command":"rolodex swarms report ID","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ready, generation, computedAt, updating and app-calculated metrics. Missing or updating results are not zero.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"summary":"Get swarms","description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields."}},"/reports/dashboard":{"get":{"operationId":"dashboardReport","x-cli-command":"rolodex reports dashboard","parameters":[{"name":"asOf","in":"query","schema":{"type":"string"},"description":"ISO date/time; defaults to now"},{"name":"weeks","in":"query","schema":{"type":"integer","enum":[4,8,12],"default":8}}],"responses":{"200":{"description":"Same metrics as Home, with asOf and period. Missing dates remain unknown.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/people/vocabulary":{"get":{"operationId":"peopleVocabulary","parameters":[{"name":"field","in":"query","required":true,"schema":{"type":"string"},"description":"A tags or describedTags field from the resource schema."},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Suggested and existing active-workspace labels with per-record counts and pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"field":{"type":"string"},"allowsCustom":{"type":"boolean"},"data":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"},"suggested":{"type":"boolean"}}}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}}},"summary":"List people","x-cli-command":"rolodex people vocabulary FIELD","description":"Individual contacts and their company, role, contact details and relationship context.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset."}},"/companies/vocabulary":{"get":{"operationId":"companiesVocabulary","parameters":[{"name":"field","in":"query","required":true,"schema":{"type":"string"},"description":"A tags or describedTags field from the resource schema."},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Suggested and existing active-workspace labels with per-record counts and pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"field":{"type":"string"},"allowsCustom":{"type":"boolean"},"data":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"},"suggested":{"type":"boolean"}}}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}}},"summary":"List companies","x-cli-command":"rolodex companies vocabulary FIELD","description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nRead-only. Lists use limit/offset unless this is the swarm members cursor endpoint.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification."}},"/workspace/records/list":{"get":{"operationId":"workspace_records_list","summary":"Workspace records: list","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"type":"string","enum":["people"]},{"type":"string","enum":["companies"]}]},"includePhotos":{"type":"boolean"}},"required":["kind"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/records/get":{"get":{"operationId":"workspace_records_get","summary":"Workspace records: get","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"type":"string","enum":["people"]},{"type":"string","enum":["companies"]}]},"id":{"type":"string"}},"required":["kind","id"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/records/classificationOptions":{"get":{"operationId":"workspace_records_classificationOptions","summary":"Workspace records: classificationOptions","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/records/companyChildren":{"get":{"operationId":"workspace_records_companyChildren","summary":"Workspace records: companyChildren","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"}},"required":["id"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/records/indexReady":{"get":{"operationId":"workspace_records_indexReady","summary":"Workspace records: indexReady","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/records/navigation":{"get":{"operationId":"workspace_records_navigation","summary":"Workspace records: navigation","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/list":{"get":{"operationId":"workspace_workflow_list","summary":"Workspace workflow: list","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"resource":{"anyOf":[{"type":"string","enum":["interactions"]},{"type":"string","enum":["meetings"]},{"type":"string","enum":["documents"]},{"type":"string","enum":["evidence"]},{"type":"string","enum":["swarms"]},{"type":"string","enum":["opportunities"]}]},"id":{"type":"string"},"recordId":{"type":"string"},"groupId":{"type":"string"},"meetingId":{"type":"string"},"opportunityId":{"type":"string"},"q":{"type":"string"},"status":{"type":"string"},"limit":{"type":"number"},"offset":{"type":"number"},"sortField":{"anyOf":[{"type":"string","enum":["date"]},{"type":"string","enum":["title"]}]},"desc":{"type":"boolean"}},"required":["resource"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/nextMeeting":{"get":{"operationId":"workspace_workflow_nextMeeting","summary":"Workspace workflow: nextMeeting","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"now":{"type":"number"}},"required":["id","now"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/overview":{"get":{"operationId":"workspace_workflow_overview","summary":"Workspace workflow: overview","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"recordId":{"type":"string"},"activityLimit":{"type":"number"}},"required":["recordId"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/contactSummary":{"get":{"operationId":"workspace_workflow_contactSummary","summary":"Workspace workflow: contactSummary","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"recordId":{"type":"string"}},"required":["recordId"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/listPage":{"get":{"operationId":"workspace_workflow_listPage","summary":"Workspace workflow: listPage","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"resource":{"anyOf":[{"type":"string","enum":["interactions"]},{"type":"string","enum":["meetings"]},{"type":"string","enum":["documents"]},{"type":"string","enum":["evidence"]},{"type":"string","enum":["swarms"]},{"type":"string","enum":["opportunities"]}]},"recordId":{"type":"string"},"groupId":{"type":"string"},"meetingId":{"type":"string"},"opportunityId":{"type":"string"},"q":{"type":"string"},"status":{"type":"string"},"sortField":{"anyOf":[{"type":"string","enum":["date"]},{"type":"string","enum":["title"]}]},"desc":{"type":"boolean"},"paginationOpts":{"type":"object","additionalProperties":false,"properties":{"numItems":{"type":"number"},"cursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"endCursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"id":{"type":"number"},"maximumRowsRead":{"type":"number"},"maximumBytesRead":{"type":"number"}},"required":["numItems","cursor"]}},"required":["resource","paginationOpts"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/activityPage":{"get":{"operationId":"workspace_workflow_activityPage","summary":"Workspace workflow: activityPage","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"recordId":{"type":"string"},"groupId":{"type":"string"},"meetingId":{"type":"string"},"opportunityId":{"type":"string"},"mode":{"anyOf":[{"type":"string","enum":["timeline"]},{"type":"string","enum":["drafts"]}]},"q":{"type":"string"},"channel":{"type":"string"},"sortField":{"anyOf":[{"type":"string","enum":["date"]},{"type":"string","enum":["title"]}]},"desc":{"type":"boolean"},"paginationOpts":{"type":"object","additionalProperties":false,"properties":{"numItems":{"type":"number"},"cursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"endCursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"id":{"type":"number"},"maximumRowsRead":{"type":"number"},"maximumBytesRead":{"type":"number"}},"required":["numItems","cursor"]}},"required":["mode","paginationOpts"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/historyPage":{"get":{"operationId":"workspace_workflow_historyPage","summary":"Workspace workflow: historyPage","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"paginationOpts":{"type":"object","additionalProperties":false,"properties":{"numItems":{"type":"number"},"cursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"endCursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"id":{"type":"number"},"maximumRowsRead":{"type":"number"},"maximumBytesRead":{"type":"number"}},"required":["numItems","cursor"]}},"required":["id","paginationOpts"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/lookup":{"get":{"operationId":"workspace_workflow_lookup","summary":"Workspace workflow: lookup","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"resource":{"anyOf":[{"anyOf":[{"type":"string","enum":["interactions"]},{"type":"string","enum":["meetings"]},{"type":"string","enum":["documents"]},{"type":"string","enum":["evidence"]},{"type":"string","enum":["swarms"]},{"type":"string","enum":["opportunities"]}]},{"type":"string","enum":["records"]},{"type":"string","enum":["people"]},{"type":"string","enum":["companies"]}]},"q":{"type":"string"},"paginationOpts":{"type":"object","additionalProperties":false,"properties":{"numItems":{"type":"number"},"cursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"endCursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"id":{"type":"number"},"maximumRowsRead":{"type":"number"},"maximumBytesRead":{"type":"number"}},"required":["numItems","cursor"]}},"required":["resource","q","paginationOpts"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/selected":{"get":{"operationId":"workspace_workflow_selected","summary":"Workspace workflow: selected","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"resource":{"anyOf":[{"anyOf":[{"type":"string","enum":["interactions"]},{"type":"string","enum":["meetings"]},{"type":"string","enum":["documents"]},{"type":"string","enum":["evidence"]},{"type":"string","enum":["swarms"]},{"type":"string","enum":["opportunities"]}]},{"type":"string","enum":["records"]},{"type":"string","enum":["people"]},{"type":"string","enum":["companies"]}]},"ids":{"type":"array","items":{"type":"string"}}},"required":["resource","ids"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/meetingNotesPage":{"get":{"operationId":"workspace_workflow_meetingNotesPage","summary":"Workspace workflow: meetingNotesPage","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"recordId":{"type":"string"},"groupId":{"type":"string"},"meetingId":{"type":"string"},"opportunityId":{"type":"string"},"paginationOpts":{"type":"object","additionalProperties":false,"properties":{"numItems":{"type":"number"},"cursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"endCursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"id":{"type":"number"},"maximumRowsRead":{"type":"number"},"maximumBytesRead":{"type":"number"}},"required":["numItems","cursor"]}},"required":["id","paginationOpts"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/workflow/revision":{"get":{"operationId":"workspace_workflow_revision","summary":"Workspace workflow: revision","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"revision":{"type":"number"}},"required":["id","revision"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/connections/states":{"get":{"operationId":"workspace_connections_states","summary":"Workspace connections: states","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/companyNetwork/get":{"get":{"operationId":"workspace_companyNetwork_get","summary":"Workspace companyNetwork: get","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"companyId":{"type":"string"}},"required":["companyId"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/locations/options":{"get":{"operationId":"workspace_locations_options","summary":"Workspace locations: options","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"type":{"anyOf":[{"type":"string","enum":["country"]},{"type":"string","enum":["city"]}]},"country":{"type":"string"},"q":{"type":"string"}},"required":["type","q"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/opportunities/facts":{"get":{"operationId":"workspace_opportunities_facts","summary":"Workspace opportunities: facts","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"}},"required":["id"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/opportunities/attachments":{"get":{"operationId":"workspace_opportunities_attachments","summary":"Workspace opportunities: attachments","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"}},"required":["id"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/opportunities/stageMemberships":{"get":{"operationId":"workspace_opportunities_stageMemberships","summary":"Workspace opportunities: stageMemberships","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/swarms/report":{"get":{"operationId":"workspace_swarms_report","summary":"Workspace swarms: report","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"}},"required":["id"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/swarms/summaries":{"get":{"operationId":"workspace_swarms_summaries","summary":"Workspace swarms: summaries","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/swarms/targets":{"get":{"operationId":"workspace_swarms_targets","summary":"Workspace swarms: targets","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"generation":{"type":"number"},"kind":{"anyOf":[{"type":"string","enum":["people"]},{"type":"string","enum":["companies"]}]},"companyId":{"type":"string","minLength":1,"description":"records identifier"},"q":{"type":"string"},"filter":{"type":"string"},"sort":{"anyOf":[{"type":"string","enum":["name"]},{"type":"string","enum":["people"]},{"type":"string","enum":["connectedPeople"]},{"type":"string","enum":["pendingPeople"]},{"type":"string","enum":["completed"]},{"type":"string","enum":["open"]},{"type":"string","enum":["won"]}]},"desc":{"type":"boolean"},"paginationOpts":{"type":"object","additionalProperties":false,"properties":{"numItems":{"type":"number"},"cursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"endCursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"id":{"type":"number"},"maximumRowsRead":{"type":"number"},"maximumBytesRead":{"type":"number"}},"required":["numItems","cursor"]}},"required":["id","generation","kind","paginationOpts"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/swarms/target":{"get":{"operationId":"workspace_swarms_target","summary":"Workspace swarms: target","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"generation":{"type":"number"},"recordId":{"type":"string"}},"required":["id","generation","recordId"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/swarms/companyCandidates":{"get":{"operationId":"workspace_swarms_companyCandidates","summary":"Workspace swarms: companyCandidates","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"companyId":{"type":"string","minLength":1,"description":"records identifier"},"paginationOpts":{"type":"object","additionalProperties":false,"properties":{"numItems":{"type":"number"},"cursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"endCursor":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"id":{"type":"number"},"maximumRowsRead":{"type":"number"},"maximumBytesRead":{"type":"number"}},"required":["numItems","cursor"]}},"required":["id","companyId","paginationOpts"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/dashboard/overview":{"get":{"operationId":"workspace_dashboard_overview","summary":"Workspace dashboard: overview","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"asOf":{"type":"string"},"weeks":{"type":"number"},"includeSamples":{"type":"boolean"}},"required":["asOf","weeks"]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}},"/workspace/inbox/list":{"get":{"operationId":"workspace_inbox_list","summary":"Workspace inbox: list","description":"Read-only Actor workspace query. Uses the existing domain validator and the API key workspace; maintenance and authentication operations are not exposed.","parameters":[{"name":"args","in":"query","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}}],"responses":{"200":{"description":"Domain query result"},"400":{"description":"Invalid query"},"401":{"description":"Invalid or revoked API key"},"404":{"description":"Resource not found in this workspace"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Rolodex API key (ro_ prefix)"}},"schemas":{"Error":{"type":"object","required":["error","code","message"],"properties":{"error":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"details":{}}},"PersonCreate":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"description":"Record name; required on create. Search before creating a duplicate."},"email":{"type":"string"},"city":{"type":"string","maxLength":500,"description":"Recognized city; must match country when supplied."},"notes":{"type":"string","maxLength":50000},"archived":{"type":"boolean","description":"true archives the record; false restores it."},"externalId":{"type":"string"},"nextStep":{"type":"string","maxLength":4000,"description":"Recorded next step, when known; not an automatically inferred commitment."},"groupIds":{"type":"array","items":{"type":"string"},"description":"Explicit swarm memberships. Read before replacing; prefer swarm add/remove-member commands."},"role":{"type":"string"},"companyId":{"type":"string","nullable":true,"description":"Linked company ID in this workspace; null clears. Employment does not assert personal relationships."},"isConnected":{"type":"boolean","description":"Explicit connection override. Do not infer connection from CRM membership or shared employer.","nullable":true},"linkedinUrl":{"type":"string","description":"LinkedIn URL","maxLength":2000},"phone":{"type":"string","description":"Phone","maxLength":2000},"whatsapp":{"type":"string","description":"WhatsApp","maxLength":2000},"country":{"type":"string","description":"Recognized country name/code; validated against the location catalog.","maxLength":2000},"discoverySource":{"type":"string","description":"Discovery source","maxLength":2000,"enum":["","Research","Referral","Event","LinkedIn","Inbound","Other"]},"leadSourceLink":{"type":"string","description":"Lead source link","maxLength":2000},"jobFunction":{"type":"string","description":"Job function","maxLength":2000,"enum":["","Leadership","Customer experience","Marketing","Sales","Operations","Technology","Finance","People","Other"]},"decisionRole":{"type":"string","description":"Decision role","maxLength":2000,"enum":["","Decision maker","Internal champion","Influencer","Evaluator","User","Unknown"]},"priority":{"type":"string","description":"Priority","maxLength":2000,"enum":["","Low","Normal","High"]},"followUpDate":{"type":"string","description":"Follow-up date","maxLength":2000},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key for this logical creation. Retry identical input with the same key."},"allowDuplicate":{"type":"boolean","description":"Explicitly allow a distinct entity despite matching name, email or external ID candidates. Inspect candidates first."}},"required":["name","idempotencyKey"],"description":"Individual contacts and their company, role, contact details and relationship context.\ncompanyId links one company; coworkers are not automatically friends, connected contacts or introduction routes.\nisConnected is an explicit override. Do not mark a person connected simply because they exist in the CRM.\nCountry/city names are validated and normalized; supply a recognized country and matching city. An unknown location should remain unset.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"name":"Example contact","role":"Operations director","idempotencyKey":"UNIQUE_CREATION_KEY-0"}},"PersonUpdate":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"description":"Record name; required on create. Search before creating a duplicate."},"email":{"type":"string"},"city":{"type":"string","maxLength":500,"description":"Recognized city; must match country when supplied."},"notes":{"type":"string","maxLength":50000},"archived":{"type":"boolean","description":"true archives the record; false restores it."},"externalId":{"type":"string"},"nextStep":{"type":"string","maxLength":4000,"description":"Recorded next step, when known; not an automatically inferred commitment."},"groupIds":{"type":"array","items":{"type":"string"},"description":"Explicit swarm memberships. Read before replacing; prefer swarm add/remove-member commands."},"role":{"type":"string"},"companyId":{"type":"string","nullable":true,"description":"Linked company ID in this workspace; null clears. Employment does not assert personal relationships."},"isConnected":{"type":"boolean","description":"Explicit connection override. Do not infer connection from CRM membership or shared employer.","nullable":true},"linkedinUrl":{"type":"string","description":"LinkedIn URL","maxLength":2000},"phone":{"type":"string","description":"Phone","maxLength":2000},"whatsapp":{"type":"string","description":"WhatsApp","maxLength":2000},"country":{"type":"string","description":"Recognized country name/code; validated against the location catalog.","maxLength":2000},"discoverySource":{"type":"string","description":"Discovery source","maxLength":2000,"enum":["","Research","Referral","Event","LinkedIn","Inbound","Other"]},"leadSourceLink":{"type":"string","description":"Lead source link","maxLength":2000},"jobFunction":{"type":"string","description":"Job function","maxLength":2000,"enum":["","Leadership","Customer experience","Marketing","Sales","Operations","Technology","Finance","People","Other"]},"decisionRole":{"type":"string","description":"Decision role","maxLength":2000,"enum":["","Decision maker","Internal champion","Influencer","Evaluator","User","Unknown"]},"priority":{"type":"string","description":"Priority","maxLength":2000,"enum":["","Low","Normal","High"]},"followUpDate":{"type":"string","description":"Follow-up date","maxLength":2000},"expectedUpdatedAt":{"type":"integer","minimum":0,"description":"updatedAt returned when this record was read. Server rejects stale edits with CONFLICT and missing preconditions with PRECONDITION_REQUIRED."}},"required":["expectedUpdatedAt"],"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Person":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":500,"description":"Record name; required on create. Search before creating a duplicate."},"email":{"type":"string"},"city":{"type":"string","maxLength":500,"description":"Recognized city; must match country when supplied."},"notes":{"type":"string","maxLength":50000},"archived":{"type":"boolean","description":"true archives the record; false restores it."},"externalId":{"type":"string"},"nextStep":{"type":"string","maxLength":4000,"description":"Recorded next step, when known; not an automatically inferred commitment."},"groupIds":{"type":"array","items":{"type":"string"},"description":"Explicit swarm memberships. Read before replacing; prefer swarm add/remove-member commands."},"role":{"type":"string"},"companyId":{"type":"string","nullable":true,"description":"Linked company ID in this workspace; null clears. Employment does not assert personal relationships."},"isConnected":{"type":"boolean","description":"Explicit connection override. Do not infer connection from CRM membership or shared employer.","nullable":true},"linkedinUrl":{"type":"string","description":"LinkedIn URL","maxLength":2000},"phone":{"type":"string","description":"Phone","maxLength":2000},"whatsapp":{"type":"string","description":"WhatsApp","maxLength":2000},"country":{"type":"string","description":"Recognized country name/code; validated against the location catalog.","maxLength":2000},"discoverySource":{"type":"string","description":"Discovery source","maxLength":2000,"enum":["","Research","Referral","Event","LinkedIn","Inbound","Other"]},"leadSourceLink":{"type":"string","description":"Lead source link","maxLength":2000},"jobFunction":{"type":"string","description":"Job function","maxLength":2000,"enum":["","Leadership","Customer experience","Marketing","Sales","Operations","Technology","Finance","People","Other"]},"decisionRole":{"type":"string","description":"Decision role","maxLength":2000,"enum":["","Decision maker","Internal champion","Influencer","Evaluator","User","Unknown"]},"priority":{"type":"string","description":"Priority","maxLength":2000,"enum":["","Low","Normal","High"]},"followUpDate":{"type":"string","description":"Follow-up date","maxLength":2000},"_id":{"type":"string"},"_creationTime":{"type":"number"},"workspaceId":{"type":"string"},"kind":{"type":"string","enum":["people"]},"updatedAt":{"type":"number"}},"required":["_id","workspaceId","kind","name","archived","updatedAt"]},"CompanyCreate":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"description":"Record name; required on create. Search before creating a duplicate."},"email":{"type":"string"},"city":{"type":"string","maxLength":500,"description":"Recognized city; must match country when supplied."},"notes":{"type":"string","maxLength":50000,"description":"General narrative context and source notes shown on Overview. Preserve existing notes when adding context; this string is replaced on update."},"archived":{"type":"boolean","description":"true archives the record; false restores it."},"externalId":{"type":"string"},"size":{"type":"string","enum":["","1–10","11–50","51–200","201–500","501–1,000","1,001–5,000","5,001+"]},"region":{"type":"string"},"nextStep":{"type":"string","maxLength":4000,"description":"Recorded next step, when known; not an automatically inferred commitment."},"groupIds":{"type":"array","items":{"type":"string"},"description":"Explicit swarm memberships. Read before replacing; prefer swarm add/remove-member commands."},"website":{"type":"string","description":"HTTP(S) URL or empty string"},"industries":{"type":"array","description":"Broad business areas. Multiple independent labels allowed. Do not derive it from company name. Retired scalar industry is not accepted.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Professional services","Manufacturing","Hospitality & travel","Retail & consumer goods","Technology","Financial services","Real estate & construction","Healthcare","Education","Media & entertainment","Transport & logistics","Energy & utilities","Nonprofit & social services"],"x-allows-custom-values":true},"sectors":{"type":"array","description":"Branches within an industry, such as Legal services. Independent of industries and subsectors; selecting a label does not assign a parent.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Legal services","Architecture & design","Engineering","Construction","Real estate","Audio electronics","Consumer electronics","Apparel & textiles","Footwear","Jewellery & watches","Beauty & personal care","Furniture & homeware","Food & beverage","Hotels & resorts","Restaurants & catering","Travel & leisure","Software & technology","Financial services","Investment","Healthcare","Education","Arts & culture","Media & entertainment","Sports & recreation","Social services","Animal welfare","Energy","Environmental services","Building materials","Packaging & printing","Logistics","Recruitment & staffing","Consulting"],"x-allows-custom-values":true},"subsectors":{"type":"array","description":"Narrow specialisms, such as Family & matrimonial law. Multiple labels allowed; no parent is inferred.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Family & matrimonial law","Criminal law","Corporate law","Audio equipment","Luxury hotels","Business hotels","Resorts"],"x-allows-custom-values":true},"classificationLinks":{"type":"array","description":"Explicit record-specific adjacent-level relationships. level=sectors links label in sectors to parent in industries; level=subsectors links label in subsectors to parent in sectors. Both labels must be selected. Multiple parents allowed. Never infer links from array order or because only one parent exists. Removing a label prunes its links.","maxItems":200,"items":{"type":"object","required":["level","label","parent"],"additionalProperties":false,"properties":{"level":{"type":"string","enum":["sectors","subsectors"]},"label":{"type":"string","minLength":1,"maxLength":120},"parent":{"type":"string","minLength":1,"maxLength":120}}}},"offeringItems":{"type":"array","description":"What the company provides: products or services, such as speakers or contract drafting. Each item has a label and optional description; a label alone is sufficient. Use this array; retired offerings is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-allows-custom-values":true},"offeringsDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual offeringItems.","maxLength":20000,"deprecated":true},"activityItems":{"type":"array","description":"How the company works or delivers value (OEM, distributor, adviser). Each item has a label and optional description. Distinct from what it sells. Use this array; retired businessActivities is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-suggested-values":["Manufacturer","OEM","ODM","Sourcing","Distributor","Wholesaler","Retailer","Brand owner","Operator","Adviser","Service provider","Platform","Software provider","Investor","Developer","Contractor","Membership organisation"],"x-allows-custom-values":true},"businessActivitiesDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual activityItems.","maxLength":20000,"deprecated":true},"customerItems":{"type":"array","description":"Who the company serves or benefits. Each segment has a label and optional description. Record supported customers/beneficiaries; do not infer them from products. Use this array; retired customerSegments is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-suggested-values":["Individuals","Families","Businesses","Brands","Retailers","Hospitality operators","Government","Nonprofits","Members","Students","Patients","Local communities"],"x-allows-custom-values":true},"customerSegmentsDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual customerItems.","maxLength":20000,"deprecated":true},"positioning":{"type":"array","description":"Supported market positioning, such as Luxury or Specialist. Do not infer it from branding, prices, or a company name alone.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Luxury","Premium","Mass market","Value","Specialist"],"x-allows-custom-values":true},"tags":{"type":"array","description":"Optional free-form descriptors that do not fit a dedicated field. Reuse existing terms when known; tags are not evidence and must not substitute for structured facts.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"entityScope":{"type":"string","description":"What this record represents: organisation, group, subsidiary, brand, site or department. Use Unresolved or omit when unclear; do not conflate a hotel property with its operator or group.","maxLength":2000,"enum":["","Organisation","Group","Subsidiary","Brand","Property / site","Department","Unresolved"]},"ownershipModels":{"type":"array","description":"Who owns the company. Family-run does not establish family ownership. Leave unset without ownership evidence.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Family-owned","Founder-owned","Privately held","Publicly listed","State-owned","Member-owned","Employee-owned","Nonprofit"]},"x-allows-custom-values":false},"managementModels":{"type":"array","description":"Who runs the company. Family-run and professionally managed describe management, independently of ownership.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Family-run","Founder-led","Professionally managed","Member-led","Volunteer-led"]},"x-allows-custom-values":false},"operatorCompanyId":{"type":"string","description":"ID of the company operating this entity/site. Operation does not imply ownership or a parent relationship. null clears the link.","nullable":true},"brandCompanyId":{"type":"string","description":"ID of the brand's company record. Brand affiliation does not establish ownership or operation. null clears the link.","nullable":true},"operatingLocations":{"type":"array","description":"Countries or regions with physical offices, factories or other operating sites. Not customer markets, legal jurisdictions, or proof of cross-border work.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"marketsServed":{"type":"array","description":"Countries or regions where customers or beneficiaries are served. Does not establish a physical operating site.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"classificationProfiles":{"type":"array","description":"Sector detail sets for UI visibility only: Legal, Manufacturing, Hospitality. Enables fields; never populates facts. Relevant saved sectors/activities/details can also reveal these sets.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Legal","Manufacturing","Hospitality"]},"x-allows-custom-values":false},"practiceAreas":{"type":"array","description":"Legal practice areas actually offered; a legal sector classification does not prove any particular practice area.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Matrimonial & family","Corporate & commercial","Criminal defence","Dispute resolution","Intellectual property","Employment","Property","Private client","Regulatory"],"x-allows-custom-values":true},"legalWorkTypes":{"type":"array","description":"Contentious and/or non-contentious work when supported. Do not assume a legal firm does both.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Contentious","Non-contentious"]},"x-allows-custom-values":false},"jurisdictions":{"type":"array","description":"Legal jurisdictions in which work is supported by evidence. Separate from office locations and customer markets.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"manufacturingCapabilities":{"type":"array","description":"Specific supported manufacturing capabilities; OEM does not imply design, tooling or all listed capabilities.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Product design","Prototyping","Assembly","Tooling","Quality testing","Packaging"],"x-allows-custom-values":true},"certifications":{"type":"array","description":"Certifications supported by evidence. Never infer certification from an industry or capability.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"propertyTypes":{"type":"array","description":"Hospitality property types actually represented or operated by this record.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Hotel","Resort","Serviced residence","Restaurant","Bar","Club","Lounge"],"x-allows-custom-values":true},"facilities":{"type":"array","description":"Supported facilities/services of this entity; a group's facilities do not establish those at every property.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Dining","Spa","Wellness","Meetings & events","Weddings","Pool"],"x-allows-custom-values":true},"classificationNotes":{"type":"string","description":"Legacy classification notes; use general notes for new narrative context and sources.","maxLength":20000,"deprecated":true},"linkedinUrl":{"type":"string","description":"LinkedIn URL","maxLength":2000},"phone":{"type":"string","description":"Phone","maxLength":2000},"country":{"type":"string","description":"Recognized country name/code; validated against the location catalog.","maxLength":2000},"parentCompanyId":{"type":"string","description":"ID of the direct parent company in this workspace. Distinct from operator or brand. Do not infer corporate ownership from branding. null clears the link.","nullable":true},"primaryContactPersonId":{"type":"string","description":"POC","nullable":true},"hqAddress":{"type":"string","description":"Address","maxLength":20000},"priority":{"type":"string","description":"Priority","maxLength":2000,"enum":["","Low","Normal","High"]},"organisationType":{"type":"string","description":"Legal/organisational form. Separate from business activity, management and ownership.","maxLength":2000,"enum":["","Private company","Public company","Nonprofit","Charity","Association","Government","Public body","Partnership","Sole trader","Other"]},"folderUrl":{"type":"string","description":"Folder","maxLength":2000},"followUpDate":{"type":"string","description":"Follow-up date","maxLength":2000},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key for this logical creation. Retry identical input with the same key."},"allowDuplicate":{"type":"boolean","description":"Explicitly allow a distinct entity despite matching name, email or external ID candidates. Inspect candidates first."}},"required":["name","idempotencyKey"],"description":"Organisations, brands and sites with independently recorded classification, activities, offerings, customers, structure and geography.\nIndustry, Sector and Sub-sector are separate multi-label levels. Empty arrays explicitly clear labels; no parent links are inferred.\nUse described entry arrays; retired offerings/businessActivities/customerSegments label arrays are rejected. Replacing an entry without its description removes that description.\nOwnership, management, activities, customers and geography are independent. Family-run does not imply family-owned; OEM does not imply a brand, customer segment, or certification.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"name":"Example Audio","activityItems":[{"label":"OEM","description":"Manufactures audio assemblies to customer specifications."}],"managementModels":["Family-run"],"idempotencyKey":"UNIQUE_CREATION_KEY-0"}},"CompanyUpdate":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"description":"Record name; required on create. Search before creating a duplicate."},"email":{"type":"string"},"city":{"type":"string","maxLength":500,"description":"Recognized city; must match country when supplied."},"notes":{"type":"string","maxLength":50000,"description":"General narrative context and source notes shown on Overview. Preserve existing notes when adding context; this string is replaced on update."},"archived":{"type":"boolean","description":"true archives the record; false restores it."},"externalId":{"type":"string"},"size":{"type":"string","enum":["","1–10","11–50","51–200","201–500","501–1,000","1,001–5,000","5,001+"]},"region":{"type":"string"},"nextStep":{"type":"string","maxLength":4000,"description":"Recorded next step, when known; not an automatically inferred commitment."},"groupIds":{"type":"array","items":{"type":"string"},"description":"Explicit swarm memberships. Read before replacing; prefer swarm add/remove-member commands."},"website":{"type":"string","description":"HTTP(S) URL or empty string"},"industries":{"type":"array","description":"Broad business areas. Multiple independent labels allowed. Do not derive it from company name. Retired scalar industry is not accepted.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Professional services","Manufacturing","Hospitality & travel","Retail & consumer goods","Technology","Financial services","Real estate & construction","Healthcare","Education","Media & entertainment","Transport & logistics","Energy & utilities","Nonprofit & social services"],"x-allows-custom-values":true},"sectors":{"type":"array","description":"Branches within an industry, such as Legal services. Independent of industries and subsectors; selecting a label does not assign a parent.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Legal services","Architecture & design","Engineering","Construction","Real estate","Audio electronics","Consumer electronics","Apparel & textiles","Footwear","Jewellery & watches","Beauty & personal care","Furniture & homeware","Food & beverage","Hotels & resorts","Restaurants & catering","Travel & leisure","Software & technology","Financial services","Investment","Healthcare","Education","Arts & culture","Media & entertainment","Sports & recreation","Social services","Animal welfare","Energy","Environmental services","Building materials","Packaging & printing","Logistics","Recruitment & staffing","Consulting"],"x-allows-custom-values":true},"subsectors":{"type":"array","description":"Narrow specialisms, such as Family & matrimonial law. Multiple labels allowed; no parent is inferred.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Family & matrimonial law","Criminal law","Corporate law","Audio equipment","Luxury hotels","Business hotels","Resorts"],"x-allows-custom-values":true},"classificationLinks":{"type":"array","description":"Explicit record-specific adjacent-level relationships. level=sectors links label in sectors to parent in industries; level=subsectors links label in subsectors to parent in sectors. Both labels must be selected. Multiple parents allowed. Never infer links from array order or because only one parent exists. Removing a label prunes its links.","maxItems":200,"items":{"type":"object","required":["level","label","parent"],"additionalProperties":false,"properties":{"level":{"type":"string","enum":["sectors","subsectors"]},"label":{"type":"string","minLength":1,"maxLength":120},"parent":{"type":"string","minLength":1,"maxLength":120}}}},"offeringItems":{"type":"array","description":"What the company provides: products or services, such as speakers or contract drafting. Each item has a label and optional description; a label alone is sufficient. Use this array; retired offerings is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-allows-custom-values":true},"offeringsDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual offeringItems.","maxLength":20000,"deprecated":true},"activityItems":{"type":"array","description":"How the company works or delivers value (OEM, distributor, adviser). Each item has a label and optional description. Distinct from what it sells. Use this array; retired businessActivities is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-suggested-values":["Manufacturer","OEM","ODM","Sourcing","Distributor","Wholesaler","Retailer","Brand owner","Operator","Adviser","Service provider","Platform","Software provider","Investor","Developer","Contractor","Membership organisation"],"x-allows-custom-values":true},"businessActivitiesDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual activityItems.","maxLength":20000,"deprecated":true},"customerItems":{"type":"array","description":"Who the company serves or benefits. Each segment has a label and optional description. Record supported customers/beneficiaries; do not infer them from products. Use this array; retired customerSegments is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-suggested-values":["Individuals","Families","Businesses","Brands","Retailers","Hospitality operators","Government","Nonprofits","Members","Students","Patients","Local communities"],"x-allows-custom-values":true},"customerSegmentsDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual customerItems.","maxLength":20000,"deprecated":true},"positioning":{"type":"array","description":"Supported market positioning, such as Luxury or Specialist. Do not infer it from branding, prices, or a company name alone.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Luxury","Premium","Mass market","Value","Specialist"],"x-allows-custom-values":true},"tags":{"type":"array","description":"Optional free-form descriptors that do not fit a dedicated field. Reuse existing terms when known; tags are not evidence and must not substitute for structured facts.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"entityScope":{"type":"string","description":"What this record represents: organisation, group, subsidiary, brand, site or department. Use Unresolved or omit when unclear; do not conflate a hotel property with its operator or group.","maxLength":2000,"enum":["","Organisation","Group","Subsidiary","Brand","Property / site","Department","Unresolved"]},"ownershipModels":{"type":"array","description":"Who owns the company. Family-run does not establish family ownership. Leave unset without ownership evidence.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Family-owned","Founder-owned","Privately held","Publicly listed","State-owned","Member-owned","Employee-owned","Nonprofit"]},"x-allows-custom-values":false},"managementModels":{"type":"array","description":"Who runs the company. Family-run and professionally managed describe management, independently of ownership.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Family-run","Founder-led","Professionally managed","Member-led","Volunteer-led"]},"x-allows-custom-values":false},"operatorCompanyId":{"type":"string","description":"ID of the company operating this entity/site. Operation does not imply ownership or a parent relationship. null clears the link.","nullable":true},"brandCompanyId":{"type":"string","description":"ID of the brand's company record. Brand affiliation does not establish ownership or operation. null clears the link.","nullable":true},"operatingLocations":{"type":"array","description":"Countries or regions with physical offices, factories or other operating sites. Not customer markets, legal jurisdictions, or proof of cross-border work.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"marketsServed":{"type":"array","description":"Countries or regions where customers or beneficiaries are served. Does not establish a physical operating site.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"classificationProfiles":{"type":"array","description":"Sector detail sets for UI visibility only: Legal, Manufacturing, Hospitality. Enables fields; never populates facts. Relevant saved sectors/activities/details can also reveal these sets.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Legal","Manufacturing","Hospitality"]},"x-allows-custom-values":false},"practiceAreas":{"type":"array","description":"Legal practice areas actually offered; a legal sector classification does not prove any particular practice area.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Matrimonial & family","Corporate & commercial","Criminal defence","Dispute resolution","Intellectual property","Employment","Property","Private client","Regulatory"],"x-allows-custom-values":true},"legalWorkTypes":{"type":"array","description":"Contentious and/or non-contentious work when supported. Do not assume a legal firm does both.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Contentious","Non-contentious"]},"x-allows-custom-values":false},"jurisdictions":{"type":"array","description":"Legal jurisdictions in which work is supported by evidence. Separate from office locations and customer markets.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"manufacturingCapabilities":{"type":"array","description":"Specific supported manufacturing capabilities; OEM does not imply design, tooling or all listed capabilities.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Product design","Prototyping","Assembly","Tooling","Quality testing","Packaging"],"x-allows-custom-values":true},"certifications":{"type":"array","description":"Certifications supported by evidence. Never infer certification from an industry or capability.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"propertyTypes":{"type":"array","description":"Hospitality property types actually represented or operated by this record.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Hotel","Resort","Serviced residence","Restaurant","Bar","Club","Lounge"],"x-allows-custom-values":true},"facilities":{"type":"array","description":"Supported facilities/services of this entity; a group's facilities do not establish those at every property.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Dining","Spa","Wellness","Meetings & events","Weddings","Pool"],"x-allows-custom-values":true},"classificationNotes":{"type":"string","description":"Legacy classification notes; use general notes for new narrative context and sources.","maxLength":20000,"deprecated":true},"linkedinUrl":{"type":"string","description":"LinkedIn URL","maxLength":2000},"phone":{"type":"string","description":"Phone","maxLength":2000},"country":{"type":"string","description":"Recognized country name/code; validated against the location catalog.","maxLength":2000},"parentCompanyId":{"type":"string","description":"ID of the direct parent company in this workspace. Distinct from operator or brand. Do not infer corporate ownership from branding. null clears the link.","nullable":true},"primaryContactPersonId":{"type":"string","description":"POC","nullable":true},"hqAddress":{"type":"string","description":"Address","maxLength":20000},"priority":{"type":"string","description":"Priority","maxLength":2000,"enum":["","Low","Normal","High"]},"organisationType":{"type":"string","description":"Legal/organisational form. Separate from business activity, management and ownership.","maxLength":2000,"enum":["","Private company","Public company","Nonprofit","Charity","Association","Government","Public body","Partnership","Sole trader","Other"]},"folderUrl":{"type":"string","description":"Folder","maxLength":2000},"followUpDate":{"type":"string","description":"Follow-up date","maxLength":2000},"expectedUpdatedAt":{"type":"integer","minimum":0,"description":"updatedAt returned when this record was read. Server rejects stale edits with CONFLICT and missing preconditions with PRECONDITION_REQUIRED."}},"required":["expectedUpdatedAt"],"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Company":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":500,"description":"Record name; required on create. Search before creating a duplicate."},"email":{"type":"string"},"city":{"type":"string","maxLength":500,"description":"Recognized city; must match country when supplied."},"notes":{"type":"string","maxLength":50000,"description":"General narrative context and source notes shown on Overview. Preserve existing notes when adding context; this string is replaced on update."},"archived":{"type":"boolean","description":"true archives the record; false restores it."},"externalId":{"type":"string"},"size":{"type":"string","enum":["","1–10","11–50","51–200","201–500","501–1,000","1,001–5,000","5,001+"]},"region":{"type":"string"},"nextStep":{"type":"string","maxLength":4000,"description":"Recorded next step, when known; not an automatically inferred commitment."},"groupIds":{"type":"array","items":{"type":"string"},"description":"Explicit swarm memberships. Read before replacing; prefer swarm add/remove-member commands."},"website":{"type":"string","description":"HTTP(S) URL or empty string"},"industries":{"type":"array","description":"Broad business areas. Multiple independent labels allowed. Do not derive it from company name. Retired scalar industry is not accepted.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Professional services","Manufacturing","Hospitality & travel","Retail & consumer goods","Technology","Financial services","Real estate & construction","Healthcare","Education","Media & entertainment","Transport & logistics","Energy & utilities","Nonprofit & social services"],"x-allows-custom-values":true},"sectors":{"type":"array","description":"Branches within an industry, such as Legal services. Independent of industries and subsectors; selecting a label does not assign a parent.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Legal services","Architecture & design","Engineering","Construction","Real estate","Audio electronics","Consumer electronics","Apparel & textiles","Footwear","Jewellery & watches","Beauty & personal care","Furniture & homeware","Food & beverage","Hotels & resorts","Restaurants & catering","Travel & leisure","Software & technology","Financial services","Investment","Healthcare","Education","Arts & culture","Media & entertainment","Sports & recreation","Social services","Animal welfare","Energy","Environmental services","Building materials","Packaging & printing","Logistics","Recruitment & staffing","Consulting"],"x-allows-custom-values":true},"subsectors":{"type":"array","description":"Narrow specialisms, such as Family & matrimonial law. Multiple labels allowed; no parent is inferred.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Family & matrimonial law","Criminal law","Corporate law","Audio equipment","Luxury hotels","Business hotels","Resorts"],"x-allows-custom-values":true},"classificationLinks":{"type":"array","description":"Explicit record-specific adjacent-level relationships. level=sectors links label in sectors to parent in industries; level=subsectors links label in subsectors to parent in sectors. Both labels must be selected. Multiple parents allowed. Never infer links from array order or because only one parent exists. Removing a label prunes its links.","maxItems":200,"items":{"type":"object","required":["level","label","parent"],"additionalProperties":false,"properties":{"level":{"type":"string","enum":["sectors","subsectors"]},"label":{"type":"string","minLength":1,"maxLength":120},"parent":{"type":"string","minLength":1,"maxLength":120}}}},"offeringItems":{"type":"array","description":"What the company provides: products or services, such as speakers or contract drafting. Each item has a label and optional description; a label alone is sufficient. Use this array; retired offerings is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-allows-custom-values":true},"offeringsDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual offeringItems.","maxLength":20000,"deprecated":true},"activityItems":{"type":"array","description":"How the company works or delivers value (OEM, distributor, adviser). Each item has a label and optional description. Distinct from what it sells. Use this array; retired businessActivities is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-suggested-values":["Manufacturer","OEM","ODM","Sourcing","Distributor","Wholesaler","Retailer","Brand owner","Operator","Adviser","Service provider","Platform","Software provider","Investor","Developer","Contractor","Membership organisation"],"x-allows-custom-values":true},"businessActivitiesDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual activityItems.","maxLength":20000,"deprecated":true},"customerItems":{"type":"array","description":"Who the company serves or benefits. Each segment has a label and optional description. Record supported customers/beneficiaries; do not infer them from products. Use this array; retired customerSegments is not accepted.","maxItems":50,"items":{"type":"object","required":["label"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":20000}}},"x-suggested-values":["Individuals","Families","Businesses","Brands","Retailers","Hospitality operators","Government","Nonprofits","Members","Students","Patients","Local communities"],"x-allows-custom-values":true},"customerSegmentsDescription":{"type":"string","description":"Legacy section-wide prose; prefer optional descriptions on individual customerItems.","maxLength":20000,"deprecated":true},"positioning":{"type":"array","description":"Supported market positioning, such as Luxury or Specialist. Do not infer it from branding, prices, or a company name alone.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Luxury","Premium","Mass market","Value","Specialist"],"x-allows-custom-values":true},"tags":{"type":"array","description":"Optional free-form descriptors that do not fit a dedicated field. Reuse existing terms when known; tags are not evidence and must not substitute for structured facts.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"entityScope":{"type":"string","description":"What this record represents: organisation, group, subsidiary, brand, site or department. Use Unresolved or omit when unclear; do not conflate a hotel property with its operator or group.","maxLength":2000,"enum":["","Organisation","Group","Subsidiary","Brand","Property / site","Department","Unresolved"]},"ownershipModels":{"type":"array","description":"Who owns the company. Family-run does not establish family ownership. Leave unset without ownership evidence.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Family-owned","Founder-owned","Privately held","Publicly listed","State-owned","Member-owned","Employee-owned","Nonprofit"]},"x-allows-custom-values":false},"managementModels":{"type":"array","description":"Who runs the company. Family-run and professionally managed describe management, independently of ownership.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Family-run","Founder-led","Professionally managed","Member-led","Volunteer-led"]},"x-allows-custom-values":false},"operatorCompanyId":{"type":"string","description":"ID of the company operating this entity/site. Operation does not imply ownership or a parent relationship. null clears the link.","nullable":true},"brandCompanyId":{"type":"string","description":"ID of the brand's company record. Brand affiliation does not establish ownership or operation. null clears the link.","nullable":true},"operatingLocations":{"type":"array","description":"Countries or regions with physical offices, factories or other operating sites. Not customer markets, legal jurisdictions, or proof of cross-border work.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"marketsServed":{"type":"array","description":"Countries or regions where customers or beneficiaries are served. Does not establish a physical operating site.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"classificationProfiles":{"type":"array","description":"Sector detail sets for UI visibility only: Legal, Manufacturing, Hospitality. Enables fields; never populates facts. Relevant saved sectors/activities/details can also reveal these sets.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Legal","Manufacturing","Hospitality"]},"x-allows-custom-values":false},"practiceAreas":{"type":"array","description":"Legal practice areas actually offered; a legal sector classification does not prove any particular practice area.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Matrimonial & family","Corporate & commercial","Criminal defence","Dispute resolution","Intellectual property","Employment","Property","Private client","Regulatory"],"x-allows-custom-values":true},"legalWorkTypes":{"type":"array","description":"Contentious and/or non-contentious work when supported. Do not assume a legal firm does both.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120,"enum":["Contentious","Non-contentious"]},"x-allows-custom-values":false},"jurisdictions":{"type":"array","description":"Legal jurisdictions in which work is supported by evidence. Separate from office locations and customer markets.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"manufacturingCapabilities":{"type":"array","description":"Specific supported manufacturing capabilities; OEM does not imply design, tooling or all listed capabilities.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Product design","Prototyping","Assembly","Tooling","Quality testing","Packaging"],"x-allows-custom-values":true},"certifications":{"type":"array","description":"Certifications supported by evidence. Never infer certification from an industry or capability.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-allows-custom-values":true},"propertyTypes":{"type":"array","description":"Hospitality property types actually represented or operated by this record.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Hotel","Resort","Serviced residence","Restaurant","Bar","Club","Lounge"],"x-allows-custom-values":true},"facilities":{"type":"array","description":"Supported facilities/services of this entity; a group's facilities do not establish those at every property.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":120},"x-suggested-values":["Dining","Spa","Wellness","Meetings & events","Weddings","Pool"],"x-allows-custom-values":true},"classificationNotes":{"type":"string","description":"Legacy classification notes; use general notes for new narrative context and sources.","maxLength":20000,"deprecated":true},"linkedinUrl":{"type":"string","description":"LinkedIn URL","maxLength":2000},"phone":{"type":"string","description":"Phone","maxLength":2000},"country":{"type":"string","description":"Recognized country name/code; validated against the location catalog.","maxLength":2000},"parentCompanyId":{"type":"string","description":"ID of the direct parent company in this workspace. Distinct from operator or brand. Do not infer corporate ownership from branding. null clears the link.","nullable":true},"primaryContactPersonId":{"type":"string","description":"POC","nullable":true},"hqAddress":{"type":"string","description":"Address","maxLength":20000},"priority":{"type":"string","description":"Priority","maxLength":2000,"enum":["","Low","Normal","High"]},"organisationType":{"type":"string","description":"Legal/organisational form. Separate from business activity, management and ownership.","maxLength":2000,"enum":["","Private company","Public company","Nonprofit","Charity","Association","Government","Public body","Partnership","Sole trader","Other"]},"folderUrl":{"type":"string","description":"Folder","maxLength":2000},"followUpDate":{"type":"string","description":"Follow-up date","maxLength":2000},"_id":{"type":"string"},"_creationTime":{"type":"number"},"workspaceId":{"type":"string"},"kind":{"type":"string","enum":["companies"]},"updatedAt":{"type":"number"}},"required":["_id","workspaceId","kind","name","archived","updatedAt"]},"Entry":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"channel":{"type":"string"},"direction":{"type":"string"},"outcome":{"type":"string"},"occurredAt":{"type":"string"},"sourceId":{"type":"string"},"sourceNote":{"type":"string"},"replyToId":{"type":"string"},"threadId":{"type":"string"},"meetingId":{"type":"string"},"opportunityId":{"type":"string"},"url":{"type":"string"},"externalId":{"type":"string"},"venue":{"type":"string"},"purpose":{"type":"string","description":"Question / purpose for non-meeting entries. Meetings use purposeType; purpose text is rejected."},"swarmAssessment":{"type":"string","description":"Assessment","maxLength":4000},"dealValue":{"type":"number","nullable":true,"description":"Deal size","minimum":0},"currency":{"type":"string","description":"Currency","maxLength":4000},"expectedCloseDate":{"type":"string","description":"Expected close","maxLength":4000,"format":"date"},"contractDurationMonths":{"type":"number","nullable":true,"description":"Duration (months)","minimum":0},"dealType":{"type":"string","description":"Deal type","maxLength":4000},"lostReason":{"type":"string","description":"Lost reason","maxLength":4000},"holdReason":{"type":"string","description":"Hold reason","maxLength":4000},"touch":{"type":"string","description":"Touch","maxLength":4000},"actualReply":{"type":"string","description":"Actual reply / result","maxLength":4000},"seenDate":{"type":"string","description":"Seen date","maxLength":4000,"format":"date"},"replyDate":{"type":"string","description":"Reply date","maxLength":4000,"format":"date"},"outcomeStatus":{"type":"string","description":"Outcome status","maxLength":4000},"timingContext":{"type":"string","description":"Timing context","maxLength":4000},"learningGoal":{"type":"string","description":"Learning goal","maxLength":4000},"accessRoute":{"type":"string","description":"Access route","maxLength":4000},"trustCue":{"type":"string","description":"Trust cue","maxLength":4000},"messagePosture":{"type":"string","description":"Message posture","maxLength":4000},"askType":{"type":"string","description":"Ask type","maxLength":4000},"newInformation":{"type":"string","description":"New information","maxLength":4000},"nextUnknown":{"type":"string","description":"Next unknown","maxLength":4000},"nextExperiment":{"type":"string","description":"Recommended next experiment","maxLength":4000},"meetingFormat":{"type":"string","description":"Format","maxLength":4000},"purposeType":{"type":"string","description":"Purpose","maxLength":4000},"owner":{"type":"string","description":"Owner","maxLength":4000},"debrief":{"type":"string","description":"Debrief notes","maxLength":4000},"profileDimension":{"type":"string","description":"Category","maxLength":4000},"startedDate":{"type":"string","description":"Started","maxLength":4000,"format":"date"},"mainConclusion":{"type":"string","description":"Main conclusion / next step","maxLength":4000},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100},"archived":{"type":"boolean"},"memberCount":{"type":"integer"},"membersPaginated":{"type":"boolean","description":"When true, recordIds is omitted; use /swarms/{id}/members."},"_id":{"type":"string"},"resource":{"type":"string"},"revision":{"type":"integer"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"createdBy":{"type":"string"},"updatedBy":{"type":"string"}}},"InteractionsCreate":{"type":"object","additionalProperties":false,"required":["title","idempotencyKey","type"],"properties":{"touch":{"type":"string","maxLength":4000,"description":"Touch"},"actualReply":{"type":"string","maxLength":4000,"description":"Actual reply / result"},"seenDate":{"type":"string","maxLength":4000,"description":"Seen date Calendar date YYYY-MM-DD, or empty string to clear."},"replyDate":{"type":"string","maxLength":4000,"description":"Reply date Calendar date YYYY-MM-DD, or empty string to clear."},"outcomeStatus":{"type":"string","maxLength":4000,"description":"Outcome status"},"timingContext":{"type":"string","maxLength":4000,"description":"Timing context"},"learningGoal":{"type":"string","maxLength":4000,"description":"Learning goal"},"accessRoute":{"type":"string","maxLength":4000,"description":"Access route"},"trustCue":{"type":"string","maxLength":4000,"description":"Trust cue"},"messagePosture":{"type":"string","maxLength":4000,"description":"Message posture"},"askType":{"type":"string","maxLength":4000,"description":"Ask type"},"newInformation":{"type":"string","maxLength":4000,"description":"New information"},"nextUnknown":{"type":"string","maxLength":4000,"description":"Next unknown"},"nextExperiment":{"type":"string","maxLength":4000,"description":"Recommended next experiment"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"outreachFormat":{"type":"string","maxLength":4000,"description":"Outreach format for interactions; new formatted outreach must have type=draft. Does not send anything.","enum":["connection_request","linkedin_message","email","call"]},"recipient":{"type":"string","maxLength":4000,"description":"Draft outreach recipient; only use supported contact details."},"subject":{"type":"string","maxLength":4000,"description":"Draft outreach subject."},"approachNotes":{"type":"string","maxLength":4000,"description":"Internal rationale/context for the outreach draft."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type","enum":["draft","invitation_sent","invitation_accepted","outbound_message","inbound_reply","call","meeting","other"]},"status":{"type":"string","maxLength":4000,"description":"status"},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction","enum":["inbound","outbound","mutual"]},"outcome":{"type":"string","maxLength":4000,"description":"outcome","enum":["positive","neutral","negative","unclear"]},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key per logical creation, shared across workflow resources. Retry identical input with the same key."}},"description":"Draft outreach and actual communication events linked to people/companies.\ntype and participants are required; participants may be inherited from a linked meeting/opportunity when omitted.\nUse type=draft with outreachFormat for composed outreach. The CLI does not send it. Record sent and immutable sent snapshots use interactions confirm-sent, not generic update.\nOnly log outbound_message, invitation_sent, invitation_accepted or inbound_reply when the event occurred. replyToId/threadId reference interactions.\nA recorded sent snapshot is immutable; create a new draft for another attempt.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"title":"Introduction draft","type":"draft","outreachFormat":"email","recordIds":["PERSON_ID"],"body":"Draft message","idempotencyKey":"UNIQUE_CREATION_KEY"}},"InteractionsUpdate":{"type":"object","additionalProperties":false,"required":["expectedRevision"],"properties":{"touch":{"type":"string","maxLength":4000,"description":"Touch"},"actualReply":{"type":"string","maxLength":4000,"description":"Actual reply / result"},"seenDate":{"type":"string","maxLength":4000,"description":"Seen date Calendar date YYYY-MM-DD, or empty string to clear."},"replyDate":{"type":"string","maxLength":4000,"description":"Reply date Calendar date YYYY-MM-DD, or empty string to clear."},"outcomeStatus":{"type":"string","maxLength":4000,"description":"Outcome status"},"timingContext":{"type":"string","maxLength":4000,"description":"Timing context"},"learningGoal":{"type":"string","maxLength":4000,"description":"Learning goal"},"accessRoute":{"type":"string","maxLength":4000,"description":"Access route"},"trustCue":{"type":"string","maxLength":4000,"description":"Trust cue"},"messagePosture":{"type":"string","maxLength":4000,"description":"Message posture"},"askType":{"type":"string","maxLength":4000,"description":"Ask type"},"newInformation":{"type":"string","maxLength":4000,"description":"New information"},"nextUnknown":{"type":"string","maxLength":4000,"description":"Next unknown"},"nextExperiment":{"type":"string","maxLength":4000,"description":"Recommended next experiment"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"outreachFormat":{"type":"string","maxLength":4000,"description":"Outreach format for interactions; new formatted outreach must have type=draft. Does not send anything.","enum":["connection_request","linkedin_message","email","call"]},"recipient":{"type":"string","maxLength":4000,"description":"Draft outreach recipient; only use supported contact details."},"subject":{"type":"string","maxLength":4000,"description":"Draft outreach subject."},"approachNotes":{"type":"string","maxLength":4000,"description":"Internal rationale/context for the outreach draft."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type","enum":["draft","invitation_sent","invitation_accepted","outbound_message","inbound_reply","call","meeting","other"]},"status":{"type":"string","maxLength":4000,"description":"status"},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction","enum":["inbound","outbound","mutual"]},"outcome":{"type":"string","maxLength":4000,"description":"outcome","enum":["positive","neutral","negative","unclear"]},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"expectedRevision":{"type":"integer","minimum":1,"description":"revision from latest get. On conflict, reload and reconcile."}},"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Interactions":{"type":"object","properties":{"touch":{"type":"string","maxLength":4000,"description":"Touch"},"actualReply":{"type":"string","maxLength":4000,"description":"Actual reply / result"},"seenDate":{"type":"string","maxLength":4000,"description":"Seen date Calendar date YYYY-MM-DD, or empty string to clear."},"replyDate":{"type":"string","maxLength":4000,"description":"Reply date Calendar date YYYY-MM-DD, or empty string to clear."},"outcomeStatus":{"type":"string","maxLength":4000,"description":"Outcome status"},"timingContext":{"type":"string","maxLength":4000,"description":"Timing context"},"learningGoal":{"type":"string","maxLength":4000,"description":"Learning goal"},"accessRoute":{"type":"string","maxLength":4000,"description":"Access route"},"trustCue":{"type":"string","maxLength":4000,"description":"Trust cue"},"messagePosture":{"type":"string","maxLength":4000,"description":"Message posture"},"askType":{"type":"string","maxLength":4000,"description":"Ask type"},"newInformation":{"type":"string","maxLength":4000,"description":"New information"},"nextUnknown":{"type":"string","maxLength":4000,"description":"Next unknown"},"nextExperiment":{"type":"string","maxLength":4000,"description":"Recommended next experiment"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"outreachFormat":{"type":"string","maxLength":4000,"description":"Outreach format for interactions; new formatted outreach must have type=draft. Does not send anything.","enum":["connection_request","linkedin_message","email","call"]},"recipient":{"type":"string","maxLength":4000,"description":"Draft outreach recipient; only use supported contact details."},"subject":{"type":"string","maxLength":4000,"description":"Draft outreach subject."},"approachNotes":{"type":"string","maxLength":4000,"description":"Internal rationale/context for the outreach draft."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type","enum":["draft","invitation_sent","invitation_accepted","outbound_message","inbound_reply","call","meeting","other"]},"status":{"type":"string","maxLength":4000,"description":"status"},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction","enum":["inbound","outbound","mutual"]},"outcome":{"type":"string","maxLength":4000,"description":"outcome","enum":["positive","neutral","negative","unclear"]},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"_id":{"type":"string"},"revision":{"type":"integer"}},"additionalProperties":true},"MeetingsCreate":{"type":"object","additionalProperties":false,"required":["title","idempotencyKey"],"properties":{"meetingFormat":{"type":"string","maxLength":4000,"description":"Format"},"purposeType":{"type":"string","maxLength":4000,"description":"Purpose"},"owner":{"type":"string","maxLength":4000,"description":"Owner"},"debrief":{"type":"string","maxLength":4000,"description":"Meeting debrief notes. Saved content drives derived debrief status."},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["scheduled","completed","cancelled"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"nextMeetingId":{"type":"string","maxLength":4000,"description":"Explicit next meeting ID; empty string clears. Meetings only; cycles are rejected."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key per logical creation, shared across workflow resources. Retry identical input with the same key."}},"description":"Scheduled, completed or cancelled meetings, with participants, preparation and debrief context.\nUse purposeType for meeting purpose; purpose and manual follow-up fields are retired.\nDebrief status is derived from debrief content and meeting status; never write a debrief-status field.\nNewly linked people also add their active company to participants. Missing participants may inherit from a linked opportunity/meeting; inspect the saved result.\nnextMeetingId explicitly links the follow-up meeting. Empty string clears it and suppresses chronological fallback. Cycles and archived next meetings are rejected.\noccurredAt accepts a calendar date or ISO datetime; use a timezone offset for actual scheduled times. Omit unknown dates.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"title":"Discovery meeting","recordIds":["PERSON_ID"],"status":"scheduled","idempotencyKey":"UNIQUE_CREATION_KEY"}},"MeetingsUpdate":{"type":"object","additionalProperties":false,"required":["expectedRevision"],"properties":{"meetingFormat":{"type":"string","maxLength":4000,"description":"Format"},"purposeType":{"type":"string","maxLength":4000,"description":"Purpose"},"owner":{"type":"string","maxLength":4000,"description":"Owner"},"debrief":{"type":"string","maxLength":4000,"description":"Meeting debrief notes. Saved content drives derived debrief status."},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["scheduled","completed","cancelled"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"nextMeetingId":{"type":"string","maxLength":4000,"description":"Explicit next meeting ID; empty string clears. Meetings only; cycles are rejected."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"expectedRevision":{"type":"integer","minimum":1,"description":"revision from latest get. On conflict, reload and reconcile."}},"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Meetings":{"type":"object","properties":{"meetingFormat":{"type":"string","maxLength":4000,"description":"Format"},"purposeType":{"type":"string","maxLength":4000,"description":"Purpose"},"owner":{"type":"string","maxLength":4000,"description":"Owner"},"debrief":{"type":"string","maxLength":4000,"description":"Meeting debrief notes. Saved content drives derived debrief status."},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["scheduled","completed","cancelled"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"nextMeetingId":{"type":"string","maxLength":4000,"description":"Explicit next meeting ID; empty string clears. Meetings only; cycles are rejected."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"_id":{"type":"string"},"revision":{"type":"integer"}},"additionalProperties":true},"DocumentsCreate":{"type":"object","additionalProperties":false,"required":["title","idempotencyKey"],"properties":{"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type","enum":["note","research","meeting_prep","debrief","news"]},"status":{"type":"string","maxLength":4000,"description":"status"},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key per logical creation, shared across workflow resources. Retry identical input with the same key."}},"description":"External attachment links, surfaced as Attachments in the app; CLI/API resource name remains documents.\nUse title as the attachment name and an HTTP(S) url. This does not upload, fetch, read or version the external file.\nbody is retained for compatibility, but new attachments should use links. Attachment revision history tracks CRM metadata, not external content.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"title":"Company research","url":"https://example.com/research","recordIds":["COMPANY_ID"],"idempotencyKey":"UNIQUE_CREATION_KEY"}},"DocumentsUpdate":{"type":"object","additionalProperties":false,"required":["expectedRevision"],"properties":{"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type","enum":["note","research","meeting_prep","debrief","news"]},"status":{"type":"string","maxLength":4000,"description":"status"},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"expectedRevision":{"type":"integer","minimum":1,"description":"revision from latest get. On conflict, reload and reconcile."}},"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Documents":{"type":"object","properties":{"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type","enum":["note","research","meeting_prep","debrief","news"]},"status":{"type":"string","maxLength":4000,"description":"status"},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"_id":{"type":"string"},"revision":{"type":"integer"}},"additionalProperties":true},"EvidenceCreate":{"type":"object","additionalProperties":false,"required":["title","idempotencyKey","recordIds"],"properties":{"profileDimension":{"type":"string","maxLength":4000,"description":"Fact category appropriate to the linked subject; see resource rules."},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people.","minItems":1},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key per logical creation, shared across workflow resources. Retry identical input with the same key."}},"description":"Explicit facts linked to people or companies, displayed in profile fact sections; not an approval queue.\ntitle is the concise fact; body can add context. sourceNote, sourceId (attachment), and url preserve optional provenance.\nDo not present inference as a fact. Record attribution and uncertainty; leave unsupported conclusions out.\nPeople dimensions: Work, Interests, Personal context, Current priorities. Company dimensions: Business, Market & customers, Company context, Current priorities. Use the subject-appropriate category.\nEmployee-only facts do not become company facts automatically. Link the company explicitly only when the fact is about it.\nLegacy confidence/status/approval/temporal metadata is rejected. Use archived to retire a fact; history preserves revisions.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"title":"Planning a second production line","recordIds":["COMPANY_ID"],"profileDimension":"Current priorities","sourceNote":"Operations director stated this in the discovery meeting.","idempotencyKey":"UNIQUE_CREATION_KEY"}},"EvidenceUpdate":{"type":"object","additionalProperties":false,"required":["expectedRevision"],"properties":{"profileDimension":{"type":"string","maxLength":4000,"description":"Fact category appropriate to the linked subject; see resource rules."},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people.","minItems":1},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"expectedRevision":{"type":"integer","minimum":1,"description":"revision from latest get. On conflict, reload and reconcile."}},"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Evidence":{"type":"object","properties":{"profileDimension":{"type":"string","maxLength":4000,"description":"Fact category appropriate to the linked subject; see resource rules."},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people.","minItems":1},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"_id":{"type":"string"},"revision":{"type":"integer"}},"additionalProperties":true},"SwarmsCreate":{"type":"object","additionalProperties":false,"required":["title","idempotencyKey"],"properties":{"swarmAssessment":{"type":"string","maxLength":4000,"description":"Assessment","enum":["not_assessed","successful","mixed","unsuccessful"]},"startedDate":{"type":"string","maxLength":4000,"description":"Started Calendar date YYYY-MM-DD, or empty string to clear."},"mainConclusion":{"type":"string","maxLength":4000,"description":"Main conclusion / next step"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["researching","ready","active","closed"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key per logical creation, shared across workflow resources. Retry identical input with the same key."}},"description":"Research or outreach experiments that group explicit targets, a question/hypothesis, activity and results.\npurpose holds the question/hypothesis; mainConclusion holds findings. An experiment hypothesis is not a company fact.\nMembership is explicit. Adding a company does not enroll its employees. Link result entries through groupIds; target membership alone does not attribute an event to the swarm.\nAlways use members/add-members/remove-members for membership changes. More than 100 targets omits recordIds and sets membersPaginated; it does not mean the swarm is empty.\nMember pages use continueCursor/isDone. Continue even through empty filtered pages. Add/remove at most 100 IDs total per request with the current revision.\nReach and acceptance are different: existing connections affect reach, but acceptance results require explicitly swarm-linked acceptance events. Report metrics are derived, not writable fields.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"title":"Audio manufacturing research","purpose":"Which manufacturers report a need for better distributor coordination?","status":"researching","idempotencyKey":"UNIQUE_CREATION_KEY"}},"SwarmsUpdate":{"type":"object","additionalProperties":false,"required":["expectedRevision"],"properties":{"swarmAssessment":{"type":"string","maxLength":4000,"description":"Assessment","enum":["not_assessed","successful","mixed","unsuccessful"]},"startedDate":{"type":"string","maxLength":4000,"description":"Started Calendar date YYYY-MM-DD, or empty string to clear."},"mainConclusion":{"type":"string","maxLength":4000,"description":"Main conclusion / next step"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["researching","ready","active","closed"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"expectedRevision":{"type":"integer","minimum":1,"description":"revision from latest get. On conflict, reload and reconcile."}},"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Swarms":{"type":"object","properties":{"swarmAssessment":{"type":"string","maxLength":4000,"description":"Assessment","enum":["not_assessed","successful","mixed","unsuccessful"]},"startedDate":{"type":"string","maxLength":4000,"description":"Started Calendar date YYYY-MM-DD, or empty string to clear."},"mainConclusion":{"type":"string","maxLength":4000,"description":"Main conclusion / next step"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people."},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["researching","ready","active","closed"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"opportunityId":{"type":"string","maxLength":4000,"description":"Related opportunity ID; omitted participants can inherit from it. Not valid on opportunities themselves."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"_id":{"type":"string"},"revision":{"type":"integer"},"memberCount":{"type":"integer"},"membersPaginated":{"type":"boolean"}},"additionalProperties":true},"OpportunitiesCreate":{"type":"object","additionalProperties":false,"required":["title","idempotencyKey","status","recordIds"],"properties":{"dealValue":{"type":"number","nullable":true,"minimum":0,"description":"Nonnegative monetary value; null means unset, zero is valid. Interpret with currency."},"currency":{"type":"string","maxLength":4000,"description":"Optional uppercase ISO-style three-letter currency code, e.g. GBP. Never infer a currency from location.","pattern":"^([A-Z]{3})?$"},"expectedCloseDate":{"type":"string","maxLength":4000,"description":"Expected close Calendar date YYYY-MM-DD, or empty string to clear."},"contractDurationMonths":{"type":"number","nullable":true,"minimum":0,"description":"Duration (months)","exclusiveMinimum":true},"dealType":{"type":"string","maxLength":4000,"description":"Deal type","enum":["new_business","renewal","expansion"]},"lostReason":{"type":"string","maxLength":4000,"description":"Lost reason"},"holdReason":{"type":"string","maxLength":4000,"description":"Hold reason"},"owner":{"type":"string","maxLength":4000,"description":"Owner"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people.","minItems":1},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["qualifying","discovery","proposal","negotiation","won","lost","on_hold"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":200,"description":"Stable unique key per logical creation, shared across workflow resources. Retry identical input with the same key."}},"description":"Distinct commercial opportunities linked to one or more people/companies, each with its own sales stage and value.\nstatus and participants are required. One company may have multiple opportunities. Do not put deal stage on a person/company.\ndealValue is nonnegative; null/omitted is unknown and zero is valid. currency is an uppercase three-letter code. Do not combine values across currencies without conversion.\nLink related meetings/interactions/documents through opportunityId; participants inherit when omitted. Opportunities cannot belong to other opportunities.\nexpectedCloseDate is YYYY-MM-DD. contractDurationMonths must be positive when set. Closed time and derived reports are managed by the app.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."],"example":{"title":"Discovery engagement","status":"discovery","recordIds":["COMPANY_ID"],"idempotencyKey":"UNIQUE_CREATION_KEY"}},"OpportunitiesUpdate":{"type":"object","additionalProperties":false,"required":["expectedRevision"],"properties":{"dealValue":{"type":"number","nullable":true,"minimum":0,"description":"Nonnegative monetary value; null means unset, zero is valid. Interpret with currency."},"currency":{"type":"string","maxLength":4000,"description":"Optional uppercase ISO-style three-letter currency code, e.g. GBP. Never infer a currency from location.","pattern":"^([A-Z]{3})?$"},"expectedCloseDate":{"type":"string","maxLength":4000,"description":"Expected close Calendar date YYYY-MM-DD, or empty string to clear."},"contractDurationMonths":{"type":"number","nullable":true,"minimum":0,"description":"Duration (months)","exclusiveMinimum":true},"dealType":{"type":"string","maxLength":4000,"description":"Deal type","enum":["new_business","renewal","expansion"]},"lostReason":{"type":"string","maxLength":4000,"description":"Lost reason"},"holdReason":{"type":"string","maxLength":4000,"description":"Hold reason"},"owner":{"type":"string","maxLength":4000,"description":"Owner"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people.","minItems":1},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["qualifying","discovery","proposal","negotiation","won","lost","on_hold"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"expectedRevision":{"type":"integer","minimum":1,"description":"revision from latest get. On conflict, reload and reconcile."}},"description":"Read first. Omitted fields remain unchanged; arrays and strings are replaced, not appended.","x-recording-rules":["Record supported information, not assumptions. Unknown is not false, zero, or an empty list. Omit unknown fields; partial records are useful.","Suggested labels and examples are vocabulary, not evidence. Preserve uncertainty and attribution in notes or entry descriptions; do not turn hypotheses into facts.","Use validate for offline shape checks and create/update --dry-run for full server checks and a normalized diff. Preview does not reserve a version. Inspect removedItems and removedDescriptions before saving.","Read the existing record before updating. Omitted fields remain unchanged. Supplied arrays replace the entire array, not append; preserve existing labels, descriptions and links unless intentionally removing them. [] explicitly clears an array.","Use IDs returned by this workspace, not names or invented IDs. Search first to avoid duplicate people and companies; verify the returned record after writing.","To archive/restore workflow entries, update archived=true/false with the latest expectedRevision. People/companies have archive/restore commands requiring --expected-updated-at. Archive is reversible; no CLI permanent-delete command exists.","Workflow creates require a unique stable idempotencyKey for each logical creation; retry the identical body with the same key. Updates require expectedRevision from the latest get. On 409, reload and reconcile instead of blindly retrying.","People/company creates require idempotencyKey; exact retries return the existing record, changed payloads conflict. Updates require expectedUpdatedAt from the record read before editing. Duplicate candidates are rejected unless allowDuplicate=true is deliberately set for a distinct entity.","Creating an interaction records activity; it never sends email, messages, or invitations. Do not record sent/accepted events unless they actually happened.","Notes hold narrative context; structured fields hold supported attributes; evidence holds explicit sourced facts; documents hold attachment links. Link the same information rather than duplicating it everywhere."]},"Opportunities":{"type":"object","properties":{"dealValue":{"type":"number","nullable":true,"minimum":0,"description":"Nonnegative monetary value; null means unset, zero is valid. Interpret with currency."},"currency":{"type":"string","maxLength":4000,"description":"Optional uppercase ISO-style three-letter currency code, e.g. GBP. Never infer a currency from location.","pattern":"^([A-Z]{3})?$"},"expectedCloseDate":{"type":"string","maxLength":4000,"description":"Expected close Calendar date YYYY-MM-DD, or empty string to clear."},"contractDurationMonths":{"type":"number","nullable":true,"minimum":0,"description":"Duration (months)","exclusiveMinimum":true},"dealType":{"type":"string","maxLength":4000,"description":"Deal type","enum":["new_business","renewal","expansion"]},"lostReason":{"type":"string","maxLength":4000,"description":"Lost reason"},"holdReason":{"type":"string","maxLength":4000,"description":"Hold reason"},"owner":{"type":"string","maxLength":4000,"description":"Owner"},"sourceNote":{"type":"string","maxLength":4000,"description":"Source attribution or observation context; keep uncertainty visible."},"title":{"type":"string","maxLength":4000,"description":"Human-readable title; required on create. For evidence, the concise fact itself.","minLength":1},"body":{"type":"string","maxLength":150000,"description":"Narrative context. Replaces existing text on update; preserve relevant prior context."},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit linked people/company IDs in this workspace. Replaces the array. Missing participants can inherit from opportunityId or meetingId; meetings also add companies for newly linked people.","minItems":1},"groupIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Explicit swarm IDs attributing this entry to those experiments. Replaces the array."},"sourceIds":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Attachment IDs supporting this entry."},"type":{"type":"string","maxLength":4000,"description":"type"},"status":{"type":"string","maxLength":4000,"description":"status","enum":["qualifying","discovery","proposal","negotiation","won","lost","on_hold"]},"channel":{"type":"string","maxLength":4000,"description":"channel"},"direction":{"type":"string","maxLength":4000,"description":"direction"},"outcome":{"type":"string","maxLength":4000,"description":"outcome"},"occurredAt":{"type":"string","maxLength":4000,"description":"Calendar date or ISO datetime. Prefer an explicit timezone for actual event times; leave unknown dates unset."},"sourceId":{"type":"string","maxLength":4000,"description":"Supporting attachment ID (documents resource), not an external URL."},"replyToId":{"type":"string","maxLength":4000,"description":"Interaction ID this event replies to."},"threadId":{"type":"string","maxLength":4000,"description":"Interaction ID grouping this communication thread."},"meetingId":{"type":"string","maxLength":4000,"description":"Related meeting ID in this workspace."},"url":{"type":"string","maxLength":4000,"description":"HTTP(S) source/attachment link; does not fetch or upload content."},"externalId":{"type":"string","maxLength":4000,"description":"Optional external system reference; not a substitute for the returned CRM ID or idempotency key."},"venue":{"type":"string","maxLength":4000,"description":"venue"},"purpose":{"type":"string","maxLength":4000,"description":"purpose"},"archived":{"type":"boolean","description":"true archives this entry; false restores it. Does not permanently delete history."},"_id":{"type":"string"},"revision":{"type":"integer"}},"additionalProperties":true}}},"x-contract-version":3,"x-agent-playbooks":[{"name":"Research a target","steps":["Search companies and people; get the matching records and existing evidence/documents.","Read companies schema. Capture supported dimensions and optional item descriptions; leave gaps unset.","Attach source URLs through documents; record useful attributed facts through evidence.","Update only changed profile fields, preserving arrays and notes; get the result to verify."]},{"name":"Prepare and debrief a meeting","steps":["Get meeting, linked participants, company details, related opportunity, recent interactions and sourced facts.","Separate known facts from questions in preparation notes or a linked document.","After the actual meeting, update its status and debrief with expectedRevision.","Record explicit new facts with sourceNote/meetingId; update an opportunity only when supported; link the next meeting explicitly if agreed."]},{"name":"Run an outreach experiment","steps":["Create a swarm with the research question and a stable idempotency key.","Select explicit targets using add-members; adding a company does not add its people.","Create draft interactions with groupIds. Send outside the CLI; use interactions confirm-sent to record actual content and time.","Log actual replies, acceptances and meetings with groupIds; link resulting opportunities.","Inspect linked results, record assessment and mainConclusion; do not infer outcomes from membership."]}],"x-agent-limitations":["Ordinary people/company HTTP bodies are limited to 50,000 characters; workflow bodies to 350,000. Photo-action bodies allow 1,010,000 characters for a base64 JPEG under 750 KB. Per-field maxima do not override request limits.","Offline schemas describe this CLI build. Regenerate/rebuild alongside the app; /openapi.json on the API gateway is the deployed API contract.","The CLI never sends outreach or fetches attachment contents. Only profile JPEGs can be uploaded. Key administration, UI preferences and internal maintenance/seed functions remain app-only.","All record/workflow CLI lists accept --archived. Workflow REST uses status=archived. All have archive/restore commands with the relevant version precondition. Inbox previews are point-in-time desired-state previews, not version reservations."],"x-agent-shortcuts":[{"command":"companies offerings add ID LABEL --description TEXT --expected-updated-at TIMESTAMP","intent":"Add one supported product/service while preserving other items. Description is optional; use describe to explicitly replace an existing description.","resource":"companies"},{"command":"companies activities add ID LABEL --expected-updated-at TIMESTAMP","intent":"Record how the company operates, independently of what it sells.","resource":"companies"},{"command":"companies customers add ID LABEL --expected-updated-at TIMESTAMP","intent":"Record whom it serves; do not infer customers from products.","resource":"companies"},{"command":"companies classification add ID LABEL --level industry|sector|subsector --expected-updated-at TIMESTAMP","intent":"Add an explicitly supported classification label. Creates no parent relationship.","resource":"companies"},{"command":"companies classification link ID LABEL --level sector|subsector --parent LABEL --expected-updated-at TIMESTAMP","intent":"Link two already selected labels at adjacent levels. No parent is guessed. unlink removes only the relationship; remove deletes a label and prunes its relationships.","resource":"companies"},{"command":"people tags add ID LABEL --expected-updated-at TIMESTAMP","intent":"Add a free tag without replacing other tags; remove is also available.","resource":"people"},{"command":"people pin ID FACT_ID --expected-updated-at TIMESTAMP","intent":"Pin a linked fact for profile visibility; unpin removes only presentation, not the fact.","resource":"people"},{"command":"people photo set ID --file photo.jpg --expected-updated-at TIMESTAMP","intent":"Upload a local JPEG under 750 KB. get returns its URL; remove clears it. Other attachment content is not uploaded.","resource":"people"},{"command":"companies tags add ID LABEL --expected-updated-at TIMESTAMP","intent":"Add a free tag without replacing other tags; remove is also available.","resource":"companies"},{"command":"companies pin ID FACT_ID --expected-updated-at TIMESTAMP","intent":"Pin a linked fact for profile visibility; unpin removes only presentation, not the fact.","resource":"companies"},{"command":"companies photo set ID --file photo.jpg --expected-updated-at TIMESTAMP","intent":"Upload a local JPEG under 750 KB. get returns its URL; remove clears it. Other attachment content is not uploaded.","resource":"companies"},{"command":"facts add --company ID --text TEXT --source TEXT --idempotency-key KEY","intent":"Add an attributed fact; use --person instead for a personal fact. Optional --source-id links an attachment and --category selects a subject-appropriate category. facts aliases evidence.","resource":"evidence"},{"command":"meetings follow-up ID --revision N","intent":"Atomically create a follow-up and link it to the previous meeting. Date remains unknown. Retry identical input and original revision to recover the same follow-up.","resource":"meetings"},{"command":"meetings context ID --limit 10","intent":"Gather explicit participants, their context, related opportunity and directly linked entries. Returns completeness/continuation information; never treats all personal facts as meeting-relevant.","resource":"meetings","readOnly":true},{"command":"interactions confirm-sent ID --revision N --recipient VALUE --subject TEXT --body-file message.txt --occurred-at ISO_TIME","intent":"Confirm outreach that actually happened outside Rolodex. Requires a formatted draft; stores immutable actual content. Never sends. Retry identical input and original draft revision after uncertainty.","resource":"interactions"},{"command":"swarms report ID","intent":"Read the same calculated metrics as the app. Inspect ready/updating/computedAt before treating them as current.","resource":"swarms","readOnly":true},{"command":"swarms refresh-report ID","intent":"Request recalculation; report remains asynchronous. Inspect ready/updating after refreshing.","resource":"swarms"},{"command":"swarms link-result SWARM_ID ENTRY_ID --resource meetings|opportunities --revision N","intent":"Attribute an existing result explicitly, preserving its other swarm links. Revision belongs to the result entry.","resource":"swarms"},{"command":"reports dashboard --weeks 8 --as-of ISO_TIME","intent":"Read Home metrics with the same calculation rules, explicit reference time and 4/8/12-week period.","resource":"reports","readOnly":true}],"x-agent-coverage":[{"area":"Record fields and company classification","status":"covered","via":["people/companies schema, get, create, update","companies offerings/activities/customers/classification","people/companies tags"],"appFunctions":["records.create","records.update"]},{"area":"Workflow records and archive lifecycle","status":"covered","via":["list --archived","get, create, update, archive, restore, history"],"appFunctions":["workflow.save","workflow.saveAttachment"]},{"area":"Confirm actual outreach","status":"covered","via":["interactions confirm-sent"],"appFunctions":["workflow.recordOutreach"]},{"area":"Atomic follow-up meeting","status":"covered","via":["meetings follow-up"],"appFunctions":["workflow.createNextMeeting"]},{"area":"Pin profile facts","status":"covered","via":["people/companies pin, unpin"],"appFunctions":["workflow.pinProfileDetail"]},{"area":"Profile photos","status":"covered","via":["people/companies photo get, set, remove"],"appFunctions":["records.uploadPhoto","records.removePhoto"]},{"area":"Inbox","status":"covered","via":["inbox list, set, remove; writes accept --dry-run"],"appFunctions":["inbox.set"]},{"area":"Swarm membership","status":"covered","via":["swarms members, add-members, remove-members; writes accept --dry-run"],"appFunctions":["swarms.updateMembers","swarms.linkResult"],"additionalCommands":["swarms link-result"]},{"area":"Calculated report summaries","status":"covered","via":["reports dashboard","swarms report"],"appFunctions":["dashboard.overview","swarms.report","swarms.refreshReport"],"additionalCommands":["swarms refresh-report"]},{"area":"App presentation and administration","status":"app-only","appFunctions":["records.initialize","records.seed","keys.create","keys.revoke","demo.seed","demoFacts.seed","demoCompanyDetails.seed","demoSwarms.seed","demoDashboard.seed","workflow.cleanupAttachments"],"reason":"UI layout, display preferences, API-key creation/revocation, seed/migration functions and interactive graph rendering are not agent data commands."}]}