Breakreach Dm Automations API

The Dm Automations API from Breakreach — 3 operation(s) for dm automations.

Operations 5

GET /v1/dm-automations List DM automations #
POST /v1/dm-automations Create a DM automation #
PATCH /v1/dm-automations/{id} Update a DM automation #
DELETE /v1/dm-automations/{id} Delete a DM automation #
GET /v1/dm-automations/{id}/runs Runs of a DM automation #

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/breakreach-com:breakreach-com-dm-automations-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

breakreach-com-dm-automations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Breakreach Dm Automations API
  version: 1.1.0
  description: 'Publish and schedule social media posts across Instagram, TikTok, X (Twitter), Reddit, LinkedIn, YouTube, Facebook, Threads, Bluesky, Pinterest, Telegram, Discord, Slack, Mastodon, WordPress, Ghost, Dev.to, Hashnode, Tumblr and Google Business Profile with one request shape.


    Authenticate with an API key (create one in the Breakreach dashboard under Settings → API & MCP) sent as a Bearer token. Errors answer with an HTTP status and a JSON body { "error": "" }.


    Every POST accepts an Idempotency-Key header: any unique string up to 255 characters, a UUID for instance. Retrying with the same key and the same body within 24 hours returns the first response, marked Idempotent-Replayed: true, instead of creating a second post. The same key with a different body answers 422, and 409 while the first request is still running. Errors are not kept, so a fixed request can reuse its key. Keys belong to the API key that sent them.


    AI agents can use the same capabilities through the hosted MCP server at https://api.breakreach.com/mcp (OAuth 2.1).'
servers:
- url: https://api.breakreach.com
security:
- bearerAuth: []
tags:
- name: Dm Automations
paths:
  /v1/dm-automations:
    get:
      summary: List DM automations
      description: 'DM automations: when someone DMs a keyword, mentions the account in their story, replies to a story or opens a ref link, Breakreach answers in Instagram Direct (or Messenger for a Facebook Page) and walks a flow of messages, waits, conditions and handoffs for that person. Replies only go out within Meta''s 24-hour window after the person''s last message; a person is in one flow at a time, and someone answering by hand stops it. Available on the Pro, Agency and Developer plans.'
      operationId: listDmAutomations
      parameters:
      - name: accountId
        in: query
        schema:
          type: string
      - name: workspace
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  automations:
                    type: array
                    items:
                      $ref: '#/components/schemas/DmAutomation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Dm Automations
    post:
      summary: Create a DM automation
      description: Subscribes the account to Meta's message webhooks and starts answering. Requires a Pro, Agency or Developer plan on the workspace.
      operationId: createDmAutomation
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DmAutomationInput'
      responses:
        '200':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  automation:
                    $ref: '#/components/schemas/DmAutomation'
        '400':
          description: Invalid trigger or step (the message says which), or not an Instagram account or a Facebook Page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Account or workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Meta refused to subscribe the account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Dm Automations
  /v1/dm-automations/{id}:
    patch:
      summary: Update a DM automation
      description: Only the fields given change; steps replaces the whole flow (keep the ids of unchanged steps so people in the flow carry on). active false pauses it and stops the people in it.
      operationId: updateDmAutomation
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DmAutomationInput'
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  automation:
                    $ref: '#/components/schemas/DmAutomation'
        '400':
          description: Invalid field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Automation or workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Dm Automations
    delete:
      summary: Delete a DM automation
      description: Deletes the automation with its runs; people in the flow stop.
      operationId: deleteDmAutomation
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: workspace
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Automation or workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Dm Automations
  /v1/dm-automations/{id}/runs:
    get:
      summary: Runs of a DM automation
      description: 'Each person who went through it, newest first, kept 90 days: every step sent, choices tapped, clicks, and how it ended. Webhooks subscribed to dm_automation.started, dm_automation.handoff, dm_automation.finished and dm_automation.failed get the same events as they happen.'
      operationId: listDmAutomationRuns
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 200
          default: 50
      - name: workspace
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  runs:
                    type: array
                    items:
                      $ref: '#/components/schemas/DmAutomationRun'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Automation or workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Dm Automations
components:
  schemas:
    DmTrigger:
      type: object
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - keyword
          - any_message
          - story_mention
          - story_reply
          - ref
          description: keyword = a DM containing a keyword; any_message = any DM (welcome or away reply); story_mention = someone mentions the account in their story (Instagram); story_reply = a reply to one of its stories, optionally with keywords (Instagram); ref = someone opens ig.me/m/<username>?ref=<ref> or m.me/<page id>?ref=<ref> and writes
        keywords:
          type: array
          items:
            type: string
            maxLength: 60
          maxItems: 20
          description: keyword (required) and story_reply (optional); case and accents ignored
        match:
          type: string
          enum:
          - contains
          - exact
          default: contains
        ref:
          type:
          - string
          - 'null'
          pattern: ^[A-Za-z0-9_=-]{1,60}$
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          description: Human-readable reason
    DmAutomation:
      type: object
      properties:
        id:
          type: string
        accountId:
          type: string
        platform:
          type: string
          enum:
          - instagram
          - facebook
        account:
          type: object
          properties:
            displayName:
              type: string
            avatarUrl:
              type:
              - string
              - 'null'
        name:
          type: string
        trigger:
          $ref: '#/components/schemas/DmTrigger'
        refLink:
          type:
          - string
          - 'null'
          description: 'For a ref trigger: the link to share (link in bio, QR code, ad)'
        steps:
          type: array
          items:
            $ref: '#/components/schemas/DmStep'
        reentry:
          type: string
          enum:
          - once
          - always
        cooldownHours:
          type: integer
        active:
          type: boolean
        stats:
          type: object
          properties:
            started:
              type: integer
            completed:
              type: integer
            handedOff:
              type: integer
            clicks:
              type: integer
            failed:
              type: integer
        lastTriggeredAt:
          type:
          - string
          - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    DmAutomationInput:
      type: object
      properties:
        accountId:
          type: string
          description: Instagram account or Facebook Page id from /v1/accounts (create only)
        name:
          type: string
          maxLength: 80
        trigger:
          $ref: '#/components/schemas/DmTrigger'
        steps:
          type: array
          items:
            $ref: '#/components/schemas/DmStep'
          description: Required on create. On update, the whole list
        reentry:
          type: string
          enum:
          - once
          - always
          default: once
          description: once = a person goes through it once; always = each time they trigger it, at most once per cooldownHours
        cooldownHours:
          type: integer
          minimum: 0
          maximum: 720
          default: 24
        active:
          type: boolean
          default: true
        workspace:
          type: string
    DmStep:
      type: object
      required:
      - type
      description: One step of a flow. A message with choices, a condition and a handoff must be the last step of their list; what follows goes inside their branches. Up to 40 steps, branches 6 levels deep.
      properties:
        id:
          type: string
          description: Kept across edits so people in the flow carry on; generated when omitted
        type:
          type: string
          enum:
          - message
          - wait
          - condition
          - handoff
        text:
          type: string
          description: 'message: up to 1000 bytes (640 characters with a button). {username} = their @handle on Instagram, first name on Messenger; {first_name}'
        button:
          type:
          - object
          - 'null'
          properties:
            title:
              type: string
              maxLength: 20
            url:
              type: string
              format: uri
          description: 'message: a link button; clicks are counted (the link goes through api.breakreach.com/l/...)'
        choices:
          type: array
          maxItems: 13
          items:
            type: object
            properties:
              id:
                type: string
              label:
                type: string
                maxLength: 20
              steps:
                type: array
                items:
                  $ref: '#/components/schemas/DmStep'
          description: 'message: quick-reply choices, each with its own steps. Not with a button'
        otherwise:
          type:
          - object
          - 'null'
          properties:
            afterMinutes:
              type: integer
              minimum: 1
              maximum: 1380
            steps:
              type: array
              items:
                $ref: '#/components/schemas/DmStep'
          description: 'message with choices: a typed answer that isn''t a choice, or no answer within afterMinutes'
        minutes:
          type: integer
          minimum: 1
          maximum: 1380
          description: wait
        check:
          type: string
          enum:
          - replied
          - keyword
          - clicked
          - follows
          description: 'condition: a reply, a reply containing keywords, a click on an earlier link button (each waited for up to withinMinutes), or whether they follow the account (Instagram, checked at once)'
        keywords:
          type: array
          items:
            type: string
        match:
          type: string
          enum:
          - contains
          - exact
        withinMinutes:
          type: integer
          minimum: 1
          maximum: 1380
        'yes':
          type: array
          items:
            $ref: '#/components/schemas/DmStep'
        'no':
          type: array
          items:
            $ref: '#/components/schemas/DmStep'
        note:
          type: string
          maxLength: 300
          description: 'handoff: shown in the Inbox'
    DmAutomationRun:
      type: object
      properties:
        id:
          type: string
        automationId:
          type: string
        status:
          type: string
          enum:
          - running
          - waiting
          - completed
          - handed_off
          - stopped
          - window_closed
          - failed
        contact:
          type: object
          properties:
            id:
              type: string
              description: Instagram-scoped or Page-scoped id
            username:
              type:
              - string
              - 'null'
            name:
              type:
              - string
              - 'null'
        trigger:
          type: object
          properties:
            type:
              type: string
            text:
              type:
              - string
              - 'null'
            ref:
              type:
              - string
              - 'null'
        stepId:
          type:
          - string
          - 'null'
        waiting:
          type:
          - object
          - 'null'
          properties:
            kind:
              type: string
              enum:
              - timer
              - choice
              - reply
              - click
            stepId:
              type: string
            until:
              type: string
              format: date-time
        clicks:
          type: integer
        log:
          type: array
          items:
            type: object
            properties:
              at:
                type: string
                format: date-time
              kind:
                type: string
                description: trigger, sent, choice, reply, click, branch, wait, waited, handoff, end, error
              stepId:
                type:
                - string
                - 'null'
              text:
                type:
                - string
                - 'null'
              detail:
                type:
                - string
                - 'null'
        endReason:
          type:
          - string
          - 'null'
          description: done, handoff, human_replied (someone answered by hand), window (Meta's 24-hour window closed), paused, deleted, flow_changed, stopped_by_team, send, account
        error:
          type:
          - string
          - 'null'
        createdAt:
          type: string
          format: date-time
        endedAt:
          type:
          - string
          - 'null'
          format: date-time
  responses:
    Unauthorized:
      description: Missing, invalid or expired API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    PaymentRequired:
      description: No active Breakreach subscription or trial
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Not a member of the requested workspace
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key from the Breakreach dashboard (br_...) or an OAuth access token (bro_...)