Loading...
Integrate Droppr into your application. All API endpoints accept and return JSON.
Admin endpoints require an API key sent via the x-api-key header. Generate API keys from your Dashboard > Settings page.
Add this snippet to any HTML page. The widget uses your org slug for tenant identification.
<script src="https://droppr.iapplabs.com/api/widget/script" defer></script>
<script>
Droppr.init({
org: "your-org-slug",
waitlist: "your-waitlist-slug",
mode: "modal", // modal | banner | inline | trigger
theme: "dark", // dark | light
brandColor: "#22d3ee"
});
</script>/api/waitlists/{orgSlug}/{slug}Get waitlist info (public, no auth required)
Params: orgSlug: Your organization slug | slug: Waitlist slug
Response: { id, name, slug, description, totalSignups, settings, org }
/api/waitlists/{orgSlug}/{slug}/signupSubmit a new waitlist signup (public, rate-limited)
Body: { email: string, name?: string, referralCode?: string, utmSource?: string, utmMedium?: string, utmCampaign?: string }
Response: { success, position, referralCode, referralUrl }
/api/admin/export?waitlistId={id}Export signups as CSV (requires API key)
Auth: x-api-key header
Response: CSV file stream
/api/admin/waitlistsCreate a new waitlist (requires API key)
Auth: x-api-key header
Body: { name: string, slug: string, description?: string, settings?: object }
Response: { id, name, slug, orgId }
/api/admin/signups?waitlistId={id}List signups with pagination (requires API key)
Auth: x-api-key header
Response: { signups: [...], total, page, limit }
/api/webhooksRegister an outbound webhook (requires session auth)
Body: { url: "https://...", events: ["signup.created", ...], name?: string }
Response: { id, url, events, createdAt }
/api/widget/scriptEmbeddable widget JS bundle (public, cached 24h)
Response: JavaScript
All endpoints are rate-limited to 30 requests per 60 seconds per IP address. When rate-limited, you will receive a 429 response with a Retry-After header.