SendPulse Flows API

The flows API from SendPulse — 3 operation(s) for flows.

Operations 3

GET /flows Get a list of flows #
POST /flows/run Run the flow by its identifier #
POST /flows/runByTrigger Run a flow by trigger keywords #

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/sendpulse-flows-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

sendpulse-flows-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Sendpulse Flows API
  version: 0.0.1
  description: 'Operations tagged flows across 7 of this provider''s published API definitions: sendpulse-facebook-openapi.yml, sendpulse-instagram-openapi.yml, sendpulse-live-chat-openapi.yml, sendpulse-telegram-openapi.yml, sendpulse-tiktok-openapi.yml, sendpulse-viber-chatbot-openapi.yml, sendpulse-whatsapp-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- description: ''
  url: https://api.sendpulse.com/messenger
- description: ''
  url: https://api.sendpulse.com/instagram
- description: ''
  url: https://api.sendpulse.com/live-chat
- description: ''
  url: https://api.sendpulse.com/telegram
- description: ''
  url: https://api.sendpulse.com/tiktok
- description: ''
  url: https://api.sendpulse.com/viber/chatbots
- description: ''
  url: https://api.sendpulse.com/whatsapp
security:
- apiKey: []
- oauth2: []
tags:
- description: ''
  name: flows
paths:
  /flows:
    get:
      summary: Get a list of flows
      description: 'Returns a list of created flows for the selected bot and information for each: flow id, bot id, status, name, id and name of the trigger that launches it, and creation date'
      security:
      - oAuth2ClientCredentials: []
      tags:
      - flows
      parameters:
      - in: query
        name: bot_id
        required: true
        schema:
          type: string
        description: Bot ID. Can be obtained with a method of getting a list of bots. You can also find it in your account in the address bar of a chat window with the desired contact.
      - in: query
        name: size
        description: The limit of pagination items, that will be returned
        schema:
          type: integer
      - in: query
        name: skip
        description: The offset of pagination items, where starts a current items batch
        schema:
          type: integer
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                properties:
                  success:
                    type: boolean
                  data:
                    $ref: '#/components/schemas/Flow'
                type: object
      operationId: getFlows
      x-ai-role: chatbot_automation_specialist
      x-ai-description: Retrieves a paginated catalogue of automation flows for a specific bot. Flows are the core behavioral scripts of a chatbot — each flow defines a sequence of actions triggered by user events or conditions. This endpoint is the primary discovery tool before executing, editing, or analyzing flow performance.
      x-ai-reasoning-instructions:
      - Always require bot_id — without it the request is invalid. Obtain it via the list-bots endpoint if not available.
      - Use 'size' and 'skip' for pagination when the bot may have many flows; default page size is typically small.
      - If the goal is to find a specific flow by name or trigger, retrieve the full list first and filter client-side, as the endpoint does not support filtering by name.
      - Check flow 'status' in the response to distinguish active flows from drafts before referencing them in other operations.
      x-ai-responding-instructions:
      - Present each flow with its name, status, and trigger name so the user can identify it at a glance.
      - If the list is empty, suggest that no flows have been created yet and recommend using the flow builder in the SendPulse dashboard.
      - Highlight any flows in inactive/draft status if the user is troubleshooting why a flow is not triggering.
      - Suggest follow-up actions such as running a flow or fetching its details using the returned flow id.
      x-ai-suggestions:
      - Fetch all flows for a bot before triggering or modifying one.
      - Use 'skip' + 'size' to page through large flow catalogues.
      - Cross-reference 'trigger.id' with trigger-management endpoints to understand activation conditions.
      x-ai-capabilities:
        confirmation:
          type: None
        security_info:
          data_handling:
          - ReadOnly
    servers:
    - description: ''
      url: https://api.sendpulse.com/messenger
  /flows/run:
    post:
      summary: Run the flow by its identifier
      description: Launches the selected flow for the selected contact. Additional data can be passed to the "external_data" field and used once in the selected chain, where variables will be inserted in the "Message" element as a JSON path, for example {{$['tracking_number']}}.
      security:
      - oAuth2ClientCredentials: []
      tags:
      - flows
      requestBody:
        description: ''
        required: true
        content:
          application/json:
            schema:
              properties:
                contact_id:
                  type: string
                  description: Contact ID. Can be obtained with a contact search by tag or variable. You can also find it in your account in the address bar of a chat window with the desired contact.
                flow_id:
                  type: string
                  description: Flow ID to be launched. Can be obtained with the method of obtaining the list of flows
                external_data:
                  type: object
                  description: Custom variables. You can pass variable values in the request and use them once in the flow you selected. To add variables to the flow, in the Message element, insert the variable names as a JSON path expression {{$['somekey']['nestedkey']}}.
                  example:
                    tracking_number: 1234-0987-5678-9012
              required:
              - contact_id
              - flow_id
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
      operationId: runFlow
      x-ai-role: marketing_automation_specialist
      x-ai-description: Triggers an automation flow for a specific contact, optionally injecting one-time runtime variables via `external_data`. This is the execution entry point for CRM-driven or event-driven scenarios — e.g., post-purchase order tracking, onboarding sequences, or support follow-ups where dynamic data (like a tracking number or ticket ID) must be embedded into the flow's messages without permanently storing it as a contact variable.
      x-ai-reasoning-instructions:
      - Before calling, confirm that both `contact_id` and `flow_id` exist and are active — a deleted or paused flow will silently fail or return an error.
      - Check whether the target flow contains `external_data` variable references (JSON path syntax `{{$['key']}}`); if not, passing `external_data` has no effect.
      - Remind the user that `external_data` values are single-use and scoped to this invocation only — they are not persisted to the contact's profile.
      - If the user wants to trigger the same flow for multiple contacts, this endpoint must be called once per contact; there is no batch mode.
      - Validate that the contact belongs to the chatbot/channel the flow is configured for — cross-channel invocations will fail.
      x-ai-responding-instructions:
      - Confirm that the flow was successfully triggered and mention the contact and flow IDs used.
      - If `external_data` was passed, acknowledge which variables were injected and note their single-use nature.
      - Suggest verifying delivery by checking conversation history or flow analytics in the SendPulse dashboard.
      - On error, help the user distinguish between an invalid `contact_id`, invalid `flow_id`, or a misconfigured flow.
      x-ai-suggestions:
      - Use `getFlows` to retrieve valid `flow_id` values before calling this endpoint.
      - Use contact search by tag or variable to obtain the `contact_id`.
      - Structure `external_data` keys to match the JSON path expressions in the flow's Message elements exactly.
      x-ai-capabilities:
        confirmation:
          type: Recommended
          message: This will immediately trigger the flow and send messages to the contact. Confirm before proceeding.
        security_info:
          data_handling:
          - TriggersSideEffect
          - ExternalDataIsEphemeral
    servers:
    - description: ''
      url: https://api.sendpulse.com/messenger
  /flows/runByTrigger:
    post:
      summary: Run a flow by trigger keywords
      description: Launches a flow with the trigger keyword for the selected contact
      security:
      - oAuth2ClientCredentials: []
      tags:
      - flows
      requestBody:
        description: ''
        required: true
        content:
          application/json:
            schema:
              properties:
                contact_id:
                  type: string
                  description: Contact ID. Can be obtained with a contact search by tag or variable. You can also find it in your account in the address bar of a chat window with the desired contact.
                trigger_keyword:
                  type: string
                  description: trigger keyword
                external_data:
                  type: object
                  description: Custom variables. You can pass variable values in the request and use them once in the flow you selected. To add variables to the flow, in the Message element, insert the variable names as a JSON path expression {{$['somekey']['nestedkey']}}.
                  example:
                    tracking_number: 1234-0987-5678-9012
              required:
              - contact_id
              - trigger_keyword
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
      operationId: runFlowByTrigger
      x-ai-role: chatbot_automation_engineer
      x-ai-description: Programmatically initiates a pre-built automation flow for a specific contact using a trigger keyword. This is the primary mechanism for injecting a contact into a flow mid-pipeline — useful for event-driven scenarios such as order confirmations, support escalations, or re-engagement sequences. Unlike time-based or manual triggers, this call enables external systems (e-commerce platforms, CRMs, webhooks) to drive chatbot logic in real time.
      x-ai-reasoning-instructions:
      - Verify that the contact_id exists before calling — use a contact search by tag or variable if the ID is not already known.
      - Confirm the trigger_keyword matches an active trigger configured in the target flow; an incorrect keyword will silently fail or route to the wrong branch.
      - If passing external_data, validate that the keys match the JSON path expressions defined in the flow's Message elements (e.g., {{$['tracking_number']}}) — mismatched keys result in empty variable substitution.
      - Do not pass sensitive PII in external_data unless the flow is designed to handle it securely and ephemerally.
      - This endpoint is fire-and-forget for the flow execution — the 200 response confirms the trigger was accepted, not that the flow completed.
      x-ai-responding-instructions:
      - Confirm that the flow was successfully triggered and mention the contact_id and trigger_keyword used.
      - If external_data was passed, note which variables were injected and remind the user they are single-use within this flow execution.
      - If the response indicates failure, check whether the trigger_keyword is active and whether the contact belongs to the correct bot/channel.
      - Suggest verifying the flow execution result in the SendPulse dashboard if outcome confirmation is needed.
      x-ai-suggestions:
      - Use this endpoint from a webhook handler when an order is shipped to trigger a delivery-tracking flow.
      - Pair with a contact search endpoint to resolve contact_id dynamically before calling.
      - Use external_data to pass one-time values like order numbers, OTP codes, or appointment times directly into the message flow.
      x-ai-capabilities:
        confirmation:
          type: None
        security_info:
          data_handling:
          - TriggersSideEffect
          - ExternalDataEphemeral
    servers:
    - description: ''
      url: https://api.sendpulse.com/messenger
components:
  schemas:
    SuccessResponse:
      properties:
        success:
          type: boolean
        data:
          anyOf:
          - type: array
            items:
              type: object
          - type: object
          - type: boolean
      type: object
    Flow:
      properties:
        id:
          type: string
        bot_id:
          type: string
        name:
          type: string
        status:
          type: integer
          enum:
          - 1
          - 2
          description: "\n                    * `1` - active\n\n                    * `2` - inactive"
        triggers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
        created_at:
          type: string
          example: 2020-12-11 21:00:00+00:00
    Flow_2:
      properties:
        id:
          type: string
        bot_id:
          type: string
        name:
          type: string
        status:
          type: integer
          enum:
          - ACTIVE: 1
            INACTIVE: 2
            DRAFT: 4
          description: "\n                    * `1` - active\n\n                    * `2` - inactive"
        triggers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              type:
                type: integer
                enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                description: "\n                    * `1` - starts immediately upon subscription\n\n                    * `2` - starts when unsubscribed\n\n                    * `3` - default reply\n\n                    * `4` - starts when the specified keyword is entered\n\n                    * `5` - starts at the specified time when subscribing"
        created_at:
          type: string
          example: 2020-12-11 21:00:00+00:00
    SuccessResponse_2:
      properties:
        success:
          type: boolean
        data:
          anyOf:
          - type: array
            items:
              type: object
          - type: object
          - type: boolean
          - type: string
          - type: integer
      type: object
    Flow_3:
      properties:
        id:
          type: string
        bot_id:
          type: string
        name:
          type: string
        status:
          type: integer
          enum:
          - ACTIVE: 1
            INACTIVE: 2
            DRAFT: 4
          description: "\n                    * `1` - active\n\n                    * `2` - inactive"
        triggers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              type:
                type: integer
                enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                description: "\n                    * `1` - starts immediately upon subscription\n\n                    * `2` - starts when unsubscribed\n\n                    * `3` - default reply\n\n                    * `4` - starts when the specified keyword is entered\n\n                    * `5` - starts at the specified time when subscribing"
        created_at:
          type: string
          example: 2020-12-11 21:00:00+00:00
    Flow_4:
      properties:
        id:
          type: string
        bot_id:
          type: string
        name:
          type: string
        status:
          type: integer
          enum:
          - 1
          - 2
          description: "\n                    * `1` - active\n\n                    * `2` - inactive"
        triggers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              type:
                type: integer
                enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                description: "\n                    * `1` - starts immediately upon subscription\n\n                    * `2` - starts when unsubscribed\n\n                    * `3` - default reply\n\n                    * `4` - starts when the specified keyword is entered\n\n                    * `5` - starts at the specified time when subscribing"
        created_at:
          type: string
          example: 2020-12-11 21:00:00+00:00
    Flow_5:
      properties:
        id:
          type: string
        bot_id:
          type: string
        name:
          type: string
        status:
          type: integer
          enum:
          - ACTIVE: 1
            INACTIVE: 2
            DRAFT: 4
          description: "\n                    * `1` - active\n\n                    * `2` - inactive"
        triggers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              type:
                type: integer
                enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                description: "\n                    * `1` - starts immediately upon subscription\n\n                    * `2` - starts when unsubscribed\n\n                    * `3` - default reply\n\n                    * `4` - starts when the specified keyword is entered\n\n                    * `5` - starts at the specified time when subscribing"
        created_at:
          type: string
          example: 2020-12-11 21:00:00+00:00
    Flow_6:
      properties:
        id:
          type: string
        bot_id:
          type: string
        name:
          type: string
        status:
          type: integer
          enum:
          - ACTIVE: 1
            INACTIVE: 2
            DRAFT: 4
          description: "\n                    * `1` - active\n\n                    * `2` - inactive"
        triggers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              type:
                type: integer
                enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                description: "\n                    * `1` - starts immediately upon subscription\n\n                    * `2` - starts when unsubscribed\n\n                    * `3` - default reply\n\n                    * `4` - starts when the specified keyword is entered\n\n                    * `5` - starts at the specified time when subscribing"
        created_at:
          type: string
          example: 2020-12-11 21:00:00+00:00
    Flow_7:
      properties:
        id:
          type: string
        bot_id:
          type: string
        name:
          type: string
        status:
          type: integer
          enum:
          - ACTIVE: 1
            INACTIVE: 2
            DRAFT: 4
          description: "\n                    * `1` - active\n\n                    * `2` - inactive"
        triggers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              type:
                type: integer
                enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                description: "\n                    * `1` - starts immediately upon subscription\n\n                    * `2` - starts when unsubscribed\n\n                    * `3` - default reply\n\n                    * `4` - starts when the specified keyword is entered\n\n                    * `5` - starts at the specified time when subscribing"
        created_at:
          type: string
          example: 2020-12-11 21:00:00+00:00
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: 'Static API Key authentication.  A long-lived token generated manually in the SendPulse account settings.

        '
      x-ai-description: 'Permanent authentication token. Ideal for simple integrations without token refresh logic.

        '
    outh2:
      type: oauth2
      description: OAuth 2.0 Client Credentials flow for temporary access tokens.
      flows:
        clientCredentials:
          tokenUrl: https://api.sendpulse.com/oauth/access_token
          scopes: {}
      x-ai-description: 'Standard OAuth 2.0 flow using Client ID and Client Secret.  Provides temporary tokens (valid for 1 hour) for enhanced security.

        '
x-refined-from:
- sendpulse-facebook-openapi.yml
- sendpulse-instagram-openapi.yml
- sendpulse-live-chat-openapi.yml
- sendpulse-telegram-openapi.yml
- sendpulse-tiktok-openapi.yml
- sendpulse-viber-chatbot-openapi.yml
- sendpulse-whatsapp-openapi.yml