Skip to main content

Overview

Lightweight CRM built for API-first workflows. Manage sales pipelines, track deals through stages, and analyze revenue — all via API. Deals reference contacts by UUID rather than duplicating them, keeping your data consistent across domains. The CRM domain is intentionally focused: pipelines, stages, and deals. No email sequences, no landing pages, no marketing automation. Clean data, clean contracts.

Data Model

Entities

EntityDescription
PipelineA sales process with ordered stages (e.g., “Enterprise Sales”, “Inbound”)
StageA step in a pipeline (e.g., “Lead”, “Qualified”, “Proposal”, “Won”)
DealAn opportunity being tracked through a pipeline
Deal ContactA link between a deal and a contact (with optional role)
Stage ChangeAn audit record of a deal moving between stages
CRM TagA label for categorizing deals

Relationships

  • A Pipeline has many Stages (ordered by position)
  • A Deal belongs to one Stage (and through it, one Pipeline)
  • A Deal can be linked to many Contacts via Deal Contacts
  • Every stage transition creates a Stage Change audit record

Key Concepts

Pipelines and stages

Pipelines are customizable sales processes. Each pipeline has an ordered list of stages. One pipeline can be marked as the default for new deals. Stages have a position (integer) that determines their display order. Use the reorder endpoint to rearrange stages within a pipeline.

Deals

Each deal tracks:
  • Title and description
  • Amount and currency (ISO 4217 codes like USD, EUR)
  • Close probability (0.0 to 1.0)
  • Expected close date
  • Won/lost dates and lost reason
  • Value period for recurring revenue (one_time, monthly, quarterly, annual)

Stage change audit trail

Every time a deal moves to a different stage, a StageChange record is created with:
  • Previous and new stage IDs
  • The deal’s amount at the time of the change
  • Timestamp
This gives you a complete history of deal progression.

Pipeline analytics

GET /api/v1/pipelines/{id}/summary returns:
  • Total deals, total value, weighted value (amount * probability)
  • Per-stage breakdown with deal counts and values
  • Useful for pipeline health dashboards and forecasting

Contact linking

Deals reference contacts by UUID. A deal can have multiple contacts (e.g., the decision-maker, the champion, the end-user). Each link includes a role field. Changes to a contact’s information are reflected everywhere — no stale copies.

Tags

CRM tags are separate from contact tags (domain isolation). Use them to categorize deals by type, source, or any custom dimension.

MCP Tools

CRM operations are available through the standard per-domain MCP tools for creating, reading, updating, and deleting pipelines, stages, and deals. Composite tools like context_for_person include related deal information automatically. See the MCP guide for setup instructions.

API Endpoints

See the API Reference for the full endpoint list with request/response details.

Examples

Create a pipeline with stages

# Create a pipeline
curl -X POST https://api.backside.app/api/v1/pipelines \
  -H "Authorization: Bearer bsk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "Enterprise Sales"}'

# Add stages (use pipeline ID from response)
curl -X POST https://api.backside.app/api/v1/pipelines/{id}/stages \
  -H "Authorization: Bearer bsk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "Lead", "position": 1}'

curl -X POST https://api.backside.app/api/v1/pipelines/{id}/stages \
  -H "Authorization: Bearer bsk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "Qualified", "position": 2}'

Create a deal and move it through stages

# Create a deal
curl -X POST https://api.backside.app/api/v1/deals \
  -H "Authorization: Bearer bsk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Acme Corp Annual License",
    "stage_id": "uuid-of-lead-stage",
    "amount": 50000.00,
    "currency": "USD",
    "close_probability": 0.3
  }'

# Move deal to next stage
curl -X POST https://api.backside.app/api/v1/deals/{id}/move \
  -H "Authorization: Bearer bsk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"stage_id": "uuid-of-qualified-stage"}'

Get pipeline analytics

curl https://api.backside.app/api/v1/pipelines/{id}/summary \
  -H "Authorization: Bearer bsk_live_..."