---
title: "WhatsApp API Endpoints — base URL, auth and every route"
description: "The WAME WhatsApp API uses https://us.api-wa.me with the pattern /{key}/... where {key} is your instance key and doubles as authentication — no auth header. Endpoints group into instance, messages, groups, contacts and webhooks. Full list with curl examples."
url: "https://api-wa.me/en/blog/whatsapp-api-endpoints"
language: "en"
og:type: "article"
og:site_name: "WAME API"
---

[Home](https://api-wa.me/en)/[WhatsApp API Blog](https://api-wa.me/en/blog)/WhatsApp API endpoints: the reference you can hold in your head

Raphael Serafim· Published on September 12, 2026· 6 min read

Share

# WhatsApp API endpoints: the reference you can hold in your head

The WAME WhatsApp API uses https://us.api-wa.me with the pattern /{key}/... where {key} is your instance key and doubles as authentication — no auth header. Endpoints group into instance, messages, groups, contacts and webhooks. Full list with curl examples.

Copy for LLM[View as Markdown](https://api-wa.me/en/blog/whatsapp-api-endpoints.md)

**Base URL `https://us.api-wa.me`, pattern `/{key}/...`, where `{key}` is your instance key and also your authentication — there is no auth header to set.** From there the surface splits into five groups: instance, messages, groups, contacts and webhooks.

That is genuinely the whole mental model. This page lists the routes so you can skim them in one sitting; the exhaustive parameter-by-parameter reference lives in [/docs](https://api-wa.me/en/docs).

## Ground rules

- **Base URL:** `https://us.api-wa.me`
- **Auth:** the instance `key` sits in the path — `https://us.api-wa.me/YOUR_KEY/...`. No header.
- **Format:** JSON request bodies; phone numbers in international format, digits only.

Because the key _is_ the credential, the full URL is a secret. Keep it server-side, out of logs, and out of screenshots.

## Instance and connection

| Method | Endpoint | What it does |
| --- | --- | --- |
| `GET` | `/{key}/instance` | Connection status and QR code |
| `POST` | `/{key}/instance` | Connect (generates the QR code) |
| `POST` | `/{key}/instance/pairing-code` | Connect by pairing code instead |
| `PUT` | `/{key}/instance` | Configure webhooks |
| `PATCH` | `/{key}/instance` | Settings: auto-read, store media, and so on |
| `DELETE` | `/{key}/instance` | Disconnect (logout) |

## Sending messages

| Method | Endpoint | Type |
| --- | --- | --- |
| `POST` | `/{key}/message/text` | Text |
| `POST` | `/{key}/message/image` | Image |
| `POST` | `/{key}/message/video` | Video |
| `POST` | `/{key}/message/audio` | Audio |
| `POST` | `/{key}/message/document` | Document |
| `POST` | `/{key}/message/location` | Location |
| `POST` | `/{key}/message/contact` | Contact card |
| `POST` | `/{key}/message/button_reply` | Quick reply buttons |
| `POST` | `/{key}/message/button_action` | Action buttons (open URL / call / copy code) |
| `POST` | `/{key}/message/list` | List menu |
| `POST` | `/{key}/message/pix` | Pix payment (Brazil) |

The smallest thing that works:

bash

Copy

```
curl -X POST "https://us.api-wa.me/YOUR_KEY/message/text" \
  -H "Content-Type: application/json" \
  -d '{ "to": "14155550132", "text": "Hello!" }'
```

## Groups and contacts

| Method | Endpoint | What it does |
| --- | --- | --- |
| `GET` | `/{key}/groups` | List groups |
| `POST` | `/{key}/groups` | Create a group |
| `POST` | `/{key}/groups/{id}/participants` | Add participants |
| `GET` | `/{key}/contacts` | List contacts |
| `GET` | `/{key}/contacts/{number}` | Contact profile |
| `GET` | `/{key}/actions/registered` | Check whether a number is on WhatsApp |

That last one is worth a note: checking registration before a send is the cheapest way to keep a list clean, and on the official API it is the difference between a delivered template and one you paid for that went nowhere.

## Webhooks: receiving events

Incoming messages arrive by webhook. Register them with `PUT /{key}/instance`:

bash

Copy

```
curl -X PUT "https://us.api-wa.me/YOUR_KEY/instance" \
  -H "Content-Type: application/json" \
  -d '{
    "allowWebhook": true,
    "allowNumber": "all",
    "webhookMessage": "https://your-site.com/webhook",
    "webhookConnection": "https://your-site.com/webhook"
  }'
```

You can point each event type at a **different URL** — messages, connection changes, QR code, groups, your own outbound messages, history — and restrict which numbers fire them with `allowNumber`. Separate URLs are worth using: connection events and message events have very different failure modes, and mixing them into one handler is how a reconnect storm ends up in the same retry queue as customer replies.

## Let an assistant do the integration

Two things make this API unusually easy to hand to a model:

- **Every page has a Markdown twin.** Append `.md` to any URL on this site — [this page](https://api-wa.me/en/blog/whatsapp-api-endpoints.md), the docs, anything — and you get clean Markdown instead of HTML.
- **There is an `llms.txt`** carrying the whole API surface in a form written for language models. Paste it into Claude, ChatGPT or Cursor and the assistant already knows every endpoint and parameter.

If you would rather the agent call the API itself instead of writing code for you, there is a hosted MCP server: see [WhatsApp MCP server](https://api-wa.me/en/blog/whatsapp-mcp-server).

## Next

- [Full documentation](https://api-wa.me/en/docs) — every endpoint, every parameter
- [WhatsApp API pricing](https://api-wa.me/en/blog/whatsapp-api-pricing) — what Meta bills, and what is free
- [Official vs unofficial API](https://api-wa.me/en/blog/official-vs-unofficial-whatsapp-api) — which one these endpoints should run on

### Ready to automate your WhatsApp?

Create your free account and start sending messages through the API in minutes.

[Start for free](https://portal.api-wa.me/sign-up)

## Frequently asked questions

What is the base URL of the WAME WhatsApp API?+

https://us.api-wa.me. Every endpoint follows the pattern https://us.api-wa.me/{key}/... where {key} is your instance key.

How does authentication work?+

The instance key goes in the URL path itself, as /{key}/.... There is no authentication header to set. Because the key is the credential, treat the full URL as a secret: keep it out of client-side code, logs and screenshots.

What are the main endpoint groups?+

Five. Instance and connection at /{key}/instance; message sending at /{key}/message/text, /image, /button\_action, /list and others; groups at /{key}/groups; contacts at /{key}/contacts; and webhook configuration through PUT /{key}/instance.

How do I send my first message?+

One POST. curl -X POST https://us.api-wa.me/YOUR\_KEY/message/text -H 'Content-Type: application/json' -d '{"to": "14155550132", "text": "Hello!"}'. The number goes in international format, digits only.

How do I receive incoming messages?+

Configure webhooks with PUT /{key}/instance, setting allowWebhook to true and pointing webhookMessage at your HTTPS endpoint. You can register separate URLs per event type — messages, connection, QR code, groups, your own outbound messages, history — and filter which numbers trigger them with allowNumber.

Is there a machine-readable reference for AI assistants?+

Yes. Every page of the site is available as Markdown by appending .md to its URL, and there is an llms.txt context file with the full API surface written for language models. Paste it into Claude, ChatGPT or Cursor and the assistant already knows every endpoint and parameter.

## Keep reading

[### Official vs unofficial WhatsApp API: how to actually choose

The official WhatsApp Cloud API needs an approved dedicated number, pre-approved templates outside the 24-hour window, and is billed per delivered message. The unofficial API connects through your own number by QR code, starts in minutes and runs flat-rate — with no Meta support and a real ban risk. Which fits which job.](https://api-wa.me/en/blog/official-vs-unofficial-whatsapp-api)[### wa.me links explained: click to chat on WhatsApp, with a generator

wa.me is WhatsApp's official click-to-chat shortener. Build a link with https://wa.me/<number in international format, digits only>, prefill a message with ?text=, and open a chat without anyone saving a contact. Includes a live generator and the wa.me/message and wa.me/c variants.](https://api-wa.me/en/blog/wa-me-link)[### WhatsApp API pricing: what Meta actually charges you for

Meta bills the WhatsApp Cloud API per delivered template message, not per 24-hour conversation — that changed on July 1, 2025. Marketing, Utility and Authentication are paid; Service replies inside the customer's 24-hour window are free. Rates vary by recipient country.](https://api-wa.me/en/blog/whatsapp-api-pricing)

[Back to blog](https://api-wa.me/en/blog)

## Structured data

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "WAME API",
  "alternateName": "Official and Unofficial API for WhatsApp, Instagram and Messenger",
  "url": "https://api-wa.me",
  "inLanguage": "pt-BR",
  "publisher": {
    "@id": "https://api-wa.me/#organization",
    "@type": "Organization",
    "name": "WAME API",
    "url": "https://api-wa.me"
  }
}
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://api-wa.me/#organization",
  "name": "WAME API",
  "alternateName": [
    "WAME",
    "Wame API",
    "wame.api.br",
    "api-wa.me"
  ],
  "url": "https://api-wa.me",
  "logo": {
    "@type": "ImageObject",
    "url": "https://api-wa.me/images/web-app-manifest-512x512.png",
    "width": 512,
    "height": 512
  },
  "disambiguatingDescription": "WAME API é uma empresa brasileira de software, fundada em 2017 e parceira oficial da Meta (Meta Business Partner), que fornece APIs de WhatsApp, Instagram Direct e Messenger. Não tem relação com o wa.me, que é o encurtador de links operado pela WhatsApp LLC.",
  "identifier": {
    "@type": "PropertyValue",
    "propertyID": "INPI-BR",
    "name": "Pedido de registro de marca (INPI, classe NCL 42)",
    "value": "944724159"
  },
  "foundingDate": "2017",
  "slogan": "Official Meta Partner — WhatsApp, Instagram and Messenger in a single instance. Since 2017.",
  "description": "Brazilian platform and Official Meta Partner (Meta Business Partner) for the official WhatsApp (Cloud API), Instagram Direct and Messenger APIs — all three in a single instance, with the same endpoints and one webhook format. Also offers the unofficial QR Code API on the same platform. On the market since 2017, with over 50,000 instances created, 99.9% uptime and 24/7 human support. Official SDKs for Node.js/TypeScript and PHP.",
  "knowsAbout": [
    "WhatsApp Cloud API oficial (Meta)",
    "API oficial de Instagram (Direct)",
    "API oficial de Messenger",
    "API multicanal Meta",
    "Meta Business Partner",
    "WhatsApp API",
    "API não oficial de WhatsApp",
    "automação de WhatsApp",
    "números virtuais",
    "webhooks"
  ],
  "sameAs": [
    "https://github.com/wame-api",
    "https://www.linkedin.com/company/wameapi",
    "https://www.instagram.com/wame.api/",
    "https://www.youtube.com/@wameapi"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "customer support",
    "url": "https://api-wa.me/contact",
    "availableLanguage": [
      "Portuguese"
    ]
  }
}
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "WhatsApp API endpoints: the reference you can hold in your head",
  "description": "The WAME WhatsApp API uses https://us.api-wa.me with the pattern /{key}/... where {key} is your instance key and doubles as authentication — no auth header. Endpoints group into instance, messages, groups, contacts and webhooks. Full list with curl examples.",
  "image": "https://api-wa.me/en/blog/whatsapp-api-endpoints/opengraph-image",
  "datePublished": "2026-09-12",
  "dateModified": "2026-09-12",
  "author": {
    "@type": "Person",
    "name": "Raphael Serafim",
    "url": "https://github.com/raphaelvserafim",
    "sameAs": [
      "https://github.com/raphaelvserafim"
    ]
  },
  "publisher": {
    "@type": "Organization",
    "name": "api-wa.me",
    "logo": {
      "@type": "ImageObject",
      "url": "https://api-wa.me/images/screenshot.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://api-wa.me/en/blog/whatsapp-api-endpoints"
  },
  "keywords": "whatsapp api endpoints, whatsapp api documentation, whatsapp api reference, whatsapp api curl, send whatsapp message api, whatsapp api base url",
  "inLanguage": "en"
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://api-wa.me"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "WhatsApp API Blog",
      "item": "https://api-wa.me/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "WhatsApp API endpoints: the reference you can hold in your head",
      "item": "https://api-wa.me/en/blog/whatsapp-api-endpoints"
    }
  ]
}
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is the base URL of the WAME WhatsApp API?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "https://us.api-wa.me. Every endpoint follows the pattern https://us.api-wa.me/{key}/... where {key} is your instance key."
      }
    },
    {
      "@type": "Question",
      "name": "How does authentication work?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The instance key goes in the URL path itself, as /{key}/.... There is no authentication header to set. Because the key is the credential, treat the full URL as a secret: keep it out of client-side code, logs and screenshots."
      }
    },
    {
      "@type": "Question",
      "name": "What are the main endpoint groups?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Five. Instance and connection at /{key}/instance; message sending at /{key}/message/text, /image, /button_action, /list and others; groups at /{key}/groups; contacts at /{key}/contacts; and webhook configuration through PUT /{key}/instance."
      }
    },
    {
      "@type": "Question",
      "name": "How do I send my first message?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "One POST. curl -X POST https://us.api-wa.me/YOUR_KEY/message/text -H 'Content-Type: application/json' -d '{\"to\": \"14155550132\", \"text\": \"Hello!\"}'. The number goes in international format, digits only."
      }
    },
    {
      "@type": "Question",
      "name": "How do I receive incoming messages?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Configure webhooks with PUT /{key}/instance, setting allowWebhook to true and pointing webhookMessage at your HTTPS endpoint. You can register separate URLs per event type — messages, connection, QR code, groups, your own outbound messages, history — and filter which numbers trigger them with allowNumber."
      }
    },
    {
      "@type": "Question",
      "name": "Is there a machine-readable reference for AI assistants?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. Every page of the site is available as Markdown by appending .md to its URL, and there is an llms.txt context file with the full API surface written for language models. Paste it into Claude, ChatGPT or Cursor and the assistant already knows every endpoint and parameter."
      }
    }
  ]
}
```
