SalesOS

Competitors

Competitor tracking and battlecards

List

GET
/v1/competitors

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

tierRequiredstring
statusRequiredstring
searchRequiredstring
curl -X GET "https://api.salesos.org/v1/competitors?tier=%3Cstring%3E&status=%3Cstring%3E&search=%3Cstring%3E" \
  -H "Authorization: Bearer <token>"

Create

POST
/v1/competitors

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
websitestring
logoUrlstring
descriptionstring
tierstring
Value in: "PRIMARY" | "SECONDARY" | "EMERGING" | "INDIRECT"
strengthsarray<string>
weaknessesarray<string>
differentiatorsarray<string>
targetMarketstring
pricingModelstring

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/competitors" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "website": "string",
    "logoUrl": "string",
    "description": "string",
    "tier": "PRIMARY",
    "strengths": [
      "string"
    ],
    "weaknesses": [
      "string"
    ],
    "differentiators": [
      "string"
    ],
    "targetMarket": "string",
    "pricingModel": "string"
  }'

Get stats

GET
/v1/competitors/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

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

Find one

GET
/v1/competitors/{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/competitors/<string>" \
  -H "Authorization: Bearer <token>"

{}

Update

PATCH
/v1/competitors/{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
websitestring
logoUrlstring
descriptionstring
tierstring
Value in: "PRIMARY" | "SECONDARY" | "EMERGING" | "INDIRECT"
statusstring
Value in: "ACTIVE" | "INACTIVE" | "ACQUIRED" | "MERGED"
strengthsarray<string>
weaknessesarray<string>
differentiatorsarray<string>
targetMarketstring
pricingModelstring

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/competitors/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "website": "string",
    "logoUrl": "string",
    "description": "string",
    "tier": "PRIMARY",
    "status": "ACTIVE",
    "strengths": [
      "string"
    ],
    "weaknesses": [
      "string"
    ],
    "differentiators": [
      "string"
    ],
    "targetMarket": "string",
    "pricingModel": "string"
  }'

Delete

DELETE
/v1/competitors/{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/competitors/<string>" \
  -H "Authorization: Bearer <token>"

Get products

GET
/v1/competitors/{id}/products

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/competitors/<string>/products" \
  -H "Authorization: Bearer <token>"

[
  {}
]

Add product

POST
/v1/competitors/{id}/products

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
comparableToProductIdstring
featureGapsarray<string>
featureAdvantagesarray<string>
positioningstring
pricingInfostring

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/competitors/<string>/products" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "comparableToProductId": "string",
    "featureGaps": [
      "string"
    ],
    "featureAdvantages": [
      "string"
    ],
    "positioning": "string",
    "pricingInfo": "string"
  }'

{}

Update product

PATCH
/v1/competitors/{competitorId}/products/{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

competitorIdRequiredstring
productIdRequiredstring

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/competitors/<string>/products/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"

Delete product

DELETE
/v1/competitors/{competitorId}/products/{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

competitorIdRequiredstring
productIdRequiredstring
curl -X DELETE "https://api.salesos.org/v1/competitors/<string>/products/<string>" \
  -H "Authorization: Bearer <token>"

Get battlecards

GET
/v1/competitors/{id}/battlecards

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

Query Parameters

activeOnlyRequiredstring
curl -X GET "https://api.salesos.org/v1/competitors/<string>/battlecards?activeOnly=%3Cstring%3E" \
  -H "Authorization: Bearer <token>"

Create battlecard

POST
/v1/competitors/{id}/battlecards

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
titleRequiredstring
overviewstring
keyTalkingPointsarray<string>
objectionHandlingarray<object>
trapQuestionsarray<string>
isActiveboolean

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/competitors/<string>/battlecards" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "string",
    "overview": "string",
    "keyTalkingPoints": [
      "string"
    ],
    "objectionHandling": [
      {
        "objection": "string",
        "response": "string"
      }
    ],
    "trapQuestions": [
      "string"
    ],
    "isActive": true
  }'

Update battlecard

PATCH
/v1/battlecards/{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
titlestring
overviewstring
keyTalkingPointsarray<string>
objectionHandlingarray<object>
trapQuestionsarray<string>
isActiveboolean

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/battlecards/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "string",
    "overview": "string",
    "keyTalkingPoints": [
      "string"
    ],
    "objectionHandling": [
      {
        "objection": "string",
        "response": "string"
      }
    ],
    "trapQuestions": [
      "string"
    ],
    "isActive": true
  }'

Delete battlecard

DELETE
/v1/battlecards/{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/battlecards/<string>" \
  -H "Authorization: Bearer <token>"

Get opportunity competitors

GET
/v1/opportunities/{opportunityId}/competitors

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/opportunities/<string>/competitors" \
  -H "Authorization: Bearer <token>"

[
  {}
]

POST
/v1/opportunities/{opportunityId}/competitors

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
competitorIdRequiredstring
isPrimaryboolean
threatLevelstring
Value in: "HIGH" | "MEDIUM" | "LOW" | "CRITICAL"
notesstring

Path Parameters

opportunityIdRequiredstring

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/opportunities/<string>/competitors" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "competitorId": "string",
    "isPrimary": true,
    "threatLevel": "HIGH",
    "notes": "string"
  }'

{}

Update opportunity competitor

PATCH
/v1/opportunities/{opportunityId}/competitors/{competitorId}

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
competitorIdRequiredstring

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/opportunities/<string>/competitors/<string>" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"

{}

DELETE
/v1/opportunities/{opportunityId}/competitors/{competitorId}

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
competitorIdRequiredstring
curl -X DELETE "https://api.salesos.org/v1/opportunities/<string>/competitors/<string>" \
  -H "Authorization: Bearer <token>"

Mark competitor as winner

POST
/v1/opportunities/{opportunityId}/competitors/{competitorId}/mark-winner

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

Path Parameters

opportunityIdRequiredstring
competitorIdRequiredstring

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/opportunities/<string>/competitors/<string>/mark-winner" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'

Get win loss analytics

GET
/v1/competitors/analytics/win-loss

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

competitorIdRequiredstring
dateFromRequiredstring
dateToRequiredstring
curl -X GET "https://api.salesos.org/v1/competitors/analytics/win-loss?competitorId=%3Cstring%3E&dateFrom=%3Cstring%3E&dateTo=%3Cstring%3E" \
  -H "Authorization: Bearer <token>"

Generate battlecard

POST
/v1/competitors/{id}/ai/generate-battlecard

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/competitors/<string>/ai/generate-battlecard" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"

{}

Analyze win loss patterns

GET
/v1/competitors/{id}/ai/win-loss-patterns

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

Query Parameters

regenerateRequiredstring
curl -X GET "https://api.salesos.org/v1/competitors/<string>/ai/win-loss-patterns?regenerate=%3Cstring%3E" \
  -H "Authorization: Bearer <token>"

Generate objection response

POST
/v1/competitors/{id}/ai/objection-response

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/competitors/<string>/ai/objection-response" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"

Get positioning recommendations

GET
/v1/opportunities/{opportunityId}/ai/competitive-positioning

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/opportunities/<string>/ai/competitive-positioning" \
  -H "Authorization: Bearer <token>"

[
  {}
]

Analyze competitive call

POST
/v1/competitors/ai/analyze-call

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

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/competitors/ai/analyze-call" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"