FranklyMail API

FranklyMail API as documented publicly: 38 operations. Contract generated from the documentation by API Evangelist (2026-11-09); not the provider's own document.

GitHub OpenAPI

Operations 38

GET /aliases GET /aliases Every alias, optionally filtered by ?domainId=. #
POST /aliases POST /aliases Create one. #
DELETE /aliases/{id} DELETE /aliases/:id Remove it. #
PATCH /aliases/{id} PATCH /aliases/:id Change its destination. #
POST /api/domains POST /api/domains Hinzufügen einer Domain. #
POST /api/mailboxes POST /api/mailboxes #
GET /api/mailboxes/{mailboxid} GET /api/mailboxes/{mailboxid} #
POST /api/mailboxes/{mailboxid} POST /api/mailboxes/{mailboxid} #
POST /api/v1/drafts Create a draft. #
GET /api/v1/drafts/{id} Get a draft. #
PUT /api/v1/drafts/{id} Update a draft. #
GET /api/v1/mailboxes/{id}/messages Equivalent HTTP route to list messages. #
GET /api/v1/mailboxes/{id}/messages/{messageid} Equivalent HTTP route to read a message. #
POST /api/v1/mailboxes/{id}/messages/{messageid}/move Additional OAuth HTTP route to move a message. #
GET /api/v1/mailboxes/{id}/sender-identities Additional OAuth HTTP route to list sender identities. #
GET /domains Every domain on the account, each with its DNS check result. #
POST /domains Add a domain. #
DELETE /domains/{id} Remove a domain. #
POST /domains/{id}/dkim/rotate Begin a DKIM key rotation. #
POST /domains/{id}/recheck Re-resolve now, rather than waiting for the schedule. #
GET /domains/{id}/records The expected records and what DNS currently answers. #
GET /mailboxes Every mailbox, with its address, quota and provisioning state. #
POST /mailboxes Create one. #
DELETE /mailboxes/{id} DELETE /mailboxes/:id Delete the mailbox. #
PATCH /mailboxes/{id} Change the display name or quota. #
GET /mailboxes/{id}/export GET /mailboxes/:id/export answers 403 browser_only to a key. #
GET /mailboxes/{id}/import GET /mailboxes/:id/import Progress of the latest import for this mailbox. #
POST /mailboxes/{id}/import POST /mailboxes/:id/import Start an IMAP import. #
POST /mailboxes/{id}/import/cancel POST /mailboxes/:id/import/cancel Stop the running import. #
POST /mailboxes/{id}/password Set a new password for the mailbox. #
GET /mailboxes/{id}/sieve The mailbox filter script. #
PUT /mailboxes/{id}/sieve Replace it. #
POST /sieve/validate POST /sieve/validate checks a script first. #
GET /v1/domains Selected domain metadata. #
GET /v1/domains/{id} One selected domain. #
GET /v1/domains/{id}/dns Stored DNS observations. #
GET /v1/mailboxes Selected mailbox metadata, without messages. #
GET /v1/mailboxes/{id} One selected mailbox, without secrets. #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/franklymail-com:franklymail-com-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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.

OpenAPI Specification

franklymail-com-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: FranklyMail API
  version: '2026-11-09'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-09: 38 operation(s) read from 2 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; FranklyMail has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 3
    documentation: 35
    pages-with-code: 2
    pages-read: 2
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-09'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://franklymail.com/docs/api
  - https://franklymail.com/de/docs/api
paths:
  /aliases:
    get:
      operationId: get_aliases
      tags:
      - Aliases
      summary: GET /aliases Every alias, optionally filtered by ?domainId=.
      x-source: https://franklymail.com/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_aliases
      tags:
      - Aliases
      summary: POST /aliases Create one.
      x-source: https://franklymail.com/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostAliasesRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /aliases/{id}:
    delete:
      operationId: delete_aliases_id
      tags:
      - Aliases
      summary: DELETE /aliases/:id Remove it.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_aliases_id
      tags:
      - Aliases
      summary: PATCH /aliases/:id Change its destination.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchAliasesIdRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/domains:
    post:
      operationId: post_api_domains
      tags:
      - Api
      summary: POST /api/domains Hinzufügen einer Domain.
      x-source: https://franklymail.com/de/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiDomainsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiDomainsResponse'
      x-evidence:
        kind: documentation
  /api/mailboxes:
    post:
      operationId: post_api_mailboxes
      tags:
      - Api
      summary: POST /api/mailboxes
      x-source: https://franklymail.com/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiMailboxesRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -H "Authorization: Bearer $FRANKLYMAIL_API_KEY"  https://franklymail.com/api/mailboxes Requests are JSON in and JSON out.
          An error is { "error": { "code", "message", "field? } } with the matching HTTP status: 401 for a key that is missing, revoked or unknown,
          403 for a route a key may not reach, 422 for a bad field. curl -X POST https://franklymail.com/api/mailboxes  -H "Authorization: Bearer'
  /api/mailboxes/{mailboxid}:
    get:
      operationId: get_api_mailboxes_mailboxid
      tags:
      - Api
      summary: GET /api/mailboxes/{mailboxid}
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: mailboxid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -H "Authorization: Bearer $FRANKLYMAIL_API_KEY"  https://franklymail.com/api/mailboxes/<mailboxId>/import'
    post:
      operationId: post_api_mailboxes_mailboxid
      tags:
      - Api
      summary: POST /api/mailboxes/{mailboxid}
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: mailboxid
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiMailboxesMailboxidRequest'
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiMailboxesMailboxidResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -X POST https://franklymail.com/api/mailboxes/<mailboxId>/import  -H "Authorization: Bearer $FRANKLYMAIL_API_KEY"  -H "Content-Type:
          application/json"  -d ''{"host":"imap.oldhost.com","port":993,"username":"you@old.com","password":"…"}'''
  /api/v1/drafts:
    post:
      operationId: post_api_v1_drafts
      tags:
      - Api
      summary: Create a draft.
      x-source: https://franklymail.com/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1DraftsRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/drafts/{id}:
    get:
      operationId: get_api_v1_drafts_id
      tags:
      - Api
      summary: Get a draft.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    put:
      operationId: put_api_v1_drafts_id
      tags:
      - Api
      summary: Update a draft.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/mailboxes/{id}/messages:
    get:
      operationId: get_api_v1_mailboxes_id_messages
      tags:
      - Api
      summary: Equivalent HTTP route to list messages.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/mailboxes/{id}/messages/{messageid}:
    get:
      operationId: get_api_v1_mailboxes_id_messages_messageid
      tags:
      - Api
      summary: Equivalent HTTP route to read a message.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: messageid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/mailboxes/{id}/messages/{messageid}/move:
    post:
      operationId: post_api_v1_mailboxes_id_messages_messageid_move
      tags:
      - Api
      summary: Additional OAuth HTTP route to move a message.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: messageid
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1MailboxesIdMessagesMessageidMoveRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/mailboxes/{id}/sender-identities:
    get:
      operationId: get_api_v1_mailboxes_id_sender_identities
      tags:
      - Api
      summary: Additional OAuth HTTP route to list sender identities.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /domains:
    get:
      operationId: get_domains
      tags:
      - Domains
      summary: Every domain on the account, each with its DNS check result.
      x-source: https://franklymail.com/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_domains
      tags:
      - Domains
      summary: Add a domain.
      x-source: https://franklymail.com/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostDomainsRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /domains/{id}:
    delete:
      operationId: delete_domains_id
      tags:
      - Domains
      summary: Remove a domain.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /domains/{id}/dkim/rotate:
    post:
      operationId: post_domains_id_dkim_rotate
      tags:
      - Domains
      summary: Begin a DKIM key rotation.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /domains/{id}/recheck:
    post:
      operationId: post_domains_id_recheck
      tags:
      - Domains
      summary: Re-resolve now, rather than waiting for the schedule.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /domains/{id}/records:
    get:
      operationId: get_domains_id_records
      tags:
      - Domains
      summary: The expected records and what DNS currently answers.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /mailboxes:
    get:
      operationId: get_mailboxes
      tags:
      - Mailboxes
      summary: Every mailbox, with its address, quota and provisioning state.
      x-source: https://franklymail.com/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_mailboxes
      tags:
      - Mailboxes
      summary: Create one.
      x-source: https://franklymail.com/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostMailboxesRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /mailboxes/{id}:
    delete:
      operationId: delete_mailboxes_id
      tags:
      - Mailboxes
      summary: DELETE /mailboxes/:id Delete the mailbox.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_mailboxes_id
      tags:
      - Mailboxes
      summary: Change the display name or quota.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchMailboxesIdRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /mailboxes/{id}/export:
    get:
      operationId: get_mailboxes_id_export
      tags:
      - Mailboxes
      summary: GET /mailboxes/:id/export answers 403 browser_only to a key.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /mailboxes/{id}/import:
    get:
      operationId: get_mailboxes_id_import
      tags:
      - Mailboxes
      summary: GET /mailboxes/:id/import Progress of the latest import for this mailbox.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetMailboxesIdImportResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_mailboxes_id_import
      tags:
      - Mailboxes
      summary: POST /mailboxes/:id/import Start an IMAP import.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostMailboxesIdImportRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostMailboxesIdImportResponse'
      x-evidence:
        kind: documentation
  /mailboxes/{id}/import/cancel:
    post:
      operationId: post_mailboxes_id_import_cancel
      tags:
      - Mailboxes
      summary: POST /mailboxes/:id/import/cancel Stop the running import.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /mailboxes/{id}/password:
    post:
      operationId: post_mailboxes_id_password
      tags:
      - Mailboxes
      summary: Set a new password for the mailbox.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostMailboxesIdPasswordRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /mailboxes/{id}/sieve:
    get:
      operationId: get_mailboxes_id_sieve
      tags:
      - Mailboxes
      summary: The mailbox filter script.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    put:
      operationId: put_mailboxes_id_sieve
      tags:
      - Mailboxes
      summary: Replace it.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PutMailboxesIdSieveRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /sieve/validate:
    post:
      operationId: post_sieve_validate
      tags:
      - Sieve
      summary: POST /sieve/validate checks a script first.
      x-source: https://franklymail.com/docs/api
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/domains:
    get:
      operationId: get_v1_domains
      tags:
      - Domains
      summary: Selected domain metadata.
      x-source: https://franklymail.com/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/domains/{id}:
    get:
      operationId: get_v1_domains_id
      tags:
      - Domains
      summary: One selected domain.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/domains/{id}/dns:
    get:
      operationId: get_v1_domains_id_dns
      tags:
      - Domains
      summary: Stored DNS observations.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/mailboxes:
    get:
      operationId: get_v1_mailboxes
      tags:
      - Mailboxes
      summary: Selected mailbox metadata, without messages.
      x-source: https://franklymail.com/docs/api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/mailboxes/{id}:
    get:
      operationId: get_v1_mailboxes_id
      tags:
      - Mailboxes
      summary: One selected mailbox, without secrets.
      x-source: https://franklymail.com/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
components:
  schemas:
    PostAliasesRequest:
      type: object
      properties:
        domainId:
          type: string
        source:
          type: string
        destination:
          type: string
      required:
      - domainId
      - source
      - destination
    PatchAliasesIdRequest:
      type: object
      properties:
        destination:
          type: string
      required:
      - destination
    PostApiDomainsRequest:
      type: object
      properties:
        name:
          type: string
      required:
      - name
    PostApiDomainsResponse:
      type: object
      properties:
        id:
          type: string
        domain:
          type: string
        status:
          type: string
    PostApiMailboxesRequest:
      type: object
      properties:
        domainId:
          type: string
        localPart:
          type: string
    PostApiMailboxesMailboxidRequest:
      type: object
      properties:
        host:
          type: string
        port:
          type: integer
        username:
          type: string
        password:
          type: string
    PostApiMailboxesMailboxidResponse:
      type: object
      properties:
        import:
          type:
          - string
          - 'null'
    PostApiV1DraftsRequest:
      type: object
      properties:
        mailboxId:
          type: string
        requestKey:
          type: string
        to:
          type: string
        subject:
          type: string
        text:
          type: string
        html:
          type: string
        cc:
          type: string
        replyToMessageId:
          type: string
        senderIdentityId:
          type: string
      required:
      - mailboxId
      - requestKey
      - to
      - subject
      - text
    PostApiV1MailboxesIdMessagesMessageidMoveRequest:
      type: object
      properties:
        destinationFolderId:
          type: string
        expectedFolderIds:
          type: string
      required:
      - destinationFolderId
      - expectedFolderIds
    PostDomainsRequest:
      type: object
      properties:
        name:
          type: string
      required:
      - name
    PostMailboxesRequest:
      type: object
      properties:
        domainId:
          type: string
        localPart:
          type: string
        displayName:
          type: string
        quotaBytes:
          type: integer
        password:
          type: string
      required:
      - domainId
      - localPart
    PatchMailboxesIdRequest:
      type: object
      properties:
        displayName:
          type: string
        quotaBytes:
          type: integer
    GetMailboxesIdImportResponse:
      type: object
      properties:
        import:
          type: object
    PostMailboxesIdImportRequest:
      type: object
      properties:
        host:
          type: string
        port:
          type: integer
        username:
          type: string
        password:
          type: string
      required:
      - host
      - port
      - username
      - password
    PostMailboxesIdImportResponse:
      type: object
      properties:
        importId:
          type: string
        status:
          type: string
    PostMailboxesIdPasswordRequest:
      type: object
      properties:
        password:
          type: string
      required:
      - password
    PutMailboxesIdSieveRequest:
      type: object
      properties:
        script:
          type: string
      required:
      - script
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Aliases
- name: Api
- name: Domains
- name: Mailboxes
- name: Sieve