Hanko Email Management API
The Email Management API from Hanko — 3 operation(s) for email management.
The Email Management API from Hanko — 3 operation(s) for email management.
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-email-management-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.0
title: Hanko Public Email Management API
description: '## Introduction
This is the OpenAPI specification for the [Hanko Public API](https://github.com/teamhanko/hanko/blob/main/backend/README.md#basic-usage).
## Authentication
The API uses [JSON Web Tokens](https://www.rfc-editor.org/rfc/rfc7519.html) (JWTs) for authentication.
JWTs are verified using [JSON Web Keys](https://www.rfc-editor.org/rfc/rfc7517) (JWK).
JWKs can be [configured](https://github.com/teamhanko/hanko/blob/main/backend/docs/Config.md#all-available-config-options)
through the `secrets.keys` options. The API also publishes public cryptographic keys as a
[JWK set](https://www.rfc-editor.org/rfc/rfc7517#section-2) through the `.well-known/jwks.json` endpoint
to enable clients to verify token signatures.
JWTs must be provided on requests to protected endpoints using one of the following schemes:
### CookieAuth
**Security Scheme Type**: `API Key`
**Cookie parameter name**: `hanko`
The JWT must be provided in a Cookie with the name `hanko`.
### BearerTokenAuth
**Security Scheme Type**: `http`
**HTTP Authorization Scheme**: `Bearer`
**Bearer format**: `JWT`
The JWT must be provided in an HTTP Authorization header with bearer type: `Authorization: Bearer <JWT>`.
## Cross-Origin Resource Sharing
Cross-Origin Resource Sharing (CORS) can be currently
[configured](https://github.com/teamhanko/hanko/blob/main/backend/docs/Config.md#all-available-config-options)
for public endpoints via the `server.public.cors` options.
---
'
contact:
email: developers@hanko.io
license:
name: AGPL-3.0-or-later
url: https://www.gnu.org/licenses/agpl-3.0.txt
servers:
- url: https://{tenant_id}.hanko.io
variables:
tenant_id:
default: ''
description: The (UU)ID of a tenant. Replace the default value with your tenant ID.
tags:
- name: Email Management
paths:
/emails:
get:
summary: Get a list of emails of the current user.
operationId: listEmails
tags:
- Email Management
deprecated: true
security:
- CookieAuth: []
- BearerTokenAuth: []
responses:
'200':
description: A list of emails assigned to the current user
content:
application/json:
schema:
$ref: '#/components/schemas/Emails'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalServerError'
post:
deprecated: true
summary: Add a new email address to the current user.
operationId: createEmail
tags:
- Email Management
security:
- CookieAuth: []
- BearerTokenAuth: []
requestBody:
content:
application/json:
schema:
type: object
properties:
address:
type: string
format: email
required:
- address
responses:
'201':
description: Email successfully added
'400':
$ref: '#/components/responses/BadRequest'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
/emails/{id}/set_primary:
post:
deprecated: true
summary: Marks the email address as primary email
operationId: setPrimaryEmail
tags:
- Email Management
security:
- CookieAuth: []
- BearerTokenAuth: []
parameters:
- name: id
in: path
description: ID of the email address
required: true
schema:
$ref: '#/components/schemas/UUID4'
responses:
'201':
description: Email has been set as primary
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalServerError'
/emails/{id}:
delete:
deprecated: true
summary: Delete an email address
operationId: deleteEmail
tags:
- Email Management
security:
- CookieAuth: []
- BearerTokenAuth: []
parameters:
- name: id
in: path
description: ID of the email address
required: true
schema:
$ref: '#/components/schemas/UUID4'
responses:
'201':
description: Email has been deleted
'401':
$ref: '#/components/responses/Unauthorized'
'409':
$ref: '#/components/responses/Conflict'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
Identities:
description: The user's third party connections/identities.
type: array
items:
$ref: '#/components/schemas/Identity'
Error:
type: object
required:
- code
- message
properties:
code:
type: integer
format: int32
message:
type: string
UUID4:
type: string
format: uuid4
example: c339547d-e17d-4ba7-8a1d-b3d5a4d17c1c
Identity:
type: object
description: Representation of a user's third party connection/identity.
properties:
id:
type: string
description: The ID of the user at the provider
identity_id:
type: string
description: The identity's ID
format: uuid4
provider:
type: string
description: 'Contains the display name of the provider, if available. Otherwise contains the provider ID.
'
Emails:
type: array
items:
type: object
properties:
id:
description: The ID of the email address
allOf:
- $ref: '#/components/schemas/UUID4'
address:
description: The email address
type: string
format: email
is_verified:
description: Indicated the email has been verified.
type: boolean
is_primary:
description: Indicates it's the primary email address.
type: boolean
identity:
allOf:
- $ref: '#/components/schemas/Identity'
- deprecated: true
- description: Deprecated, use `user.identities` instead.
identities:
allOf:
- $ref: '#/components/schemas/Identities'
- deprecated: true
- description: Deprecated, use `user.identities` instead.
example:
- id: 5333cc5b-c7c4-48cf-8248-9c184ac72b65
address: john.doe@example.com
is_verified: true
is_primary: false
responses:
Conflict:
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 409
message: Conflict
BadRequest:
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 400
message: Bad Request
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 401
message: Unauthorized
InternalServerError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 500
message: Internal Server Error
securitySchemes:
CookieAuth:
type: apiKey
in: cookie
name: hanko
BearerTokenAuth:
type: http
scheme: bearer
bearerFormat: JWT
externalDocs:
description: More about Hanko
url: https://github.com/teamhanko/hanko