SendHQ API

Transactional and inbound email — send, threads, drafts, attachments, hosted templates, domains and DNS verification, deliverability, suppressions, account and billing. 32 paths, 47 operations, bearer token or session cookie.

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/sendhq-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

sendhq-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: SendHQ API
  version: '2026-08-23'
  description: Send and receive expected email, manage verified domains and hosted templates, and inspect
    delivery outcomes.
servers:
- url: https://sendhq.cc/api/v1
tags:
- name: Emails and threads
  description: Send, retrieve, search, reply, and inspect delivery events.
- name: Drafts and attachments
  description: Build composer flows with private attachment storage.
- name: Hosted templates
  description: Draft, render, test, version, publish, and send reusable content.
- name: Domains
  description: Provision sender identities and understand DNS verification state.
- name: Inbound email
  description: Create addresses and work with received conversations.
- name: Deliverability
  description: Inspect events, reputation outcomes, and blocked recipients.
- name: Account and billing
  description: Session-authenticated workspace administration.
paths:
  /emails:
    post:
      operationId: post_emails
      tags:
      - Emails and threads
      summary: Send one email
      description: Send transactional HTML, text, or hosted-template content from a verified workspace
        domain.
      security:
      - bearerAuth: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        schema:
          type: string
      responses:
        '201':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  providerMessageId:
                    type: string
                  threadId:
                    type: string
                required:
                - id
                - providerMessageId
                - threadId
                additionalProperties: false
              example:
                id: em_…
                providerMessageId: provider-id
                threadId: em_…
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                to:
                  type: array
                  items:
                    type: string
                    format: email
                subject:
                  type: string
                html:
                  type: string
                text:
                  type: string
              required:
              - from
              - to
              - subject
              - html
              - text
              additionalProperties: false
            example:
              from: Acme <hello@example.com>
              to:
              - customer@example.net
              subject: Welcome aboard
              html: <h1>Welcome</h1><p>Your workspace is ready.</p>
              text: Welcome. Your workspace is ready.
    get:
      operationId: get_emails
      tags:
      - Emails and threads
      summary: List sent and received email
      description: List sent and received email
      security:
      - bearerAuth: []
      parameters:
      - name: direction
        in: query
        required: false
        schema:
          type: string
          enum:
          - in
          - out
      - name: status
        in: query
        required: false
        schema:
          type: string
      - name: domain
        in: query
        required: false
        schema:
          type: string
      - name: inbox_id
        in: query
        required: false
        schema:
          type: string
      - name: from
        in: query
        required: false
        schema:
          type: string
      - name: to
        in: query
        required: false
        schema:
          type: string
      - name: unread
        in: query
        required: false
        schema:
          type: boolean
      - name: after
        in: query
        required: false
        schema:
          type: string
          format: date-time
      - name: before
        in: query
        required: false
        schema:
          type: string
          format: date-time
      - name: query
        in: query
        required: false
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: {}
                  count:
                    type: integer
                required:
                - data
                - count
                additionalProperties: false
              example:
                data: []
                count: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /emails/batch:
    post:
      operationId: post_emails_batch
      tags:
      - Emails and threads
      summary: Send up to 100 individualized messages
      description: Send up to 100 individualized messages
      security:
      - bearerAuth: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        schema:
          type: string
      responses:
        '201':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        index:
                          type: integer
                        ok:
                          type: boolean
                        id:
                          type: string
                      required:
                      - index
                      - ok
                      - id
                      additionalProperties: false
                  count:
                    type: integer
                  successful:
                    type: integer
                  failed:
                    type: integer
                required:
                - data
                - count
                - successful
                - failed
                additionalProperties: false
              example:
                data:
                - index: 0
                  ok: true
                  id: em_…
                count: 1
                successful: 1
                failed: 0
        '207':
          description: Successful response with partial outcomes
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        index:
                          type: integer
                        ok:
                          type: boolean
                        id:
                          type: string
                      required:
                      - index
                      - ok
                      - id
                      additionalProperties: false
                  count:
                    type: integer
                  successful:
                    type: integer
                  failed:
                    type: integer
                required:
                - data
                - count
                - successful
                - failed
                additionalProperties: false
              example:
                data:
                - index: 0
                  ok: true
                  id: em_…
                count: 1
                successful: 1
                failed: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                emails:
                  type: array
                  items:
                    type: object
                    properties:
                      from:
                        type: string
                      to:
                        type: array
                        items:
                          type: string
                          format: email
                      subject:
                        type: string
                      html:
                        type: string
                      text:
                        type: string
                    required:
                    - from
                    - to
                    - subject
                    - html
                    - text
                    additionalProperties: false
              required:
              - emails
              additionalProperties: false
            example:
              emails:
              - from: Acme <hello@example.com>
                to:
                - customer@example.net
                subject: Welcome aboard
                html: <h1>Welcome</h1><p>Your workspace is ready.</p>
                text: Welcome. Your workspace is ready.
  /emails/{id}:
    get:
      operationId: get_emails_id
      tags:
      - Emails and threads
      summary: Retrieve an email and its attachments
      description: Retrieve an email and its attachments
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  direction:
                    type: string
                  status:
                    type: string
                  attachments:
                    type: array
                    items: {}
                required:
                - id
                - direction
                - status
                - attachments
                additionalProperties: false
              example:
                id: em_…
                direction: out
                status: sent
                attachments: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    patch:
      operationId: patch_emails_id
      tags:
      - Emails and threads
      summary: Mark an email read or unread
      description: Mark an email read or unread
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  readAt:
                    type: string
                    format: date-time
                required:
                - id
                - readAt
                additionalProperties: false
              example:
                id: em_…
                readAt: '2026-08-23T12:00:00.000Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                read:
                  type: boolean
              required:
              - read
              additionalProperties: false
            example:
              read: true
    delete:
      operationId: delete_emails_id
      tags:
      - Emails and threads
      summary: Delete a retained email
      description: Delete a retained email
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                required:
                - ok
                additionalProperties: false
              example:
                ok: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /emails/{id}/events:
    get:
      operationId: get_emails_id_events
      tags:
      - Emails and threads
      summary: List delivery events for an email
      description: List delivery events for an email
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: {}
                  count:
                    type: integer
                required:
                - data
                - count
                additionalProperties: false
              example:
                data: []
                count: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /threads/{id}:
    get:
      operationId: get_threads_id
      tags:
      - Emails and threads
      summary: Retrieve a conversation chronologically
      description: Retrieve a conversation chronologically
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  data:
                    type: array
                    items: {}
                  count:
                    type: integer
                required:
                - id
                - data
                - count
                additionalProperties: false
              example:
                id: em_…
                data: []
                count: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /drafts:
    post:
      operationId: post_drafts
      tags:
      - Drafts and attachments
      summary: Create a composer draft
      description: Create a composer draft
      security:
      - bearerAuth: []
      parameters: []
      responses:
        '201':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  attachments:
                    type: array
                    items: {}
                required:
                - id
                - attachments
                additionalProperties: false
              example:
                id: dr_…
                attachments: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  format: email
                to:
                  type: array
                  items:
                    type: string
                    format: email
                subject:
                  type: string
              required:
              - from
              - to
              - subject
              additionalProperties: false
            example:
              from: hello@example.com
              to:
              - customer@example.net
              subject: Hello
    get:
      operationId: get_drafts
      tags:
      - Drafts and attachments
      summary: List composer drafts
      description: List composer drafts
      security:
      - bearerAuth: []
      parameters: []
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: {}
                  count:
                    type: integer
                required:
                - data
                - count
                additionalProperties: false
              example:
                data: []
                count: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /drafts/{id}:
    get:
      operationId: get_drafts_id
      tags:
      - Drafts and attachments
      summary: Retrieve a draft and attachments
      description: Retrieve a draft and attachments
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  attachments:
                    type: array
                    items: {}
                required:
                - id
                - attachments
                additionalProperties: false
              example:
                id: dr_…
                attachments: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    put:
      operationId: put_drafts_id
      tags:
      - Drafts and attachments
      summary: Replace draft content
      description: Replace draft content
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                required:
                - id
                additionalProperties: false
              example:
                id: dr_…
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  format: email
                to:
                  type: array
                  items:
                    type: string
                    format: email
                subject:
                  type: string
                text:
                  type: string
              required:
              - from
              - to
              - subject
              - text
              additionalProperties: false
            example:
              from: hello@example.com
              to:
              - customer@example.net
              subject: Updated subject
              text: Updated body
    delete:
      operationId: delete_drafts_id
      tags:
      - Drafts and attachments
      summary: Discard a draft
      description: Discard a draft
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                required:
                - ok
                additionalProperties: false
              example:
                ok: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /drafts/{id}/attachments:
    post:
      operationId: post_drafts_id_attachments
      tags:
      - Drafts and attachments
      summary: Upload an attachment to a draft
      description: Upload raw file bytes. Set Content-Type and X-Filename. A message can contain at most
        10 files and 10 MB total.
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: X-Filename
        in: header
        required: false
        schema:
          type: string
      responses:
        '201':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  filename:
                    type: string
                  sizeBytes:
                    type: integer
                  available:
                    type: boolean
                required:
                - id
                - filename
                - sizeBytes
                - available
                additionalProperties: false
              example:
                id: att_…
                filename: invoice.pdf
                sizeBytes: 48231
                available: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /attachments/{id}:
    get:
      operationId: get_attachments_id
      tags:
      - Drafts and attachments
      summary: Download a private attachment
      description: Download a private attachment
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/octet-stream:
              schema:
                type: string
                contentEncoding: binary
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    delete:
      operationId: delete_attachments_id
      tags:
      - Drafts and attachments
      summary: Delete a private attachment
      description: Delete a private attachment
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                required:
                - ok
                additionalProperties: false
              example:
                ok: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /sending-identities:
    get:
      operationId: get_sending_identities
      tags:
      - Drafts and attachments
      summary: List verified sender identities
      description: List verified sender identities
      security:
      - bearerAuth: []
      parameters: []
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  domains:
                    type: array
                    items: {}
                  addresses:
                    type: array
                    items: {}
                  localParts:
                    type: array
                    items: {}
                required:
                - domains
                - addresses
                - localParts
                additionalProperties: false
              example:
                domains: []
                addresses: []
                localParts: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /templates:
    get:
      operationId: get_templates
      tags:
      - Hosted templates
      summary: List hosted templates
      description: List hosted templates
      security:
      - bearerAuth: []
      parameters:
      - name: lifecycle
        in: query
        required: false
        schema:
          type: string
          enum:
          - active
          - archived
          - all
      - name: query
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items: {}
                  count:
                    type: integer
                required:
                - data
                - count
                additionalProperties: false
              example:
                data: []
                count: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    post:
      operationId: post_templates
      tags:
      - Hosted templates
      summary: Create a hosted template
      description: Create a hosted template
      security:
      - bearerAuth: []
      parameters: []
      responses:
        '201':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  template:
                    type: object
                    properties:
                      id:
                        type: string
                      key:
                        type: string
                    required:
                    - id
                    - key
                    additionalProperties: false
                required:
                - template
                additionalProperties: false
              example:
                template:
                  id: tmpl_…
                  key: account-welcome
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                key:
                  type: string
                starter:
                  type: string
              required:
              - name
              - key
              - starter
              additionalProperties: false
            example:
              name: Account welcome
              key: account-welcome
              starter: welcome
  /templates/{id}:
    get:
      operationId: get_templates_id
      tags:
      - Hosted templates
      summary: Retrieve drafts, releases, and usage
      description: Retrieve drafts, releases, and usage
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  template:
                    type: object
                    properties:
                      id:
                        type: string
                    required:
                    - id
                    additionalProperties: false
                  versions:
                    type: array
                    items: {}
                  draft: {}
                  activeVersion: {}
                  usage:
                    type: array
                    items: {}
                required:
                - template
                - versions
                - draft
                - activeVersion
                - usage
                additionalProperties: false
              example:
                template:
                  id: tmpl_…
                versions: []
                draft: null
                activeVersion: null
                usage:

# --- truncated at 32 KB (73 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/sendhq/refs/heads/main/openapi/sendhq-api-openapi.yml