SalesOS

Customer Portal

Customer-facing self-service portal

Get customer portal configuration

GET
/v1/customer-portal/config

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/customer-portal/config" \
  -H "Authorization: Bearer <token>"

Portal configuration

Update customer portal configuration

PATCH
/v1/customer-portal/config

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 PATCH "https://api.salesos.org/v1/customer-portal/config" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"

Updated portal configuration

List portal users (optionally for one account or contact)

GET
/v1/customer-portal/users

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

accountIdstring
Maximum length: 64
contactIdstring
Maximum length: 64
curl -X GET "https://api.salesos.org/v1/customer-portal/users?accountId=%3Cstring%3E&contactId=%3Cstring%3E" \
  -H "Authorization: Bearer <token>"

List of portal users

Get a single portal user

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

Portal user details

Revoke portal access (kept for older clients)

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

Portal access revoked

List pending portal invitations

GET
/v1/customer-portal/invitations

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/customer-portal/invitations" \
  -H "Authorization: Bearer <token>"

Pending invitations

Invite a contact to the customer portal

POST
/v1/customer-portal/invitations

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
contactIdRequiredstring
Maximum length: 64
sendEmailboolean

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/customer-portal/invitations" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "contactId": "string",
    "sendEmail": true
  }'

Invitation created; inviteUrl is returned only when the email was not sent (EMAIL_NOT_CONFIGURED etc.)

Invite a contact to the customer portal

POST
/v1/customer-portal/users/invite

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
contactIdRequiredstring
Maximum length: 64
sendEmailboolean

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/customer-portal/users/invite" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "contactId": "string",
    "sendEmail": true
  }'

Revoke portal access (ends their sessions)

DELETE
/v1/customer-portal/users/{id}/access

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/customer-portal/users/<string>/access" \
  -H "Authorization: Bearer <token>"

Portal access revoked

Get customer portal statistics

GET
/v1/customer-portal/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/customer-portal/stats" \
  -H "Authorization: Bearer <token>"

Portal statistics

Get portal sign-ins from the last 24 hours

GET
/v1/customer-portal/sessions

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/customer-portal/sessions" \
  -H "Authorization: Bearer <token>"

Recent sign-ins

Toggle a portal feature

PATCH
/v1/customer-portal/features/{featureId}/toggle

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

featureIdRequiredstring

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/customer-portal/features/<string>/toggle" \
  -H "Idempotency-Key: <string>" \
  -H "Authorization: Bearer <token>"

Feature toggled