Admin PLG
Waitlist management, access code generation, and product-led growth analytics.
Overview
The Admin PLG (Product-Led Growth) API provides internal endpoints for managing the waitlist, generating access codes, syncing with Google Sheets, and viewing PLG analytics. These endpoints require admin authentication.
List Waitlist
GET /api/admin/plg/waitlist
List waitlist entries for admin review.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status (default: "waiting") |
limit | integer | No | Max results (default: 50) |
offset | integer | No | Pagination offset (default: 0) |
Example Request
curl "https://api.praxiomai.xyz/api/admin/plg/waitlist?status=waiting&limit=20" \
-H "Authorization: Bearer $TOKEN"
Response (200 OK)
{
"entries": [
{
"id": "a1b2c3d4-...",
"email": "user@example.com",
"name": "Jane Doe",
"position": 42,
"referral_count": 3,
"status": "waiting",
"source": "website",
"created_at": "2026-03-20T09:00:00Z"
}
],
"total": 156
}
Approve Waitlist Entries
POST /api/admin/plg/waitlist/approve
Approve waitlist entries and generate access codes for them. Sends invitation emails.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
waitlist_entry_ids | string[] | Yes | List of waitlist entry IDs to approve |
Response (200 OK)
{
"approved_count": 5,
"codes_generated": 5,
"emails_sent": 5
}
Generate Access Codes
POST /api/admin/plg/codes/generate
Generate a batch of access codes (not tied to waitlist entries).
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
count | integer | Yes | Number of codes to generate |
metadata | object | No | Optional metadata (e.g., trial_days, trial_credits) |
Response (200 OK)
{
"codes": [
{
"code": "PRAXIOM-A1B2C3",
"metadata": {"trial_days": 14, "trial_credits": 20}
}
],
"count": 1
}
List Access Codes
GET /api/admin/plg/codes
List all generated access codes with redemption status.
Response (200 OK)
{
"codes": [
{
"id": "b2c3d4e5-...",
"code": "PRAXIOM-A1B2C3",
"status": "redeemed",
"redeemed_by_email": "user@example.com",
"redeemed_at": "2026-03-25T10:00:00Z",
"metadata": {"trial_days": 14, "trial_credits": 20}
}
],
"total": 42
}
Sync Google Sheets
POST /api/admin/plg/sync-sheets
Trigger a sync of waitlist data to Google Sheets for external tracking.
Response (200 OK)
{
"status": "ok",
"synced_count": 156
}
Get PLG Stats
GET /api/admin/plg/stats
Get product-led growth analytics.
Example Request
curl https://api.praxiomai.xyz/api/admin/plg/stats \
-H "Authorization: Bearer $TOKEN"
Response (200 OK)
{
"total_waitlist": 156,
"total_approved": 89,
"total_codes_generated": 120,
"total_codes_redeemed": 67,
"total_active_users": 45,
"conversion_rate": 0.56
}Was this helpful?