Skip to content

    Arabic or English · ↑↓ to move · Enter to open · Esc to close

    العربية
    On this page

    Numbers

    Set the webhook of a number

    PUT/v2/numbers/{numberId}/webhook
    • Scope:webhooks:write
    • Idempotency-Key:optional
    • changes settings

    Public https URL only (private addresses refused). The signing secret is returned once.

    Parameters

    Path

    NameTypeConstraintsDescription
    numberIdrequiredTypestringConstraints—DescriptionNumber id (GET /v2/numbers).

    Headers

    NameTypeConstraintsDescription
    Idempotency-KeyoptionalTypestringConstraints≤ 191 charsDescriptionYour unique id for this operation (≤ 191 visible ASCII). A retry with the same key and body returns the first answer with Idempotent-Replayed: true — it never runs twice. Kept 24 h.
    X-Request-IdoptionalTypestringConstraints—DescriptionOptional: your own request id, echoed back (otherwise we generate req_…). Quote it to support.

    Body

    NameTypeConstraintsDescription
    urlrequiredTypestringConstraints—DescriptionPublic https:// URL on port 443 (or 80). Private / internal addresses are refused and redirects are never followed.
    eventsoptionalTypestring[]Constraints—DescriptionEvent types to receive. Omit (or null) for all events — new event types are then delivered automatically.
    versionoptionalTypeintegerConstraintsone of: 2default 2DescriptionWebhook payload version. Only 2 is accepted on v2.

    Request

    curl -X PUT "https://mursilat.com/api/v2/numbers/cm1abcd2345efgh6789ijkl/webhook" \
      -H "Authorization: Bearer $WASLA_API_KEY" \
      -H "Idempotency-Key: order-1042-confirm" \
      -H "Content-Type: application/json" \
      -d '{
      "url": "https://example.com/mursilat",
      "events": [
        "message.received",
        "message.status",
        "interactive.reply"
      ]
    }'
    Request — JSON
    {
      "url": "https://example.com/mursilat",
      "events": [
        "message.received",
        "message.status",
        "interactive.reply"
      ]
    }

    Response

    200Example

    200 — application/json
    {
      "url": "https://example.com/mursilat",
      "version": 2,
      "events": [
        "message.received",
        "message.status",
        "interactive.reply"
      ],
      "availableEvents": [
        "message.received",
        "message.status",
        "interactive.reply",
        "poll.vote",
        "contact.opted_out",
        "contact.opted_in",
        "session.status",
        "number.status",
        "number.restricted",
        "campaign.status",
        "otp.verified",
        "conversation.attributed"
      ],
      "secretConfigured": true,
      "disabledAt": null,
      "disabledReason": null,
      "secret": "whsec_…(shown once)"
    }

    Response schema

    Fields of the example answer. Expand objects and arrays.

    • responseobject8 fields
      • urlstring "https://example.com/mursilat"
      • versioninteger 2
      • eventsarray3 items
        • [0]string "message.received"
      • availableEventsarray12 items
        • [0]string "message.received"
      • secretConfiguredboolean true
      • disabledAtnull null
      • disabledReasonnull null
      • secretstring "whsec_…(shown once)"

    Errors

    Besides the authentication, rate-limit and validation errors every endpoint can return:

    Errors →

    Try it

    Send this request from your browser to the Mursilat API.

    documented example

    Preview — this copy of the docs isn’t on mursilat.com, so the console shows the documented example instead of calling the API.

    Real requests use your real number and plan: they can send WhatsApp messages, spend quota and delete data. (changes settings)

    Kept only in this tab’s memory: never saved, never put in the URL, sent only to mursilat.com. Reloading the page forgets it.

    Path parameters

    Send this request for real?

    This changes your account settings.

    PUT /v2/numbers/{numberId}/webhook