Companies are the CRM spine for clients. Pulse answers “what is going on with this account?” without hunting boards.
Companies
| Method | Path | Purpose |
|---|---|---|
| GET | /v1/companies |
List companies |
| POST | /v1/companies |
Create company |
| GET | /v1/companies/:id |
Company detail |
| PUT | /v1/companies/:id |
Update company |
| DELETE | /v1/companies/:id |
Archive company |
| GET | /v1/companies/:id/notes |
Staff notes |
| POST | /v1/companies/:id/notes |
Add note |
| DELETE | /v1/companies/:id/notes/:noteId |
Delete note |
| GET | /v1/companies/:id/brand |
Per-company brand |
| PATCH | /v1/companies/:id/brand |
Update brand |
| GET | /v1/companies/:id/vault |
Curated Client Vault pack |
| PATCH | /v1/companies/:id/vault |
Update vault brief / audience / tone / constraints |
| GET | /v1/companies/:id/vault/pins |
List pins |
| POST | /v1/companies/:id/vault/pins |
Pin note, file, project, URL, or Styrar post |
| DELETE | /v1/companies/:id/vault/pins/:pinId |
Remove pin |
Account pulse
GET /v1/companies/:id/pulse (staff only)
Returns a snapshot for account managers: waiting on client (pending design reviews, unanswered tickets, card approvals), active projects / open tickets, retainer burn from linked projects, and quiet signals (days since meaningful client activity).
Client Vault
GET /v1/companies/:id/vault (staff only; API keys need companies scope)
Bounded context pack for humans and AI: vault profile, pulse, pins, recent notes, projects, and a soft Styrar posts/planning slice when the company is bound. Not unbounded file RAG.
curl "$API/v1/companies/$COMPANY_ID/vault" \
-H "Authorization: Bearer fel_..."const { data } = await fetch(
`${API}/v1/companies/${companyId}/vault`,
{ headers: { Authorization: `Bearer ${apiKey}` } },
).then((r) => r.json())
console.log(data.vault)import requests
print(requests.get(
f"{API}/v1/companies/{company_id}/vault",
headers=headers,
).json())Pipeline (related)
Deals attach to companies. Fields include value/currency, owner, primary contact, expected close, follow-up, and notes. Attachments use the same presign/confirm flow as kanban. When a deal is won, convert it into a delivery project:
| Method | Path | Purpose |
|---|---|---|
| GET | /v1/pipeline/deals |
List deals |
| POST | /v1/pipeline/deals |
Create deal |
| GET | /v1/pipeline/deals/:dealId |
Deal detail (contacts, attachments, activity) |
| PUT | /v1/pipeline/deals/:dealId |
Update deal |
| POST | /v1/pipeline/deals/:dealId/attachments/presign |
Presign attachment upload |
| POST | /v1/pipeline/deals/:dealId/attachments/confirm |
Confirm attachment |
| POST | /v1/pipeline/deals/:dealId/convert |
Won → create project |
Emits deal.won for Slack / outbound webhooks when conversion succeeds. Due follow-ups notify the deal owner via the worker.