Improvado · Authentication Profile

Improvado Authentication

Authentication

Improvado secures its APIs with http, oauth2, and none across 5 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode flow(s).

CompanyMarketingMarketing IntelligenceMarketing AnalyticsData PipelineETLAdvertising DataBusiness IntelligenceData IntegrationAI AgentsMCPAgent Readiness
Methods: http, oauth2, none Schemes: 5 OAuth flows: authorizationCode API key in: header

Security Schemes

basicAuth http
scheme: basic
bearerToken http
scheme: bearer
cookieSession apiKey
· in: cookie ()
improvadoOAuth oauth2
· flows: authorizationCode
none none

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
source: https://developers.improvado.io/auth
docs: https://developers.improvado.io/auth
update_note: >-
  UPDATED 2026-08-13. The 2026-07-19 profile covered only the Embedded API v3 and recorded
  oauth2_flows: []. That is still correct for embedded.improvado.io, but Improvado runs THREE distinct
  API surfaces with three different auth models, and the other two were missing. Added below: a full
  OAuth 2.0 authorization-code + PKCE model on the tenant host (report.improvado.io) that gates the
  customer MCP server — probed directly from its RFC 8414 and RFC 9728 metadata documents — and the
  anonymous public Agent Ask endpoint.
summary:
  types: [http, oauth2, none]
  http_schemes: [basic, bearer]
  api_key_in: [header]
  oauth2_flows: [authorizationCode]
  surfaces: 3
  notes: >-
    Three surfaces. (1) Embedded API v3 (embedded.improvado.io) — two-stage: HTTP Basic (RFC 7617) for
    workspace-management operations and to obtain a workspace-scoped access token; the resulting Bearer
    token for all workspace-scoped resources; plus a cookie/session variant (dts_session_id) with an
    X-IM-WORKSPACE-ID header for embedded-UI sessions. (2) Customer MCP (report.improvado.io or a
    whitelabel tenant domain) — OAuth 2.0 authorization code with PKCE, scope mcp:customer, dynamic
    client registration, 15-minute workspace-scoped sessions. (3) Public Agent Ask API
    (agent.improvado.io) — no authentication at all.
surfaces:
- surface: Improvado Embedded API v3
  host: https://embedded.improvado.io
  schemes: [basicAuth, bearerToken, cookieSession]
  docs: https://developers.improvado.io/auth
- surface: Improvado Customer MCP
  host: https://report.improvado.io (or a whitelabel tenant domain)
  schemes: [improvadoOAuth]
  docs: https://improvado.io/docs-section-topic/improvado-mcp
  cross_link: scopes/improvado-scopes.yml
- surface: Improvado Public Agent Ask API
  host: https://agent.improvado.io
  schemes: [none]
  docs: https://improvado.io/llms.txt
schemes:
- name: basicAuth
  type: http
  scheme: basic
  description: >-
    RFC 7617 HTTP Basic. Credentials (username:password, base64) are provisioned by
    Improvado for Embedded API access; the customer changes the password on first use.
    Required for workspace management and for calling POST /api/v3/token to mint a
    workspace-scoped Bearer token. Invalid credentials return 401 Unauthorized.
  used_for: [workspace management, token acquisition]
- name: bearerToken
  type: http
  scheme: bearer
  bearerFormat: opaque
  description: >-
    Workspace-scoped access token obtained from POST /api/v3/token. Sent as
    Authorization: Bearer <token>. Required for workspace-specific resources
    (connections, accounts, extracts, destinations, data tables, loads, recipes,
    roles, webhooks). Token TTL is 30 minutes, renewed on each authorized use;
    an invalid or expired token returns 401 Unauthorized.
  used_for: [workspace-scoped resources]
- name: cookieSession
  type: apiKey
  in: cookie
  parameterName: dts_session_id
  description: >-
    Cookie-based session used by embedded-UI (iframe) flows, combined with an
    X-IM-WORKSPACE-ID request header to scope the session to a workspace.
  used_for: [embedded iframe UI]
- name: improvadoOAuth
  type: oauth2
  surface: Improvado Customer MCP
  method: probed
  source: https://report.improvado.io/.well-known/oauth-authorization-server
  description: >-
    OAuth 2.0 authorization server on the customer's own Improvado tenant domain, gating the
    84-tool customer MCP endpoint. Authorization code grant with PKCE (plain and S256), refresh
    tokens, dynamic client registration (RFC 7591) and client_id metadata documents. Bearer token in
    the Authorization header. Improvado's positioning is "your existing Improvado credentials, no new
    tokens to manage" — the agent authorizes as the human, it does not get its own API key.
  flows:
  - flow: authorizationCode
    authorizationUrl: https://report.improvado.io/api/dts/v2/oauth/o/authorize/
    tokenUrl: https://report.improvado.io/api/dts/v2/oauth/o/token/
    revocationUrl: https://report.improvado.io/api/dts/v2/oauth/o/revoke_token/
    introspectionUrl: https://report.improvado.io/api/dts/v2/oauth/o/introspect/
    registrationUrl: https://report.improvado.io/api/dts/v2/oauth/o/register/
    pkce: [plain, S256]
    scopes: [mcp:customer]
  token_endpoint_auth_methods: [client_secret_basic, client_secret_post, none]
  session_ttl: 15 minutes (Redis-backed, workspace-scoped)
  discovery:
    authorization_server_metadata: https://report.improvado.io/.well-known/oauth-authorization-server
    protected_resource_metadata: https://report.improvado.io/.well-known/oauth-protected-resource/experimental/agent/api/mcp-customer/v1/invoke/
    rfcs: [RFC 8414, RFC 9728, RFC 7591, RFC 7636]
  used_for: [MCP tool calls]
  cross_link: scopes/improvado-scopes.yml
  host_note: >-
    The issuer is the tenant's own domain. On a whitelabel domain (e.g. acme.improvado.io),
    report.improvado.io will NOT authenticate the client — Improvado states this explicitly.
- name: none
  type: none
  surface: Improvado Public Agent Ask API
  method: searched
  source: https://improvado.io/openapi.json
  description: >-
    POST https://agent.improvado.io/ask requires no authentication. The published OpenAPI declares no
    securitySchemes and its info.description states "This endpoint is open and does not require
    authentication." Improvado's llms.txt adds the usage boundary: one public non-sensitive question,
    never send credentials or personal data, abusive bulk traffic may be rate limited.
  used_for: [public product and architecture Q&A]
x-evidence:
- fetched: '2026-08-13'
  url: https://report.improvado.io/.well-known/oauth-authorization-server
  http_status: 200
- fetched: '2026-08-13'
  url: https://report.improvado.io/experimental/agent/api/mcp-customer/v1/invoke/
  http_status: 401
  note: 'WWW-Authenticate: Bearer resource_metadata="...", scope="mcp:customer"'
- fetched: '2026-08-13'
  url: https://improvado.io/openapi.json
  http_status: 200
- fetched: '2026-08-13'
  url: https://developers.improvado.io/auth.md
  http_status: 200