AhaSend · Authentication Profile

Ahasend Authentication

Authentication

AhaSend secures its APIs with http across 1 declared security scheme, as derived from its OpenAPI definitions.

EmailTransactional EmailDeveloper ToolsSMTPWebhook
Methods: http Schemes: 1 OAuth flows: API key in: header

Security Schemes

BearerAuth http
scheme: bearer

Source

Authentication Profile

Raw ↑
generated: '2026-08-30'
method: searched
docs: https://ahasend.com/docs/api-reference/authentication
source: https://ahasend.com/docs/api-reference/authentication
sources:
  - https://ahasend.com/docs/api-reference/authentication.md
  - https://ahasend.com/docs/send-api/credentials.md
  - https://ahasend.com/docs/security/scoped-credentials.md
  - https://ahasend.com/docs/security/ip-allow-lists.md
  - https://ahasend.com/docs/security/sso.md
  - openapi/_original/ahasend-openapi-v2.yaml
provider: AhaSend
providerId: ahasend
summary:
  types:
    - http
  api_key_in:
    - header
  oauth2: false
  openIdConnect: false
  mutualTLS: false
schemes:
  - name: BearerAuth
    type: http
    scheme: bearer
    bearerFormat: aha-sk- followed by a 64-character random string
    header: 'Authorization: Bearer <api_key>'
    description: >-
      The single authentication scheme for the whole API v2 surface, applied globally and refined
      per operation. The contract's own note explains the refinement: "Non-empty Security
      Requirement values are AhaSend API-key roles. Roles listed within one requirement object are
      jointly required; separate requirement objects are alternatives." So the security block does
      double duty as the authorization model — see scopes/ahasend-scopes.yml.
    sources:
      - openapi/_original/ahasend-openapi-v2.yaml
      - https://ahasend.com/docs/api-reference/authentication.md
key_management:
  create: createAPIKey (POST /v2/accounts/{account_id}/api-keys)
  secret_visibility: >-
    The `secret_key` is returned once, on the 201. Every list/get/update/delete response omits it.
    An exact idempotent retry replays it for 5 minutes only; after that the key must be recreated.
  public_identifier: APIKey.public_key
  last_used: APIKey.last_used_at is exposed, so an unused key is detectable.
  rotation: >-
    No automatic key rotation and no expiry field. Rotation means create-then-delete by hand.
    (DKIM keys, by contrast, rotate automatically on a configurable interval.)
restrictions:
  scoped_keys:
    supported: true
    description: >-
      Every key carries an explicit scope list, including per-domain scopes such as
      messages:send:{example.com}. See scopes/ahasend-scopes.yml for all 51.
  ip_allow_list:
    supported: true
    field: APIKey.ip_allow_list
    limits: up to 100 IPv4/IPv6 addresses or CIDR ranges per key
    semantics: >-
      A key with a non-empty allow list is rejected on EVERY endpoint from any other IP,
      regardless of scopes. An empty list means no restriction. "Allow everything" ranges are
      rejected.
    self_lockout_protection: >-
      Setting a key's own allow list to a value excluding the calling IP is rejected and nothing is
      saved. The dashboard is never blocked by a key's allow list.
    change_control: >-
      Changing an allow list in the dashboard re-prompts for a 2FA code (or password), remembered
      for 5 minutes, and emails owners and administrators that a security setting changed.
  sandbox_mode:
    description: >-
      A credential can be created in, or switched to, Sandbox mode — sends made with it are always
      simulated. Sandbox and production keys share the aha-sk- prefix, so the mode is NOT visible
      in the key string.
smtp_authentication:
  mechanism: PLAIN over STARTTLS
  hosts: [send.ahasend.com, send-us.ahasend.com]
  ports: [25, 587, 2525]
  note: >-
    Implicit TLS (SMTPS) on port 465 is explicitly not supported. SMTP credentials are separate
    objects from API keys, created in the dashboard or through the SMTP Credentials API, and can
    themselves be global or domain-scoped.
webhook_authentication:
  direction: inbound-to-subscriber
  mechanism: Standard Webhooks HMAC-SHA256 over `id.timestamp.body`
  see: asyncapi/ahasend-webhooks.yml
human_authentication:
  two_factor: TOTP-based 2FA, with account-wide enforcement available
  sso:
    protocol: OpenID Connect
    role: relying-party
    features: [PKCE, multi-domain]
    plan: Max
    note: Dashboard login only. AhaSend does not issue OAuth or OIDC tokens for its API.
gaps:
  - No OAuth 2.0 or OIDC authorization for API access — API keys only.
  - No key expiry, no automatic rotation, no published key-rotation guidance.
  - No /.well-known/oauth-authorization-server or /.well-known/openid-configuration (both 404).
  - >-
    A 403 caused by a missing scope and a 403 caused by an IP-allow-list rejection are not
    distinguishable from the response body.
maintainers:
  - FN: Kin Lane
    email: kin@apievangelist.com

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.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/ahasend-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.