Legacy Cloud API

Messages

Send free-form Cloud session messages via POST /inbox/send-message (text, media, location, interactive, commerce) inside the customer care window.

24-hour window Outside the Cloud customer care window use POST /inbox/send-template-message instead. Decision table: Session Window vs Templates.
POST /inbox/send-message messages:send https://staging-mobile.washeej.com/external-api/inbox/send-message

Send a free-form Cloud session message (text, media, location, interactive, commerce).

Parameter Type Required Description
mobile_code string required Dial code without +.
mobile string required National number.
message string optional Text body or media caption (required unless media/interactive/location/product).
whatsapp_account_id integer optional Cloud account ID (preferred in multi-number accounts).
from_number string optional Alternative channel selector (digits only).
image file optional Image upload (multipart).
document file optional Document upload (multipart).
video file optional Video upload (multipart).
audio file optional Audio upload (multipart).
latitude number optional Location latitude (with longitude).
longitude number optional Location longitude (with latitude).
name string optional Optional location title.
address string optional Optional location address.
cta_url_id integer optional Dashboard CTA URL asset ID.
interactive_list_id integer optional Dashboard interactive list ID.
product json optional Commerce product payload.
created_order_data json optional Commerce order payload.
cURL
curl -X POST https://staging-mobile.washeej.com/external-api/inbox/send-message \
  -H "client-id: YOUR_CLIENT_ID" \
  -H "client-secret: YOUR_CLIENT_SECRET" \
  -H "Content-Type: multipart/form-data" \
  -F "mobile_code=966" \
  -F "mobile=500000000" \
  -F "whatsapp_account_id=YOUR_CLOUD_ACCOUNT_ID" \
  -F "message=Your invoice is attached" \
  -F "document=@/path/to/INV-1001.pdf;type=application/pdf"
Notes
  • Optional Idempotency-Key header (1-128 chars): a retry with the same key and the same request returns the first response (header Idempotent-Replayed: true) and sends nothing again; the same key with a different request returns 409 idempotency_conflict, a key still being processed 409 idempotency_in_flight. Keys are kept 24 h per account and credential. Without the header the call behaves as before.
  • Requires IP whitelist.
  • Outside the 24h window use POST /inbox/send-template-message.
  • Session media on Cloud External API: multipart file fields only. Session *_url fields are not implemented on this surface.
  • For native PDF/image bubbles outside the session window use templates with header_media_url.
  • CTA / lists / product require Cloud + open session.
  • Prefer whatsapp_account_id or exact from_number (mismatched from_number returns sender_not_found).
API v1 equivalent Prefer POST /v1/messages for new integrations. Open API v1 docs →

Scenario — session PDF (multipart upload)

Session media on this surface is multipart only; document_url / image_url are not supported. To send a file by URL, use a DOCUMENT template with header_media_url.

cURL
curl -X POST "https://staging-mobile.washeej.com/external-api/inbox/send-message" \
  -H "client-id: YOUR_CLIENT_ID" \
  -H "client-secret: YOUR_CLIENT_SECRET" \
  -F "mobile_code=966" \
  -F "mobile=500000000" \
  -F "whatsapp_account_id=YOUR_CLOUD_ACCOUNT_ID" \
  -F "message=Your invoice is attached" \
  -F "document=@/path/to/INV-1001.pdf;type=application/pdf"

Scenario — CTA / interactive list

Create CTA URL / list assets in the dashboard, then send by ID (Cloud only, open session):

CTA URL
curl -X POST "https://staging-mobile.washeej.com/external-api/inbox/send-message" \
  -H "client-id: YOUR_CLIENT_ID" \
  -H "client-secret: YOUR_CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "mobile_code": "966",
    "mobile": "500000000",
    "whatsapp_account_id": YOUR_CLOUD_ACCOUNT_ID,
    "cta_url_id": YOUR_CTA_ID
  }'
Interactive list
curl -X POST "https://staging-mobile.washeej.com/external-api/inbox/send-message" \
  -H "client-id: YOUR_CLIENT_ID" \
  -H "client-secret: YOUR_CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "mobile_code": "966",
    "mobile": "500000000",
    "whatsapp_account_id": YOUR_CLOUD_ACCOUNT_ID,
    "interactive_list_id": YOUR_LIST_ID
  }'

Scenario — location

cURL
curl -X POST "https://staging-mobile.washeej.com/external-api/inbox/send-message" \
  -H "client-id: YOUR_CLIENT_ID" \
  -H "client-secret: YOUR_CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "mobile_code": "966",
    "mobile": "500000000",
    "whatsapp_account_id": YOUR_CLOUD_ACCOUNT_ID,
    "latitude": 24.7136,
    "longitude": 46.6753,
    "name": "Riyadh Branch",
    "address": "Olaya St"
  }'

Channel selection

Prefer whatsapp_account_id; alternatively from_number (digits only). Details: Channel Selection.