Skip to main content
skill CX Codex

waba-embedded-signup — Claude Code skill: WABA onboarding

Walks you through WhatsApp Business Account onboarding via Sent and keeps three integration paths apart. Useful when wiring profiles, tokens and completion callbacks.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add sentdm/sent-plugin --skill waba-embedded-signup -a claude-code
Open on GitHub

What waba-embedded-signup does

The skill separates three scenarios that people usually lump under one name. Organization Embedded Signup starts in the Sent dashboard and connects the org's WABA through the hosted Meta flow. Organization WABA inheritance creates a child profile via POST /v3/profiles with whatsapp_business_account omitted, so the child shares the org's WABA. A dedicated child-profile WABA passes waba_id and access_token explicitly, and phone_number_id is optional.

Auth is either a profile key in x-api-key, or an organization key plus x-profile-id when acting for an existing child profile. Only organization keys may send x-profile-id; a profile key gets 403. Omit credentials while the organization has no connected WABA and profile creation returns 422 — check the connection first instead of hunting for a public Embedded Signup endpoint, because there isn't one.

Inject the WABA token from a secret manager. Never log it, echo it, return it to the browser or keep it in general profile storage. Finishing a profile means POST /v3/profiles/{profileId}/complete with a required webHookUrl; a 202 only says background processing started, and the final state arrives in a callback whose envelope uses event (COMPLETED, SUBMITTED, failed). Make callback processing idempotent.

What it helps with

  • tell the three WABA onboarding paths apart
  • create a child profile that inherits the org WABA
  • connect a dedicated WABA with its own access_token
  • debug a 422 or 403 on profile creation
  • make the profile completion callback idempotent

Example prompts for the agent

  • walk me through connecting the organization WABA from the Sent dashboard
  • create a child profile that inherits the organization WABA
  • profile creation returned 422 — what should I check first?

How to install waba-embedded-signup

1Skills CLI (Vercel)

npx skills add sentdm/sent-plugin --skill waba-embedded-signup -a claude-code

2Manually: put the files in place

~/.claude/skills/waba-embedded-signup/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/waba-embedded-signup/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about waba-embedded-signup

How do I install waba-embedded-signup in Claude?

Run npx skills add sentdm/sent-plugin --skill waba-embedded-signup -a claude-code. The skill lands in ~/.claude/skills/waba-embedded-signup/SKILL.md.

What does waba-embedded-signup do?

It guides WhatsApp Business Account onboarding through Sent: org WABA connection, inheritance by a child profile, and the dedicated-credentials variant. It also covers auth, profile completion and the callback.

How is WABA inheritance different from a dedicated WABA?

With inheritance you omit whatsapp_business_account and the child profile shares the organization's WABA boundary. With a dedicated WABA you supply waba_id and access_token, and phone_number_id can be left out.

Source text

SKILL.md · MIT
---
name: waba-embedded-signup
description: Guides WhatsApp Business Account onboarding through Sent, separating dashboard Embedded Signup, organization WABA inheritance, and direct child-profile credentials. Use for WABA connection, Meta signup, profile creation, access-token handling, phone number mapping, completion callbacks, or WhatsApp onboarding failures.
---

# WABA Onboarding and Embedded Signup

Keep three integration paths distinct. Calling all of them “Embedded Signup” creates wrong API designs and unsafe credential handling.

## The three paths

| Path | Where it starts | Profile behavior |
| --- | --- | --- |
| Organization Embedded Signup | Sent dashboard | Connects the organization's WABA through the hosted Meta flow. There is no public Sent endpoint that starts this flow. |
| Organization WABA inheritance | `POST /v3/profiles` | Omit `whatsapp_business_account`; the child inherits the organization's connected WABA. |
| Dedicated child-profile WABA | `POST /v3/profiles` | Supply `whatsapp_business_account.waba_id` and `.access_token`; `phone_number_id` is optional. |

If credentials are omitted and the organization has no connected WABA, profile creation returns `422`. Direct WABA credentials are a profile-creation feature, not a public “Embedded Signup endpoint.”

## Authentication

Use either:

- a profile-specific key in `x-api-key`; or
- an organization key in `x-api-key` plus `x-profile-id` when operating for an existing child profile.

Only organization keys may use `x-profile-id`; profile keys receive `403`. `x-sender-id` is legacy v1/v2 terminology.

## Path A: organization Embedded Signup

1. An authorized organization administrator opens the Sent dashboard WhatsApp connection flow.
2. The hosted Meta Embedded Signup UI collects the Meta authorization and WABA/number choices.
3. Confirm the organization shows a connected WABA before creating inheriting children.
4. Record non-secret identifiers and audit who completed the action.

Do not invent a `POST /embedded-signup` or token-exchange endpoint in Sent's public API. If building your own Meta Tech Provider integration outside the Sent dashboard, follow Meta's current documentation and keep that system separate from the Sent API contract.

Meta's browser `postMessage` events use an `event` field and nested data/session information. Do not rewrite them as Sent webhook `sub_type` envelopes.

## Path B: inherit the organization WABA

Omit `whatsapp_business_account`:

```json
{
  "name": "Tenant Support",
  "description": "Synthetic child profile",
  "short_name": "SUPPORT",
  "inherit_templates": true,
  "billing_model": "organization",
  "sandbox": true
}
```

Use this only after the organization WABA is connected. Inheritance means the tenant shares that WABA boundary; confirm this matches the tenant/brand architecture.

## Path C: dedicated WABA credentials

```json
{
  "name": "Dedicated Tenant",
  "whatsapp_business_account": {
    "waba_id": "123456789012345",
    "phone_number_id": "987654321098765",
    "access_token": "<injected secret>"
  },
  "sandbox": true
}
```

`waba_id` and `access_token` are required. `phone_number_id` is optional: when omitted, the current contract describes provisioning and registration during onboarding.

The token needs the applicable WhatsApp Business messaging and management permissions. Inject it from a secret manager. Never log it, echo it, write it to fixtures, return it to the browser, include it in support output, or retain it in general profile storage. Sent does not return it in API responses.

## Complete the profile

Call `POST /v3/profiles/{profileId}/complete` with the required `webHookUrl`:

```json
{
  "webHookUrl": "https://example.com/webhooks/profile-complete",
  "sandbox": true
}
```

- `202` means background processing started; there is no final status in that response.
- `200` can mean the profile was already complete and currently demonstrates lowercase `completed`.
- The completion callback can report `COMPLETED`, `SUBMITTED`, or `failed`.

Treat the completion callback as its own integration surface. Its envelope uses `event`, not `sub_type`:

```json
{
  "event": "COMPLETED",
  "profile_id": "00000000-0000-0000-0000-000000000000",
  "timestamp": "2026-08-09T12:00:00Z"
}
```

Preserve unknown event strings. Verify authenticity using the mechanism Sent documents for the callback endpoint and make processing idempotent.

## Verify operational readiness

- Profile WABA ID matches the intended business.
- Selected number is mapped to the intended profile.
- Template sharing/inheritance is intentional.
- A test template can be created with `sandbox: true`.
- The completion callback is reachable and idempotent.
- Returned message IDs are stored against the tenant/profile before webhook processing.
- Tokens and payment values are absent from logs.

For ordinary message and template webhooks, follow Sent's current events reference; those are separate from Meta browser events and profile-completion callbacks.

## Failure routing

| Failure | Next action |
| --- | --- |
| `422` when credentials are omitted | Connect the organization WABA or provide dedicated credentials. |
| `403` with profile key and `x-profile-id` | Remove `x-profile-id` or use an authorized organization key. |
| Wrong WABA/number | Stop before completion and correct the profile mapping. |
| Expired/under-scoped token | Replace it securely; never print it while diagnosing. |
| Completion remains submitted | Inspect prerequisite and callback evidence; do not assume final failure from the `202`. |

Use [references/waba-embedded-signup-spec.md](references/waba-embedded-signup-spec.md), [references/waba-onboarding-runbook.md](references/waba-onboarding-runbook.md), and [references/whatsapp-sender-profile-mapping.md](references/whatsapp-sender-profile-mapping.md). Use `sender-profile-architect` for tenant boundaries and `waba-template-author` for the first template.

© sentdm · MIT · sentdm/sent-plugin

Similar skills

Everything for Backend and APIs →

From the same set15

sender-profile-architect Designs Sent v3 Sender Profile architecture for multi-tenant and multi-channel applications. It helps set up isolation, API key scoping, WABA, and billing boundaries. CX Codex +1 2,900installs sms-10dlc-registration Prepares and validates a Sent US A2P 10DLC brand and campaign registration: consent evidence, use cases, sample messages. CX Codex +1 2,900installs rcs-agent-onboarding Walks you through Sent RCS and RBM onboarding: launch evidence checklist, Sender Profile readiness, templates and routing tests. CX Codex +1 2,900installs template-builder-ui Helps design and audit tenant-facing Sent v3 template builders, preview interfaces, channel validation, and lifecycle states before submitting to providers. CX Codex +1 2,900installs waba-template-author Converts messaging copy into valid payloads for the Sent v3 API and reviews WhatsApp policy constraints. Useful for building utility, marketing, and OTP templates. CX Codex +1 2,900installs sent Turns vague Sent requests into a specific skill or MCP-backed operation instead of guessing. CX Codex +1 2,900installs sent-profile-provisioning This skill drives the Sender Profile lifecycle in Sent: list, inspect, create, update and delete over MCP tools, plus the wider REST flow. Useful when onboarding a tenant and getting a profile ready to send. CX Codex +1 2,700installs sent-routing-strategist Works out how a Sent message reaches the recipient: automatic routing versus a pinned channel, what the channel array really does, and why a message landed as FAILED, FILTERED or BLOCKED. CX Codex +1 2,700installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor