Spredfast · Authentication Profile

Spredfast Authentication

Authentication

Spredfast secures its APIs with oauth2 across 2 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode flow(s).

CompanySocial MediaSocial Media ManagementMarketingSocial MarketingPublishingAnalyticsEngagementContent ManagementWebhooksEventsEnterprise
Methods: oauth2 Schemes: 2 OAuth flows: authorizationCode API key in:

Security Schemes

oauth2 oauth2
· flows: authorizationCode
sec0 oauth2
· flows: clientCredentials

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
source: https://developer.khoros.com/khorosmarketingdevdocs/docs/getting-started-with-the-conversations-api
docs: https://developer.khoros.com/khorosmarketingdevdocs
derived_from:
- openapi/spredfast-conversations-api-v1-openapi.yml
- openapi/spredfast-conversations-api-openapi.yml
- openapi/spredfast-analytics-api-openapi.yml
- openapi/spredfast-crm-api-openapi.yml
- openapi/spredfast-notification-api-openapi.yml
- openapi/spredfast-labelsets-api-openapi.yml
- openapi/spredfast-introspection-api-openapi.yml
- openapi/spredfast-experiences-stream-api-openapi.yml
note: >-
  UPGRADED 2026-08-13. The prior round recorded "No OpenAPI/Swagger definition
  is published" — that is now superseded: nine OpenAPI documents were harvested
  from the Khoros Marketing developer center and are in openapi/. The auth
  profile is now corroborated by both the docs AND the contracts.
  IMPORTANT DISCREPANCY: eight of the nine documents declare a securityScheme
  named `sec0` with a `clientCredentials` flow whose tokenUrl is
  `https://example.com/oauth2/token`. That is a DOCUMENTATION-TOOL PLACEHOLDER
  (ReadMe's default when a spec is authored in its API Designer), not a
  Spredfast endpoint — example.com is the IANA reserved domain. The
  authoritative scheme is the one on the Conversations V1 contract, which names
  the real Spredfast OAuth host, and it matches the getting-started guide's
  description of "3-legged OAuth 2.0". Treat the placeholder as a defect in the
  provider's published contracts, not as a second supported flow.
summary:
  types:
  - oauth2
  oauth2_flows:
  - authorizationCode
  api_key: false
  basic_auth: false
  mtls: false
  openid_connect: false
  discovery_metadata: false
access_model:
  self_serve: false
  note: >-
    Credentials are issued by Khoros support, not by a developer portal. The
    company admin must ask support to (a) enable the DevCenter application for
    the company and (b) issue a client id and client secret. That client id must
    then be allow-listed for the company in Conversations. Until both are done,
    every call fails with "Company {id} does not allow the application
    {clientId}".
schemes:
- name: oauth2
  type: oauth2
  authoritative: true
  flows:
  - flow: authorizationCode
    authorizationUrl: https://login.spredfast.com/v3/oauth/authorize
    tokenUrl: https://login.spredfast.com/v3/oauth/token
    scopes:
      all: Read/write access for all endpoints.
    description: >-
      3-legged OAuth 2.0 browser redirection flow. Redirect the user to the
      authorization URL with client_id, response_type=code, redirect_uri and
      state; exchange the returned code at the token URL with client_id,
      client_secret and redirect_uri. The response carries a Token object
      ({ sfEntityType, accessToken, expiryTime }) inside the standard platform
      envelope.
  sources:
  - openapi/spredfast-conversations-api-v1-openapi.yml
  - https://developer.khoros.com/khorosmarketingdevdocs/docs/getting-started-with-the-conversations-api
- name: sec0
  type: oauth2
  authoritative: false
  defect: placeholder-token-url
  flows:
  - flow: clientCredentials
    tokenUrl: https://example.com/oauth2/token
    scopes: {}
    description: >-
      As published by the provider. The tokenUrl is example.com — an IANA
      reserved domain — so this flow is not callable as declared. It appears
      identically in eight of the nine contracts, which is the signature of a
      docs-platform default rather than a design decision.
  sources:
  - openapi/spredfast-conversations-api-openapi.yml
  - openapi/spredfast-analytics-api-openapi.yml
  - openapi/spredfast-crm-api-openapi.yml
  - openapi/spredfast-notification-api-openapi.yml
  - openapi/spredfast-labelsets-api-openapi.yml
  - openapi/spredfast-introspection-api-openapi.yml
  - openapi/spredfast-experiences-stream-api-openapi.yml
token:
  type: bearer
  presentation: Authorization header on every API call.
  lifetime: 24 months (2 years)
  persists_across_password_change: true
  refresh: Repeat the authorization flow; there is no separate refresh_token grant documented.
  revocation: By the authenticating user, in Profile Settings -> Notifications.
  self_service_issue: >-
    A user may also generate an API Access Token directly from the Profile
    Settings area of Khoros Marketing.
  introspection:
    supported: true
    operation: GET https://api.spredfast.com/v2/whoami
    spec: openapi/spredfast-introspection-api-openapi.yml
  expiry_signal: >-
    An expired or revoked token does NOT return a JSON 401 — the docs record an
    HTML page reading "Developer Inactive". Detect it as a content-type
    mismatch, not a status code.
enterprise_sso:
  supported: true
  note: >-
    All company security policies, including SAML SSO integration, are enforced
    during the OAuth login, because OAuth tokens are managed by the same
    authentication system as web logins.
  source: openapi/spredfast-conversations-api-v1-openapi.yml
scopes:
  count: 1
  note: >-
    A single scope, `all`, granting read/write across every endpoint. There is
    no read-only credential, so a reporting integration must be issued the same
    privilege as a publishing one.
  detail: scopes/spredfast-scopes.yml
gaps:
- No /.well-known/oauth-authorization-server (RFC 8414) — login.spredfast.com returns 404.
- No /.well-known/openid-configuration — login.spredfast.com returns 404.
- No PKCE guidance published for the authorization code flow.
- Client credentials are issued by a support ticket, so there is no programmatic credential lifecycle.
- >-
  Eight of nine published contracts declare an uncallable placeholder tokenUrl
  (example.com), which will mislead any tool that generates a client from them.