Spark Platform · Authentication Profile

Spark Platform Authentication

Authentication

Spark Platform's authentication profile. There is no OpenAPI to derive securitySchemes from, so this profile is read from the published authentication documentation plus the one machine-readable identity document Spark serves anonymously — its OpenID Connect discovery document. Four mechanisms are documented: an OAuth 2 / MLS-issued Bearer access token (the normal path for data access), OpenID Connect (member identity, MLS approval required), SAML (service-provider integration with flexmls Web), and a legacy signed-request API key. Every data endpoint returns HTTP 401 with Spark code 1000 when called anonymously.

Spark Platform secures its APIs with http-bearer, oauth2, openIdConnect, saml, and apiKey-signed across 4 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode flow(s).

Real EstateUnited StatesMLSRESOProperty ListingsIDXPropTechListing Data InfrastructureOData
Methods: http-bearer, oauth2, openIdConnect, saml, apiKey-signed Schemes: 4 OAuth flows: authorizationCode API key in: header

Security Schemes

Bearer access token http
scheme: bearer · in: header (Authorization)
OpenID Connect openIdConnect
SAML saml
Legacy API key with request signing apiKey
· in: header ()

Source

Authentication Profile

spark-platform-authentication.yml Raw ↑
generated: '2026-07-26'
method: searched
source: >-
  https://sparkplatform.com/docs/authentication/access_token,
  https://sparkplatform.com/docs/authentication/openid_connect_authentication,
  https://sparkplatform.com/docs/authentication/saml,
  https://sparkplatform.com/.well-known/openid-configuration (HTTP 200, harvested verbatim to
  authentication/spark-platform-openid-configuration.json).
docs: https://sparkplatform.com/docs/authentication/authentication
description: >-
  Spark Platform's authentication profile. There is no OpenAPI to derive securitySchemes from,
  so this profile is read from the published authentication documentation plus the one
  machine-readable identity document Spark serves anonymously — its OpenID Connect discovery
  document. Four mechanisms are documented: an OAuth 2 / MLS-issued Bearer access token (the
  normal path for data access), OpenID Connect (member identity, MLS approval required), SAML
  (service-provider integration with flexmls Web), and a legacy signed-request API key. Every
  data endpoint returns HTTP 401 with Spark code 1000 when called anonymously.
summary:
  types: [http-bearer, oauth2, openIdConnect, saml, apiKey-signed]
  api_key_in: [header]
  oauth2_flows: [authorizationCode]

schemes:
  - name: Bearer access token
    type: http
    scheme: bearer
    in: header
    parameter: Authorization
    format: "Authorization: Bearer <your_access_token>"
    issued_by: >-
      OAuth 2 authorization, or a non-expiring access token issued by the MLS alongside an
      OAuth key (API feed ID). The same token authorizes both the Spark API and the RESO Web
      API endpoints.
    required_with: Accept header; HTTPS required (code 1030 otherwise)
    docs: https://sparkplatform.com/docs/authentication/access_token
    applies_to: [Spark API, Spark RESO Web API]

  - name: OpenID Connect
    type: openIdConnect
    openIdConnectUrl: https://sparkplatform.com/.well-known/openid-configuration
    issuer: https://sparkplatform.com
    authorizationUrl: https://sparkplatform.com/openid/authorize
    tokenUrl: https://sparkplatform.com/openid/token
    userinfoUrl: https://sparkplatform.com/openid/userinfo
    revocationUrl: https://sparkplatform.com/openid/revoke
    jwks_uri: https://sparkplatform.com/openid/jwks.json
    id_token_signing_alg: [RS256]
    token_endpoint_auth_methods: [client_secret_post, client_secret_basic]
    response_types: [code, id_token, "id_token token", "code token", "id_token code", "id_token code token"]
    subject_types: [public, pairwise]
    claims_parameter_supported: true
    scopes: [openid, profile, email, address, phone, RESO, FBS]
    scope_detail: scopes/spark-platform-scopes.yml
    gate: Requires separate MLS approval before OIDC keys are issued.
    docs: https://sparkplatform.com/docs/authentication/openid_connect_authentication
    note: >-
      The claim set is real-estate specific and encodes the licensing substrate itself —
      MemberMlsId, MemberNrdsId, MemberStateLicense, MemberAOR/MemberAORkey,
      MemberPrimaryAorId, MemberType, MemberStatus, OfficeKey/OfficeMlsId, FlexmlsMemberType
      and mls_system_access. This is the only machine-readable contract Spark serves without
      credentials.
    harvested: authentication/spark-platform-openid-configuration.json

  - name: SAML
    type: saml
    docs: https://sparkplatform.com/docs/authentication/saml
    note: SAML service-provider integration with flexmls Web for member single sign-on.

  - name: Legacy API key with request signing
    type: apiKey
    in: header
    documented: partial
    note: >-
      Evidenced by the 401 body returned by both sparkapi.com/v1 and the OData endpoints —
      "Invalid API key and/or request signed improperly" (code 1000) — and by the
      Supplemental Authentication Services page in the docs navigation. Superseded by the
      Bearer token flow for new integrations.

session_semantics:
  session_token_expiry: Code 1020 "Session token has expired" on expired session tokens.
  key_restrictions:
    - Keys can be restricted to specific IP addresses and/or User-Agent values (code 1019).
    - Keys can be read-only; POST/PUT/DELETE then return code 1017.
    - Keys can be restricted to replication.sparkapi.com (code 1021).
    - Auth mechanism itself can be restricted per key (code 1013).

authorization_model:
  mechanism: role-scoped keys
  roles: [IDX, VOW, Private, Broker/Agent own data, Public, Portal]
  note: >-
    Authorization is not scope-based on the data API. What a valid token can see is determined
    by the role assigned to its key and by which MLS data plans the developer has been approved
    for. OAuth scopes exist only on the OpenID Connect identity surface.
  docs: https://sparkplatform.com/docs/supporting_documentation/roles

access_gate:
  classification: licence-agreement
  note: >-
    Credentials are not self-serve. Free public developer registration yields demo credentials
    only; production MLS data requires a signed FBS Developer Agreement, a role assignment and
    an MLS-approved data plan purchased through the Spark Datamart at USD 50/month per MLS.
  docs: https://sparkplatform.com/docs/overview/set_up_access