SalesOS

Guided Selling

AI product matching and recommendations

Get use case categories for needs assessment

GET
/v1/guided-selling/use-cases

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/guided-selling/use-cases" \
  -H "Authorization: Bearer <token>"

Get product recommendations based on selected use cases

POST
/v1/guided-selling/recommendations

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
useCaseIdsRequiredarray<string>

Selected use case IDs

accountIdstring

Account ID for history-based recommendations

industrystring

Industry vertical

companySizestring

Company size tier

Value in: "SMALL" | "MEDIUM" | "LARGE" | "ENTERPRISE"
budgetstring

Budget tier

Value in: "LOW" | "MEDIUM" | "HIGH" | "ENTERPRISE"

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/guided-selling/recommendations" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "useCaseIds": [
      "string"
    ],
    "accountId": "string",
    "industry": "string",
    "companySize": "SMALL",
    "budget": "LOW"
  }'

Build a bundle with auto-discount calculation

POST
/v1/guided-selling/bundle

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
productIdsRequiredarray<string>

Product IDs to include in bundle

quantitiesRequiredobject

Quantities keyed by product ID

contractLengthnumber

Contract length in months (for contract-length discounts)

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/guided-selling/bundle" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "productIds": [
      "string"
    ],
    "quantities": {
      "prod_abc": 2,
      "prod_def": 1
    },
    "contractLength": 0
  }'

Apply a bundle to an existing quote

POST
/v1/guided-selling/apply-to-quote/{quoteId}

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
productIdsRequiredarray<string>

Product IDs in the bundle

quantitiesRequiredobject

Quantities keyed by product ID

contractLengthnumber

Contract length in months

Path Parameters

quoteIdRequiredstring

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/guided-selling/apply-to-quote/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "productIds": [
      "string"
    ],
    "quantities": {},
    "contractLength": 0
  }'

Get cross-sell recommendations for a product

GET
/v1/guided-selling/also-bought/{productId}

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

productIdRequiredstring
curl -X GET "https://api.salesos.org/v1/guided-selling/also-bought/<string>" \
  -H "Authorization: Bearer <token>"

List dynamic pricing rules

GET
/v1/guided-selling/pricing-rules

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

isActiveboolean
curl -X GET "https://api.salesos.org/v1/guided-selling/pricing-rules?isActive=true" \
  -H "Authorization: Bearer <token>"

Create a dynamic pricing rule

POST
/v1/guided-selling/pricing-rules

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

Rule name

descriptionstring

Rule description

conditionsRequiredarray<object>

Conditions that must be met

conditionLogicRequiredstring

Logic for combining conditions

Value in: "AND" | "OR"
actionRequiredobject

Action to take when conditions are met

prioritynumber

Priority (lower = higher priority)

Default: 100
isActiveboolean

Whether rule is active

Default: true
validFromstring

Valid from date (ISO string)

validTostring

Valid to date (ISO string)

maxUsagenumber

Maximum number of times this rule can be used

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/guided-selling/pricing-rules" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "description": "string",
    "conditions": [
      {
        "field": "volume",
        "operator": "EQUALS",
        "value": {},
        "valueEnd": {}
      }
    ],
    "conditionLogic": "AND",
    "action": {
      "type": "DISCOUNT_PERCENT",
      "value": 0,
      "maxDiscount": 0,
      "appliesToProductIds": [
        "string"
      ],
      "appliesToCategories": [
        "string"
      ]
    },
    "priority": 100,
    "isActive": true,
    "validFrom": "string",
    "validTo": "string",
    "maxUsage": 0
  }'

Update a dynamic pricing rule

PATCH
/v1/guided-selling/pricing-rules/{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

Rule name

descriptionstring

Rule description

conditionsarray<object>

Conditions that must be met

conditionLogicstring

Logic for combining conditions

Value in: "AND" | "OR"
actionobject

Action to take when conditions are met

prioritynumber

Priority (lower = higher priority)

isActiveboolean

Whether rule is active

validFromstring

Valid from date (ISO string)

validTostring

Valid to date (ISO string)

maxUsagenumber

Maximum number of times this rule can be used

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/guided-selling/pricing-rules/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "description": "string",
    "conditions": [
      {
        "field": "volume",
        "operator": "EQUALS",
        "value": {},
        "valueEnd": {}
      }
    ],
    "conditionLogic": "AND",
    "action": {
      "type": "DISCOUNT_PERCENT",
      "value": 0,
      "maxDiscount": 0,
      "appliesToProductIds": [
        "string"
      ],
      "appliesToCategories": [
        "string"
      ]
    },
    "priority": 0,
    "isActive": true,
    "validFrom": "string",
    "validTo": "string",
    "maxUsage": 0
  }'

Preview which pricing rules apply to a quote

POST
/v1/guided-selling/pricing-rules/preview/{quoteId}

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

quoteIdRequiredstring

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/guided-selling/pricing-rules/preview/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"