Wassenger Integrations API

The Integrations API from Wassenger — 8 operation(s) for integrations.

GitHub OpenAPI

Operations 13

GET /install/vault Vault #
PUT /install/vault Write vault #
GET /install/agents Install agents #
GET /install Install #
PATCH /install Update install #
DELETE /install Revoke install #
POST /bridges/pending Create pending connection #
GET /bridges/installs Bridge installs #
POST /bridges/exchange Exchange install code #
GET /install/kv/{key} Read install key #
PUT /install/kv/{key} Write install key #
GET /bridges/kv/{key} Read bridge key #
PUT /bridges/kv/{key} Write bridge key #

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/wassenger:wassenger-integrations-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

wassenger-integrations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Wassenger Integrations API
  version: 1.0.0
  description: '**API documentation for Wassenger**


    > 🔥 🆕 **Introducing Flows**: No-Code Automation Solution to create AI agents and automate anything on WhatsApp! Learn more


    ## Introduction


    This API documentation provides detailed information about the API endpoints and request/response API contracts. You can easily browse all the API resources, request/response the with code examples in 15+ programming languages, including JavaScript/Node.js, Python, PHP, Ruby, Java, C#, Go, Swift, Kotlin, ObjectiveC, C/C++, cURL, Powershell and more. This is a web based API, therefore is only required to send HTTPS requests in order to communicate with the API, making it very easy to use and integrate with any third-party software, programming language, CMS, CRM or CLI tools. The API does not require any SDK and has no strict software dependencies, it can be easily used with no friction by simply sending HTTPS requests to the desired API endpoint. > 🤩 🤖 **Ask the Wassenger AI Assistant to write code for you** 👉


    ## Security


    This API is intended for use exclusively in server-side applications. Attempting to use them in a client-side application will result in Cross-Origin Resource Sharing (CORS) errors. This restriction is intentional and ensures the security and integrity of the service. ## Tutorials


    Learn how to use the API exploring our handy tutorials with detailed code examples and live API testing:


    - 💬 Send messages to phone numbers

    - 💬 Send messages to group chats

    - 💬 Send messages to channel 🆕

    - 💬 Send messages from a CSV file 🆕

    - 💬 Send messages from a Google Sheets document 🆕

    - 📁 Send multimedia messages (images, videos, documents, files or audios)

    - 💬 Include emojis in text messages

    - 💬 Send location messages

    - 💬 Send contacts

    - 💬 Send URL links in text messages

    - 💬 Send auto-expiring messages

    - 💬 Send messages in real-time without queueing

    - 💬 Send messages through a specific WhatsApp number/device

    - 💬 Send messages on behalf of a chat agent

    - 💬 Send messages replying to a specific message

    - 💬 Send dynamic buttons message

    - 💬 Send dynamic list message

    - 📝 How to use template variables

    - 📝 How to format text with styling in messages

    - ✅ Check if a phone number exists in WhatsApp and can receive messages


    ## Chatbots 🔥


    - 🤖 Create a custom chat bot using the API + Webhooks 🆕

    - 🤖 Create a ChatGPT-powered AI chatbot assistant for your business 🆕


    ## MCP 🆕


    MCP (acronym of Model Context Protocol) connector lets you connect your Wassenger WhatsApp numbers into modern AI LLMs and chat with your WhatsApp data, analyze conversation, send messages, or perform any other WhatsApp action directly from your favorite AI chat or code tool. - 🤖 **Learn how to use MCP with your AI tool**


    ## Integrations


    - n8n: integrate with 600+ third-party apps

    - Zapier: integrate with 6000+ third-party apps

    - Make (formerly Integromat): integrate with 2000+ third-party apps

    - Integrately: integrate with 1200+ third-party apps

    - Google Sheets

    - Hubspot

    - Shopify

    - Zoho CRM

    - Salesforce

    - Microsoft Dynamics

    - Pipedrive

    - Bitrix24

    - Airtable

    - Notion

    - Nimble CRM

    - Monday.com


    ## Live API testing


    Explore the live API testing using real use cases with dozens of ready-to-use examples:


    - **Go to the API client live tester**


    - **Explore, test and debug the API using Postman graphical HTTP client**


    ### API examples


    Explore the many API use cases in the API tester ready-to-use code examples available in 15+ programming languages. > 🤩 🤖 **Ask the Wassenger AI Assistant to write code for you** 👉


    Find below each relevant API endpoint documentation with more ready-to-use code examples. ## How to use the API


    Search or browse the API endpoint by name or action to perform in the left bar. Then click on the API endpoint and browse the details of the request/response, including query or body required/optional parameters and possible valid responses.'
  x-traitTag: true
  x-logo:
    url: https://api.wassenger.com/v1/static/accounts/waplatform/fenix/logo.png
    backgroundColor: '#FFFFFF'
    altText: Wassenger
servers:
- url: https://api.wassenger.com/v1
tags:
- name: Integrations
paths:
  /install/vault:
    parameters: []
    get:
      summary: Vault
      description: 'Read the vault of the calling install: its host credentials and the version to write on top of.


        A revoked install reads the copy kept for 24 hours, and `null` once that copy is gone.'
      operationId: getInstallVault
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        default:
          description: Vault
          content:
            application/json:
              schema:
                type: object
    put:
      summary: Write vault
      description: 'Replace the vault of the calling install, writing on top of the version last read.


        A different version answers 409 `install:vault_conflict`: read again and write on top of what comes back. The vault takes at most 16 KB.'
      operationId: putInstallVault
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        '409':
          description: The vault changed since it was read
        default:
          description: Vault
          content:
            application/json:
              schema:
                type: object
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - version
              - data
              properties:
                version:
                  type: integer
                data:
                  type: object
        required: true
  /install/agents:
    parameters: []
    get:
      summary: Install agents
      description: List the account owner and the agents who can answer on the numbers of the calling install, with the numbers each one reaches.
      operationId: listInstallAgents
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        default:
          description: Agents
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
  /install:
    parameters: []
    get:
      summary: Install
      description: 'Read the CRM install the calling bridge or install token belongs to, with its numbers, scopes, events and webhook signing secrets.


        Requires a bridge key with the `X-Install-Id` header, or an install token. A regular API key has no install and receives a 403.'
      operationId: getInstall
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        '403':
          description: The token has no install, the install was revoked, or its token expired
        default:
          description: Install
          content:
            application/json:
              schema:
                type: object
    patch:
      summary: Update install
      description: 'Update the CRM install of the calling bridge: its external account id, host status, host metadata and activation.


        `hostInfo` merges by key and a key written as an empty string is removed. `status` only takes `active`, and only on a pending install.'
      operationId: patchInstall
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        '400':
          description: A field the install cannot write
        '409':
          description: The status change is not allowed, or the external account is taken
        default:
          description: Install
          content:
            application/json:
              schema:
                type: object
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                externalAccountId:
                  type: string
                hostStatus: {}
                hostInfo:
                  type: object
                status:
                  type: string
                  enum:
                  - active
        required: true
    delete:
      summary: Revoke install
      description: 'Revoke the CRM install of the calling token.


        A bridge sends `{ "reason": "bridge" }` or `{ "reason": "host_uninstalled" }` and keeps read access to the install and its vault for 24 hours. An install token sends no body and its access ends at once.'
      operationId: revokeInstall
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        '400':
          description: A reason the token cannot use, or a body where none is allowed
        default:
          description: Install
          content:
            application/json:
              schema:
                type: object
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
  /bridges/pending:
    parameters: []
    post:
      summary: Create pending connection
      description: 'Park the credentials of a connection that started in the host until the customer finishes it in the console.


        Requires a bridge key without the `X-Install-Id` header. `externalAccountId` is optional, because the host account may not exist yet: the bridge sets it with `PATCH /v1/install` once the install is created. The vault is stored encrypted and expires in 30 minutes.'
      operationId: createPending
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        '400':
          description: A body this route cannot serve
        '503':
          description: The vault store is not available right now
        default:
          description: The id of the pending connection
          content:
            application/json:
              schema:
                type: object
      requestBody:
        content:
          application/json:
            schema:
              type: object
  /bridges/installs:
    parameters: []
    get:
      summary: Bridge installs
      description: 'List the active CRM installs of the calling bridge, or find the one of a host account.


        Requires a bridge key without the `X-Install-Id` header. Pass `externalAccountId` to look one up, or `status=active` with `cursor` and `size` to page through them all.'
      operationId: listInstalls
      security:
      - apiKey: []
      tags:
      - Integrations
      parameters:
      - name: externalAccountId
        in: query
        required: false
        schema:
          type: string
      - name: status
        in: query
        required: false
        schema:
          type: string
      - name: cursor
        in: query
        required: false
        schema:
          type: string
      - name: size
        in: query
        required: false
        schema:
          type: string
      responses:
        '400':
          description: A query this route cannot serve
        '403':
          description: The token is not a bridge key, or carries an install
        default:
          description: Installs of the bridge
          content:
            application/json:
              schema:
                type: object
  /bridges/exchange:
    parameters: []
    post:
      summary: Exchange install code
      description: 'Exchange the one-time code of a console connection for the install behind it.


        Requires a bridge key without the `X-Install-Id` header. A code can be exchanged once: the second time it answers 409 `install:code_used`. `fromPending` says the install came from a pending connection started in the host, and `reconnect` that the customer reconnected an install that already existed.


        Pass as `origin` the Origin of the request the customer''s browser sent to the bridge. A code bound to the console that asked for it only goes with that origin: any other answers 403 `install:code_origin` and leaves the code unspent.'
      operationId: exchangeCode
      security:
      - apiKey: []
      tags:
      - Integrations
      responses:
        '400':
          description: A key the body cannot carry
        '401':
          description: The code does not exist, belongs to another bridge or expired
        '403':
          description: The install was revoked, or the code is bound to another console origin
        '409':
          description: The code was already exchanged
        default:
          description: The install of the code
          content:
            application/json:
              schema:
                type: object
      requestBody:
        content:
          application/json:
            schema:
              type: object
  /install/kv/{key}:
    parameters: []
    get:
      summary: Read install key
      description: 'Read a key of the key-value store of the calling install.


        Answers `{ value, expiresAt }`, or 404 `install:kv_not_found` when the key is not there or already expired.'
      operationId: getInstallKey
      security:
      - apiKey: []
      tags:
      - Integrations
      parameters:
      - name: key
        in: path
        required: true
        description: Key of the store, matching `^[A-Za-z0-9:._-]{1,128}$`.
        schema:
          type: string
      responses:
        '400':
          description: A key this store cannot serve
        '404':
          description: 'No such key: `install:kv_not_found`'
        default:
          description: The value and when it expires
          content:
            application/json:
              schema:
                type: object
    put:
      summary: Write install key
      description: 'Write a key of the key-value store of the calling install, with a time to live between 1 second and 7 days.


        There is no delete: a lock is released by writing it again with `ttlSec: 1`. `ifAbsent` writes only when the key is free and `ifValue` only when it holds that exact value; when the condition does not hold the answer is 409 `install:kv_conflict` with the live value in `meta.value`. An install holds 5000 live keys, keys of the reserved `rt:` prefix aside.'
      operationId: setInstallKey
      security:
      - apiKey: []
      tags:
      - Integrations
      parameters:
      - name: key
        in: path
        required: true
        description: Key of the store, matching `^[A-Za-z0-9:._-]{1,128}$`.
        schema:
          type: string
      responses:
        '400':
          description: A key, value or ttl this store cannot take
        '409':
          description: The condition did not hold, or the install is out of keys
        default:
          description: Written
          content:
            application/json:
              schema:
                type: object
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
  /bridges/kv/{key}:
    parameters: []
    get:
      summary: Read bridge key
      description: 'Read a key of the key-value store of the calling bridge.


        Answers `{ value, expiresAt }`, or 404 `install:kv_not_found` when the key is not there or already expired.'
      operationId: getBridgeKey
      security:
      - apiKey: []
      tags:
      - Integrations
      parameters:
      - name: key
        in: path
        required: true
        description: Key of the store, matching `^[A-Za-z0-9:._-]{1,128}$`.
        schema:
          type: string
      responses:
        '400':
          description: A key this store cannot serve
        '404':
          description: 'No such key: `install:kv_not_found`'
        default:
          description: The value and when it expires
          content:
            application/json:
              schema:
                type: object
    put:
      summary: Write bridge key
      description: 'Write a key of the key-value store of the calling bridge, with a time to live between 1 second and 7 days.


        Same rules as the install store: no delete, `ifAbsent` and `ifValue` as conditions, and 409 `install:kv_conflict` with the live value in `meta.value` when one does not hold. The reserved `rt:` prefix here only takes the schedule lock and the revoked marker.'
      operationId: setBridgeKey
      security:
      - apiKey: []
      tags:
      - Integrations
      parameters:
      - name: key
        in: path
        required: true
        description: Key of the store, matching `^[A-Za-z0-9:._-]{1,128}$`.
        schema:
          type: string
      responses:
        '400':
          description: A key, value or ttl this store cannot take
        '409':
          description: The condition did not hold
        default:
          description: Written
          content:
            application/json:
              schema:
                type: object
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
components:
  securitySchemes:
    apiKey:
      type: apiKey
      name: Token
      in: header
      description: 'User API key token needs to be used on every API request that requires authentication.




        You can define it via "token" URL query param or via "Token" HTTP request header.




        Get or create your API key from the [Web Console](https://console.wassenger.com/apikeys).




        **Note**: chat agents and supervisors have no access to the API.




        #### Example as request header:


        ```


        GET /v1/messages HTTP/1.1


        Host: api.wassenger.com:443


        Token: 5f2296349b12abf18c3e4a072cfceb47f51bde312477d048a0baf7cccf4af17861e28f80739d3a3f


        ```


        #### Example as URL query param:


        ```


        GET /v1/messages?token=5f2296349b12abf18c3e4a072cfceb47f51bde312477d048a0baf7cccf4af17861e28f80739d3a3f HTTP/1.1


        Host: api.wassenger.com:443


        ```'
    keypassToken:
      type: apiKey
      name: Authorization
      in: header
      description: Account-wide keypass token in the Authorization header (issued via the extension download).
externalDocs:
  description: Website
  url: https://app.wassenger.com
x-tagGroups:
- name: Messages (outbound)
  tags:
  - Messages
- name: Numbers Management
  tags:
  - Devices
  - Session
  - Groups
  - Channels
  - Queue
  - Settings
  - Profile
  - Contacts
  - Team Members
  - Departments
  - Labels
  - Automatic Replies
  - Automatic Assignment
  - Automatic Resolution
  - Quick Replies
  - Meeting Links
  - Business catalog
  - Billing
- name: Chat
  tags:
  - Chats
  - Chat Messages
  - Chat Contacts
  - Chat Files
  - User Status
  - Analytics
- name: Sales Funnel
  tags:
  - Pipeline
  - Deals
- name: Campaigns
  tags:
  - Campaigns
- name: WhatsApp Business API
  tags:
  - Templates
  - Templates Pricing
  - Catalog
  - Flows
- name: Files Storage
  tags:
  - Files
- name: Notifications
  tags:
  - Webhooks
- name: Utilities
  tags:
  - Verify
x-mcp:
  protocolVersion: '2025-11-25'
  capabilities:
    tools: {}
    prompts: {}
    logging: {}
    completions: {}
  servers:
  - url: https://api.wassenger.com/mcp
    description: 'MCP server (beta). Authenticate with an Authorization Bearer header holding your API key. Setup guide: /help/mcp'
x-express-openapi-disable-response-validation-middleware: true
x-express-openapi-additional-middleware:
- null
x-express-openapi-schema-extension:
  definitions:
    schema:
      properties:
        oneOf:
          type: array
          minItems: 1
          items: {}