Kardinal · Authentication Profile
Kardinal Authentication
Authentication
Kardinal secures its APIs with http across 5 declared security schemes, as derived from its OpenAPI definitions.
CompanySoftware-as-a-ServiceRoute OptimizationVehicle RoutingLast Mile DeliveryLogisticsSupply ChainTransportationFleet ManagementOptimization
Methods: http
Schemes: 5
OAuth flows:
API key in:
Security Schemes
access_token http
scheme: bearer
refresh_token http
scheme: bearer
otp_token http
scheme: bearer
password_token http
scheme: bearer
gdpr_token http
scheme: bearer
Source
Authentication Profile
generated: '2026-08-17'
method: searched
source: openapi/kardinal-aro-openapi-original.yml
docs: https://developers.kardinal.ai/guides/authentication
summary:
types:
- http
http_schemes:
- bearer
bearer_formats:
- JWT
oauth2_flows: []
api_key_in: []
model: >-
Username/password exchanged for a short-lived JWT access token, sent as
`Authorization: Bearer <access_token>`. There is no long-lived, dashboard-issued
API key. Five distinct bearer token classes are declared in the spec, each gating
a different stage of the login / MFA / recovery lifecycle.
schemes:
- name: access_token
type: http
scheme: bearer
bearerFormat: JWT
purpose: The working credential. Sent on every business operation (plans, resources, orders, solutions).
lifetime: 1 hour
sources: [openapi/kardinal-aro-openapi-original.yml]
- name: refresh_token
type: http
scheme: bearer
bearerFormat: JWT
purpose: Exchanged at POST /login/refresh for a new access_token without re-sending the password.
lifetime: 30 days (per the provider-published agent skill)
sources: [openapi/kardinal-aro-openapi-original.yml]
- name: otp_token
type: http
scheme: bearer
bearerFormat: JWT
purpose: Interim token issued by POST /login when MFA is configured; redeemed at POST /login/otp.
sources: [openapi/kardinal-aro-openapi-original.yml]
- name: password_token
type: http
scheme: bearer
bearerFormat: JWT
purpose: Issued by the password-reset request flow; redeemed at POST /auth/password/reset.
sources: [openapi/kardinal-aro-openapi-original.yml]
- name: gdpr_token
type: http
scheme: bearer
bearerFormat: JWT
purpose: Declared in the spec's securitySchemes for GDPR-scoped access.
sources: [openapi/kardinal-aro-openapi-original.yml]
token_verification:
public_key_endpoint: GET /public_key
unauthenticated: true
formats: [JWK, PEM]
observed:
url: https://app.kardinal.ai/api/v2/public_key
http_status: 200
algorithm: ES384
key_type: EC P-384
note: >-
Probed anonymously on 2026-08-17 and returned a real JWK. Tokens are
asymmetrically signed, so integrators can verify them offline.
flows:
- name: password login
steps: [POST /login]
operation_ids: [postLogin]
returns: [access_token, refresh_token]
- name: MFA / OTP login
steps: [POST /login, POST /login/otp]
operation_ids: [postLogin, postLoginOTP]
resend: {operation_id: requestNewLoginOTPCode, path: POST /login/resendOTP, rate_limited: true, status_on_exhaustion: 429}
- name: token refresh
steps: [POST /login/refresh]
operation_ids: [postLoginRefresh]
- name: Azure SSO
steps: [POST /login/sso/azure]
operation_ids: [postLoginWithAzureSSO]
- name: Google SSO
steps: [POST /login/sso/google]
operation_ids: [postLoginWithGoogleSSO]
- name: password reset
steps: [POST /auth/password/requestToken, POST /auth/password/validateToken, POST /auth/password/reset]
operation_ids: [postRequestPasswordToken, validatePasswordToken, resetPassword]
- name: MFA configuration
steps: [GET /auth/mfa/config, POST /auth/mfa/request, POST /auth/mfa/validate, PUT /auth/mfa/preferredType, POST /auth/mfa/disable, PUT /auth/mfa/regenerateBackupCodes]
operation_ids: [getActorMFAConfig, requestMFAConfigUpdate, validateMFAConfigUpdate, putMFAConfigPreferredType, disableMFAConfig, regenerateMFABackupCodes]
resend: {operation_id: requestNewMFAOTPCode, path: POST /auth/mfa/resendOTP, rate_limited: true, status_on_exhaustion: 429}
provisioning:
self_serve: false
model: invitation
note: >-
Per https://developers.kardinal.ai/getting-started/first-api-call, access is
provisioned by invitation — a user is invited to set a password on a per-customer
environment host, and there is no self-serve sign-up flow. Credentials are
requested from an Account Executive or api@kardinal.ai.
environments: per-customer, https://<env>.kardinal.ai, sandbox and production fully separate
revocation:
self_service: false
note: >-
The docs state there is no documented self-service revocation endpoint; a
suspected compromise is handled by contacting api@kardinal.ai or the Account
Executive.
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.
Call it yourself
curl for this page
This security artifact
curl "https://apis.io/api/v1/security/kardinal-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.