---
title: "Create a WhatsApp signup link"
method: POST
path: "/v1/projects/{project_id}/channels/whatsapp/signup-links"
tags: ["Channels"]
---

# Create a WhatsApp signup link

`POST /v1/projects/{project_id}/channels/whatsapp/signup-links`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/projects/{project_id}/channels/whatsapp/signup-links`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

A Meta Embedded Signup URL for this project, to hand to the person who owns the WhatsApp number. They sign in with Meta, pick or create the business account and number, and the number is linked to the project as a channel with `credential_source: embedded_signup` when they finish. No popup or naturali session is needed to follow it.

The link only links the number: the channel starts with `default: { action: silence }`, so it answers nothing until an agent is bound to it with `PATCH /v1/projects/{project_id}/channels/{channel_id}` or a route.

The link is good for 30 minutes and acts for whoever created it: it stops working if they leave the project. A number not yet registered for sending is registered with a two-step verification PIN naturali generates and does not keep; the owner can reset it in WhatsApp Manager. Returns `501` on deployments where Meta signup is not configured.

## Response `201`

Link created.

- WhatsAppSignupLink
  - `url` string, uri, required: The Meta dialog to open. Treat it as a credential.
  - `expires_at` string, date-time, required

## Other responses

- `400`: The request was malformed or failed validation.
- `401`: Missing or invalid credentials.
- `403`: The credential is scoped to a different project, or the caller's role in the project does not carry this action.
- `404`: The resource does not exist (existence is not leaked).
- `501`: The requested path is not enabled on this deployment (e.g. embedded signup before Meta App credentials are configured, or a Discord channel before `CHANNEL_TOKEN_KEY` is set).

---

[API](https://skmtc.dev/naturali/apis/naturali-ai-api.md) · [All operations](https://skmtc.dev/naturali/apis/naturali-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/naturali/apis/naturali-ai-api/revisions/e4905b78f422?raw)
