Referenca

Companies, pulse & vault

CRM companies, notes, brands, account pulse, and curated Client Vault.

ClaudeChatGPTCursor

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())

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.