Every API here is available over the APIs.io API and to AI agents over MCP.
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: []