SalesOS

Pipelines

Sales pipeline configuration

Get pipeline deals with MEDDIC and forecast data

GET
/v1/pipeline/deals

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Query Parameters

modestring
Value in: "salesforce" | "local"
ownerIdstring
forecastCategorystring
Value in: "commit" | "most-likely" | "best-case" | "key-deals" | "must-win" | "low-likelihood"
stagestring
minAmountnumber
maxAmountnumber
closeDateFromstring
closeDateTostring
searchstring
limitnumber
offsetnumber
curl -X GET "https://api.salesos.org/v1/pipeline/deals?mode=salesforce&ownerId=%3Cstring%3E&forecastCategory=commit&stage=%3Cstring%3E&minAmount=0&maxAmount=0&closeDateFrom=%3Cstring%3E&closeDateTo=%3Cstring%3E&search=%3Cstring%3E&limit=0&offset=0" \
  -H "Authorization: Bearer <token>"

[
  {
    "id": "string",
    "name": "string",
    "accountId": "string",
    "accountName": "string",
    "amount": 0,
    "stage": "string",
    "probability": 0,
    "closeDate": "2019-08-24T14:15:22Z",
    "forecastCategory": "commit",
    "meddic": {
      "metrics": "complete",
      "economicBuyer": "identified",
      "decisionCriteria": "complete",
      "decisionProcess": "complete",
      "identifyPain": "complete",
      "champion": "strong",
      "score": 100
    },
    "warnings": [
      {
        "type": "stale",
        "message": "string",
        "severity": "medium"
      }
    ],
    "contactCount": 0,
    "owner": {
      "id": "string",
      "name": "string",
      "email": "string",
      "avatarUrl": "string"
    },
    "opportunityTeam": [
      {
        "id": "string",
        "name": "string",
        "role": "string"
      }
    ],
    "activities": [
      {
        "date": "2019-08-24T14:15:22Z",
        "type": "string",
        "count": 0
      }
    ],
    "lastActivityDate": "2019-08-24T14:15:22Z",
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z"
  }
]

Get pipeline statistics and forecast summaries

GET
/v1/pipeline/stats

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Query Parameters

modestring
Value in: "salesforce" | "local"
ownerIdstring
forecastCategorystring
Value in: "commit" | "most-likely" | "best-case" | "key-deals" | "must-win" | "low-likelihood"
stagestring
minAmountnumber
maxAmountnumber
closeDateFromstring
closeDateTostring
searchstring
limitnumber
offsetnumber
curl -X GET "https://api.salesos.org/v1/pipeline/stats?mode=salesforce&ownerId=%3Cstring%3E&forecastCategory=commit&stage=%3Cstring%3E&minAmount=0&maxAmount=0&closeDateFrom=%3Cstring%3E&closeDateTo=%3Cstring%3E&search=%3Cstring%3E&limit=0&offset=0" \
  -H "Authorization: Bearer <token>"

{
  "targetAttainment": 0,
  "pipelineCoverage": 0,
  "totalPipeline": 0,
  "averageDealSize": 0,
  "winRate": 0,
  "forecasts": [
    {
      "category": "commit",
      "label": "string",
      "totalAmount": 0,
      "dealCount": 0,
      "previousAmount": 0,
      "previousCount": 0,
      "changeAmount": 0,
      "changeCount": 0
    }
  ],
  "staleDealsCount": 0,
  "atRiskDealsCount": 0
}

Update MEDDIC score for an opportunity

PUT
/v1/pipeline/meddic

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
opportunityIdRequiredstring
metricsstring
Value in: "complete" | "partial" | "missing"
economicBuyerstring
Value in: "identified" | "engaged" | "unknown"
decisionCriteriastring
Value in: "complete" | "partial" | "missing"
decisionProcessstring
Value in: "complete" | "partial" | "missing"
identifyPainstring
Value in: "complete" | "partial" | "missing"
championstring
Value in: "strong" | "developing" | "none"
notesstring
curl -X PUT "https://api.salesos.org/v1/pipeline/meddic" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "opportunityId": "string",
    "metrics": "complete",
    "economicBuyer": "identified",
    "decisionCriteria": "complete",
    "decisionProcess": "complete",
    "identifyPain": "complete",
    "champion": "strong",
    "notes": "string"
  }'

{
  "metrics": "complete",
  "economicBuyer": "identified",
  "decisionCriteria": "complete",
  "decisionProcess": "complete",
  "identifyPain": "complete",
  "champion": "strong",
  "score": 100
}

Update forecast category for an opportunity

PUT
/v1/pipeline/forecast

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
opportunityIdRequiredstring
forecastCategoryRequiredstring
Value in: "commit" | "most-likely" | "best-case" | "key-deals" | "must-win" | "low-likelihood"
reasonstring
curl -X PUT "https://api.salesos.org/v1/pipeline/forecast" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "opportunityId": "string",
    "forecastCategory": "commit",
    "reason": "string"
  }'

Get AI-powered MEDDIC analysis for an opportunity

GET
/v1/pipeline/meddic/analyze/{opportunityId}

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Path Parameters

opportunityIdRequiredstring
curl -X GET "https://api.salesos.org/v1/pipeline/meddic/analyze/<string>" \
  -H "Authorization: Bearer <token>"

Get all pipelines

GET
/v1/pipelines

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

curl -X GET "https://api.salesos.org/v1/pipelines" \
  -H "Authorization: Bearer <token>"

Create a new pipeline

POST
/v1/pipelines

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
nameRequiredstring
descriptionstring
isDefaultboolean
colorstring
stagesarray<object>

Header Parameters

Idempotency-Keystring

Unique key (a UUID is ideal) that makes this write safe to retry for 24 hours: a retry with the same body replays the original response (Idempotent-Replayed: true); the same key with a different body is a 409.

Maximum length: 255
curl -X POST "https://api.salesos.org/v1/pipelines" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "description": "string",
    "isDefault": true,
    "color": "string",
    "stages": [
      {
        "name": "string",
        "displayName": "string",
        "color": "string",
        "probability": 100,
        "isClosedWon": true,
        "isClosedLost": true,
        "sortOrder": 0,
        "maxDaysInStage": 1,
        "requiredFields": [
          "string"
        ],
        "exitCriteria": [
          "string"
        ]
      }
    ]
  }'

{}

Get the default pipeline

GET
/v1/pipelines/default

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

curl -X GET "https://api.salesos.org/v1/pipelines/default" \
  -H "Authorization: Bearer <token>"

{}

Fields a stage may require to enter it (static allow-list; before `:id`).

GET
/v1/pipelines/meta/required-fields

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

curl -X GET "https://api.salesos.org/v1/pipelines/meta/required-fields" \
  -H "Authorization: Bearer <token>"

Get a single pipeline by ID

GET
/v1/pipelines/{id}

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Path Parameters

idRequiredstring
curl -X GET "https://api.salesos.org/v1/pipelines/<string>" \
  -H "Authorization: Bearer <token>"

{}

Update a pipeline

PATCH
/v1/pipelines/{id}

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
namestring
descriptionstring
isDefaultboolean
isActiveboolean
colorstring
sortOrdernumber

Path Parameters

idRequiredstring

Header Parameters

Idempotency-Keystring

Unique key (a UUID is ideal) that makes this write safe to retry for 24 hours: a retry with the same body replays the original response (Idempotent-Replayed: true); the same key with a different body is a 409.

Maximum length: 255
curl -X PATCH "https://api.salesos.org/v1/pipelines/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "description": "string",
    "isDefault": true,
    "isActive": true,
    "color": "string",
    "sortOrder": 0
  }'

{}

Delete a pipeline

DELETE
/v1/pipelines/{id}

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Path Parameters

idRequiredstring
curl -X DELETE "https://api.salesos.org/v1/pipelines/<string>" \
  -H "Authorization: Bearer <token>"

Set a pipeline as the default

POST
/v1/pipelines/{id}/set-default

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Path Parameters

idRequiredstring

Header Parameters

Idempotency-Keystring

Unique key (a UUID is ideal) that makes this write safe to retry for 24 hours: a retry with the same body replays the original response (Idempotent-Replayed: true); the same key with a different body is a 409.

Maximum length: 255
curl -X POST "https://api.salesos.org/v1/pipelines/<string>/set-default" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"

{}

Duplicate a pipeline

POST
/v1/pipelines/{id}/duplicate

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
nameRequiredstring

Path Parameters

idRequiredstring

Header Parameters

Idempotency-Keystring

Unique key (a UUID is ideal) that makes this write safe to retry for 24 hours: a retry with the same body replays the original response (Idempotent-Replayed: true); the same key with a different body is a 409.

Maximum length: 255
curl -X POST "https://api.salesos.org/v1/pipelines/<string>/duplicate" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string"
  }'

{}

Create stage

POST
/v1/pipelines/{pipelineId}/stages

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
nameRequiredstring
displayNameRequiredstring
colorRequiredstring
probabilityRequirednumber
Minimum: 0Maximum: 100
isClosedWonboolean
isClosedLostboolean
sortOrdernumber
maxDaysInStagenumber

SLA: flag deals that sit in this stage longer than this many days.

Minimum: 1Maximum: 3650
requiredFieldsarray<string>

Opportunity fields that must be non-empty to ENTER this stage (allow-listed).

exitCriteriaarray<string>

Display-only checklist shown to reps.

Path Parameters

pipelineIdRequiredstring

Header Parameters

Idempotency-Keystring

Unique key (a UUID is ideal) that makes this write safe to retry for 24 hours: a retry with the same body replays the original response (Idempotent-Replayed: true); the same key with a different body is a 409.

Maximum length: 255
curl -X POST "https://api.salesos.org/v1/pipelines/<string>/stages" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "displayName": "string",
    "color": "string",
    "probability": 100,
    "isClosedWon": true,
    "isClosedLost": true,
    "sortOrder": 0,
    "maxDaysInStage": 1,
    "requiredFields": [
      "string"
    ],
    "exitCriteria": [
      "string"
    ]
  }'

Update a stage

PATCH
/v1/pipelines/{pipelineId}/stages/{stageId}

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
namestring
displayNamestring
colorstring
probabilitynumber
Minimum: 0Maximum: 100
isClosedWonboolean
isClosedLostboolean
sortOrdernumber
maxDaysInStagenumber
Minimum: 1Maximum: 3650
requiredFieldsarray<string>
exitCriteriaarray<string>

Path Parameters

pipelineIdRequiredstring
stageIdRequiredstring

Header Parameters

Idempotency-Keystring

Unique key (a UUID is ideal) that makes this write safe to retry for 24 hours: a retry with the same body replays the original response (Idempotent-Replayed: true); the same key with a different body is a 409.

Maximum length: 255
curl -X PATCH "https://api.salesos.org/v1/pipelines/<string>/stages/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "displayName": "string",
    "color": "string",
    "probability": 100,
    "isClosedWon": true,
    "isClosedLost": true,
    "sortOrder": 0,
    "maxDaysInStage": 1,
    "requiredFields": [
      "string"
    ],
    "exitCriteria": [
      "string"
    ]
  }'

Delete a stage

DELETE
/v1/pipelines/{pipelineId}/stages/{stageId}

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Path Parameters

pipelineIdRequiredstring
stageIdRequiredstring
curl -X DELETE "https://api.salesos.org/v1/pipelines/<string>/stages/<string>" \
  -H "Authorization: Bearer <token>"

Reorder stages in a pipeline

POST
/v1/pipelines/{pipelineId}/stages/reorder

Authorization

AuthorizationRequiredBearer <token>

Session token from the SalesOS web app.

In: header

X-API-Key<token>

API key from Settings → API Keys. Authorization: ApiKey <key> is also accepted. Each operation lists the scope it needs under x-api-key-scopes.

In: header

Request Body

application/jsonRequired
stageIdsRequiredarray<string>

Path Parameters

pipelineIdRequiredstring

Header Parameters

Idempotency-Keystring

Unique key (a UUID is ideal) that makes this write safe to retry for 24 hours: a retry with the same body replays the original response (Idempotent-Replayed: true); the same key with a different body is a 409.

Maximum length: 255
curl -X POST "https://api.salesos.org/v1/pipelines/<string>/stages/reorder" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "stageIds": [
      "string"
    ]
  }'