flomailr API

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

GitHub OpenAPI

Operations 31

GET /api/v1/contacts List contacts #
POST /api/v1/contacts POST /api/v1/contacts #
DELETE /api/v1/contacts/{id} Delete a contact #
GET /api/v1/contacts/{id} Get a contact #
PATCH /api/v1/contacts/{id} Update a contact #
GET /api/v1/contacts/{id}/lists Lists a contact is on #
GET /api/v1/events List events #
POST /api/v1/events Record an event #
GET /api/v1/forms List forms #
POST /api/v1/forms Create a form #
DELETE /api/v1/forms/{id} Delete a form #
GET /api/v1/forms/{id} Get a form #
PATCH /api/v1/forms/{id} Update a form #
GET /api/v1/keys List keys #
POST /api/v1/keys Create a key #
DELETE /api/v1/keys/{id} Revoke a key #
GET /api/v1/keys/{id} Get a key #
GET /api/v1/lists List your lists #
POST /api/v1/lists Create a list #
DELETE /api/v1/lists/{id} Get, rename and delete a list #
GET /api/v1/lists/{id} Get, rename and delete a list #
PATCH /api/v1/lists/{id} Get, rename and delete a list #
GET /api/v1/lists/{id}/contacts List the contacts on a list #
POST /api/v1/lists/{id}/contacts Add contacts to a list #
DELETE /api/v1/lists/{id}/contacts/{contactid} Remove a contact from a list #
POST /api/v1/send POST /api/v1/send #
POST /campaigns/{id}/send POST /campaigns/{id}/send and POST /send email real people and cannot be undone. #
POST /contacts POST /contacts creates a new address as SUBSCRIBED unless you send status: "PENDING", which is you saying the person agreed to marketing email. #
POST /events POST /events always creates unknown addresses as PENDING. #
GET /openapi.json GET /openapi.json #
POST /send POST /send email real people and cannot be undone. #

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/flomailr-com:flomailr-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

flomailr-com-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: flomailr API
  version: '2026-11-08'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-08: 31 operation(s) read from 9 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; flomailr has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 4
    documentation: 27
    pages-with-code: 6
    pages-read: 9
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-08'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://flomailr.com/docs/api/send
  - https://flomailr.com/docs/api/forms
  - https://flomailr.com/docs/api/lists
  - https://flomailr.com/docs/api/events
  - https://flomailr.com/docs/api/openapi
  - https://flomailr.com/docs/api/send.md
  - https://flomailr.com/docs/api/api-keys
  - https://flomailr.com/docs/api/contacts
  - https://flomailr.com/docs/api/forms.md
paths:
  /api/v1/contacts:
    get:
      operationId: get_api_v1_contacts
      tags:
      - Api
      summary: List contacts
      x-source: https://flomailr.com/docs/api/contacts
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: Page size, default 20, maximum 100 after Cursor from the previous page
      - name: status
        in: query
        required: false
        schema:
          type: string
        description: One of PENDING , SUBSCRIBED , UNSUBSCRIBED , BOUNCED
      - name: tag
        in: query
        required: false
        schema:
          type: string
        description: Only contacts that have this exact tag
      - name: q
        in: query
        required: false
        schema:
          type: string
        description: Case-insensitive search in email, first name and last name
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1ContactsResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_v1_contacts
      tags:
      - Api
      summary: POST /api/v1/contacts
      x-source: https://flomailr.com/docs/api/contacts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1ContactsRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://flomailr.com/api/v1/contacts  -H \"Authorization: Bearer $FLOMAILR_KEY\"  -H \"Content-Type: application/json\"\
          \  -d '{\"email\":\"ada@example.com\",\"firstName\":\"Ada\",\"tags\":[\"customer\"]}'\n Previous: API Keys Next: Lists"
  /api/v1/contacts/{id}:
    delete:
      operationId: delete_api_v1_contacts_id
      tags:
      - Api
      summary: Delete a contact
      x-source: https://flomailr.com/docs/api/contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    get:
      operationId: get_api_v1_contacts_id
      tags:
      - Api
      summary: Get a contact
      x-source: https://flomailr.com/docs/api/contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1ContactsIdResponse'
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_api_v1_contacts_id
      tags:
      - Api
      summary: Update a contact
      x-source: https://flomailr.com/docs/api/contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiV1ContactsIdRequest'
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchApiV1ContactsIdResponse'
      x-evidence:
        kind: documentation
  /api/v1/contacts/{id}/lists:
    get:
      operationId: get_api_v1_contacts_id_lists
      tags:
      - Api
      summary: Lists a contact is on
      x-source: https://flomailr.com/docs/api/contacts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1ContactsIdListsResponse'
      x-evidence:
        kind: documentation
  /api/v1/events:
    get:
      operationId: get_api_v1_events
      tags:
      - Api
      summary: List events
      x-source: https://flomailr.com/docs/api/events
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
        description: Page size, default 20, maximum 100
      - name: after
        in: query
        required: false
        schema:
          type: string
        description: Cursor from the previous page
      - name: name
        in: query
        required: false
        schema:
          type: string
        description: Only events with exactly this stored name (use normalized form)
      - name: contactId
        in: query
        required: false
        schema:
          type: string
        description: Only events for this contact
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1EventsResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_v1_events
      tags:
      - Api
      summary: Record an event
      x-source: https://flomailr.com/docs/api/events
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1EventsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiV1EventsResponse'
      x-evidence:
        kind: documentation
  /api/v1/forms:
    get:
      operationId: get_api_v1_forms
      tags:
      - Api
      summary: List forms
      description: List forms
      x-source: https://flomailr.com/docs/api/forms
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: Pagination limit
      - name: after
        in: query
        required: false
        schema:
          type: string
        description: Pagination cursor
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_v1_forms
      tags:
      - Api
      summary: Create a form
      description: Create a form
      x-source: https://flomailr.com/docs/api/forms
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1FormsRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/forms/{id}:
    delete:
      operationId: delete_api_v1_forms_id
      tags:
      - Api
      summary: Delete a form
      description: Delete a form
      x-source: https://flomailr.com/docs/api/forms
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    get:
      operationId: get_api_v1_forms_id
      tags:
      - Api
      summary: Get a form
      description: Get a form
      x-source: https://flomailr.com/docs/api/forms
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_api_v1_forms_id
      tags:
      - Api
      summary: Update a form
      description: Update a form
      x-source: https://flomailr.com/docs/api/forms
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiV1FormsIdRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/keys:
    get:
      operationId: get_api_v1_keys
      tags:
      - Api
      summary: List keys
      x-source: https://flomailr.com/docs/api/api-keys
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: Pagination limit
      - name: after
        in: query
        required: false
        schema:
          type: string
        description: Pagination cursor
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1KeysResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_v1_keys
      tags:
      - Api
      summary: Create a key
      x-source: https://flomailr.com/docs/api/api-keys
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1KeysRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiV1KeysResponse'
      x-evidence:
        kind: documentation
  /api/v1/keys/{id}:
    delete:
      operationId: delete_api_v1_keys_id
      tags:
      - Api
      summary: Revoke a key
      x-source: https://flomailr.com/docs/api/api-keys
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteApiV1KeysIdResponse'
      x-evidence:
        kind: documentation
    get:
      operationId: get_api_v1_keys_id
      tags:
      - Api
      summary: Get a key
      x-source: https://flomailr.com/docs/api/api-keys
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1KeysIdResponse'
      x-evidence:
        kind: documentation
  /api/v1/lists:
    get:
      operationId: get_api_v1_lists
      tags:
      - Api
      summary: List your lists
      x-source: https://flomailr.com/docs/api/lists
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: Page size, default 20, maximum 100
      - name: after
        in: query
        required: false
        schema:
          type: string
        description: Cursor from the previous page
      - name: q
        in: query
        required: false
        schema:
          type: string
        description: Case-insensitive search in the list name
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1ListsResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_v1_lists
      tags:
      - Api
      summary: Create a list
      x-source: https://flomailr.com/docs/api/lists
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1ListsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiV1ListsResponse'
      x-evidence:
        kind: documentation
  /api/v1/lists/{id}:
    delete:
      operationId: delete_api_v1_lists_id
      tags:
      - Api
      summary: Get, rename and delete a list
      x-source: https://flomailr.com/docs/api/lists
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    get:
      operationId: get_api_v1_lists_id
      tags:
      - Api
      summary: Get, rename and delete a list
      x-source: https://flomailr.com/docs/api/lists
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1ListsIdResponse'
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_api_v1_lists_id
      tags:
      - Api
      summary: Get, rename and delete a list
      x-source: https://flomailr.com/docs/api/lists
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiV1ListsIdRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/lists/{id}/contacts:
    get:
      operationId: get_api_v1_lists_id_contacts
      tags:
      - Api
      summary: List the contacts on a list
      x-source: https://flomailr.com/docs/api/lists
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: Page size, default 20, maximum 100
      - name: after
        in: query
        required: false
        schema:
          type: string
        description: Cursor from the previous page
      - name: status
        in: query
        required: false
        schema:
          type: string
        description: One of PENDING, SUBSCRIBED, UNSUBSCRIBED, BOUNCED
      - name: q
        in: query
        required: false
        schema:
          type: string
        description: Case-insensitive search in email, first name and last name
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_v1_lists_id_contacts
      tags:
      - Api
      summary: Add contacts to a list
      x-source: https://flomailr.com/docs/api/lists
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1ListsIdContactsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiV1ListsIdContactsResponse'
      x-evidence:
        kind: documentation
  /api/v1/lists/{id}/contacts/{contactid}:
    delete:
      operationId: delete_api_v1_lists_id_contacts_contactid
      tags:
      - Api
      summary: Remove a contact from a list
      x-source: https://flomailr.com/docs/api/lists
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: contactid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/send:
    post:
      operationId: post_api_v1_send
      tags:
      - Api
      summary: POST /api/v1/send
      x-source: https://flomailr.com/docs/api/send
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1SendRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://flomailr.com/api/v1/send  -H \"Authorization: Bearer $FLOMAILR_KEY\"  -H \"Idempotency-Key: receipt-1042\"\
          \  -H \"Content-Type: application/json\"  -d '{\"to\":\"ada@example.com\",\"subject\":\"Your receipt\",\"text\":\"Thanks for your order.\"\
          }'\n A repeat with the same key and the same request returns the original result without sending again, and the response includes \"\
          replayed\": true . \n The "
  /campaigns/{id}/send:
    post:
      operationId: post_campaigns_id_send
      tags:
      - Campaigns
      summary: POST /campaigns/{id}/send and POST /send email real people and cannot be undone.
      x-source: https://flomailr.com/docs/api/openapi
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostCampaignsIdSendResponse'
      x-evidence:
        kind: documentation
  /contacts:
    post:
      operationId: post_contacts
      tags:
      - Contacts
      summary: 'POST /contacts creates a new address as SUBSCRIBED unless you send status: "PENDING", which is you saying the person agreed to
        marketing email.'
      x-source: https://flomailr.com/docs/api/openapi
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostContactsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostContactsResponse'
      x-evidence:
        kind: documentation
  /events:
    post:
      operationId: post_events
      tags:
      - Events
      summary: POST /events always creates unknown addresses as PENDING.
      x-source: https://flomailr.com/docs/api/openapi
      parameters:
      - name: externalId
        in: header
        required: false
        schema:
          type: string
        description: Idempotency key for events; send to avoid duplicate processing.
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostEventsResponse'
      x-evidence:
        kind: documentation
  /openapi.json:
    get:
      operationId: get_openapi_json
      tags:
      - Openapi
      summary: GET /openapi.json
      x-source: https://flomailr.com/docs/api/openapi
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl https://flomailr.com/openapi.json\n The response is cached for an hour. \n What the agent should know first \n The top\
          \ of the spec ( info.description ) covers these, and each operation repeats what matters for it. \n Consent. POST /contacts creates\
          \ a new address as SUBSCRIBED unless you send status: \"PENDING\" , which is you saying the person agreed to marketing email. An opted-out\
          \ contact is not "
  /send:
    post:
      operationId: post_send
      tags:
      - Send
      summary: POST /send email real people and cannot be undone.
      x-source: https://flomailr.com/docs/api/openapi
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        schema:
          type: string
        description: Header to ensure retries do not send the email twice.
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostSendResponse'
      x-evidence:
        kind: documentation
components:
  schemas:
    GetApiV1ContactsResponse:
      type: object
      properties:
        data:
          type: array
          description: Array of contact objects, newest first
    PostApiV1ContactsRequest:
      type: object
      properties:
        email:
          type: string
        firstName:
          type: string
        tags:
          type: array
          items:
            type: string
    GetApiV1ContactsIdResponse:
      type: object
      properties:
        id:
          type: string
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        tags:
          type: array
        status:
          type: string
        createdAt:
          type: string
    PatchApiV1ContactsIdRequest:
      type: object
      properties:
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        tags:
          type: array
        status:
          type: string
        consent:
          type: string
    PatchApiV1ContactsIdResponse:
      type: object
      properties:
        id:
          type: string
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        tags:
          type: array
        status:
          type: string
        createdAt:
          type: string
    GetApiV1ContactsIdListsResponse:
      type: object
      properties:
        data:
          type: array
          description: Array of list objects each with id, name, createdAt, addedAt
    GetApiV1EventsResponse:
      type: object
      properties:
        items:
          type: array
          description: List of event objects
        items[].id:
          type: string
          description: Event identifier
        items[].name:
          type: string
          description: Event name
        items[].properties:
          type: object
          description: Event properties
        items[].valueCents:
          type: integer
          description: Money amount in minor units
        items[].currency:
          type: string
          description: Three‑letter currency code
        items[].contactId:
          type: string
          description: Associated contact identifier
        items[].createdAt:
          type: string
          description: Timestamp of creation (newest first)
    PostApiV1EventsRequest:
      type: object
      properties:
        name:
          type: string
          description: Event name (see name rules)
        email:
          type: string
          description: The contact's email. Provide email or contactId
        contactId:
          type: string
          description: The contact's id. Used instead of email when both are given
        properties:
          type: object
          description: Optional object. At most 50 keys and 8 KB when serialized
        value:
          type: number
          description: Optional money amount in major units (e.g., dollars). Stored as whole minor units
        valueCents:
          type: integer
          description: Optional money amount as a whole number of minor units. Wins over value if both are sent
        currency:
          type: string
          description: Optional three‑letter code, stored uppercase. Anything else is ignored
        externalId:
          type: string
          description: Optional unique id for the event, used to make retries safe (truncated to 200 characters)
      required:
      - name
    PostApiV1EventsResponse:
      type: object
      properties:
        data:
          type: object
          description: Event data object
        data.id:
          type: string
          description: Event identifier
        data.name:
          type: string
          description: Event name
        data.createdAt:
          type: string
          description: Timestamp of creation
    PostApiV1FormsRequest:
      type: object
      properties:
        name:
          type: string
          description: Form name
        listId:
          type: string
          description: List ID (optional)
        fields:
          type: array
          description: Array of field names
        successMessage:
          type: string
          description: Success message
      required:
      - name
    PatchApiV1FormsIdRequest:
      type: object
      properties:
        name:
          type: string
          description: Form name (cannot be empty)
        listId:
          type: string
          description: List ID or null to detach
        fields:
          type: array
          description: Array of field names
        successMessage:
          type: string
          description: Success message
        style:
          type: object
          description: Form style object
    GetApiV1KeysResponse:
      type: object
      properties:
        id:
          type: string
          description: Key identifier
        name:
          type: string
          description: Key name
        prefix:
          type: string
          description: First 12 characters of the key
        lastUsedAt:
          type: string
          description: Timestamp of last use
        revokedAt:
          type: string
          description: Timestamp when revoked (if applicable)
        createdAt:
          type: string
          description: Creation timestamp
    PostApiV1KeysRequest:
      type: object
      properties:
        name:
          type: string
          description: Name of the key (max 100 characters)
      required:
      - name
    PostApiV1KeysResponse:
      type: object
      properties:
        id:
          type: string
          description: Key identifier
        name:
          type: string
          description: Key name
        prefix:
          type: string
          description: First 12 characters of the key
        createdAt:
          type: string
          description: Creation timestamp
        key:
          type: string
          description: Full API key (returned only once)
    DeleteApiV1KeysIdResponse:
      type: object
      properties:
        id:
          type: string
          description: Key identifier
        revokedAt:
          type: string
          description: Timestamp when the key was revoked
    GetApiV1KeysIdResponse:
      type: object
      properties:
        id:
          type: string
          description: Key identifier
        name:
          type: string
          description: Key name
        prefix:
          type: string
          description: First 12 characters of the key
        lastUsedAt:
          type: string
          description: Timestamp of last use
        revokedAt:
          type: string
          description: Timestamp when revoked (if applicable)
        createdAt:
          type: string
          description: Creation timestamp
    GetApiV1ListsResponse:
      type: object
      properties:
        id:
          type: string
          description: List identifier
        orgId:
          type: string
          description: Organization identifier
        name:
          type: string
          description: List name
        createdAt:
          type: string
          description: Creation timestamp
        contactCount:
          type: integer
          description: Number of contacts on the list
    PostApiV1ListsRequest:
      type: object
      properties:
        name:
          type: string
          description: Name of the new list
      required:
      - name
    PostApiV1ListsResponse:
      type: object
      properties:
        id:
          type: string
          description: Identifier of the created list
        name:
          type: string
          description: Name of the created list
        createdAt:
          type: string
          description: Creation timestamp
        contactCount:
          type: integer
          description: Initial contact count (0)
    GetApiV1ListsIdResponse:
      type: object
      properties:
        id:
          type: string
          description: List identifier
        orgId:
          type: string
          description: Organization identifier
        name:
          type: string
          description: List name
        createdAt:
          type: string
          description: Creation timestamp
        contactCount:
          type: integer
          description: Number of contacts on the list
    PatchApiV1ListsIdRequest:
      type: object
      properties:
        name:
          type: string
          description: New name (non‑empty)
      required:
      - name
    PostApiV1ListsIdContactsRequest:
      type: object
      properties:
        contactId:
          type: string
          description: Single contact identifier
        contactIds:
          type: array
          description: Array of contact identifiers
    PostApiV1ListsIdContactsResponse:
      type: object
      properties:
        data:
          type: object
          description: Result summary
        added:
          type: integer
          description: Number of contacts added (including already on the list)
        skipped:
          type: integer
          description: Number of contacts skipped (UNSUBSCRIBED or BOUNCED)
    PostApiV1SendRequest:
      type: object
      properties:
        to:
          type: string
        subject:
          type: string
        text:
          type: string
    PostCampaignsIdSendResponse:
      type: object
      properties:
        error:
          type: object
          description: 'If an error occurs, the response is { "error": { "code", "message" } }.'
    PostContactsRequest:
      type: object
      properties:
        status:
          type: string
          description: Set to "PENDING" to indicate the person has given consent; otherwise the contact is created as SUBSCRIBED.
    PostContactsResponse:
      type: object
      properties:
        error:
          type: object
          description: 'If an error occurs, the response is { "error": { "code", "message" } }.'
    PostEventsResponse:
      type: object
      properties:
        error:
          type: object
          description: 'If an error occurs, the response is { "error": { "code", "message" } }.'
    PostSendResponse:
      type: object
      properties:
        error:
          type: object
          description: 'If an error occurs, the response is { "error": { "code", "message" } }.'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Api


# --- truncated at 32 KB (32 KB total) ---
# Full source: https://artifacts.apis.io/flomailr-com/openapi/_ae-authored/flomailr-com-openapi-generated.yml