API-reference

Salesbase REST API v1.0

394 dokumenterede endpoints. Base URL: https://app.salesbase.dk/api/v1. Maskinlæsbar JSON: /api/v1/docs?full=true.

Svar-format

Alle endpoints returnerer JSON med konsistent struktur.

GET(alle endpoints)

Standard svar-struktur

GET list: { data, page, limit, total }. GET single: { data }. POST: { data: { _id } }. PUT/PATCH/DELETE: { ok: true }. Fejl: { error }.

Autentifikation & rate limits

Integration endpoints use a workspace API key (Bearer sb_…). API keys are created in the Salesbase app under Settings → Workspace → Automation → API Keys. Mobile app endpoints (voice, notifications, timers, assistant, devices, workspaces switch) require JWT login and are not part of this integration reference.

GET(alle endpoints)

API-nøgle

Authorization: Bearer <YOUR_API_KEY>. Nøgler starter med sb_.

GET(alle endpoints)

Rate limits

120 requests per minute, 50,000 requests per day. HTTP 429 ved overskridelse.

Inbound

Create companies, people, leads, and deals in one request. Ideal for form submissions and integrations.

POST/api/v1/inbound

Create or find-and-update company/person/lead/deal from a single payload

Create or find-and-update company/person/lead/deal from a single payload. Supports JSON, form-urlencoded, and Elementor webhook formats.

Request body

json
{
  "companyName": {
    "type": "string",
    "description": "Company name (for company lookup/creation)"
  },
  "companyCvr": {
    "type": "string",
    "description": "Danish CVR number (for exact company match)"
  },
  "companyEmail": {
    "type": "string"
  },
  "companyPhone": {
    "type": "string"
  },
  "personFirstName": {
    "type": "string"
  },
  "personLastName": {
    "type": "string"
  },
  "personEmail": {
    "type": "string"
  },
  "personPhone": {
    "type": "string"
  },
  "personTitle": {
    "type": "string"
  },
  "leadTitle": {
    "type": "string",
    "description": "Lead title (auto-generated if not provided)"
  },
  "leadSource": {
    "type": "string"
  },
  "leadStatus": {
    "type": "string"
  },
  "leadNotes": {
    "type": "string"
  },
  "dealTitle": {
    "type": "string"
  },
  "dealValue": {
    "type": "number"
  },
  "dealFlowId": {
    "type": "string",
    "description": "Pipeline ID"
  },
  "dealStageId": {
    "type": "string",
    "description": "Stage ID within pipeline"
  },
  "customFields": {
    "type": "object",
    "description": "Key-value pairs for custom fields"
  },
  "tags": {
    "type": "string[]",
    "description": "Array of tag names to apply"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/inbound' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/inbound

Returns API documentation for the inbound endpoint

Returns API documentation for the inbound endpoint

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/inbound' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Session

Identity for the authenticated API key or MCP session.

GET/api/v1/whoami

Return workspace name, user name, API key prefix, and effective scopes for the c

Return workspace name, user name, API key prefix, and effective scopes for the current session. Any valid key or MCP token works (no extra scope required). MCP clients should call this first.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/whoami' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/docs

API documentation index or a section

API documentation index or a section. Query: section, subsection, type, index=true, full=true. No authentication required.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/docs' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/docs/markdown

Full API documentation as Markdown

Full API documentation as Markdown.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/docs/markdown' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

CVR

GET/api/v1/cvr/match

Match a Danish CVR company by LinkedIn URL, domain, or exact name (Chrome extens

Match a Danish CVR company by LinkedIn URL, domain, or exact name (Chrome extension).

Parametre

NavnTypePåkrævetBeskrivelse
linkedinstringNej
domainstringNej
namestringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/cvr/match' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Chrome extension

GET/api/v1/extension/contribution

Get workspace Bidrag til Salesbase-data status

Get workspace Bidrag til Salesbase-data status.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/extension/contribution' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/extension/contribution

Admin: enable or disable contribution

Admin: enable or disable contribution.

Request body

json
{
  "enabled": {
    "type": "boolean",
    "required": true
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/extension/contribution' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/extension/observations

Ingest observation batches (contribute scope)

Ingest observation batches (contribute scope).

Request body

json
{
  "observations": {
    "type": "array",
    "required": true
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/extension/observations' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/extension/captures/presign

Presign S3 uploads for a page capture (contribute scope)

Presign S3 uploads for a page capture (contribute scope).

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/extension/captures/presign' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/extension/network

Give-to-get network contacts and signals (contributing workspaces only)

Give-to-get network contacts and signals (contributing workspaces only).

Parametre

NavnTypePåkrævetBeskrivelse
linkedinstringNej
handlestringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/extension/network' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/extension/domains

Known company domains for the extension local filter

Known company domains for the extension local filter.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/extension/domains' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Virksomheder

GET/api/v1/companies

List companies

List companies. view=full returns stored fields including integration ids (ordrestyringCustomerNumber, economicCustomerNumber, …). fields= projects any schema field at Mongo. limit max 500. MCP defaults to view=summary.

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
qstringNej
viewstringNej
fieldsstringNejComma-separated stored field names
updatedSincestringNej
dateFromstringNej
dateTostringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/companies' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/companies/lookup

Look up a company by LinkedIn URL or website domain (Chrome extension)

Look up a company by LinkedIn URL or website domain (Chrome extension).

Parametre

NavnTypePåkrævetBeskrivelse
linkedinstringNej
domainstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/companies/lookup' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/companies

Create a company

Create a company

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "cvr": {
    "type": "string"
  },
  "email": {
    "type": "string"
  },
  "phone": {
    "type": "string"
  },
  "address": {
    "type": "string"
  },
  "city": {
    "type": "string"
  },
  "zip": {
    "type": "string"
  },
  "country": {
    "type": "string"
  },
  "website": {
    "type": "string"
  },
  "industry": {
    "type": "string"
  },
  "employees": {
    "type": "number"
  },
  "customFields": {
    "type": "array"
  },
  "tags": {
    "type": "string[]"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/companies' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/companies/:id

Get company by ID

Get company by ID. Optional fields= query projects stored fields (including integration ids).

Parametre

NavnTypePåkrævetBeskrivelse
fieldsstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/companies/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/companies/:id

Update company

Update company. May set website, avatar (logo) and logoUrl. avatar/logoUrl accept an https image URL (re-hosted as a workspace image) or a data:image/...;base64 URL (max 2 MB). customFields is a partial key→value merge (definitions: GET /api/v1/custom-fields?entityType=company).

Request body

json
{
  "website": {
    "type": "string"
  },
  "avatar": {
    "type": "string",
    "description": "Image URL (re-hosted as a workspace image), data:image/...;base64 URL (max 2 MB), or empty to clear"
  },
  "logoUrl": {
    "type": "string",
    "description": "Image URL (re-hosted as a workspace image), data:image/...;base64 URL (max 2 MB), or empty to clear"
  },
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/companies/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/companies/:id

Delete company

Delete company

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/companies/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/companies/:id/find-web-presence

Find and fill empty website, logo/avatar and LinkedIn from CVR, the company e-ma

Find and fill empty website, logo/avatar and LinkedIn from CVR, the company e-mail domain and a web search (page verified by name or CVR). Same as CRM action Find hjemmeside og logo. Does not overwrite filled fields. Response data.status: updated | already_filled | not_found; data.hint says what to do next when nothing was found.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/companies/{id}/find-web-presence' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/companies/:id/people

List people connected to company

List people connected to company

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/companies/{id}/people' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/companies/:id/deals

List deals connected to company

List deals connected to company

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/companies/{id}/deals' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/companies/:id/activities

List activities for company

List activities for company

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/companies/{id}/activities' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/companies/:id/activity-feed

Unified activity feed for company

Unified activity feed for company

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/companies/{id}/activity-feed' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/companies/:id/people

Link person to company

Link person to company

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/companies/{id}/people' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/companies/:id/people

Unlink person from company

Unlink person from company

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/companies/{id}/people' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Personer

GET/api/v1/people

List people

List people. view=full returns stored fields including integration ids. fields= projects any schema field at Mongo. limit max 500. MCP defaults to view=summary.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/people' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/people/lookup

Look up a person by LinkedIn URL (Chrome extension)

Look up a person by LinkedIn URL (Chrome extension).

Parametre

NavnTypePåkrævetBeskrivelse
linkedinstringJa

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/people/lookup' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/people

Create a person

Create a person

Request body

json
{
  "firstName": {
    "type": "string",
    "required": true
  },
  "lastName": {
    "type": "string"
  },
  "emails": {
    "type": "array",
    "description": "[{ email, label }]"
  },
  "phones": {
    "type": "array",
    "description": "[{ phone, label }]"
  },
  "title": {
    "type": "string"
  },
  "companyId": {
    "type": "string"
  },
  "customFields": {
    "type": "array"
  },
  "tags": {
    "type": "string[]"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/people' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/people/:id

Get person by ID

Get person by ID. Optional fields= query.

Parametre

NavnTypePåkrævetBeskrivelse
fieldsstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/people/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/people/:id

Update person

Update person. May set avatar: an https image URL (re-hosted as a workspace image) or a data:image/...;base64 URL (max 2 MB). customFields is a partial key→value merge (definitions: GET /api/v1/custom-fields?entityType=person).

Request body

json
{
  "avatar": {
    "type": "string",
    "description": "Image URL (re-hosted as a workspace image), data:image/...;base64 URL (max 2 MB), or empty to clear"
  },
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/people/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/people/:id

Delete person

Delete person

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/people/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/people/:id/find-avatar

Find and fill an empty avatar from public sources (Gravatar, LinkedIn, company s

Find and fill an empty avatar from public sources (Gravatar, LinkedIn, company site). Same as CRM action Find billede. Does not overwrite an existing avatar. Response data.status: updated | already_filled | not_found, plus data.hint.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/people/{id}/find-avatar' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/people/:id/companies

List companies connected to person

List companies connected to person

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/people/{id}/companies' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/people/:id/deals

List deals connected to person

List deals connected to person

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/people/{id}/deals' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/people/:id/activities

List activities for person

List activities for person

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/people/{id}/activities' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/people/:id/activity-feed

Unified activity feed for person

Unified activity feed for person

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/people/{id}/activity-feed' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Leads

GET/api/v1/leads

List leads

List leads. view=full returns stored documents. fields= projects any schema field. limit max 500. MCP defaults to view=summary.

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
statusstringNej
sourcestringNej
searchstringNej
viewstringNej
fieldsstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/leads' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/leads

Create a lead

Create a lead. Score and scoreBreakdown are calculated automatically from active lead-scoring rules after create (do not rely on a client-supplied score). Score 0 with empty breakdown means no active rules matched; configure rules via GET/POST /api/v1/lead-scoring/rules.

Request body

json
{
  "title": {
    "type": "string",
    "required": true
  },
  "email": {
    "type": "string"
  },
  "phone": {
    "type": "string"
  },
  "status": {
    "type": "string"
  },
  "source": {
    "type": "string"
  },
  "score": {
    "type": "number",
    "description": "Ignored for scoring: server recalculates from rules after create"
  },
  "value": {
    "type": "number"
  },
  "notes": {
    "type": "string"
  },
  "companyRef": {
    "type": "string",
    "description": "Company ID"
  },
  "personRef": {
    "type": "string",
    "description": "Person ID"
  },
  "customFields": {
    "type": "object"
  },
  "tags": {
    "type": "string[]"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/leads' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/leads/:id

Get lead by ID (includes score and scoreBreakdown from the last automatic calcul

Get lead by ID (includes score and scoreBreakdown from the last automatic calculation)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/leads/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/leads/:id

Update lead

Update lead. customFields is a partial key→value merge (definitions: GET /api/v1/custom-fields?entityType=lead). Score is recalculated automatically after update from active lead-scoring rules; score 0 means no rules matched.

Request body

json
{
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/leads/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/leads/:id

Delete lead

Delete lead

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/leads/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/leads/:id/activity-feed

Unified activity feed for lead

Unified activity feed for lead

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/leads/{id}/activity-feed' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/leads/:id/activities

List activities for lead

List activities for lead

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/leads/{id}/activities' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Deals

GET/api/v1/deals

List deals

List deals. Unknown query params return 400. Use view=summary for slim payloads; updatedSince for incremental sync.

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
qstringNej
statusstringNej
flowIdstringNejPipeline id (alias: flowRef)
stageIdstringNejStage id/number (alias: stage)
ownerIdstringNejOwner user id (alias: owner)
sortBystringNejtitle|value|updatedAt|createdAt|status|lostDate|wonDate|stage
sortOrderstringNej
viewstringNej
fieldsstringNej
updatedSincestringNejISO — updatedAt >=
createdAfterstringNej
dateFromstringNejcreatedAt >= (aliases: startDate, from)
dateTostringNejcreatedAt <= (aliases: endDate, to)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/deals' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/deals

Create a deal

Create a deal

Request body

json
{
  "title": {
    "type": "string",
    "required": true
  },
  "value": {
    "type": "number"
  },
  "flowId": {
    "type": "string"
  },
  "stageId": {
    "type": "string"
  },
  "priority": {
    "type": "string",
    "enum": [
      "low",
      "medium",
      "high"
    ]
  },
  "probability": {
    "type": "number"
  },
  "company": {
    "type": "string",
    "description": "Company ID"
  },
  "personRef": {
    "type": "string",
    "description": "Person ID"
  },
  "leadRef": {
    "type": "string",
    "description": "Lead ID"
  },
  "customFields": {
    "type": "object"
  },
  "tags": {
    "type": "string[]"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/deals' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/deals/:id

Get deal by ID

Get deal by ID

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/deals/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/deals/:id

Update deal (logs field/stage changes to activity feed, same as UI)

Update deal (logs field/stage changes to activity feed, same as UI). customFields is a partial key→value merge (definitions: GET /api/v1/custom-fields?entityType=deal).

Request body

json
{
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/deals/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/deals/:id

Delete deal

Delete deal

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/deals/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/deals/:id/move

Move deal to a different stage

Move deal to a different stage

Request body

json
{
  "stageId": {
    "type": "string",
    "required": true
  },
  "flowId": {
    "type": "string"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/deals/{id}/move' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/deals/:id/activities

List activities for deal

List activities for deal

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/deals/{id}/activities' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/deals/:id/activity-feed

Unified activity feed for deal

Unified activity feed for deal

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/deals/{id}/activity-feed' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Aktiviteter

Aktiviteter / activity feed — list and create feed rows (noter, opkald, deals m.m.)

GET/api/v1/activities

List activities (aktiviteter)

List activities (aktiviteter). Unknown query params return 400.

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
typestringNej
companyIdstringNej
personIdstringNej
dealIdstringNej
leadIdstringNej
dateFromstringNejActivity date >= (aliases: startDate, from)
dateTostringNejActivity date <= (aliases: endDate, to)
updatedSincestringNej
createdAfterstringNej
viewstringNej
qstringNej
ownerIdstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/activities' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/activities

Create activity / aktivitet (creates a feed row)

Create activity / aktivitet (creates a feed row). Body: type (required), summary or title, description, companyId/personId/dealId/leadId, entityType+entityId, noteRef, date, metadata

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/activities' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/activities/:id

Get activity by ID (aktivitet)

Get activity by ID (aktivitet)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/activities/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Opgaver

GET/api/v1/tasks

List tasks

List tasks. Coarse status is to_do, in_progress, blocked, or done (not open or cancelled). The task list Status column and done checkbox follow stage from GET /api/v1/task-flow.

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
statusstringNej
prioritystringNej
ownerIdstringNejAssignee (aliases: owner, assignee)
projectstringNej
qstringNej
viewstringNej
updatedSincestringNej
dateFromstringNej
dateTostringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/tasks' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/tasks

Create a task (Mine opgaver or project task)

Create a task (Mine opgaver or project task). Requires title plus exactly one parent: project, customObjectRecord (+ customObjectSlug), company, personRef, leadRef, or dealRef. Field name is company (not companyRef).

Request body

json
{
  "title": {
    "type": "string",
    "required": true
  },
  "project": {
    "type": "string",
    "description": "Project ID (omit when linking only to company/person/lead/deal)"
  },
  "customObjectRecord": {
    "type": "string",
    "description": "Custom object record ID; requires customObjectSlug"
  },
  "customObjectSlug": {
    "type": "string"
  },
  "company": {
    "type": "string",
    "description": "Company ID (standalone task on company; not companyRef)"
  },
  "personRef": {
    "type": "string",
    "description": "Person ID (standalone task on person)"
  },
  "leadRef": {
    "type": "string",
    "description": "Lead ID"
  },
  "dealRef": {
    "type": "string",
    "description": "Deal ID"
  },
  "description": {
    "type": "string"
  },
  "status": {
    "type": "string",
    "enum": [
      "to_do",
      "in_progress",
      "blocked",
      "done"
    ]
  },
  "priority": {
    "type": "string"
  },
  "assignees": {
    "type": "string[]",
    "description": "User IDs; defaults to API caller"
  },
  "deadline": {
    "type": "string",
    "description": "ISO date"
  },
  "tags": {
    "type": "string[]"
  },
  "customFields": {
    "type": "object"
  },
  "estimatedHours": {
    "type": "number"
  },
  "taskValue": {
    "type": "number"
  },
  "owner": {
    "type": "string",
    "description": "User ID; defaults to API caller"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/tasks' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/tasks/:id

Get task

Get task

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/tasks/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/tasks/:id

Update task

Update task. status done also sets stage to completedStageId from GET /api/v1/task-flow. stage sets status. The list Status column and done checkbox read stage.

Request body

json
{
  "title": {
    "type": "string"
  },
  "description": {
    "type": "string"
  },
  "status": {
    "type": "string",
    "enum": [
      "to_do",
      "in_progress",
      "blocked",
      "done"
    ],
    "description": "Coarse status. done moves stage to the flow completedStageId so the list and checkbox show Færdig."
  },
  "stage": {
    "type": "number",
    "description": "Task-flow stage id from GET /api/v1/task-flow. Wins over status when both are sent. completedStageId marks the task done."
  },
  "priority": {
    "type": "string",
    "enum": [
      "low",
      "medium",
      "high",
      "critical"
    ]
  },
  "assignees": {
    "type": "string[]"
  },
  "deadline": {
    "type": "string",
    "description": "ISO date"
  },
  "tags": {
    "type": "string[]"
  },
  "estimatedHours": {
    "type": "number"
  },
  "taskValue": {
    "type": "number"
  },
  "owner": {
    "type": "string",
    "description": "User ID"
  },
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge. Definitions: GET /api/v1/project-custom-fields?entityType=task"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/tasks/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/tasks/:id

Delete task

Delete task

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/tasks/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Noter

GET/api/v1/notes

List notes

List notes. Supports q search; unknown params → 400.

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
qstringNej
personRefstringNej
companystringNej
leadRefstringNej
dealRefstringNej
dateFromstringNej
dateTostringNej
updatedSincestringNej
createdAfterstringNej
viewstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/notes' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/notes

Create note (also creates linked activity for Noter tab / activity feed)

Create note (also creates linked activity for Noter tab / activity feed). Requires entity ref: company, personRef, leadRef, dealRef, or customObjectRecord

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/notes' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/notes/:id

Get note

Get note

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/notes/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/notes/:id

Update note (syncs linked activity)

Update note (syncs linked activity)

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/notes/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/notes/:id

Delete note (removes linked activity)

Delete note (removes linked activity)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/notes/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Opkald

GET/api/v1/calls

List calls

List calls

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/calls' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/calls

Create call record (also creates call activity in feed)

Create call record (also creates call activity in feed)

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/calls' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/calls/:id

Get call by ID including transcriptText, transcriptSummary, and slim conversatio

Get call by ID including transcriptText, transcriptSummary, and slim conversation turns (speaker/text/timing). Recording download URLs are JWT/session-only.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/calls/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/calls/:id

Update call (syncs linked activity)

Update call (syncs linked activity)

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/calls/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/calls/:id

Delete call (removes linked activity)

Delete call (removes linked activity)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/calls/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Begivenheder

GET/api/v1/events

List events

List events

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/events' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/events

Create event

Create event

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/events' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/events/:id

Get event

Get event

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/events/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/events/:id

Update event

Update event

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/events/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/events/:id

Delete event

Delete event

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/events/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Tags

GET/api/v1/tags

List unique tags

List unique tags

Parametre

NavnTypePåkrævetBeskrivelse
entityTypestringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/tags' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/tags/bulk

Bulk add/remove tags on multiple entities

Bulk add/remove tags on multiple entities

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/tags/bulk' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Custom Fields

Three field systems: (1) CRM defs via /api/v1/custom-fields for lead/deal/company/person (and support ticket values via entity PUT). (2) Project/task defs via GET /api/v1/project-custom-fields. (3) Custom object fields via GET /api/v1/custom-objects/:slug. Entity values: PUT customFields:{key:value} on the entity (partial merge). Custom object values: PATCH record with field-slug keys (or customFields alias).

GET/api/v1/custom-fields

List CRM custom field definitions (lead, deal, company, person)

List CRM custom field definitions (lead, deal, company, person)

Parametre

NavnTypePåkrævetBeskrivelse
entityTypestringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/custom-fields' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/custom-fields

Create custom field definition

Create custom field definition

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/custom-fields' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/custom-fields/:id

Get custom field

Get custom field

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/custom-fields/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/custom-fields/:id

Update custom field

Update custom field

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/custom-fields/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/custom-fields/:id

Delete custom field

Delete custom field

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/custom-fields/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/custom-fields/search

Search entities by custom field values

Search entities by custom field values

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/custom-fields/search' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/project-custom-fields

List project/task custom field definitions (CustomFieldDefinition)

List project/task custom field definitions (CustomFieldDefinition). Use keys when setting customFields on project/task PUT.

Parametre

NavnTypePåkrævetBeskrivelse
entityTypestringNejOptional filter
forCreateDialogstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/project-custom-fields' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Flows & Stages

GET/api/v1/flows

List pipelines

List pipelines

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/flows' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/flows

Create pipeline

Create pipeline

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/flows' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/flows/:id

Get pipeline

Get pipeline

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/flows/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/flows/:id

Update pipeline

Update pipeline

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/flows/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/flows/:id

Delete pipeline

Delete pipeline

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/flows/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/flows/:id/stages

Create stage in pipeline

Create stage in pipeline

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/flows/{id}/stages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/flows/:id/stages

Update stage

Update stage

Request body

json
{
  "id": {
    "type": "string",
    "required": true
  },
  "title": {
    "type": "string"
  },
  "order": {
    "type": "number"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/flows/{id}/stages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/flows/:id/stages

Delete stage

Delete stage

Request body

json
{
  "id": {
    "type": "string",
    "required": true
  }
}

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/flows/{id}/stages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

AI agents

Custom AI agents. They do not own a cron. Start them from Automations with the Kør agent action. Schedule on create/update is always Via automation.

GET/api/v1/agents

List AI agents in the workspace

List AI agents in the workspace

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/agents' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/agents

Create an AI agent

Create an AI agent. Enable it, then start it from an automation.

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "description": {
    "type": "string"
  },
  "goal": {
    "type": "string"
  },
  "systemPrompt": {
    "type": "string"
  },
  "icon": {
    "type": "string"
  },
  "modelTier": {
    "type": "string",
    "description": "fast, balanced or thorough"
  },
  "enabled": {
    "type": "boolean"
  },
  "permissions": {
    "type": "object",
    "description": "trustLevel, allowedModules, webAccess, maxActionsPerRun, maxDailyActions"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/agents' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/agents/:id

Get one AI agent

Get one AI agent

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/agents/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/agents/:id

Replace agent fields

Replace agent fields

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/agents/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/agents/:id

Update agent fields

Update agent fields

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/agents/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/agents/:id

Delete an AI agent and its runs

Delete an AI agent and its runs

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/agents/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Lister & Items

GET/api/v1/lists

List all lists

List all lists

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/lists' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/lists

Create list

Create list

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/lists' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/lists/:id

Get list

Get list

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/lists/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/lists/:id

Update list

Update list

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/lists/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/lists/:id

Delete list

Delete list

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/lists/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/lists/:id/items

List items in a list

List items in a list

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/lists/{id}/items' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/lists/:id/items

Add items to list

Add items to list

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/lists/{id}/items' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/lists/:id/items

Remove items from list

Remove items from list

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/lists/{id}/items' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Emails

List and send mailbox emails. Single send uses html and/or text (not bodyHtml). Bulk send is POST /api/v1/emails/bulk (queues by default). There is no signatureId on send: fetch a signature via GET /api/v1/email-signatures and inline its HTML into html.

GET/api/v1/emails

List emails with inbox account access enforced

List emails with inbox account access enforced. Unknown query params return 400. Use view=summary for slim payloads.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/emails' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/emails

Send one email from a connected mailbox

Send one email from a connected mailbox. Required: accountId, to, subject; html and/or text for content. bodyHtml is rejected on single send. No signatureId: inline signature HTML in html.

Request body

json
{
  "accountId": {
    "type": "string",
    "required": true,
    "description": "Connected email account ID (GET /api/v1/email-accounts)"
  },
  "to": {
    "type": "string|string[]",
    "required": true,
    "description": "Recipient address or list of addresses"
  },
  "subject": {
    "type": "string",
    "required": true
  },
  "html": {
    "type": "string",
    "description": "HTML body. Preferred for rich mail. Not bodyHtml (templates only on single send)."
  },
  "text": {
    "type": "string",
    "description": "Plain-text body (optional; use with or instead of html)"
  },
  "cc": {
    "type": "string|string[]",
    "description": "CC recipients"
  },
  "bcc": {
    "type": "string|string[]",
    "description": "BCC recipients"
  },
  "linkPersonId": {
    "type": "string",
    "description": "Link sent message to person"
  },
  "linkCompanyId": {
    "type": "string",
    "description": "Link sent message to company"
  },
  "linkDealId": {
    "type": "string",
    "description": "Link sent message to deal"
  },
  "trackOpens": {
    "type": "boolean",
    "description": "Enable open tracking when supported"
  },
  "replyToMessageId": {
    "type": "string",
    "description": "Existing message ID when this send is a reply"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/emails' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/emails/bulk

Bulk email

Bulk email. Requires write scope, email.create, and admin/owner. Queues by default (process-email-queue cron). Set immediate=true for sync send (max 10). Max 500 recipients. Prefer html/text; bodyHtml is accepted as an html alias here.

Request body

json
{
  "accountId": {
    "type": "string",
    "required": true,
    "description": "Connected email account ID"
  },
  "subject": {
    "type": "string",
    "required": true
  },
  "html": {
    "type": "string",
    "description": "Shared HTML body (alias: bodyHtml)"
  },
  "text": {
    "type": "string",
    "description": "Shared plain-text body"
  },
  "recipients": {
    "type": "array",
    "required": true,
    "description": "Email strings and/or { email, name?, personId?, companyId?, personalizedSubject?, personalizedHtml? } (to is accepted as email alias)"
  },
  "trackOpens": {
    "type": "boolean"
  },
  "immediate": {
    "type": "boolean",
    "description": "If true and recipients <= 10, send synchronously; otherwise queue"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/emails/bulk' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/emails/:id

Get email by ID

Get email by ID

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/emails/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/emails/:id/calendar-invite

Get calendar invite for email

Get calendar invite for email

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/emails/{id}/calendar-invite' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/emails/:id/calendar-invite

RSVP to calendar invite

RSVP to calendar invite

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/emails/{id}/calendar-invite' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/emails/threads/:threadId

Get email thread

Get email thread

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/emails/threads/:threadId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Email Accounts

GET/api/v1/email-accounts

List connected email accounts

List connected email accounts

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/email-accounts' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Email Templates

Create and manage email templates. Send bodyHtml (+ optional bodyCss and layoutSettings); Salesbase renders the full document. compiledHtml is accepted as a legacy full-document input. Supports {{contact.*}} placeholders and default filter syntax {{field | default:"fallback"}}.

GET/api/v1/email-templates

List email templates

List email templates

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/email-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/email-templates

Create email template (admin scope)

Create email template (admin scope)

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "category": {
    "type": "string",
    "enum": [
      "marketing",
      "transactional",
      "reminder",
      "follow-up",
      "notification",
      "quote",
      "newsletter",
      "other"
    ],
    "description": "Invalid values return 400 (not 500). Default when omitted: other."
  },
  "bodyHtml": {
    "type": "string",
    "description": "Body content with {{placeholders}} (preferred; no document wrapper)"
  },
  "bodyCss": {
    "type": "string",
    "description": "Optional CSS rules for bodyHtml"
  },
  "compiledHtml": {
    "type": "string",
    "description": "Legacy: full HTML document with {{placeholders}}"
  },
  "plainText": {
    "type": "string"
  },
  "metadata": {
    "type": "object",
    "description": "{ subject, preheader }"
  },
  "layoutSettings": {
    "type": "object",
    "description": "width (full|fixed), align (left|center|right, fixed only), containerWidth, textAlign, padding*, backgroundColor, outerBackground, fullWidthBackground. Deprecated aliases accepted: layoutMode (minimal|styled), useTableWrapper, containerAlign, outerBackgroundColor"
  },
  "tags": {
    "type": "string[]"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/email-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/email-templates/:id

Get template by ID (includes bodyHtml, bodyCss, compiledHtml, layoutSettings, pr

Get template by ID (includes bodyHtml, bodyCss, compiledHtml, layoutSettings, projectData)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/email-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/email-templates/:id

Update template (admin scope)

Update template (admin scope)

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/email-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/email-templates/:id

Delete template (admin scope)

Delete template (admin scope)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/email-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

SMS

Requires API key scope `sms` (not covered by `write` alone). Message text field is body (aliases message and text). Sender field is fromNumber (alias from). Bulk send queues by default.

GET/api/v1/sms

List SMS messages

List SMS messages. Unknown query params return 400. Use view=summary for slim payloads. Requires scope: sms.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sms' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sms

Send one SMS

Send one SMS. Requires scope: sms. Canonical body fields: to, body; optional fromNumber, linkPersonId, linkCompanyId, linkDealId.

Request body

json
{
  "to": {
    "type": "string",
    "required": true,
    "description": "Recipient phone (E.164 preferred)"
  },
  "body": {
    "type": "string",
    "required": true,
    "description": "Plain-text SMS. Aliases: message, text. Not html/bodyHtml."
  },
  "fromNumber": {
    "type": "string",
    "description": "Workspace Twilio number (alias: from). Defaults to workspace default."
  },
  "linkPersonId": {
    "type": "string"
  },
  "linkCompanyId": {
    "type": "string"
  },
  "linkDealId": {
    "type": "string"
  },
  "isAlphanumericSender": {
    "type": "boolean"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sms' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sms/:id

Get SMS by ID (Mongo ObjectId)

Get SMS by ID (Mongo ObjectId). Requires scope: sms.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sms/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/sms/:id

Update SMS flags (unread, starred)

Update SMS flags (unread, starred). Requires scope: sms.

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/sms/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sms/conversations

List SMS conversation threads (one row per counterparty phone)

List SMS conversation threads (one row per counterparty phone). Alias of /sms/threads. Requires scope: sms.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sms/conversations' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sms/threads

List SMS conversation threads (same as /sms/conversations)

List SMS conversation threads (same as /sms/conversations). Requires scope: sms.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sms/threads' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sms/bulk

Bulk SMS

Bulk SMS. Requires scope: sms and admin/owner. Queues by default (process-sms-queue cron). Set immediate=true for sync send (max 50). Max 100 recipients.

Request body

json
{
  "body": {
    "type": "string",
    "required": true,
    "description": "Shared SMS text. Aliases: message, text."
  },
  "recipients": {
    "type": "array",
    "required": true,
    "description": "Phone strings and/or { phone, personId?, companyId? } objects (to is accepted as phone alias)"
  },
  "fromNumber": {
    "type": "string",
    "description": "Alias: from"
  },
  "immediate": {
    "type": "boolean",
    "description": "If true and recipients <= 50, send synchronously; otherwise queue"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sms/bulk' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sms/schedule

Schedule SMS for later

Schedule SMS for later. Requires scope: sms.

Request body

json
{
  "to": {
    "type": "string",
    "required": true
  },
  "body": {
    "type": "string",
    "required": true,
    "description": "Aliases: message, text"
  },
  "scheduledAt": {
    "type": "string",
    "required": true,
    "description": "Future ISO datetime"
  },
  "fromNumber": {
    "type": "string",
    "description": "Alias: from"
  },
  "linkPersonId": {
    "type": "string"
  },
  "linkCompanyId": {
    "type": "string"
  },
  "linkDealId": {
    "type": "string"
  },
  "isAlphanumericSender": {
    "type": "boolean"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sms/schedule' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sms/scheduled

List scheduled SMS

List scheduled SMS. Requires scope: sms.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sms/scheduled' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/sms/scheduled/:id

Cancel scheduled SMS

Cancel scheduled SMS. Requires scope: sms.

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/sms/scheduled/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sms/threads/:phoneNumber

Get SMS thread by phone number (messages + resolved contact)

Get SMS thread by phone number (messages + resolved contact). Requires scope: sms.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sms/threads/:phoneNumber' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/sms/threads/:phoneNumber

Mark inbound unread messages in the thread as read

Mark inbound unread messages in the thread as read. Body: { unread: false }. Requires scope: sms.

Request body

json
{
  "unread": {
    "type": "boolean",
    "description": "Set false to mark read"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/sms/threads/:phoneNumber' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

SMS Templates

GET/api/v1/sms-templates

List SMS templates

List SMS templates

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sms-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Webhook-abonnementer

Subscribe to CRM events via outbound webhooks. See the Webhooks section for available events.

GET/api/v1/webhooks/subscriptions

List webhook subscriptions

List webhook subscriptions

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/webhooks/subscriptions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/webhooks/subscriptions

Create webhook subscription

Create webhook subscription

Request body

json
{
  "url": {
    "type": "string",
    "required": true
  },
  "events": {
    "type": "string[]",
    "required": true,
    "description": "Array of event names to subscribe to"
  },
  "name": {
    "type": "string"
  },
  "active": {
    "type": "boolean",
    "default": true
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/webhooks/subscriptions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/webhooks/subscriptions/:id

Get subscription (secret masked)

Get subscription (secret masked)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/webhooks/subscriptions/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/webhooks/subscriptions/:id

Update subscription

Update subscription

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/webhooks/subscriptions/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/webhooks/subscriptions/:id

Delete subscription

Delete subscription

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/webhooks/subscriptions/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/webhooks/zapier

Zapier inbound webhook — creates person, lead, and deal in one request (Bearer A

Zapier inbound webhook — creates person, lead, and deal in one request (Bearer API key)

Request body

json
{
  "firstName": {
    "type": "string"
  },
  "lastName": {
    "type": "string"
  },
  "email": {
    "type": "string"
  },
  "phone": {
    "type": "string"
  },
  "leadTitle": {
    "type": "string"
  },
  "dealTitle": {
    "type": "string"
  },
  "dealValue": {
    "type": "number"
  },
  "source": {
    "type": "string",
    "default": "zapier"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/webhooks/zapier' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

CRM Connect

Lookup and connect CRM data with external systems

GET/api/v1/crm-connect/lookup

Look up entity by phone/email

Look up entity by phone/email

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/crm-connect/lookup' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/crm-connect/calls

Log or connect call events for integration

Log or connect call events for integration

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/crm-connect/calls' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Workspace offer settings

Workspace sender profile and offer defaults used by {{company.*}} and {{bank.*}} placeholders, plus communication, numbering, units, and contract defaults. PATCH merges nested objects and replaces arrays. Write requires a workspace admin or owner (write scope). Products, offer types, templates, and offers are separate resources.

GET/api/v1/workspace/offer-settings

Read workspace offer settings

Read workspace offer settings. Creates defaults on first read.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/workspace/offer-settings' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/workspace/offer-settings

Update companyInfo (name, cvr, address

Update companyInfo (name, cvr, address.street/postalCode/city, phone, email, website, logo), bankInfo (bankName, registrationNumber, accountNumber, iban, swift), defaults, branding, emailSettings, smsSettings, acceptanceSettings, trackingSettings, sequenceSettings, orderConfirmationSettings, numbering, contractSettings, defaultTerms, defaultPaymentTerms, lineItemUnits, billingFrequencies, setupCompleted. Admin or owner.

Request body

json
{
  "companyInfo": {
    "type": "object",
    "description": "Sender profile. Maps to {{company.name}}, {{company.cvr}}, {{company.phone}}, {{company.email}}, {{company.street}}, {{company.postalCode}}, {{company.city}}, {{company.logo}}"
  },
  "bankInfo": {
    "type": "object",
    "description": "bankName, registrationNumber, accountNumber, iban, swift. Maps to {{bank.name}}, {{bank.reg}}, {{bank.account}}, {{bank.iban}}, {{bank.swift}}"
  },
  "defaults": {
    "type": "object",
    "description": "vatRate, currency, defaultValidityDays, paymentTerms, defaultTemplateId, defaultOfferTypeId"
  },
  "numbering": {
    "type": "object",
    "description": "{ prefix, nextNumber }"
  },
  "lineItemUnits": {
    "type": "array",
    "description": "[{ value, label, sortOrder }]. Replaces the list."
  },
  "billingFrequencies": {
    "type": "array",
    "description": "Replaces workspace billing periods."
  }
}

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/workspace/offer-settings' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Offers (quotes/proposals)

Create draft offers linked to offer types and templates. The visual layout comes from the template (native elements, not a HTML page on the offer). Prices are lineItems, rendered by the template line_items and totals elements. Send creates an immutable snapshot and public link.

GET/api/v1/offers

List offers

List offers

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offers' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offers

Create offer

Create offer

Request body

json
{
  "title": {
    "type": "string",
    "required": true
  },
  "offerTypeId": {
    "type": "ObjectId"
  },
  "templateId": {
    "type": "ObjectId"
  },
  "companyRef": {
    "type": "ObjectId"
  },
  "personRef": {
    "type": "ObjectId"
  },
  "dealRef": {
    "type": "ObjectId"
  },
  "quoteInput": {
    "type": "object",
    "description": "{ contact, address, facts, calculatorInputs }"
  },
  "lineItems": {
    "type": "array",
    "description": "Preferred write field for offer lines. Each item: name (or description), quantity, unitPrice, optional unit/vatRate. Server generates id and totals."
  },
  "calculatorResult": {
    "type": "object",
    "description": "Readback/result shape { lineItems, subtotal, vatAmount, total }. lineItems without id/name are normalized on write (same as top-level lineItems)."
  },
  "validUntil": {
    "type": "Date"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offers' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/offers/:id

Get offer (by _id or publicId)

Get offer (by _id or publicId)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offers/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/offers/:id

Update draft offer

Update draft offer

Request body

json
{
  "title": {
    "type": "string"
  },
  "templateId": {
    "type": "ObjectId"
  },
  "offerTypeId": {
    "type": "ObjectId"
  },
  "quoteInput": {
    "type": "object"
  },
  "lineItems": {
    "type": "array",
    "description": "Replace draft offer lines. Same shape as POST."
  },
  "calculatorResult": {
    "type": "object"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/offers/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/offers/:id

Delete draft offer

Delete draft offer

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/offers/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offers/:id/send

Send offer — snapshot, activity, automations, offer

Send offer — snapshot, activity, automations, offer.sent webhook. Returns publicId.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offers/{id}/send' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offers/:id/cancel

Cancel offer

Cancel offer

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offers/{id}/cancel' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offers/:id/send-email

Send or resend offer email to customer

Send or resend offer email to customer

Request body

json
{
  "emailTo": {
    "type": "string",
    "description": "Optional recipient override"
  },
  "senderAccountId": {
    "type": "ObjectId",
    "description": "Optional sender email account"
  },
  "templateId": {
    "type": "ObjectId",
    "description": "Optional email template"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offers/{id}/send-email' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offers/:id/send-sms

Send or resend offer link via SMS

Send or resend offer link via SMS

Request body

json
{
  "phoneTo": {
    "type": "string",
    "description": "Optional phone override"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offers/{id}/send-sms' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/offers/:id/preview-token

Preview URL for draft offers (short-lived token) or public link when sent

Preview URL for draft offers (short-lived token) or public link when sent

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offers/{id}/preview-token' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Contracts (e-signature envelopes)

Contracts are offers with kind=contract and a multi-signer envelope. Send delivers per-signer links (sequential or parallel). Status accepted means fully signed. Signer tokens are never exposed.

GET/api/v1/contracts

List contracts

List contracts

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/contracts' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/contracts

Create draft contract with signers

Create draft contract with signers

Request body

json
{
  "title": {
    "type": "string"
  },
  "templateId": {
    "type": "ObjectId",
    "description": "Contract template (kind=contract)"
  },
  "companyRef": {
    "type": "ObjectId"
  },
  "personRef": {
    "type": "ObjectId"
  },
  "dealRef": {
    "type": "ObjectId"
  },
  "signers": {
    "type": "array",
    "required": true,
    "description": "[{ name, email, phone?, title?, role?: 'signer'|'cc' }] in signing order"
  },
  "mode": {
    "type": "string",
    "description": "sequential (default) | parallel"
  },
  "signatureLevel": {
    "type": "string",
    "description": "standard (default) | mitid"
  },
  "deadlineAt": {
    "type": "Date",
    "description": "Signing deadline"
  },
  "contract": {
    "type": "object",
    "description": "{ startDate, endDate } agreement period"
  },
  "lineItems": {
    "type": "array",
    "description": "Optional price lines"
  },
  "sourceOfferId": {
    "type": "ObjectId",
    "description": "Accepted offer this contract was generated from"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/contracts' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/contracts/:id

Get contract incl

Get contract incl. envelope status and signer progress

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/contracts/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/contracts/:id/send

Send to signers (snapshot + links)

Send to signers (snapshot + links). Webhooks: contract.sent, contract.signed, contract.completed, contract.declined, contract.expired, contract.voided

Request body

json
{
  "channels": {
    "type": "object",
    "description": "{ email: true, sms: false }"
  },
  "message": {
    "type": "string"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/contracts/{id}/send' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/contracts/:id/void

Void (annullér) a sent contract

Void (annullér) a sent contract

Request body

json
{
  "reason": {
    "type": "string"
  },
  "notifySigners": {
    "type": "boolean"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/contracts/{id}/void' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Offer Templates (tilbudsskabeloner)

Visual page-builder templates with pages[], headerElements, footerElements, and branding. Build pages from native elements (text, heading, image, table, columns, line_items, totals, button, divider, spacer, signer fields). See ?section=offerTemplates&subsection=nativeElements before writing layout. type html is a last resort.

GET/api/v1/offer-templates

List templates (summary without full pages)

List templates (summary without full pages)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offer-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offer-templates

Create template with full layout (admin scope)

Create template with full layout (admin scope)

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "pages": {
    "type": "array",
    "description": "Page[] with native elements. Catalog: ?section=offerTemplates&subsection=nativeElements. Do not default pages to html."
  },
  "headerElements": {
    "type": "array"
  },
  "footerElements": {
    "type": "array"
  },
  "branding": {
    "type": "object",
    "description": "colors, typography, logo"
  },
  "defaultTerms": {
    "type": "string"
  },
  "defaultPaymentTerms": {
    "type": "string"
  },
  "isDefault": {
    "type": "boolean"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offer-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/offer-templates/:id

Get full template including pages and elements

Get full template including pages and elements

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offer-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/offer-templates/:id

Update template (admin scope)

Update template (admin scope)

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/offer-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/offer-templates/:id

Delete template (admin scope)

Delete template (admin scope)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/offer-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offer-templates/:id/duplicate

Duplicate template (admin scope)

Duplicate template (admin scope)

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offer-templates/{id}/duplicate' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Offer Types (Prisregler)

Prisregler: seller questions (requiredInputFields, incl. computed m² fields) and Hvis … så … pricing rules. Workflow: rule-reference → draft → validate → simulate → POST/PATCH. Full guide: ?section=pricingRules.

GET/api/v1/offer-types

List prisregler (offer types)

List prisregler (offer types)

Parametre

NavnTypePåkrævetBeskrivelse
pagenumberNej
limitnumberNejmax 100
includeInactivebooleanNejtrue to include inactive

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offer-types' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offer-types

Create prisregler (admin)

Create prisregler (admin). Validated like /offer-types/validate; 400 returns details[] with path + error. Rule id/order/phase are filled in when omitted.

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "description": {
    "type": "string"
  },
  "isDefault": {
    "type": "boolean",
    "description": "Preselect on new offers"
  },
  "defaultTemplateId": {
    "type": "ObjectId",
    "description": "OfferTemplate _id"
  },
  "requiredInputFields": {
    "type": "array",
    "description": "[{ fieldId, label, type: number|text|select|checkbox|radio|slider|computed, unit?, options?, required?, expression? }]. See ?section=pricingRules&subsection=fieldTypes"
  },
  "pricingRules": {
    "type": "object",
    "description": "{ rules: [{ name, when: { all, any }, then }], vatRate?, currency?, vatDisplayMode? }. See ?section=pricingRules&subsection=actionTypes"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offer-types' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/offer-types/rule-reference

Builder vocabulary for this workspace: products (_id, name, unitPrice), subjects

Builder vocabulary for this workspace: products (_id, name, unitPrice), subjects + keys (BBR only when the module is on), operators, action types, expression ops

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offer-types/rule-reference' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/offer-types/rule-templates

Starter rules (Start fra skabelon) with fresh ids, the fields each needs, and pl

Starter rules (Start fra skabelon) with fresh ids, the fields each needs, and placeholders to fill (product ids)

Parametre

NavnTypePåkrævetBeskrivelse
industrystringNejIT | Håndværk | Generelt

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offer-types/rule-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offer-types/validate

Read-only

Read-only. Validate a draft { requiredInputFields, pricingRules } and get errors[], warnings[] and Danish ruleSummaries. Nothing is saved.

Request body

json
{
  "requiredInputFields": {
    "type": "array"
  },
  "pricingRules": {
    "type": "object"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offer-types/validate' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/offer-types/simulate

Read-only dry run of the engine

Read-only dry run of the engine. Returns lines, subtotal, computedFields, warnings, blocks and trace. Nothing is saved.

Request body

json
{
  "offerTypeId": {
    "type": "ObjectId",
    "description": "Saved prisregler (or send offerType)"
  },
  "offerType": {
    "type": "object",
    "description": "Unsaved draft { requiredInputFields, pricingRules }"
  },
  "fields": {
    "type": "object",
    "description": "{ fieldId: value } answers"
  },
  "lines": {
    "type": "array",
    "description": "[{ offerProductId, quantity, unitPrice? } | { name, unitPrice, quantity }]"
  },
  "customer": {
    "type": "object",
    "description": "{ industry, country, postalCode, isExisting }"
  },
  "offer": {
    "type": "object",
    "description": "{ manualDiscountPercent }"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/offer-types/simulate' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/offer-types/:id

Get prisregler

Get prisregler. ?describe=true adds ruleSummaries (Danish Hvis … så … text per rule)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/offer-types/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/offer-types/:id

Update prisregler (admin)

Update prisregler (admin). pricingRules merges with existing VAT/currency settings; pricingRules.rules and requiredInputFields replace the whole array. Validated when either is sent.

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/offer-types/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/offer-types/:id

Delete prisregler (admin)

Delete prisregler (admin)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/offer-types/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Products & Catalog

GET/api/v1/products

List products

List products

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/products' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/products

Create product

Create product

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/products' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/products/:id

Get product

Get product

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/products/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/products/:id

Update product

Update product

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/products/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/products/:id

Delete product

Delete product

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/products/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/catalog

List catalog items

List catalog items

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/catalog' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/catalog

Create catalog item

Create catalog item

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/catalog' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/catalog/:id

Get catalog item

Get catalog item

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/catalog/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/catalog/:id

Update catalog item

Update catalog item

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/catalog/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/catalog/:id

Delete catalog item

Delete catalog item

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/catalog/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Projects

GET/api/v1/projects

List projects

List projects

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects

Create project

Create project

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/projects/:id

Get project

Get project

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/projects/:id

Update project

Update project. customFields is a partial key→value merge (definitions: GET /api/v1/project-custom-fields?entityType=project).

Request body

json
{
  "title": {
    "type": "string"
  },
  "description": {
    "type": "string"
  },
  "status": {
    "type": "string"
  },
  "priority": {
    "type": "string"
  },
  "owner": {
    "type": "string"
  },
  "tags": {
    "type": "string[]"
  },
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/projects/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/projects/:id

Delete project

Delete project

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/projects/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects/:id/move

Move project to different stage

Move project to different stage

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects/{id}/move' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/projects/:id/stats

Get project statistics

Get project statistics

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects/{id}/stats' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/projects/:id/tasks

List project tasks

List project tasks

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects/{id}/tasks' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects/:id/tasks

Create project task

Create project task

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects/{id}/tasks' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/projects/tasks/:taskId

Get project task

Get project task

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/projects/tasks/:taskId

Update project task

Update project task. Send stage (from GET /api/v1/task-flow) or status. status done sets stage to completedStageId. The task list Status column and done checkbox read stage, not status alone. customFields is a partial key→value merge.

Request body

json
{
  "title": {
    "type": "string"
  },
  "description": {
    "type": "string"
  },
  "status": {
    "type": "string",
    "enum": [
      "to_do",
      "in_progress",
      "blocked",
      "done"
    ],
    "description": "Coarse status. done also sets stage to completedStageId."
  },
  "stage": {
    "type": "number",
    "description": "Stage id from GET /api/v1/task-flow. Wins over status when both are sent. Use completedStageId to mark Færdig."
  },
  "priority": {
    "type": "string",
    "enum": [
      "low",
      "medium",
      "high",
      "critical"
    ]
  },
  "owner": {
    "type": "string",
    "description": "User ID"
  },
  "assignees": {
    "type": "string[]"
  },
  "startDate": {
    "type": "string"
  },
  "deadline": {
    "type": "string"
  },
  "estimatedHours": {
    "type": "number"
  },
  "taskType": {
    "type": "string"
  },
  "billable": {
    "type": "boolean"
  },
  "tags": {
    "type": "string[]"
  },
  "order": {
    "type": "number"
  },
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge. Definitions: GET /api/v1/project-custom-fields?entityType=task"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/projects/tasks/:taskId

Delete project task

Delete project task

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects/tasks/:taskId/move

Move a project task to another task-flow stage

Move a project task to another task-flow stage. stage or status is enough. status done sets stage to completedStageId from GET /api/v1/task-flow.

Request body

json
{
  "stage": {
    "type": "number",
    "description": "Stage id from GET /api/v1/task-flow. Sets status (completedStageId becomes done)."
  },
  "status": {
    "type": "string",
    "enum": [
      "to_do",
      "in_progress",
      "blocked",
      "done"
    ],
    "description": "Coarse status. Also sets stage. Ignored for status when stage is sent."
  },
  "order": {
    "type": "number",
    "description": "Order within the stage"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId/move' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/task-flow

Get the workspace task flow (opgavestatusser), including stages and completedSta

Get the workspace task flow (opgavestatusser), including stages and completedStageId. Use completedStageId as stage when marking a project task Færdig so the list Status column and done checkbox update.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/task-flow' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/projects/tasks/:taskId/comments

List comments on a project task, including internal team notes

List comments on a project task, including internal team notes. Each item has internal (boolean) and visibility (customer or internal). Internal notes are never shown in the customer portal. Task must belong to a project.

Parametre

NavnTypePåkrævetBeskrivelse
visibilitystringNejOptional. customer returns the portal thread only. internal returns team notes only. Omit to return both.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId/comments' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects/tasks/:taskId/comments

Create a team comment on a project task

Create a team comment on a project task. Without internal, it is the same thread as CRM Kommentarer and the customer portal when comments are enabled. With internal: true or visibility: internal, the note is team-only: hidden in the customer portal and not emailed to the customer.

Request body

json
{
  "content": {
    "type": "string",
    "required": true,
    "description": "Comment text. HTML is stripped. Max 5000 characters."
  },
  "internal": {
    "type": "boolean",
    "description": "True saves an internal team note. False or omitted is visible to the customer when portal comments are on."
  },
  "visibility": {
    "type": "string",
    "enum": [
      "customer",
      "internal"
    ],
    "description": "customer (default) or internal. Same as internal: true when set to internal. Do not contradict the internal flag."
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId/comments' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/projects/tasks/:taskId/comments/:commentId

Update a project task comment (admin/owner)

Update a project task comment (admin/owner). Change content and/or move between customer thread and internal notes via internal/visibility. Requires content and/or internal.

Request body

json
{
  "content": {
    "type": "string",
    "description": "New text. HTML stripped. Max 5000 characters."
  },
  "internal": {
    "type": "boolean",
    "description": "true = internal team note; false = customer-visible thread"
  },
  "visibility": {
    "type": "string",
    "enum": [
      "customer",
      "internal"
    ],
    "description": "Same meaning as internal flag"
  }
}

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId/comments/:commentId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/projects/tasks/:taskId/comments/:commentId

Delete a project task comment (admin/owner)

Delete a project task comment (admin/owner).

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/projects/tasks/:taskId/comments/:commentId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/projects/:id/time-entries

List time entries on a project

List time entries on a project.

Parametre

NavnTypePåkrævetBeskrivelse
taskIdstringNejOnly entries attached to this project task
pagenumberNej
limitnumberNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects/{id}/time-entries' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects/:id/time-entries

Register time on a project (and optionally a task)

Register time on a project (and optionally a task). Uses the same rate, clip-card, and min-words rules as the UI timer.

Request body

json
{
  "hours": {
    "type": "number",
    "required": true,
    "description": "Hours to log. Can be combined with minutes. Must be greater than 0."
  },
  "minutes": {
    "type": "number",
    "description": "Optional extra minutes added to hours (e.g. 30 = 0.5 hours)."
  },
  "taskId": {
    "type": "string",
    "description": "Optional project task to attach the time entry to."
  },
  "description": {
    "type": "string",
    "description": "Work description. Required when the project has timeEntryMinWords set."
  },
  "date": {
    "type": "string",
    "description": "ISO date of the work. Defaults to now."
  },
  "billable": {
    "type": "boolean",
    "description": "Default true. Non-billable entries still consume clip-card hours."
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects/{id}/time-entries' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/projects/time-entries/:entryId

Update time entry

Update time entry

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/projects/time-entries/:entryId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/projects/time-entries/:entryId

Delete time entry

Delete time entry

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/projects/time-entries/:entryId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/projects/:id/expenses

List expenses

List expenses

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/projects/{id}/expenses' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects/:id/expenses

Create expense

Create expense

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects/{id}/expenses' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Bookings

Authenticated workspace API (API key). Create/cancel/reschedule/slots use the same pipeline as the public booking page. For a custom website UI without an API key, see GET /api/v1/docs?section=publicBooking.

GET/api/v1/bookings

List bookings

List bookings. dateFrom/dateTo filter createdAt. startFrom/startTo filter startDateTime (when the meeting starts).

Parametre

NavnTypePåkrævetBeskrivelse
statusstringNej
dateFromstringNejcreatedAt >= ISO
dateTostringNejcreatedAt <= ISO
startFromstringNejstartDateTime >= ISO
startTostringNejstartDateTime <= ISO
sortBystringNej
viewstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/bookings' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/bookings

Create booking (slot check, calendar, CRM, emails, automations, webhooks)

Create booking (slot check, calendar, CRM, emails, automations, webhooks)

Request body

json
{
  "configId": {
    "type": "string",
    "required": true
  },
  "slotStart": {
    "type": "string",
    "required": true,
    "description": "ISO datetime"
  },
  "attendeeInfo": {
    "type": "object",
    "required": true,
    "description": "{ name, email, phone?, notes? }"
  },
  "meetingTypeId": {
    "type": "string"
  },
  "selectedAgentId": {
    "type": "string"
  },
  "customFieldsData": {
    "type": "object"
  },
  "invitedParticipants": {
    "type": "array"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/bookings' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/bookings/:id

Get booking by ID or publicId

Get booking by ID or publicId

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/bookings/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/bookings/:id/cancel

Cancel booking (calendar + notifications)

Cancel booking (calendar + notifications)

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/bookings/{id}/cancel' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/bookings/:id/approve

Approve pending booking

Approve pending booking

Request body

json
{
  "notes": {
    "type": "string"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/bookings/{id}/approve' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/bookings/:id/reject

Reject pending booking

Reject pending booking

Request body

json
{
  "reason": {
    "type": "string"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/bookings/{id}/reject' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/bookings/:id/reschedule

Reschedule booking

Reschedule booking

Request body

json
{
  "newSlotStart": {
    "type": "string",
    "required": true
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/bookings/{id}/reschedule' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/bookings/available-slots

Get available time slots for a booking config

Get available time slots for a booking config

Parametre

NavnTypePåkrævetBeskrivelse
configIdstringJa
startDatestringJa
endDatestringJa
meetingTypeIdstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/bookings/available-slots' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/booking-configs

List booking configurations

List booking configurations

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/booking-configs' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/booking-configs/:id

Get booking configuration

Get booking configuration

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/booking-configs/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/booking-configs/:id

Update booking configuration (admin scope)

Update booking configuration (admin scope)

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/booking-configs/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Reports

GET/api/v1/reports/pipeline

Pipeline report

Pipeline report. byStage entries include stageId + stageName (stage keeps the name for back-compat).

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/pipeline' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/reports/leads

Leads report

Leads report

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/leads' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/reports/offers

Offers report

Offers report

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/offers' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/reports/support

Support report

Support report

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/support' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/reports/history

History/activity report (daily counts)

History/activity report (daily counts)

Parametre

NavnTypePåkrævetBeskrivelse
statstringJa
startDatestringJaISO date (aliases: dateFrom, from)
endDatestringJaISO date (aliases: dateTo, to)
userIdstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/history' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/reports/organization

Organization overview

Organization overview

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/organization' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/reports/users

Users report

Users report

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/users' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/reports/users/:userId

Individual user report

Individual user report

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/reports/users/:userId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Lead Scoring

Rules that compute lead.score (0-100) on create/update. Score is not writable on POST/PUT /leads. Admin required to create/update/delete rules.

GET/api/v1/lead-scoring/rules

List lead scoring rules (sorted by sortOrder)

List lead scoring rules (sorted by sortOrder)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/lead-scoring/rules' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/lead-scoring/rules

Create scoring rule

Create scoring rule. Admin/owner required.

Request body

json
{
  "name": {
    "type": "string",
    "required": true,
    "description": "Unique rule name in the workspace"
  },
  "description": {
    "type": "string"
  },
  "field": {
    "type": "string",
    "required": true,
    "description": "Eval field: hasEmail, hasPhone, hasValue, source, contactType, value, tags, customFields.<key>, contact.<field>, etc."
  },
  "condition": {
    "type": "string",
    "required": true,
    "enum": [
      "exists",
      "not_exists",
      "equals",
      "not_equals",
      "contains",
      "not_contains",
      "greater_than",
      "less_than",
      "in",
      "not_in"
    ]
  },
  "value": {
    "type": "mixed",
    "description": "Comparison value (omit for exists/not_exists). Arrays for in/not_in."
  },
  "points": {
    "type": "number",
    "required": true,
    "description": "Points to add (positive) or subtract (negative). Total clamped 0-100."
  },
  "isActive": {
    "type": "boolean",
    "default": true
  },
  "sortOrder": {
    "type": "number",
    "default": 0
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/lead-scoring/rules' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/lead-scoring/rules/:id

Update scoring rule (partial)

Update scoring rule (partial). Admin/owner required.

Request body

json
{
  "name": {
    "type": "string"
  },
  "description": {
    "type": "string"
  },
  "field": {
    "type": "string"
  },
  "condition": {
    "type": "string"
  },
  "value": {
    "type": "mixed"
  },
  "points": {
    "type": "number"
  },
  "isActive": {
    "type": "boolean"
  },
  "sortOrder": {
    "type": "number"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/lead-scoring/rules/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/lead-scoring/rules/:id

Delete scoring rule

Delete scoring rule. Admin/owner required.

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/lead-scoring/rules/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Lead Routing

GET/api/v1/lead-routing/rules

List lead routing rules

List lead routing rules

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/lead-routing/rules' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/lead-routing/rules

Create routing rule

Create routing rule

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/lead-routing/rules' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/lead-routing/rules/:id

Update routing rule

Update routing rule

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/lead-routing/rules/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/lead-routing/rules/:id

Delete routing rule

Delete routing rule

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/lead-routing/rules/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Import & Export

Import requires API key scope `import`; export requires `export`. Neither is covered by `write` alone. Admin/owner role is also required.

POST/api/v1/import/companies

Import companies from CSV/data

Import companies from CSV/data. Requires scope: import.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/import/companies' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/import/people

Import people

Import people. Requires scope: import.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/import/people' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/import/leads

Import leads

Import leads. Requires scope: import.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/import/leads' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/import/deals

Import deals

Import deals. Requires scope: import.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/import/deals' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/import/validate

Validate import data before importing

Validate import data before importing. Requires scope: import.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/import/validate' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/import/history

List import history

List import history. Requires scope: import.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/import/history' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/export/leads

Export leads (POST only)

Export leads (POST only). Body: limit (max 10000), page, skip, cursor (_id), sortBy, sortOrder, fields, dateFrom, dateTo, filters. total is workspace match count. Requires scope: export. Admin/owner role required.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/export/leads' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/export/deals

Export deals (POST only)

Export deals (POST only). Body: limit, page, skip, cursor, sortBy, sortOrder, fields, dateFrom, dateTo, filters. Requires scope: export. Admin/owner role required.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/export/deals' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/export/people

Export people (POST only)

Export people (POST only). Body: limit, page, skip, cursor, sortBy, sortOrder, fields, dateFrom, dateTo, filters. Requires scope: export. Admin/owner role required.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/export/people' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/export/companies

Export companies (POST only)

Export companies (POST only). Body: limit (max 10000), page, skip, cursor (_id of last row), sortBy, sortOrder, fields (any stored field), dateFrom, dateTo, filters. Returns total, hasMore, nextCursor. Requires scope: export. Admin/owner role required.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/export/companies' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/export/lists/:listId

Export list items (POST only)

Export list items (POST only). Requires scope: export. Admin/owner role required.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/export/lists/:listId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/export/custom-objects/:slug

Export custom object records (POST only)

Export custom object records (POST only). Requires scope: export. Admin/owner role required.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/export/custom-objects/:slug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Files & Folders

GET/api/v1/files

List files

List files

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/files' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/files

Upload file

Upload file

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/files' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/files/:id

Get file metadata

Get file metadata

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/files/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/files/:id

Delete file

Delete file

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/files/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/files/:id/link

Link file to entity

Link file to entity

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/files/{id}/link' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/files/cloud/accounts

List accessible Google Drive / OneDrive accounts

List accessible Google Drive / OneDrive accounts

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/files/cloud/accounts' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/files/cloud/browse

Browse or search cloud files (parentId, driveId, query, recent, roots=true for s

Browse or search cloud files (parentId, driveId, query, recent, roots=true for shared drives, withPath)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/files/cloud/browse' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/files/cloud/link

Link cloud files to an entity

Link cloud files to an entity

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/files/cloud/link' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/files/cloud/create

Create a cloud document in Salesbase/<entity> and link it

Create a cloud document in Salesbase/<entity> and link it

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/files/cloud/create' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/folders

List folders

List folders

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/folders' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/folders

Create folder

Create folder

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/folders' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/folders/:id

Delete folder

Delete folder

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/folders/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Users (Team Members)

Manage workspace members

GET/api/v1/users

List workspace members

List workspace members

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
searchstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/users' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/users/:id

Get user by ID

Get user by ID

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/users/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/users/:id

Update user (name, phone)

Update user (name, phone)

Request body

json
{
  "firstName": {
    "type": "string"
  },
  "lastName": {
    "type": "string"
  },
  "phone": {
    "type": "string"
  },
  "defaultUserPhone": {
    "type": "string"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/users/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Support Tickets

Authenticated workspace API (API key) for the agent inbox. For a custom website chat UI without an API key, see GET /api/v1/docs?section=publicChat. Category is a workspace-defined string from the support portal Kategori field (GET /api/v1/support-tickets/categories). Public visitors use the portal form, not this API.

GET/api/v1/support-tickets

List support tickets

List support tickets

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
statusstringNej
prioritystringNej
assigneestringNej
categorystringNejWorkspace-defined category value
searchstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-tickets' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/support-tickets/categories

List ticket category options for this workspace (from support portal Felter → Ka

List ticket category options for this workspace (from support portal Felter → Kategori). Use these values in POST/PUT category.

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-tickets/categories' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/support-tickets

Create support ticket

Create support ticket. Requires an existing support flow. category is a workspace-defined string (GET /categories). Defaults to the first portal category, or general.

Request body

json
{
  "title": {
    "type": "string",
    "required": true
  },
  "description": {
    "type": "string"
  },
  "priority": {
    "type": "string",
    "enum": [
      "low",
      "medium",
      "high",
      "urgent"
    ]
  },
  "category": {
    "type": "string",
    "description": "Workspace-defined category. Use GET /api/v1/support-tickets/categories."
  },
  "assignee": {
    "type": "string",
    "description": "User ID"
  },
  "company": {
    "type": "string",
    "description": "Company ID"
  },
  "personRef": {
    "type": "string",
    "description": "Person ID"
  },
  "tags": {
    "type": "string[]"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/support-tickets' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/support-tickets/:id

Get support ticket by ID

Get support ticket by ID

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-tickets/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/support-tickets/:id

Update support ticket

Update support ticket. customFields is a partial key→value merge.

Request body

json
{
  "title": {
    "type": "string"
  },
  "description": {
    "type": "string"
  },
  "priority": {
    "type": "string"
  },
  "status": {
    "type": "string",
    "enum": [
      "open",
      "in_progress",
      "waiting",
      "resolved",
      "closed"
    ]
  },
  "category": {
    "type": "string",
    "description": "Workspace-defined category. Use GET /api/v1/support-tickets/categories."
  },
  "assignee": {
    "type": "string"
  },
  "tags": {
    "type": "string[]"
  },
  "resolution": {
    "type": "string"
  },
  "customFields": {
    "type": "object",
    "description": "Partial key → typed value merge"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/support-tickets/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/support-tickets/:id

Delete support ticket

Delete support ticket

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/support-tickets/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/support-tickets/:id/reply

Add reply to ticket

Add reply to ticket

Request body

json
{
  "content": {
    "type": "string",
    "required": true
  },
  "type": {
    "type": "string",
    "enum": [
      "agent_reply",
      "internal_note"
    ],
    "default": "agent_reply"
  },
  "visibility": {
    "type": "string",
    "enum": [
      "public",
      "internal"
    ],
    "default": "public"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/support-tickets/{id}/reply' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/support-tickets/:id/move

Move ticket to kanban stage

Move ticket to kanban stage

Request body

json
{
  "stageId": {
    "type": "number",
    "required": true
  },
  "flowId": {
    "type": "string",
    "description": "Optional support flow ID"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/support-tickets/{id}/move' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/support-tickets/:id/messages

List ticket messages

List ticket messages

Parametre

NavnTypePåkrævetBeskrivelse
limitnumberNej
visibilitystringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-tickets/{id}/messages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/support-tickets/:id/time-entries

List time entries on ticket

List time entries on ticket

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-tickets/{id}/time-entries' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/support-tickets/:id/time-entries

Create time entry on ticket

Create time entry on ticket

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/support-tickets/{id}/time-entries' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/support-flow

Get (or lazily create) the workspace's default support flow (kanban stages)

Get (or lazily create) the workspace's default support flow (kanban stages)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-flow' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/support-customers

List support customers (grouped identity across tickets by person, email, or cha

List support customers (grouped identity across tickets by person, email, or chat visitor)

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
searchstringNej
qstringNejAlias for search
sortBystringNej
sortOrderstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-customers' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/support-customers/detail

Get full detail for one support customer: tickets, time stats, and time entries

Get full detail for one support customer: tickets, time stats, and time entries

Parametre

NavnTypePåkrævetBeskrivelse
typestringJa
valuestringJapersonRef ID, email address, or chatVisitorRef ID depending on type

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/support-customers/detail' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Filter Presets

Saved filter configurations for lists and views

GET/api/v1/filter-presets

List filter presets

List filter presets

Parametre

NavnTypePåkrævetBeskrivelse
areastringNejFilter by area (e.g. companies, leads, deals)
pagestringNej
limitstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/filter-presets' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/filter-presets

Create filter preset

Create filter preset

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "area": {
    "type": "string"
  },
  "columnFilters": {
    "type": "object"
  },
  "filterTree": {
    "type": "object"
  },
  "filterMode": {
    "type": "string",
    "enum": [
      "and",
      "or"
    ]
  },
  "sorting": {
    "type": "array"
  },
  "visibility": {
    "type": "string",
    "enum": [
      "workspace",
      "private",
      "group",
      "user"
    ]
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/filter-presets' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/filter-presets/:id

Get filter preset

Get filter preset

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/filter-presets/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/filter-presets/:id

Update filter preset

Update filter preset

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/filter-presets/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/filter-presets/:id

Delete filter preset

Delete filter preset

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/filter-presets/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Email Signatures

GET/api/v1/email-signatures

List email signatures

List email signatures

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/email-signatures' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/email-signatures

Create signature

Create signature

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "content": {
    "type": "string",
    "required": true,
    "description": "HTML content"
  },
  "textContent": {
    "type": "string"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/email-signatures' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/email-signatures/:id

Get signature

Get signature

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/email-signatures/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/email-signatures/:id

Update signature

Update signature

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/email-signatures/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/email-signatures/:id

Delete signature

Delete signature

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/email-signatures/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Clip Cards (Prepaid Hours)

Manage prepaid service hour cards for projects

GET/api/v1/clip-cards

List clip cards

List clip cards

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
statusstringNej
projectIdstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/clip-cards' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/clip-cards

Create clip card

Create clip card

Request body

json
{
  "project": {
    "type": "string",
    "required": true,
    "description": "Project ID"
  },
  "title": {
    "type": "string"
  },
  "totalHours": {
    "type": "number",
    "required": true
  },
  "hourlyRate": {
    "type": "number",
    "required": true
  },
  "allowOverdraft": {
    "type": "boolean"
  },
  "overdraftRate": {
    "type": "number"
  },
  "expiresAt": {
    "type": "string",
    "description": "ISO date"
  },
  "notes": {
    "type": "string"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/clip-cards' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/clip-cards/:id

Get clip card

Get clip card

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/clip-cards/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/clip-cards/:id

Update clip card

Update clip card

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/clip-cards/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/clip-cards/:id

Delete clip card

Delete clip card

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/clip-cards/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Dashboard Layouts

Manage saved dashboard configurations

GET/api/v1/dashboard-layouts

List dashboard layouts

List dashboard layouts

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/dashboard-layouts' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/dashboard-layouts

Create layout

Create layout

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "layout": {
    "type": "object"
  },
  "visibleComponents": {
    "type": "string[]"
  },
  "chartWidgets": {
    "type": "array"
  },
  "visibility": {
    "type": "string",
    "enum": [
      "workspace",
      "private",
      "group",
      "user"
    ]
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/dashboard-layouts' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/dashboard-layouts/:id

Get layout

Get layout

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/dashboard-layouts/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/dashboard-layouts/:id

Update layout

Update layout

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/dashboard-layouts/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/dashboard-layouts/:id

Delete layout

Delete layout

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/dashboard-layouts/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Custom Objects

Workspace-defined object types and records. Schema/field mutations require admin scope; record CRUD uses write scope.

GET/api/v1/custom-objects

List custom object definitions

List custom object definitions

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/custom-objects' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/custom-objects

Create custom object definition (admin scope)

Create custom object definition (admin scope). Sending color without useAccentNavIcon enables accent nav icons.

Request body

json
{
  "slug": {
    "type": "string",
    "required": true
  },
  "singular": {
    "type": "string",
    "required": true
  },
  "plural": {
    "type": "string",
    "required": true
  },
  "description": {
    "type": "string"
  },
  "icon": {
    "type": "string"
  },
  "color": {
    "type": "string",
    "description": "Accent hex. Implies useAccentNavIcon true unless that flag is set explicitly."
  },
  "useAccentNavIcon": {
    "type": "boolean",
    "description": "Show object color on sidebar icons. Defaults true when color is set."
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/custom-objects' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/custom-objects/:slug

Get definition with field schemas

Get definition with field schemas

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/custom-objects/:slug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/custom-objects/:slug

Update definition metadata (admin scope)

Update definition metadata (admin scope). Supports singular/plural/icon/color/sidebar fields plus titleField, favoriteFieldKeys, searchableFields, views, piiFields. Patching color without useAccentNavIcon enables accent nav icons.

Request body

json
{
  "color": {
    "type": "string",
    "description": "Accent hex. Implies useAccentNavIcon true unless that flag is set explicitly."
  },
  "useAccentNavIcon": {
    "type": "boolean"
  },
  "icon": {
    "type": "string"
  },
  "singular": {
    "type": "string"
  },
  "plural": {
    "type": "string"
  },
  "showInSidebar": {
    "type": "boolean"
  },
  "titleField": {
    "type": "string",
    "description": "Field slug used as display title"
  },
  "favoriteFieldKeys": {
    "type": "string[]",
    "description": "Up to 5 field slugs for previews"
  },
  "searchableFields": {
    "type": "string[]"
  },
  "views": {
    "type": "array"
  },
  "piiFields": {
    "type": "string[]"
  }
}

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/custom-objects/:slug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/custom-objects/:slug

Delete object and all records (admin scope)

Delete object and all records (admin scope)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/custom-objects/:slug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/custom-objects/:slug/fields

Add field (admin scope)

Add field (admin scope). Relation type is record_reference (not reference/relation). select/multi_select options must be { value, label } objects. See schema CustomObjectField for full type enum.

Request body

json
{
  "slug": {
    "type": "string",
    "required": true
  },
  "label": {
    "type": "string",
    "required": true
  },
  "type": {
    "type": "string",
    "required": true,
    "enum": [
      "text",
      "number",
      "currency",
      "date",
      "datetime",
      "select",
      "multi_select",
      "checkbox",
      "url",
      "email",
      "phone",
      "file",
      "record_reference",
      "json",
      "formula",
      "rollup"
    ]
  },
  "options": {
    "type": "array",
    "description": "[{ value, label, color? }] for select/multi_select"
  },
  "referenceType": {
    "type": "string",
    "enum": [
      "custom",
      "native"
    ]
  },
  "referenceObject": {
    "type": "string",
    "description": "Custom object slug when referenceType=custom"
  },
  "nativeEntity": {
    "type": "string",
    "description": "Native entity when referenceType=native"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/custom-objects/:slug/fields' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/custom-objects/:slug/fields/:fieldSlug

Update field (admin scope)

Update field (admin scope)

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/custom-objects/:slug/fields/:fieldSlug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/custom-objects/:slug/fields/:fieldSlug

Delete field (admin scope)

Delete field (admin scope)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/custom-objects/:slug/fields/:fieldSlug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/custom-objects/:slug/records

List records with pagination or cursor search

List records with pagination or cursor search

Parametre

NavnTypePåkrævetBeskrivelse
pagenumberNej
limitnumberNej
qstringNejSearch query (alias: search)
searchstringNejAlias for q
cursorstringNejCursor for next page when searching
sortstringNejField slug to sort by
dirstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/custom-objects/:slug/records

Create record

Create record. Body is field-slug keys → values (flattened). Optional wrappers: { data: {…} } or { customFields: {…} }. Unknown or read-only slugs return 400.

Request body

json
{
  "type": "object",
  "description": "Field slug keys → values, or { data } / { customFields } wrappers"
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/custom-objects/:slug/records/bulk

Bulk update records

Bulk update records. Unknown field slugs in patch/operations return 400.

Request body

json
{
  "ids": {
    "type": "string[]",
    "required": true
  },
  "patch": {
    "type": "object",
    "required": true,
    "description": "Field slug → value"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records/bulk' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/custom-objects/:slug/records/:id

Get record by ID

Get record by ID. Response is flattened field slugs (not nested under data).

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/custom-objects/:slug/records/:id

Partial update

Partial update. Body: field-slug map, or { data: {…} } / { customFields: {…} }. Unknown or read-only slugs return 400 with unknown/denied. Top-level avatar sets the record image: an https image URL (re-hosted) or a data:image/...;base64 URL (max 2 MB); empty clears it.

Request body

json
{
  "type": "object",
  "description": "Field slug keys → values (partial merge)"
}

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/custom-objects/:slug/records/:id

Alias of PATCH (partial merge, not a full replace)

Alias of PATCH (partial merge, not a full replace).

Request body

json
{
  "type": "object",
  "description": "Field slug keys → values (partial merge)"
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/custom-objects/:slug/records/:id

Delete record

Delete record

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/custom-objects/:slug/records/:id/activity-feed

Activity feed for a record

Activity feed for a record

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/custom-objects/:slug/records/{id}/activity-feed' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/export/custom-objects/:slug

Export records (export + admin scope)

Export records (export + admin scope)

Request body

json
{
  "from": {
    "type": "string"
  },
  "to": {
    "type": "string"
  },
  "limit": {
    "type": "number"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/export/custom-objects/:slug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/import/custom-objects/:slug

Import records from rows array (import + admin scope)

Import records from rows array (import + admin scope)

Request body

json
{
  "rows": {
    "type": "array",
    "required": true
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/import/custom-objects/:slug' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Calculators

Read calculator templates tied to offer types and run stateless price calculations.

GET/api/v1/calculator-templates

List calculator templates

List calculator templates

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/calculator-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/calculator-templates/:id

Get template with pricing rules

Get template with pricing rules

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/calculator-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/calculator-templates/:id/calculate

Run calculation without persisting

Run calculation without persisting

Request body

json
{
  "inputs": {
    "type": "object",
    "required": true
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/calculator-templates/{id}/calculate' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/calculator-submissions

List calculator submissions

List calculator submissions

Parametre

NavnTypePåkrævetBeskrivelse
pagestringNej
limitstringNej
templateIdstringNej
offerIdstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/calculator-submissions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Integrations

Read integration connection status. OAuth connect flows remain in-app only.

GET/api/v1/integrations

List connected providers and sync health (no secrets)

List connected providers and sync health (no secrets)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/integrations' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/integrations/:provider/sync

Trigger manual sync (admin scope)

Trigger manual sync (admin scope)

Request body

json
{
  "fullSync": {
    "type": "boolean"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/integrations/:provider/sync' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Metrics

Read every statistic the dashboard and reports can show (calls, SMS, e-mail, pipeline, revenue, leads, offers, support, projects, custom objects, external series) and push your own time series. Custom-object metrics are keyed custom.{slug}.* and follow the object's view permission. Reads require the reports module; writes require write scope.

GET/api/v1/metrics

Catalog of metrics available in the workspace

Catalog of metrics available in the workspace. Each entry: { key, label, description, category, format (integer|currency|percent|duration|decimal), mode (flow|snapshot), dimensions[], measureType }. Includes custom.{slug}.* families and external:{seriesKey} series.

Parametre

NavnTypePåkrævetBeskrivelse
categorystringNejFilter by category key (e.g. calls, sms, custom:{slug}, external)

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/metrics' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/metrics/query

Query one metric

Query one metric. Returns total, optional period-over-period delta and a bucketed series. Snapshot metrics (mode snapshot) report the current state and ignore the window.

Parametre

NavnTypePåkrævetBeskrivelse
metricKeystringJaKey from GET /api/v1/metrics
fromstringJaISO date/datetime (inclusive)
tostringNejISO date/datetime (inclusive). Default now
granularitystringNejBucket size. Default day
dimensionstringNejGroup by one of the metric's dimensions (breakdown). Points get dimension + dimensionLabel
compareTostringNejAdd compareTotal, compareSeries and delta { abs, pct }
tzstringNejIANA timezone for bucketing. Default Europe/Copenhagen
formatstringNejcsv returns a UTF-8 CSV file with one row per point: metricKey, label, granularity, period (current|compare), bucket, dimension, dimensionValue, dimensionLabel, value, format. Default json

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/metrics/query' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/metrics/query

Batch query up to 25 metrics in one call

Batch query up to 25 metrics in one call. Same fields per request as GET /api/v1/metrics/query. Results are returned in request order; an unknown or forbidden metric yields { metricKey, error, code } for that entry only. Add ?format=csv (or "format": "csv" in the body) to download all series as one CSV file.

Request body

json
{
  "requests": {
    "type": "array",
    "required": true,
    "description": "Array of { metricKey, from, to?, granularity?, dimension?, compareTo?, tz? }"
  },
  "format": {
    "type": "string",
    "enum": [
      "json",
      "csv"
    ],
    "description": "Response format. Default json"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/metrics/query' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/metrics/points

Idempotent upsert of daily points for an external series

Idempotent upsert of daily points for an external series. The series appears in the catalog as external:{seriesKey} and can be shown on dashboards and reports. Max 5000 points per request. Requires write scope.

Request body

json
{
  "seriesKey": {
    "type": "string",
    "required": true,
    "description": "Stable series id (letters, digits, '_', '.', '-'). Stored as external:{seriesKey}."
  },
  "label": {
    "type": "string",
    "description": "Display name shown in pickers (set once or update any time)"
  },
  "description": {
    "type": "string",
    "description": "Short help text for the picker"
  },
  "format": {
    "type": "string",
    "enum": [
      "integer",
      "decimal",
      "currency",
      "percent",
      "duration"
    ],
    "description": "Number format. Default decimal"
  },
  "points": {
    "type": "array",
    "required": true,
    "description": "Array of { date (ISO), value (number), dimensions? (object) }"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/metrics/points' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Project templates

Reusable project blueprints (tasks, milestones, portal/invoice defaults). Create a project with POST /api/v1/projects/from-template. On offer accept, set OfferType.createProjectOnAccept + projectTemplateId instead of an automation create_project action.

GET/api/v1/project-templates

List project templates

List project templates. includeInactive=true includes soft-deleted (isActive=false).

Parametre

NavnTypePåkrævetBeskrivelse
includeInactivebooleanNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/project-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/project-templates

Create a project template (requires projects create)

Create a project template (requires projects create).

Request body

json
{
  "name": {
    "type": "string",
    "required": true
  },
  "description": {
    "type": "string"
  },
  "flowRef": {
    "type": "string",
    "description": "ProjectFlow id"
  },
  "taskTemplates": {
    "type": "array",
    "description": "[{ title, description?, stage?, priority?, … }]"
  },
  "milestoneTemplates": {
    "type": "array"
  },
  "projectData": {
    "type": "object"
  },
  "portalSettings": {
    "type": "object"
  },
  "isDefault": {
    "type": "boolean"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/project-templates' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/project-templates/:id

Get one template

Get one template

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/project-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PATCH/api/v1/project-templates/:id

Update template fields

Update template fields

Eksempel

curl
curl -X PATCH 'https://app.salesbase.dk/api/v1/project-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/project-templates/:id

Soft-delete (isActive=false)

Soft-delete (isActive=false)

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/project-templates/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/projects/from-template

Instantiate a project from a template (tasks/milestones)

Instantiate a project from a template (tasks/milestones). Prefer OfferType createProjectOnAccept for accept-time creation.

Request body

json
{
  "templateId": {
    "type": "string",
    "required": true
  },
  "title": {
    "type": "string"
  },
  "company": {
    "type": "string",
    "description": "Company id"
  },
  "personRef": {
    "type": "string"
  },
  "offerData": {
    "type": "object",
    "description": "Optional { offerId, offerTitle, lineItems, dealRef, leadRef }"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/projects/from-template' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Automatiseringer

Automations are event-driven flows that execute actions when specific triggers fire. Each automation has exactly one trigger node and one or more action/condition/delay/AI nodes connected by edges. Automations are stored as ReactFlow graphs (nodes + edges) and executed by a cron-based step processor.

GET/api/v1/automations

List all automations in the workspace

List all automations in the workspace

Parametre

NavnTypePåkrævetBeskrivelse
pagenumberNejPage number
limitnumberNejItems per page
isActivestringNejFilter by active status

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/automations' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/automations

Create a new automation

Create a new automation

Request body

json
{
  "name": {
    "type": "string",
    "required": true,
    "description": "Automation name"
  },
  "description": {
    "type": "string",
    "required": false,
    "description": "Description of what this automation does"
  },
  "nodes": {
    "type": "Node[]",
    "required": false,
    "description": "Array of flow nodes (see Node Structure below)"
  },
  "edges": {
    "type": "Edge[]",
    "required": false,
    "description": "Array of edges connecting nodes (see Edge Structure below)"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/automations' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/automations/:id

Get a single automation by ID

Get a single automation by ID

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/automations/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/automations/:id

Update an automation

Update an automation

Request body

json
{
  "name": {
    "type": "string",
    "required": false
  },
  "description": {
    "type": "string",
    "required": false
  },
  "nodes": {
    "type": "Node[]",
    "required": false
  },
  "edges": {
    "type": "Edge[]",
    "required": false
  },
  "executionSettings": {
    "type": "ExecutionSettings",
    "required": false
  },
  "rateLimits": {
    "type": "RateLimits",
    "required": false
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/automations/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/automations/:id

Delete an automation

Delete an automation. Fails if there are running executions.

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/automations/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/automations/:id/toggle

Toggle automation active/inactive

Toggle automation active/inactive

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/automations/{id}/toggle' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/automations/:id/executions

List executions for an automation

List executions for an automation

Parametre

NavnTypePåkrævetBeskrivelse
pagenumberNej
limitnumberNej
statusstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/automations/{id}/executions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/automations/executions/:executionId

Get a single execution with full step log

Get a single execution with full step log

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/automations/executions/:executionId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/automations/stats

Get aggregate automation statistics for the workspace

Get aggregate automation statistics for the workspace

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/automations/stats' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/automations/:id/duplicate

Duplicate an automation (creates inactive copy)

Duplicate an automation (creates inactive copy)

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/automations/{id}/duplicate' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/automations/:id/test

Run automation in test mode with sample context

Run automation in test mode with sample context

Request body

json
{
  "testContext": {
    "type": "object",
    "description": "Optional context overrides"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/automations/{id}/test' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/automations/:id/trigger

Manually trigger an active automation

Manually trigger an active automation

Request body

json
{
  "context": {
    "type": "object",
    "description": "Trigger context payload"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/automations/{id}/trigger' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/automations/executions/:executionId/cancel

Cancel a running automation execution

Cancel a running automation execution

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/automations/executions/:executionId/cancel' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Sekvenser

Sequences are entity-centric outreach flows for personalized sales communication. Unlike automations (which are event-triggered), sequences are started by enrolling an entity (Lead, People, Deal, or Company). Each sequence has a Start node, communication nodes (email, SMS), timing nodes (wait), action nodes (tasks, recalls, field updates), logic nodes (conditions, AI), and Stop nodes.

GET/api/v1/sequences

List all sequences in the workspace

List all sequences in the workspace

Parametre

NavnTypePåkrævetBeskrivelse
pagenumberNej
limitnumberNej
isActivestringNejFilter by active status

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sequences' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sequences

Create a new sequence

Create a new sequence

Request body

json
{
  "name": {
    "type": "string",
    "required": true,
    "description": "Sequence name"
  },
  "description": {
    "type": "string",
    "required": false
  },
  "nodes": {
    "type": "Node[]",
    "required": false,
    "description": "Array of step nodes (see Step Types below). A default Start node is created if nodes are omitted."
  },
  "edges": {
    "type": "Edge[]",
    "required": false,
    "description": "Array of edges connecting nodes"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sequences' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sequences/:id

Get a single sequence by ID

Get a single sequence by ID

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sequences/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/sequences/:id

Update a sequence

Update a sequence

Request body

json
{
  "name": {
    "type": "string"
  },
  "description": {
    "type": "string"
  },
  "nodes": {
    "type": "Node[]"
  },
  "edges": {
    "type": "Edge[]"
  },
  "allowedEntityTypes": {
    "type": "string[]",
    "description": "Array of entity types that can be enrolled: 'Lead', 'People', 'Deal', 'Company'"
  },
  "exitConditions": {
    "type": "ExitConditions",
    "description": "See Exit Conditions section"
  },
  "sendSettings": {
    "type": "SendSettings",
    "description": "See Send Settings section"
  },
  "trackingSettings": {
    "type": "TrackingSettings"
  },
  "aiSettings": {
    "type": "AiSettings"
  },
  "executionSettings": {
    "type": "ExecutionSettings"
  },
  "triggers": {
    "type": "Trigger[]",
    "description": "Auto-enrollment triggers"
  },
  "defaultSenderType": {
    "type": "string",
    "enum": [
      "fixed",
      "owner"
    ]
  },
  "defaultSenderId": {
    "type": "string",
    "description": "Email account ID for fixed sender"
  },
  "defaultSmsNumber": {
    "type": "string",
    "description": "Phone number for SMS"
  }
}

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/sequences/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/sequences/:id

Delete a sequence

Delete a sequence. Fails if there are active enrollments.

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/sequences/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sequences/:id/toggle

Toggle sequence active/inactive

Toggle sequence active/inactive. Activation requires a start node and at least one action node.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sequences/{id}/toggle' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sequences/:id/duplicate

Duplicate a sequence (creates inactive copy)

Duplicate a sequence (creates inactive copy)

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sequences/{id}/duplicate' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sequences/:id/enroll-eligibility

Check if an entity can be enrolled before calling enroll

Check if an entity can be enrolled before calling enroll

Parametre

NavnTypePåkrævetBeskrivelse
entityTypestringJa
entityIdstringJa

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sequences/{id}/enroll-eligibility' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sequences/:id/enroll

Enroll one or more entities into the sequence

Enroll one or more entities into the sequence

Request body

json
{
  "entityType": {
    "type": "string",
    "required": true,
    "enum": [
      "Lead",
      "People",
      "Deal",
      "Company"
    ]
  },
  "entityId": {
    "type": "string",
    "description": "Single entity ID (for single enrollment)"
  },
  "entityIds": {
    "type": "string[]",
    "description": "Array of entity IDs (for bulk enrollment)"
  },
  "source": {
    "type": "string",
    "default": "api",
    "description": "Enrollment source identifier"
  },
  "forceRestart": {
    "type": "boolean",
    "default": false,
    "description": "Re-enroll even if entity was previously enrolled"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sequences/{id}/enroll' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sequences/:id/enrollments

List enrollments for a sequence

List enrollments for a sequence

Parametre

NavnTypePåkrævetBeskrivelse
pagenumberNej
limitnumberNej
statusstringNej

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sequences/{id}/enrollments' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/sequences/:id/stats

Get aggregate statistics for a sequence

Get aggregate statistics for a sequence

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/sequences/{id}/stats' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sequences/enrollments/:enrollmentId/pause

Pause an active enrollment

Pause an active enrollment

Request body

json
{
  "durationDays": {
    "type": "number",
    "description": "Optional: auto-resume after X days"
  }
}

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sequences/enrollments/:enrollmentId/pause' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sequences/enrollments/:enrollmentId/resume

Resume a paused enrollment

Resume a paused enrollment

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sequences/enrollments/:enrollmentId/resume' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/sequences/enrollments/:enrollmentId/unenroll

Remove an entity from the sequence (only if active or paused)

Remove an entity from the sequence (only if active or paused)

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/sequences/enrollments/:enrollmentId/unenroll' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'

Webhook Events

Subscribe to CRM events and receive HTTP POST notifications at your URL. Each webhook delivery includes an HMAC signature for verification. Manage subscriptions via the /api/v1/webhooks/subscriptions endpoints.

GET/api/v1/webhooks/subscriptions

List subscriptions

List subscriptions

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/webhooks/subscriptions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/webhooks/subscriptions

Create subscription (returns secret)

Create subscription (returns secret)

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/webhooks/subscriptions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
GET/api/v1/webhooks/subscriptions/:id

Get subscription

Get subscription

Eksempel

curl
curl -X GET 'https://app.salesbase.dk/api/v1/webhooks/subscriptions/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
PUT/api/v1/webhooks/subscriptions/:id

Update subscription

Update subscription

Eksempel

curl
curl -X PUT 'https://app.salesbase.dk/api/v1/webhooks/subscriptions/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
DELETE/api/v1/webhooks/subscriptions/:id

Delete subscription

Delete subscription

Eksempel

curl
curl -X DELETE 'https://app.salesbase.dk/api/v1/webhooks/subscriptions/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/webhooks/automation/:automationId

Trigger a webhook-type automation. The JSON body becomes available as webhookData.* placeholders in the automation flow.

Trigger a webhook-type automation. The JSON body becomes available as webhookData.* placeholders in the automation flow.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/webhooks/automation/:automationId' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
POST/api/v1/webhooks/zapier

Zapier inbound — creates person, lead, and deal. Bearer API key with inbound scope.

Zapier inbound — creates person, lead, and deal. Bearer API key with inbound scope.

Eksempel

curl
curl -X POST 'https://app.salesbase.dk/api/v1/webhooks/zapier' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
EVENTcompany.created

company.created

A company was created

EVENTcompany.updated

company.updated

A company was updated

EVENTcompany.deleted

company.deleted

A company was deleted

EVENTperson.created

person.created

A person was created

EVENTperson.updated

person.updated

A person was updated

EVENTperson.deleted

person.deleted

A person was deleted

EVENTdeal.created

deal.created

A deal was created

EVENTdeal.updated

deal.updated

A deal was updated

EVENTdeal.deleted

deal.deleted

A deal was deleted

EVENTdeal.stage_changed

deal.stage_changed

A deal moved to a different pipeline stage

EVENTdeal.won

deal.won

A deal was marked as won

EVENTdeal.lost

deal.lost

A deal was marked as lost

EVENTlead.created

lead.created

A lead was created

EVENTlead.updated

lead.updated

A lead was updated

EVENTlead.deleted

lead.deleted

A lead was deleted

EVENTcall.created

call.created

A call record was created

EVENTcall.updated

call.updated

A call record was updated

EVENTnote.created

note.created

A note was created

EVENTnote.updated

note.updated

A note was updated

EVENTtask.created

task.created

A task was created

EVENTtask.updated

task.updated

A task was updated

EVENTtask.completed

task.completed

A task was marked as completed

EVENTactivity.created

activity.created

An activity was logged

EVENTcustom_object.created

custom_object.created

A custom object record was created

EVENTcustom_object.updated

custom_object.updated

A custom object record was updated

Klar til at teste?

Opret en API-nøgle i dashboardet og kør jeres første kald.