Sense Street · Authentication Profile

Sense Street Authentication

Authentication

Sense Street secures its APIs with http across 2 declared security schemes, as derived from its OpenAPI definitions.

CompanyCapital MarketsTradingArtificial IntelligenceFintechConversation IntelligenceOTCMarket DataNatural Language ProcessingCommoditiesFixed Income
Methods: http Schemes: 2 OAuth flows: API key in: header

Security Schemes

BearerJWT http
scheme: bearer · in: header ()
XKeyPublicKey apiKey
· in: header ()

Source

Authentication Profile

sense-street-authentication.yml Raw ↑
generated: '2026-08-14'
method: derived
source: >-
  src/sensestreet/auth_header_builder.py in the first-party PyPI package
  `sensestreet` 1.0.16 (published 2025-10-07), plus the published description of
  https://docs.sensestreet.com/authentication
docs: https://docs.sensestreet.com/authentication
docs_gated: true
summary:
  types: [http]
  scheme: bearer
  bearer_format: JWT
  signing_algorithm: RS256
  key_model: client-held RSA key pair, public key registered with Sense Street
  api_key_in: [header]
  oauth2_flows: []
  note: >-
    Sense Street does NOT run OAuth 2.0 or OIDC. There is no authorization
    server, no /.well-known/openid-configuration, and no scope surface — so this
    repo carries no scopes/ artifact. Authentication is a client-signed JWT
    bearer assertion: the customer generates an RSA key pair, registers the
    public key with Sense Street, and the SDK mints a short-lived RS256 JWT
    locally for every request. That is a self-issued assertion model, not a
    token-grant model.
schemes:
- name: BearerJWT
  type: http
  scheme: bearer
  bearerFormat: JWT
  algorithm: RS256
  in: header
  header: Authorization
  value_format: 'Bearer <RS256 JWT signed with the client private key>'
  token_lifetime_seconds: 900
  not_before_skew_seconds: -300
  claims:
  - {claim: exp, meaning: expiry, value: now + 15 minutes}
  - {claim: nbf, meaning: not before, value: now - 5 minutes}
  - {claim: aud, meaning: audience, value: api.sensestreet.com}
  - {claim: application_id, meaning: the customer app id issued by Sense Street}
  - {claim: public_key_id, meaning: identifies which registered public key signed this, default 'default.pub'}
  - {claim: server_id, meaning: target server identifier, default 'default'}
  - {claim: server_role, meaning: target server role, default 'default'}
  source: packages/sense-street-packages.yml
- name: XKeyPublicKey
  type: apiKey
  in: header
  header: X-key
  value_format: PEM-encoded RSA public key
  required: false
  description: >-
    The client's RSA PUBLIC key is sent verbatim in the X-key header alongside
    the signed bearer token, so the server can verify the assertion without a
    prior key exchange for that request. Sending a public key is not a secret
    disclosure.
  source: packages/sense-street-packages.yml
network_controls:
- control: vpn
  description: >-
    "Enterprise API access is secured with VPN connectivity" — published on the
    Sense Street authentication docs page description.
  source: https://docs.sensestreet.com/authentication
- control: ip-allowlisting
  description: >-
    Static source IPs are allowlisted per customer; the implementation page
    states integration requires "secure API integration with static IPs and
    authentication".
  source: https://docs.sensestreet.com/implementation-data-requirements
- control: edge-auth-gate
  description: >-
    Observed live: every path under /api/ on portal.sensestreet.com returns
    HTTP 401 with the plain-text body "Invalid or missing token", including
    /api/v1/openapi.json, /api/v1/docs and /api/v1/redoc. The gate is applied at
    the nginx edge ahead of the application, so unauthenticated callers cannot
    enumerate the surface.
  source: probed 2026-08-14
always_sent_headers:
- {header: Authorization, note: only when a private key is configured}
- {header: X-key, note: PEM public key, only when a public key path is configured}
- {header: X-client-version, note: SDK version string, e.g. 1.0.16}
- {header: Date, note: 'client local timestamp, format MM/DD/YYYY, HH:MM:SS'}
- {header: Content-Type, note: application/json except on multipart file uploads}
dashboard_authentication:
  method: sso
  description: >-
    The Sense Street dashboard (portal.sensestreet.com) is separate from the API
    and uses Single Sign-On with role-based access control and MFA. Google
    Identity Services is loaded on the portal login page.
  source: https://docs.sensestreet.com/dashboard-authentication
x-evidence:
- url: https://pypi.org/pypi/sensestreet/json
  status: 200
- url: https://docs.sensestreet.com/authentication
  status: 200
  note: page renders, body content requires sign-in; the published meta description is the readable part
- url: https://portal.sensestreet.com/api/v1/ping
  status: 401
  note: 'body "Invalid or missing token"'

Work with this as data

Every security artifact here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/sense-street-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.