Admin Marketing
Admin-only prospecting, website scan, generation, and sample-pack endpoints.
These endpoints support Wahlu's admin-only prospecting workflow: creating prospect brands, running website scans, triggering the content pipeline, and fetching an outreach-ready sample pack.
These routes are admin-only. Your API key must carry the required admin scope, and the owning user must have an admin role in Wahlu.
Create a prospect brand
Required scope: admin:marketing
/v1/admin/brands| Parameter | Type | Description |
|---|---|---|
name* | string | Business or brand name. |
description | string | Optional description for internal context. |
Update onboarding state
Required scope: admin:marketing
/v1/admin/brands/:brand_idUse this to set mode, website, posting cadence, timezone, business category, and onboarding step before generation.
curl https://api.wahlu.com/v1/admin/brands/brand_abc123 \
-X PATCH \
-H "Authorization: Bearer wahlu_live_admin_key" \
-H "Content-Type: application/json" \
-d '{
"onboarding_step": "completed",
"config": {
"mode": "automatic",
"website": "https://acme.com",
"business_category": "local_service",
"timezone": "America/New_York",
"image_posting": {
"cross_post": "always",
"cross_posts_per_week": 3
},
"video_posting": {
"cross_post": "always",
"cross_posts_per_week": 3
}
}
}'Start and monitor a website scan
Start requires admin:marketing. Polling requires admin:read.
/v1/admin/brands/:brand_id/website-scan/v1/admin/brands/:brand_id/website-scanThe POST route stores the website URL, seeds scan progress, and triggers the worker process. Poll the GET route until all steps are completed or one of them failed.
Get brand orchestration status
Required scope: admin:read
/v1/admin/brands/:brand_id/statusReturns the onboarding step, mode, website scan progress, generation status, and automation metadata for one brand.
Queue the content pipeline
Required scope: admin:marketing
/v1/admin/brands/:brand_id/content-pipelineThis route only works for brands in automatic mode. If a plan is already active or generation is already running, the response will tell you whether a new run was queued.
Fetch the marketing sample pack
Required scope: admin:read
/v1/admin/brands/:brand_id/marketing-sample-pack?limit=3This is the safest endpoint for outreach. It only marks ready: true when Wahlu can return enough usable samples with captions and downloadable media.
{
"success": true,
"data": {
"ready": true,
"reason": "ready",
"brand": {
"id": "brand_abc123",
"name": "Acme Dental",
"website": "https://acmedental.com"
},
"samples": [
{
"content_item_id": "post_1",
"name": "3 Signs You Should Book a Check-Up",
"caption": "If it has been a while since your last clean, here are three reasons to book in.",
"hashtags": ["dental", "oralhealth"],
"title": null,
"media": [
{
"media_id": "media_1",
"download_url": "https://storage.googleapis.com/...",
"content_type": "image/png",
"file_name": "post-1.png"
}
],
"created_at": "2026-03-23T10:00:00.000Z"
}
]
}
}Create a claim link
Required scope: admin:marketing
/v1/admin/brands/:brand_id/claim-linkCreates a claimable preview link that lets a prospect review the generated brand and bring it into their own workspace. Omit ttl_hours for a non-expiring link, or pass a number to enforce a time limit.
| Parameter | Type | Description |
|---|---|---|
ttl_hours | number | null | Optional lifetime in hours. Omit or pass null for no expiry. |