Insider One Gateway API (OAuth 2.0)

The OAuth 2.0 gateway: WhatsApp v2 transactional and conversational send, plus webhook settings registration. gw.useinsider.com is also the OAuth 2.0 authorization server for the whole Insider One platform, serving RFC 8414 and RFC 9728 discovery documents.

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/insider-one-gateway-api-oauth-20"
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

insider-gateway-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Insider One Gateway API (OAuth 2.0)
  version: 1.0.0
  description: 'OAuth 2.0-authenticated WhatsApp v2 endpoints served from the Insider One gateway: transactional
    and conversational message send, plus webhook settings.


    Derived by API Evangelist from Insider One''s own public Postman collection ("Insider One APIs", published at
    https://developers.insiderone.com/). Paths, methods, headers, query parameters and request/response examples
    are verbatim from that collection; nothing is invented. The 429 response is documented for all Insider One APIs
    on https://academy.insiderone.com/docs/api-rate-limits-1 .'
  contact:
    name: Insider One Support
    email: support@useinsider.com
    url: https://academy.insiderone.com/docs/insider-one-apis-1
  termsOfService: https://insiderone.com/terms-of-use/
externalDocs:
  description: Insider One API reference
  url: https://academy.insiderone.com/docs/api-reference-welcome
servers:
- url: https://gw.useinsider.com
tags:
- name: Conversational API
- name: Transactional API
paths:
  /api/wa/v2/conversational/messages/send:
    post:
      operationId: sendConversationalWhatsappMessagesWithOauth20
      summary: Send Conversational WhatsApp Messages with OAuth 2.0
      tags:
      - Conversational API
      description: "WhatsApp Transactional API v2 is a REST API that enables your systems to send conversational\
        \ messages through the WhatsApp Business Platform.\n\nTo send conversational WhatsApp messages using OAuth\
        \ 2.0, you must first generate an OAuth 2.0 credential. For step-by-step instructions, refer to OAuth 2.0\
        \ Credentials.\n\nBefore sending Conversational WhatsApp template messages, make sure you create your template\
        \ in InOne first. Refer to Create a WhatsApp Business Standard Template on InOne for step-by-step guidance.\n\
        \nRefer to the visual below for an example of how a conversational WhatsApp template message is displayed.\
        \  \n\nSample Request\nUse the request below to send conversational messages via WhatsApp. In addition to\
        \ templates, message types such as text and media can be sent.\n\n{\n  \"from\": \"+111111111\",\n  \"messages\"\
        : [\n    {\n      \"phone_number\": \"+1234567890\",\n      \"user_id\": \"user-uuid-123\",\n      \"message\"\
        : {\n        \"type\": \"text\",\n        \"text\": {\n          \"body\": \"Hello! How can I help you?\"\
        ,\n          \"preview_url\": false\n        }\n      }\n    }\n  ]\n}\n\nBody Parameters\nThis endpoint\
        \ shares the same parameters as the Transactional WhatsApp Messages with OAuth 2.0. The primary distinction\
        \ is that conversational message types, such as text, image, video, document, audio, location, and interactive,\
        \ are available for the message.type field.\n\nSample Responses\n200 OK\nThis code indicates that the request\
        \ has been completed.\n\n{\n    \"keys\": [\n        \"whatsapp-660e8400-e29b-41d4-a716-446655440001\"]\n\
        }\n\nError Codes\nThese endpoints return the same error codes as the Transactional WhatsApp Messages with\
        \ OAuth 2.0 (2001, 2002, 2003).\n\nCode\nHTTP Status\nDescription\n\n2001\n400\nThe request body could not\
        \ be decoded.\n\n2002\n400\nThe request body failed validation.\n\n2003\n400\nThe message could not be sent\
        \ due to a provider error or an internal system issue.\n\nMedia Operation Errors\n\nCode\nHTTP Status\n\
        Description\n\n2017\n400\nProvider not found or upload error\n\n2018\n400\nError retrieving media information\n\
        \n2019\n400\nMedia download error\n\nINVALID_FILE\n400\nInvalid file or file could not be read\n\nSystem\
        \ Errors\n\nHTTP Status\nDescription\n\n503 Service Unavailable\nThe system is currently in maintenance\
        \ mode"
      requestBody:
        content:
          application/json:
            example:
              from: '+111111111'
              messages:
              - phone_number: '+1234567890'
                user_id: user-uuid-123
                message:
                  type: text
                  text:
                    body: Hello! How can I help you?
                    preview_url: false
      responses:
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/wa/v2/conversational/settings:
    post:
      operationId: updateConversationalWhatsappWebhookSettingsWithOauth20
      summary: Update Conversational WhatsApp Webhook Settings with OAuth 2.0
      tags:
      - Conversational API
      description: "This endpoint helps you update the webhook URL and other relevant settings for conversational\
        \ messages.\n\nThe system supports two grant types for OAuth2 authentication:\n\ngrant_type: client_credentials\n\
        \ngrant_type: refresh_token\n\nClient Credentials Request\ncurl -X POST \"https://gw.useinsider.com/api/wa/v2/conversational/settings\"\
        \ \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer your_access_token\" \\\n\
        \  -d '{\n    \"webhook_url\": \"https://partner.example.com/webhooks/conversational\",\n    \"from\": \"\
        +1234567890\",\n    \"auth_type\": \"oauth2\",\n    \"oauth2\": {\n      \"grant_type\": \"client_credentials\"\
        ,\n      \"token_url\": \"https://oauth.partner.com/oauth/token\",\n      \"client_id\": \"your_client_id\"\
        ,\n      \"client_secret\": \"your_client_secret\",\n      \"scopes\": [\n        \"webhook.write\"\n  \
        \    ],\n      \"expires_in\": 3600\n    }\n  }'\n\nRefresh Token Request\ncurl -X POST \"https://gw.useinsider.com/api/wa/v2/conversational/settings\"\
        \ \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer your_access_token\" \\\n\
        \  -d '{\n    \"webhook_url\": \"https://partner.example.com/webhooks/conversational\",\n    \"from\": \"\
        +1234567890\",\n    \"auth_type\": \"oauth2\",\n    \"oauth2\": {\n      \"grant_type\": \"refresh_token\"\
        ,\n      \"token_url\": \"https://oauth.partner.com/oauth/token\",\n      \"client_id\": \"your_client_id\"\
        ,\n      \"client_secret\": \"your_client_secret\",\n      \"refresh_token\": \"your_refresh_token\",\n\
        \      \"scopes\": [\n        \"webhook.write\"\n      ],\n      \"expires_in\": 3600\n    }\n  }'\n\nError\
        \ Codes\n\nCode\nHTTP Status\nDescription\n\n2010\n400\nThe settings request body could not be decoded.\n\
        \n2011\n400\nThe settings request body failed validation.\n\n2012\n400\nAn error occurred while saving the\
        \ settings.\n\n2020\n400\nThe webhook URL failed validation."
      responses:
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/wa/v2/transactional/messages/send:
    post:
      operationId: sendTransactionalWhatsappMessagesWithOauth20
      summary: Send Transactional WhatsApp Messages with OAuth 2.0
      tags:
      - Transactional API
      description: "WhatsApp Transactional API v2 is a REST API that enables your systems to send transactional\
        \ messages through the WhatsApp Business Platform.\n\nNote: To send transactional WhatsApp messages using\
        \ OAuth 2.0, you must first generate an OAuth 2.0 credential. For step-by-step instructions, refer to OAuth\
        \ 2.0 Credentials.\n\nNote: Before sending Transactional WhatsApp template messages, make sure you create\
        \ your template in InOne first. Refer to Create a WhatsApp Business Standard Template on InOne for step-by-step\
        \ guidance.\n\nRefer to the visual below for an example of how a transactional WhatsApp template message\
        \ is displayed.\n\nSample Request\n{\n    \"from\": \"+905551234567\",\n    \"messages\": [{\n        \"\
        phone_number\": \"+905559876543\",\n        \"user_id\": \"user-uuid-123\",\n        \"message\": {\n  \
        \          \"type\": \"template\",\n            \"template\": {\n                \"name\": \"welcome_message\"\
        ,\n                \"language\": {\n                    \"code\": \"tr\"\n                },\n         \
        \       \"components\": [{\n                    \"type\": \"body\",\n                    \"parameters\"\
        : [{\n                        \"type\": \"text\",\n                        \"text\": \"Ahmet\"\n       \
        \             }]\n                }]\n            }\n        }\n    }]\n}\n\nMain Body Parameters\n\nParameter\n\
        Type\nRequired\nDescription\n\nfrom\nstring\nYes\nSender’s WhatsApp phone number (in E.164 format)\n\nmessages\n\
        array\nYes\nList of messages to be sent (minimum 1 message)\n\nurl_shortener_config\nobject\nNo\nURL shortening\
        \ settings\n\nurl_shortener_config.status\nboolean\nNo\nEnable/disable URL shortening\n\nurl_shortener_config.domain\n\
        string\nNo\nDomain name for shortening\n\nunique_args\nobject\nNo\nCustom parameters (key–value map)\n\n\
        remove_tracking_params\nboolean\nNo\nRemove tracking parameters\n\nMessages Array Parameters\nEach element\
        \ in the messages array contains:\n\nParameter\nType\nRequired\nDescription\n\nphone_number\nstring\nYes\n\
        The recipient's phone number in international E.164 format (e.g., +905551234567).\n\nuser_id\nstring\nNo\n\
        A unique identifier for the user within the partner's system, used for cross-platform tracking.\n\nmessage\n\
        object\nYes\nThe core payload containing the message content (see Message Object details below).\n\nreply_type\n\
        string\nNo\nDefines the automated response category. Values: first, second, third, other.\n\nunique_args\n\
        object\nNo\nA key–value map for passing custom metadata specific to this individual message.\n\nMessage\
        \ Object Structure\n\nParameter\nType\nRequired\nDescription\n\ntype\nstring\nYes\nMessage type: template,\
        \ text, image, video, document, audio, location, sticker, interactive.\n\ntemplate\nobject\nConditional\n\
        Template message (required if type=template).\n\ntext\nobject\nConditional\nText message (required if type=text).\n\
        \n...\n...\n...\nOther media types follow the same logic.\n\ncontext\nobject\nNo\nInformation about the\
        \ message being replied to (reply-to message).\n\nTemplate Messages\nUsed to send template messages. Templates\
        \ must be pre-created and approved in the Meta Business Manager.\n\nParameter\nType\nRequired\nDescription\n\
        \nname\nstring\nYes\nTemplate name (must be defined in Meta).\n\nlanguage\nobject\nYes\nTemplate language\
        \ settings.\n\nlanguage.code\nstring\nYes\nLanguage code (ISO 639-1, e.g., tr, en, ar).\n\nlanguage.policy\n\
        string\nNo\nLanguage policy: deterministic (default) or fallback.\n\ncomponents\narray\nNo\nTemplate components\
        \ (for parameters).\n\nComponent Types\nTemplates can include the following component types:\n\nHeader Component\n\
        The header component corresponds to the template's header section.\n\n{\n    \"type\": \"header\",\n   \
        \ \"parameters\": [{\n        \"type\": \"text\",\n        \"text\": \"Değişken başlık değeri\"\n    }]\n\
        } \n\nTo use a media header, you can use the request below.\n\n{\n    \"type\": \"header\",\n    \"parameters\"\
        : [{\n        \"type\": \"image\",\n        \"image\": {\n            \"link\": \"https://example.com/image.jpg\"\
        \n        }\n    }]\n}\n\nHeader parameter types can be text, image, video and document. \n\nBody Component\n\
        Body component is the main text section of the template.\n\n{\n    \"type\": \"body\",\n    \"parameters\"\
        : [{\n        \"type\": \"text\",\n        \"text\": \"Ahmet Yılmaz\"\n    }, {\n        \"type\": \"text\"\
        ,\n        \"text\": \"12345\"\n    }]\n}\n\nButton Component\nThe main text section of the template.\n\n\
        {\n    \"type\": \"button\",\n    \"sub_type\": \"url\",\n    \"index\": \"0\",\n    \"parameters\": [{\n\
        \        \"type\": \"text\",\n        \"text\": \"PROMO2024\"\n    }]\n}\n\nTo add buttons to the template,\
        \ use the request below.\n\n{\n    \"type\": \"button\",\n    \"sub_type\": \"url\",\n    \"index\": \"\
        0\",\n    \"parameters\": [{\n        \"type\": \"text\",\n        \"text\": \"PROMO2024\"\n    }]\n}\n\n\
        To add CTA (Call-to-Action) links to your template, use the request below.\n\n{\n    \"type\": \"button\"\
        ,\n    \"sub_type\": \"url\",\n    \"index\": \"0\",\n    \"parameters\": [{\n        \"type\": \"text\"\
        ,\n        \"cta_link\": \"?code=SUMMER2024\"\n    }]\n}\n\nButton sub_types are url and quick_reply. \n\
        \nCarousel Component\nCarousel template (product catalog cards).\n\n{\n  \"type\": \"carousel\",\n  \"cards\"\
        : [\n    {\n      \"card_index\": 0,\n      \"components\": [\n        {\n          \"type\": \"header\"\
        ,\n          \"parameters\": [\n            {\n              \"type\": \"image\",\n              \"image\"\
        : {\n                \"link\": \"https://example.com/product1.jpg\"\n              }\n            }\n  \
        \        ]\n        },\n        {\n          \"type\": \"body\",\n          \"parameters\": [\n        \
        \    {\n              \"type\": \"text\",\n              \"text\": \"Ürün 1 Adı\"\n            },\n    \
        \        {\n              \"type\": \"text\",\n              \"text\": \"999.99 TL\"\n            }\n  \
        \        ]\n        },\n        {\n          \"type\": \"button\",\n          \"sub_type\": \"url\",\n \
        \         \"index\": \"0\",\n          \"parameters\": [\n            {\n              \"type\": \"text\"\
        ,\n              \"text\": \"product-1-slug\"\n            }\n          ]\n        }\n      ]\n    },\n\
        \    {\n      \"card_index\": 1,\n      \"components\": [\n        {\n          \"type\": \"header\",\n\
        \          \"parameters\": [\n            {\n              \"type\": \"image\",\n              \"image\"\
        : {\n                \"link\": \"https://example.com/product2.jpg\"\n              }\n            }\n  \
        \        ]\n        },\n        {\n          \"type\": \"body\",\n          \"parameters\": [\n        \
        \    {\n              \"type\": \"text\",\n              \"text\": \"Ürün 2 Adı\"\n            },\n    \
        \        {\n              \"type\": \"text\",\n              \"text\": \"1299.99 TL\"\n            }\n \
        \         ]\n        }\n      ]\n    }\n  ]\n}\n\nCarousel template can contain a maximum of 10 cards (card_index:\
        \ 0-9). \n\nLimited Time Offer (LTO) Component\n{\n  \"type\": \"limited_time_offer\",\n  \"parameters\"\
        : [\n    {\n      \"type\": \"limited_time_offer\",\n      \"limited_time_offer\": {\n        \"expiration_time_ms\"\
        : 1640000000000\n      }\n    }\n  ]\n}\n\nCoupon Code Component\n{\n  \"type\": \"button\",\n  \"sub_type\"\
        : \"copy_code\",\n  \"index\": \"0\",\n  \"parameters\": [\n    {\n      \"type\": \"coupon_code\",\n  \
        \    \"coupon_code\": \"SUMMER2024\"\n    }\n  ]\n}\n\nFlow Button Component (For WhatsApp Flows)\n{\n \
        \ \"type\": \"button\",\n  \"sub_type\": \"flow\",\n  \"index\": \"0\",\n  \"parameters\": [\n    {\n  \
        \    \"type\": \"action\",\n      \"action\": {\n        \"flow_token\": \"unique-flow-token\",\n      \
        \  \"flow_action_data\": {\n          \"user_id\": \"12345\",\n          \"product_id\": \"SKU-123\"\n \
        \       }\n      }\n    }\n  ]\n}\n\nText Message\nUsed to send plain text messages (typically for conversational\
        \ use).\n\nParameters\n\nParameter\nType\nRequired\nDescription\n\nbody\nstring\nYes\nMessage text (maximum\
        \ 4096 characters).\n\npreview_url\nboolean\nNo\nDisplay URL preview (default: false).\n\n{\n  \"type\"\
        : \"text\",\n  \"text\": {\n    \"body\": \"Merhaba! Siparişiniz hazırlanıyor.\",\n    \"preview_url\":\
        \ false\n  }\n}\n\nImage Message\nUsed to send images.\n\nImage Object\n\nParameter\nType\nRequired\nDescription\n\
        \nlink\nstring\nConditional\nImage URL (HTTP/HTTPS, mandatory if id is missing).\n\nid\nstring\nConditional\n\
        Uploaded media ID (mandatory if link is missing).\n\ncaption\nstring\nNo\nImage caption (maximum 1024 characters).\n\
        \nImage Message with Link\n{\n  \"type\": \"image\",\n  \"image\": {\n    \"link\": \"https://example.com/image.jpg\"\
        ,\n    \"caption\": \"Product Image\"\n  }\n}\n\nImage Message with Media ID\n{\n  \"type\": \"image\",\n\
        \  \"image\": {\n    \"id\": \"1234567890\",\n    \"caption\": \"Uploaded Image\"\n  }\n}\n\nSupported formats\
        \ for image messages are JPEG, PNG. The maximum size is 5 MB. \n\nVideo Message\nUsed to send videos.\n\n\
        Parameter\nType\nRequired\nDescription\n\nlink\nstring\nConditional\nVideo URL (HTTP/HTTPS, mandatory if\
        \ id is missing).\n\nid\nstring\nConditional\nUploaded media ID (mandatory if link is missing).\n\ncaption\n\
        string\nNo\nVideo caption (maximum 1024 characters).\n\n{\n  \"type\": \"video\",\n  \"video\": {\n    \"\
        link\": \"https://example.com/video.mp4\",\n    \"caption\": \"Product video\"\n  }\n}\n\nSupported formats\
        \ for video messages are MP4 and 3GPP. The maximum size is 16 MB. \n\nDocument Message\nUsed to send documents/files.\n\
        \nParameter\nType\nRequired\nDescription\n\nlink\nstring\nConditional\nDocument URL (HTTP/HTTPS, mandatory\
        \ if id is missing).\n\nid\nstring\nConditional\nUploaded media ID (mandatory if link is missing).\n\nfilename\n\
        string\nNo\nFilename (to be displayed).\n\ncaption\nstring\nNo\nDocument caption (maximum 1024 characters).\n\
        \n{\n  \"type\": \"document\",\n  \"document\": {\n    \"link\": \"https://example.com/invoice.pdf\",\n\
        \    \"filename\": \"Fatura-12345.pdf\",\n    \"caption\": \"Sipariş faturanız\"\n  }\n}\n\nSupported formats\
        \ for document messages are PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT and CSV. The maximum size is 100 MB.\
        \ \n\nAudio Message\nUsed to send audio files.\n\nParameter\nType\nRequired\nDescription\n\nlink\nstring\n\
        Conditional\nAudio URL (HTTP/HTTPS, mandatory if id is missing).\n\nid\nstring\nConditional\nUploaded media\
        \ ID (mandatory if link is missing).\n\n{\n  \"type\": \"audio\",\n  \"audio\": {\n    \"link\": \"https://example.com/audio.mp3\"\
        \n  }\n}\n\nSupported formats for audio messages are AAC, M4A, AMR, MP3 and OGG OPUS. The maximum size is\
        \ 16 MB. \n\nLocation Message\nUsed to send location/map coordinates.\n\nLocation Object\n\nParameter\n\
        Type\nRequired\nDescription\n\nlatitude\nstring\nYes\nLatitude coordinate.\n\nlongitude\nstring\nYes\nLongitude\
        \ coordinate.\n\nname\nstring\nNo\nLocation name.\n\naddress\nstring\nNo\nLocation address.\n\n{\n  \"type\"\
        : \"location\",\n  \"location\": {\n    \"latitude\": \"41.0082\",\n    \"longitude\": \"28.9784\",\n  \
        \  \"name\": \"İstanbul\",\n    \"address\": \"İstanbul, Türkiye\"\n  }\n}\n\nSticker Message\nUsed to send\
        \ stickers.\n\nParameter\nType\nRequired\nDescription\n\nlink\nstring\nConditional\nSticker URL (HTTP/HTTPS,\
        \ mandatory if id is missing).\n\nid\nstring\nConditional\nUploaded media ID (mandatory if link is missing).\n\
        \n{\n  \"type\": \"sticker\",\n  \"sticker\": {\n    \"link\": \"https://example.com/sticker.webp\"\n  }\n\
        }\n\nSupported format for sticker messages is WebP (static or animated) The maximum size is 100 KB (static),\
        \ 500 KB (animated). \n\nInteractive Message\nUsed to send interactive messages (buttons, lists, products,\
        \ flows).\n\nParameter\nType\nRequired\nDescription\n\ntype\nstring\nYes\nInteractive type: button, list,\
        \ product, product_list, flow, catalog_message, cta_url.\n\nheader\nobject\nNo\nMessage header.\n\nbody\n\
        object\nYes\nMessage main body.\n\nbody.text\nstring\nYes\nMessage text (maximum 1024 characters).\n\nfooter\n\
        object\nNo\nMessage footer.\n\nfooter.text\nstring\nYes\nFooter text (maximum 60 characters).\n\naction\n\
        object\nYes\nInteractive action definition.\n\nInteractive Header\n{\n  \"header\": {\n    \"type\": \"\
        text\",\n    \"text\": \"Başlık metni\"\n  }\n}\n\nMedia Header\n{\n  \"header\": {\n    \"type\": \"image\"\
        ,\n    \"image\": {\n      \"link\": \"https://example.com/header.jpg\"\n    }\n  }\n}\n\nHeader types can\
        \ be text, image, video, document. \n\nInteractive Action Types\n\nButton Action - Reply buttons (maximum\
        \ 3 buttons)\n\n{\n  \"action\": {\n    \"buttons\": [\n      {\n        \"type\": \"reply\",\n        \"\
        reply\": {\n          \"id\": \"btn_yes\",\n          \"title\": \"Evet\"\n        }\n      },\n      {\n\
        \        \"type\": \"reply\",\n        \"reply\": {\n          \"id\": \"btn_no\",\n          \"title\"\
        : \"Hayır\"\n        }\n      }\n    ]\n  }\n}\n\nButton title can be a maximum 20 characters. \n\nList\
        \ Action - Selection list (maximum 10 rows)\n\n{\n  \"action\": {\n    \"button\": \"Seçenekleri Gör\",\n\
        \    \"sections\": [\n      {\n        \"title\": \"Kategori 1\",\n        \"rows\": [\n          {\n  \
        \          \"id\": \"row_1\",\n            \"title\": \"Seçenek 1\",\n            \"description\": \"Seçenek\
        \ açıklaması\"\n          },\n          {\n            \"id\": \"row_2\",\n            \"title\": \"Seçenek\
        \ 2\",\n            \"description\": \"Diğer seçenek\"\n          }\n        ]\n      }\n    ]\n  }\n}\n\
        \nProduct Action - Single product display\n\n{\n  \"action\": {\n    \"catalog_id\": \"123456789\",\n  \
        \  \"product_retailer_id\": \"SKU-12345\"\n  }\n}\n\n{ \"action\": { \"catalog_id\": \"123456789\", \"sections\"\
        : [ { \"title\": \"Öne Çıkan Ürünler\", \"product_items\": [ { \"product_retailer_id\": \"SKU-001\" }, {\
        \ \"product_retailer_id\": \"SKU-002\" } ] } ] }}JSONCopy\n\n{ \"action\": { \"name\": \"flow\", \"parameters\"\
        : { \"flow_message_version\": \"3\", \"flow_token\": \"unique-token\", \"flow_id\": \"123456789\", \"flow_cta\"\
        : \"Form Doldur\", \"flow_action\": \"navigate\", \"flow_action_payload\": { \"screen\": \"FORM_SCREEN\"\
        , \"data\": { \"user_id\": \"12345\" } } } }}JSONCopy\n\n{ \"action\": { \"name\": \"cta_url\", \"parameters\"\
        : { \"display_text\": \"Web Siteyi Ziyaret Et\", \"url\": \"https://example.com\" } }}JSONCopy\n\n{ \"action\"\
        : { \"name\": \"catalog_message\", \"parameters\": { \"thumbnail_product_retailer_id\": \"SKU-FEATURED\"\
        \ } }}JSONCopy\n\n{ \"action\": { \"cards\": [ { \"card_index\": 0, \"type\": \"carousel\", \"header\":\
        \ { \"type\": \"image\", \"image\": { \"link\": \"https://example.com/product1.jpg\" } }, \"body\": { \"\
        text\": \"Ürün 1 - 999 TL\" }, \"action\": { \"name\": \"cta_url\", \"parameters\": { \"display_text\":\
        \ \"Satın Al\", \"url\": \"https://example.com/product/1\" } } } ] }}JSONCopy\n\nContext Object\nUsed to\
        \ reply to a specific message.\n\nParameter\nType\nRequired\nDescription\n\nlink\nstring\nConditional\n\
        Sticker URL (HTTP/HTTPS, mandatory if id is missing).\n\nid\nstring\nConditional\nUploaded media ID (mandatory\
        \ if link is missing).\n\n{\n  \"type\": \"text\",\n  \"context\": {\n    \"message_id\": \"wamid.HBgLOTA5NTU1MTIzNDU2NxUCABIYIDNBMzQwRjg2...\"\
        \n  },\n  \"text\": {\n    \"body\": \"Teşekkür ederiz!\"\n  }\n}\n\nSample Responses\nResponse Parameters\n\
        \nParameter\nType\nDescription\n\nkeys\narray\nUnique keys generated for each message. Used in webhook callbacks.\n\
        \n200 OK - Success Response\n{\n  \"keys\": [\n    \"whatsapp-550e8400-e29b-41d4-a716-446655440000\"\n \
        \ ]\n}\n\n400 Bad Request\n{\n  \"message\": \"Failed to validate request.\",\n  \"error\": {\n    \"message\"\
        : \"Failed to validate request.\",\n    \"code\": \"2001\"\n  }\n}\n\n400 Bad Request - Validation\n{\n\
        \  \"message\": \"Failed to validate request.\",\n  \"error\": {\n    \"message\": \"Failed to validate\
        \ request.\",\n    \"code\": \"2002\"\n  }\n}\n\n400 Bad Request - Send Failed\n{\n  \"message\": \"Message\
        \ could not be sent.\",\n  \"detail\": \"There is no active provider.\",\n  \"error\": {\n    \"message\"\
        : \"Message could not be sent.\",\n    \"code\": \"2003\"\n  }\n}\n\nError Codes\n\nCode\nHTTP Status\n\
        Description\n\n2001\n400\nThe request body could not be decoded.\n\n2002\n400\nThe request body failed validation.\n\
        \n2003\n400\nThe message could not be sent due to a provider error or an internal system issue.\n\nMedia\
        \ Operation Errors\n\nCode\nHTTP Status\nDescription\n\n2017\n400\nProvider not found or upload error\n\n\
        2018\n400\nError retrieving media information\n\n2019\n400\nMedia download error\n\nINVALID_FILE\n400\n\
        Invalid file or file could not be read\n\nSystem Errors\n\nHTTP Status\nDescription\n\n503 Service Unavailable\n\
        The system is currently in maintenance mode"
      requestBody:
        content:
          application/json:
            example:
              from: '+901212121212'
              messages:
              - phone_number: '+901111111111'
                user_id: user-uuid-123
                message:
                  type: template
                  template:
                    name: welcome_message
                    language:
                      code: tr
                    components:
                    - type: body
                      parameters:
                      - type: text
                        text: Ahmet
      responses:
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/wa/v2/transactional/settings:
    post:
      operationId: updateTransactionalWhatsappWebhookSettingsWithOauth20
      summary: Update Transactional WhatsApp Webhook Settings with OAuth 2.0
      tags:
      - Transactional API
      description: "You can use this API to update webhooks and other settings for transactional WhatsApp messages.\n\
        \n<p >The system supports two grant types for OAuth2 authentication:</p> \n\nclient_credentials\n\nrefresh_token\n\
        \nClient Credentials Request\ncurl -X POST \"https://gw.useinsider.com/api/wa/v2/transactional/settings\"\
        \ \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer your_access_token\" \\\n\
        \  -d '{\n    \"webhook_url\": \"https://partner.example.com/webhooks/transactional\",\n    \"from\": \"\
        +1234567890\",\n    \"auth_type\": \"oauth2\",\n    \"oauth2\": {\n      \"grant_type\": \"client_credentials\"\
        ,\n      \"token_url\": \"https://oauth.partner.com/oauth/token\",\n      \"client_id\": \"your_client_id\"\
        ,\n      \"client_secret\": \"your_client_secret\",\n      \"scopes\": [\n        \"webhook.write\"\n  \
        \    ],\n      \"expires_in\": 3600\n    }\n  }'\n\nRefresh Token Request\ncurl -X POST \"https://gw.useinsider.com/api/wa/v2/transactional/settings\"\
        \ \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer your_access_token\" \\\n\
        \  -d '{\n    \"webhook_url\": \"https://partner.example.com/webhooks/transactional\",\n    \"from\": \"\
        +1234567890\",\n    \"auth_type\": \"oauth2\",\n    \"oauth2\": {\n      \"grant_type\": \"refresh_token\"\
        ,\n      \"token_url\": \"https://oauth.partner.com/oauth/token\",\n      \"client_id\": \"your_client_id\"\
        ,\n      \"client_secret\": \"your_client_secret\",\n      \"refresh_token\": \"your_refresh_token\",\n\
        \      \"scopes\": [\n        \"webhook.write\"\n      ],\n      \"expires_in\": 3600\n    }\n  }'\n\nError\
        \ Codes\n\nCode\nHTTP Status\nDescription\n\n2010\n400\nThe settings request body could not be decoded.\n\
        \n2011\n400\nThe settings request body failed validation.\n\n2012\n400\nAn error occurred while saving the\
        \ settings.\n\n2020\n400\nThe webhook URL failed validation."
      responses:
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  securitySchemes:
    OAuth2:
      type: oauth2
      description: OAuth 2.0. Client ID / Client Secret are generated in the InOne panel under Settings > InOne
        Settings > Integration Settings > OAuth 2.0 Credentials, with per-channel scopes selected at generation
        time. Endpoint metadata read live from https://gw.useinsider.com/.well-known/oauth-authorization-server
        (RFC 8414).
      flows:
        clientCredentials:
          tokenUrl: https://gw.useinsider.com/oauth2/token
          scopes: {}
        authorizationCode:
          authorizationUrl: https://gw.useinsider.com/oauth2/authorize
          tokenUrl: https://gw.useinsider.com/oauth2/token
          refreshUrl: https://gw.useinsider.com/oauth2/token
          scopes: {}
      x-pkce:
      - S256
      x-revocation-endpoint: https://gw.useinsider.com/oauth2/revoke
      x-discovery: well-known/insider-gw-oauth-authorization-server.json
  responses:
    TooManyRequests:
      description: Too Many Requests. The published per-endpoint rate limit was exceeded; back off and retry, honouring
        Retry-After when present.
      content:
        application/json:
          example:
            message: Too Many Requests
            status: 429
x-provenance:
  generated: '2026-08-13'
  method: derived
  source: postman/insider-one-apis.postman_collection.json
  source_url: https://documenter.gw.postman.com/api/collections/24851117/2sB3dSR9bM
  publisher_page: https://developers.insiderone.com/
  note: Insider One publishes a single public Postman collection covering every REST API. This document is the subset
    of that collection served from gw.useinsider.com.
security:
- OAuth2: []