---
title: "Create Waitlist Entry"
method: POST
path: "/waitlist_entries"
tags: ["Waitlist Entries"]
---

# Create Waitlist Entry

`POST /waitlist_entries`

Joins a free waitlist plan as the authenticated user. Requires waitlist_entry:create. Repeated joins return the existing pending entry, or an approved entry with a valid membership. Paid plans are rejected; no payment method is collected and no membership is granted.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `custom_field_responses` object[] — Answers to the plan's checkout questions. Every required question must be answered.
    - `answer` string, required — The buyer's answer.
    - `custom_field_id` string, required — The checkout question being answered, prefixed `field_`.
  - `metadata` object — Custom key-value pairs to store on the signup. Max 50 keys, 100 chars per key, 500 chars per string value. Ignored when the request returns an existing signup.
  - `plan_id` string, required — The free waitlist plan to join, prefixed `plan_`.

## Response `200`

joined

- WaitlistEntry
  - `account_id` string, required — The seller account, prefixed `biz_`.
  - `approval_failure_reason` 'plan_unavailable' | 'already_member' | 'checkout_failed' | 'unknown' | 'null', nullable, required — Why the last approval attempt failed, or `null` when none has. `plan_unavailable` — the plan, product, or seller account was deleted. `already_member` — the user already has a membership on a one-per-user product. `checkout_failed` — checkout failed, usually a declined payment, and the signup was denied. `unknown` — another failure; retry. Cleared when approval is requeued.
  - `buyer_account_id` string, nullable, required — The account the signup was submitted on behalf of, prefixed `biz_`, or `null` when the user signed up for themselves.
  - `created_at` string, required — When this signup was submitted, as an ISO 8601 timestamp.
  - `custom_field_responses` WaitlistEntryCustomFieldResponse[], required
    - `answer` string, required — The buyer's answer.
    - `id` string, required — The answer's ID, prefixed `cfrp_`.
    - `question` string, required — The question shown when the signup was submitted.
  - `id` string, required — The waitlist signup ID, prefixed `entry_`.
  - `membership_id` string, nullable, required — The membership created for this signup, prefixed `mem_`, or `null` when there is none. Check the membership's status to determine access.
  - `metadata` object, required — Custom key-value metadata associated with this signup.
  - `plan_id` string, required — The plan this signup belongs to, prefixed `plan_`.
  - `product_id` string, nullable, required — The product this signup belongs to, prefixed `prod_`, or `null` when the plan has no product.
  - `status` 'pending' | 'approved' | 'denied' | 'canceled', required — The signup's current state. Approval runs asynchronously, so a signup stays `pending` until processing completes. `approved` alone does not prove an active membership; check `membership_id`.
  - `updated_at` string, required — When this signup last changed, as an ISO 8601 timestamp.
  - `user_id` string, required — The user who submitted this signup, prefixed `user_`.

## Other responses

- `400` — Invalid Parameters
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Resource not found
- `409` — Conflict

## Changes

> 72 revisions in range; 1 not diffed.

- **2026-09-22** `35edb053220a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/whop/apis/whop-api/changes/waitlist_entries/post.md)

---

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