Skip to content

REST API

Waitlist API

REST endpoints for the Waitlist area of Lessly.

The Waitlist area publishes 7 REST endpoints. Paths are relative to https://api.lessly.com; see Authentication for the required header.

GET/waitlist/config

Get the waitlist configuration (consent text, policy url, policy label, policy version, sender domain, invite template, invite subject) for the current product. Returns null if not configured yet.

MCP tool: waitlist_config_get

Parameters

No parameters.

PUT/waitlist/config

Create or replace the waitlist configuration for the current product (full-document upsert). consent_text is plain text (may contain a {policy} placeholder); policy_url/policy_label render a structured policy link; invite_subject is the invite email subject line. Stored as-is; content correctness is the controller responsibility.

MCP tool: waitlist_config_upsert

Parameters

NameInTypeRequiredDescription
policyVersionbodystringPolicy version label, controller-owned free string. Stored as-is, not validated for monotonicity.
consentTextbodystringPlain-text consent statement shown at signup. May contain a {policy} placeholder marking the policy link. Stored as-is (no HTML sanitization).
policyUrlbodystringPolicy link URL (http/https/mailto). Rendered as a structured link in the form. Null to clear.
policyLabelbodystringVisible text for the policy link. Falls back to the URL itself if absent.
senderDomainbodystringSender domain for invite emails (bare hostname). Verification happens at send time, not here. Null to clear.
senderNamebodystringController display name shown as the invite From name and in the default email body (A7§64 controller identity). Stored as-is. Null to clear (falls back to a generic sender name).
inviteTemplatebodystringInvite email template ({{vars}}). Stored as-is; rendered/validated at send time. Null to clear.
inviteSubjectbodystringInvite email subject line. Plain text, stored as-is; CR/LF stripped at send time. Null to clear (falls back to a default subject).
siteBaseUrlbodystringPer-product public base URL of the tenant site; invite (/signup) and opt-out (/withdraw) links are built from it. http/https only, path allowed, trailing slash stripped. Stored as-is (DP-013); not content-verified. Null to clear.

Response

FieldTypeAlwaysDescription
createdAtstring
policyUrlstring
productIdstring
updatedAtstring
senderNamestring
consentTextstring
policyLabelstring
siteBaseUrlstring
senderDomainstring
inviteSubjectstring
policyVersionstring
inviteTemplatestring
GET/waitlist/embed

Returns the waitlist embed <script> tag for the current product.

MCP tool: waitlist_embed_get

Parameters

No parameters.

Response

FieldTypeAlwaysDescription
product_idstring
script_tagstring
public_edge_urlstring
POST/waitlist/erasure

GDPR Art.17 erasure by email within the current product. Hard-deletes the signup and its invite tokens, reduces the consent-ledger rows to the post-erasure minimum (raw email replaced by a keyed hash), and adds the email to the do-not-contact suppression list. Idempotent. Returns counts of what was affected; never returns PII.

MCP tool: waitlist_signups_erase

Parameters

NameInTypeRequiredDescription
emailbodystringEmail address to erase (GDPR Art.17) within the current product. Normalized (trimmed + lowercased) server-side. The operation is idempotent.

Response

FieldTypeAlwaysDescription
suppressedboolean
deletedTokensnumber
deletedSignupsnumber
reducedConsentsnumber
POST/waitlist/invites/send

Send invite emails to waitlist signups. Provide an explicit email list and/or a filter; set force=true to resend when a live invite already exists.

MCP tool: waitlist_invites_send

Parameters

NameInTypeRequiredDescription
emailsbodyarrayExplicit recipient emails (e.g. from waitlist_signups_list). Combined with filter if both given.
filterbodyobjectSelection filter over signups; resolved server-side with pagination.
forcebodybooleanResend even when a live invite token already exists (mints a fresh token).

Response

FieldTypeAlwaysDescription
sentarray
failedarray
skippedarray
GET/waitlist/signups

List waitlist signups for the current product. Supports status filtering, keyset pagination, and field selection.

MCP tool: waitlist_signups_list

Parameters

NameInTypeRequiredDescription
statusquerystringFilter by status. A single value or an array. Omit to return all statuses.
fieldsqueryarrayFields to include per row. Default ["status","created_at"]; id is always included. email and ip_hash are PII and audited when requested.
cursorquerystringKeyset cursor from a previous response next_cursor. Omit to start from the beginning.
limitqueryintegerPage size, 1–200. Default 50.
orderquerystringSort by created_at. newest = most recent first. Default newest.
qquerystringPrefix search on email (case-insensitive). Returns signups whose email starts with this value. Audited as PII access (DP-009).

Response

FieldTypeAlwaysDescription
itemsarray
has_moreboolean
next_cursorstring
GET/waitlist/signups/stats

Funnel counts (signup, invited, registered) for the current product over a time window, plus non_monotonic. Each stage is counted by its own transition timestamp, so a window can be non-monotonic (registered > signup) — transition events within the period, not a fixed cohort.

MCP tool: waitlist_signups_funnel

Parameters

NameInTypeRequiredDescription
periodquerystringTime window. "7d"/"30d"/"90d" = trailing N days ending now; "all" = all time. Default "30d".

Response

FieldTypeAlwaysDescription
tostring
fromstring
periodstring
signupnumber
invitednumber
registerednumber
non_monotonicboolean
Was this page helpful?
Esc

Start typing to search the docs.

navigateselect