Hanko Login API
The Login API from Hanko — 2 operation(s) for login.
The Login API from Hanko — 2 operation(s) for login.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.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.curl "https://apis.io/api/v1/apis/hanko-login-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.
openapi: 3.2.0
info:
version: '1.2'
title: passkey-server Login API
description: This API shall represent the private and public endpoints for passkey registration, management and authentication
termsOfService: https://www.hanko.io/terms
contact:
email: developers@hanko.io
url: https://www.hanko.io
name: Hanko Dev Team
license:
url: https://www.gnu.org/licenses/gpl-3.0.de.html
name: GPLv3
servers:
- url: https://passkeys.hanko.io
tags:
- name: Login
paths:
/{tenant_id}/login/initialize:
post:
summary: Start Login
description: Initialize a login flow for passkeys
operationId: post-login-initialize
parameters:
- $ref: '#/components/parameters/tenant_id'
requestBody:
$ref: '#/components/requestBodies/post-login-initialize'
responses:
'200':
$ref: '#/components/responses/post-login-initialize'
'400':
$ref: '#/components/responses/error'
'401':
$ref: '#/components/responses/error'
'404':
$ref: '#/components/responses/error'
'500':
$ref: '#/components/responses/error'
security: []
servers:
- url: https://passkeys.hanko.io
tags:
- Login
/{tenant_id}/login/finalize:
post:
summary: Finish Login
description: Finalize the login operation
operationId: post-login-finalize
parameters:
- $ref: '#/components/parameters/tenant_id'
requestBody:
$ref: '#/components/requestBodies/post-login-finalize'
responses:
'200':
$ref: '#/components/responses/token'
'400':
$ref: '#/components/responses/error'
'401':
$ref: '#/components/responses/error'
'404':
$ref: '#/components/responses/error'
'500':
$ref: '#/components/responses/error'
security: []
servers:
- url: https://passkeys.hanko.io
tags:
- Login
components:
requestBodies:
post-login-finalize:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/public-key-credential'
- type: object
properties:
response:
$ref: '#/components/schemas/autenticator-assertion-response'
clientExtensionResults:
type: object
properties:
appid:
type: boolean
appidExclude:
type: boolean
credProps:
type: object
properties:
rk:
type: boolean
required:
- response
- clientExtensionResults
post-login-initialize:
description: Body for login/initialize
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: optional - when provided the API Key needs to be sent to the server too.
parameters:
tenant_id:
name: tenant_id
in: path
description: UUID of the tenant
required: true
schema:
type: string
format: uuid
minLength: 36
maxLength: 36
example:
- 1f496bcd-49da-4839-a02f-7ce681ccb488
schemas:
public-key-credential:
title: public-key-credential
allOf:
- $ref: '#/components/schemas/credential'
- type: object
properties:
rawId:
type: string
authenticatorAttachment:
type: string
enum:
- cross-platform
- platform
- null
required:
- rawId
credential:
type: object
title: credential
properties:
id:
type: string
type:
enum:
- public-key
required:
- id
- type
authenticator-response:
type: object
title: authenticator-response
properties:
clientDataJSON:
type: string
required:
- clientDataJSON
autenticator-assertion-response:
title: autenticator-assertion-response
allOf:
- $ref: '#/components/schemas/authenticator-response'
- type: object
properties:
authenticatorData:
type: string
signature:
type: string
userHandle:
type: string | null
required:
- authenticatorData
- signature
credential-descriptor-entity:
type: object
title: credential-descriptor-entity
properties:
type:
enum:
- public-key
id:
type: string
transports:
type: array
uniqueItems: true
items:
type: string
enum:
- ble
- hybrid
- internal
- nfc
- usb
required:
- type
- id
responses:
token:
description: Example response
content:
application/json:
schema:
type: object
properties:
token:
type: string
minProperties: 1
post-login-initialize:
description: Example response
content:
application/json:
schema:
type: object
properties:
publicKey:
type: object
properties:
challenge:
type: string
timeout:
type: integer
rpId:
type: string
allowCredentials:
type: array
items:
$ref: '#/components/schemas/credential-descriptor-entity'
userVerification:
type: string
enum:
- discouraged
- preferred
- required
extensions:
type: object
properties:
appid:
type: boolean
appidExclude:
type: boolean
credProps:
type: object
properties:
rk:
type: boolean
required:
- challenge
mediation:
type: string
enum:
- optional
- required
- silent
error:
description: Error Response with detailed information
content:
application/json:
schema:
type: object
properties:
title:
type: string
example:
- explanatory title
details:
type: string
example:
- Information which helps resolving the problem
status:
type: integer