Playbook: Platform-Wide Feature Exploration Lab
Last updated: 2026-03-06
1. Purpose and when to use this
Use this lab when you want one practical workflow that covers schema setup, campaign structure pages, analytics validation, and function-binding data delivery across API, Edge, and MCP surfaces.
This guide is for external operators and marketers who need runnable steps, copy-paste payloads, and clear route/scope mapping.
2. Lab tracks (end-to-end)
| Track | Outcome |
|---|---|
| Track 1 | Working auth baseline for JWT, PAT, and MCP connector scope checks |
| Track 2 | Campaign structure page created, fetched, and published with FREE_WITH_LOGIN |
| Track 3 | Campaign analytics validated for funnel, segment, and export paths |
| Track 4 | Function binding created (control-plane), discovered (public handle), and invoked (Edge) |
| Track 5 | Objective-based launch recipes combining all surfaces |
3. Prerequisites and environment
- Complete Onboarding and API Primer.
- Have a handle with CREATOR access.
- Have
JWT_TOKENand onePAT_TOKEN.
Set baseline variables:
export PUBLIC_DOMAIN="10x.in"
export API_BASE="https://ai.10x.in"
export HANDLE="your-handle"
export MCP_BASE="https://${HANDLE}.mcp.$10x.in/mcp"
export CAMPAIGN_ID="cmp_launch_2026"
export PAGE_SLUG="campaign-launch-2026"
export BINDING_KEY="lead_router"
Recommended PAT scopes for this lab:
pages.readpages.writeanalytics.read(or wildcardanalytics.*)
4. Track 1: Auth + setup baseline
T1-01 Verify JWT control-plane access
curl -sS "${API_BASE}/v2/handles" \
-H "authorization: Bearer ${JWT_TOKEN}"
T1-02 Verify PAT public-handle access
curl -sS "${API_BASE}/v2/public/handles/${HANDLE}/links" \
-H "authorization: Bearer ${PAT_TOKEN}"
T1-03 Verify MCP connector endpoint target
Use hosted MCP endpoint:
https://${HANDLE}.mcp.$10x.in/mcp- compat:
https://ai.10x.in/mcp/${HANDLE}/mcp
Confirm connector scopes include at least:
mcp.connectskills.readpages.read/pages.write(campaign structure tools)analytics.read(analytics tools)
5. Track 2: Campaign structure schema workflow
T2-01 Upsert campaign structure page + schema JSON (PAT route)
PUT /v2/public/handles/{handle}/site-structure/campaigns/{campaignId}
curl -sS -X PUT "${API_BASE}/v2/public/handles/${HANDLE}/site-structure/campaigns/${CAMPAIGN_ID}" \
-H "authorization: Bearer ${PAT_TOKEN}" \
-H 'content-type: application/json' \
-d '{
"pageSlug": "'"${PAGE_SLUG}"'",
"title": "Campaign Launch 2026",
"description": "Private campaign detail page",
"accessMode": "FREE_WITH_LOGIN",
"structureType": "CAMPAIGN_DETAIL_V1",
"schema": {
"modules": [
{ "id": "hero", "type": "hero_banner" },
{ "id": "proof", "type": "social_proof" },
{ "id": "cta", "type": "checkout_cta" }
],
"seo": { "title": "Campaign Launch 2026" }
}
}'
Expected:
schemaVersionincrements.schemaS3Keyfollows:site-structure/{handle}/campaigns/{campaignId}/v{version}.json- Campaign gets a
detailsPageSlugbackreference.
T2-02 Fetch campaign structure and verify persisted schema
GET /v2/public/handles/{handle}/site-structure/campaigns/{campaignId}
curl -sS "${API_BASE}/v2/public/handles/${HANDLE}/site-structure/campaigns/${CAMPAIGN_ID}" \
-H "authorization: Bearer ${PAT_TOKEN}"
T2-03 Publish with login gate
POST /v2/public/handles/{handle}/site-structure/campaigns/{campaignId}/publish
curl -sS -X POST "${API_BASE}/v2/public/handles/${HANDLE}/site-structure/campaigns/${CAMPAIGN_ID}/publish" \
-H "authorization: Bearer ${PAT_TOKEN}" \
-H 'content-type: application/json' \
-d '{}'
Expected:
statusbecomes published.accessModeis enforced toFREE_WITH_LOGIN.
T2-04 Slug conflict validation (negative test)
Attempt upsert with a pageSlug already used by a link slug for the same handle. Expected error:
409 slug_conflict
T2-05 MCP equivalents for Track 2
campaign_structure_upsertcampaign_structure_getcampaign_structure_publish
Example prompt:
"Upsert campaign structure for
cmp_launch_2026with page slugcampaign-launch-2026, setFREE_WITH_LOGIN, and include hero/proof/cta modules."
Optional local app path (local environments)
If running this monorepo locally, use:
apps/site-structure-webnpm --prefix apps/site-structure-web run dev
The app uses the same PAT public-handle routes listed above.
6. Track 3: Analytics workflow (campaign validation)
T3-01 Funnel metrics by campaign
curl -sS "${API_BASE}/v2/public/handles/${HANDLE}/analytics?funnel=true&campaignId=${CAMPAIGN_ID}" \
-H "authorization: Bearer ${PAT_TOKEN}"
T3-02 Segment breakdown by campaign
curl -sS "${API_BASE}/v2/public/handles/${HANDLE}/analytics?groupBy=segment&campaignId=${CAMPAIGN_ID}" \
-H "authorization: Bearer ${PAT_TOKEN}"
T3-03 Export analytics
curl -sS "${API_BASE}/v2/public/handles/${HANDLE}/analytics/export?format=csv&campaignId=${CAMPAIGN_ID}" \
-H "authorization: Bearer ${PAT_TOKEN}"
Expected interpretation checklist:
- Funnel response includes campaign-scoped clicks/conversions/revenue rollups.
- Segment response includes grouped rows and freshness metadata.
- Export route returns serialized report data for reconciliation.
T3-04 MCP equivalents for Track 3
analytics_getanalytics_exportanalytics_campaign_health
7. Track 4: Function binding workflow (API + Edge + MCP-facing discovery)
T4-01 Create binding (JWT control-plane)
POST /v2/handles/{handle}/function-bindings
curl -sS -X POST "${API_BASE}/v2/handles/${HANDLE}/function-bindings" \
-H "authorization: Bearer ${JWT_TOKEN}" \
-H 'content-type: application/json' \
-d '{
"bindingKey": "'"${BINDING_KEY}"'",
"status": "ACTIVE",
"target": {
"type": "template",
"templateKey": "proxy_request"
},
"exposure": {
"publicWeb": true,
"authenticatedMcp": true
},
"execution": {
"mode": "sync"
},
"tool": {
"name": "lead_router",
"description": "Route campaign lead payloads"
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": { "type": "string" },
"campaignId": { "type": "string" }
},
"required": ["leadId"]
},
"config": {
"endpointUrl": "https://collector.example.com/intake"
}
}'
Public Web exposure is template-only in v1. Authenticated MCP can expose template-backed or skill-backed bindings.
T4-01b List registry (JWT control-plane)
GET /v2/handles/{handle}/function-bindings
curl -sS "${API_BASE}/v2/handles/${HANDLE}/function-bindings" \
-H "authorization: Bearer ${JWT_TOKEN}"
T4-02 Discover enabled bindings (public handle route)
GET /v2/public/handles/{handle}/function-bindings
curl -sS "${API_BASE}/v2/public/handles/${HANDLE}/function-bindings"
This route returns only ACTIVE public template bindings with declared tool metadata and inputSchema.
T4-02b Discover authenticated MCP bindings (PAT)
GET /v2/public/handles/{handle}/function-bindings/mcp
curl -sS "${API_BASE}/v2/public/handles/${HANDLE}/function-bindings/mcp" \
-H "authorization: Bearer ${PAT_TOKEN}"
T4-03 Invoke binding through Edge runtime
GET|POST /_edge/fn/{handle}/{bindingKey}
curl -sS "${API_BASE}/_edge/fn/${HANDLE}/${BINDING_KEY}"
curl -sS -X POST "${API_BASE}/_edge/fn/${HANDLE}/${BINDING_KEY}" \
-H 'content-type: application/json' \
-d '{"leadId":"ld_123","campaignId":"'"${CAMPAIGN_ID}"'"}'
Expected for proxy_request template:
T4-03b Invoke authenticated MCP binding (PAT)
POST /v2/public/handles/{handle}/function-bindings/{bindingKey}/invoke
curl -sS -X POST "${API_BASE}/v2/public/handles/${HANDLE}/function-bindings/${BINDING_KEY}/invoke" \
-H "authorization: Bearer ${PAT_TOKEN}" \
-H 'content-type: application/json' \
-d '{"leadId":"ld_123","campaignId":"'"${CAMPAIGN_ID}"'"}'
Expected envelope:
- Sync:
{"mode":"sync","ok":true,"output":...,"meta":...} - Async:
{"mode":"async","ok":true,"invocationId":"...","status":"QUEUED","meta":...} - Echo-style runtime response including method/path/query.
8. Track 5: Combined campaign launch recipes
| Objective | Recommended sequence | Primary success signal |
|---|---|---|
| Launch gated campaign details page | T1 -> T2 -> T3 | Page published with FREE_WITH_LOGIN and funnel metrics populated |
| Validate segment-specific campaign performance | T1 -> T2 -> T3 (groupBy=segment) | Segment rows and conversion differences are visible |
| Add lead routing action at edge | T1 -> T4 -> T3 | Binding visible in discovery + edge invocation succeeds |
| Operate through assistant + API parity | T1 -> T2/T3 via MCP tools + API spot-checks | MCP and direct API responses stay aligned |
9. Appendix: industry schema presets with KPI suggestions
Use each JSON object in campaign_structure_upsert.payload.schema.
Ecommerce preset
{
"modules": [
{ "id": "hero", "type": "hero_banner", "variant": "product_drop" },
{ "id": "price", "type": "price_compare" },
{ "id": "proof", "type": "social_proof" },
{ "id": "faq", "type": "faq" },
{ "id": "cta", "type": "checkout_cta" }
],
"commerce": { "primaryEvent": "purchase", "currency": "USD" }
}
Suggested KPIs: conversion rate, AOV, qualified click ratio.
B2B SaaS preset
{
"modules": [
{ "id": "hero", "type": "value_prop_hero" },
{ "id": "pain", "type": "pain_points" },
{ "id": "features", "type": "feature_grid" },
{ "id": "proof", "type": "case_study_cards" },
{ "id": "cta", "type": "demo_request_form" }
],
"lead": { "primaryEvent": "lead", "qualificationFields": ["team_size", "role"] }
}
Suggested KPIs: lead conversion rate, demo request completion rate, high-intent segment lift.
Events preset
{
"modules": [
{ "id": "hero", "type": "event_hero" },
{ "id": "agenda", "type": "timeline" },
{ "id": "speakers", "type": "speaker_cards" },
{ "id": "cta", "type": "registration_cta" }
],
"event": { "primaryEvent": "registration", "timezone": "America/New_York", "capacity": 500 }
}
Suggested KPIs: registration conversion rate, no-show delta, geo conversion distribution.
Creators preset
{
"modules": [
{ "id": "hero", "type": "creator_story_hero" },
{ "id": "media", "type": "media_gallery" },
{ "id": "offer", "type": "offer_stack" },
{ "id": "proof", "type": "community_proof" },
{ "id": "optin", "type": "newsletter_optin" }
],
"creator": { "primaryEvent": "subscriber_signup", "monetization": ["newsletter", "merch", "sponsor"] }
}
Suggested KPIs: subscriber growth rate, merch conversion rate, returning-fan conversion lift.
10. Validation checklist and common failures
Validation checklist:
- All campaign structure routes return expected payload shape and schema metadata.
schemaS3Keyformat matches deterministic versioned pattern.- Analytics calls return campaign-scoped metrics and expected groupings.
- Function binding create/list/invoke works with allowed templates only.
- MCP tool results (
campaign_structure_*,analytics_*) match API results for the same handle/campaign.
Common failures:
insufficient_scope: PAT or connector scopes missing required permissions.slug_conflict: page slug already exists as a link slug.campaign_structure_not_configured: fetch/publish called before first upsert.invalid_template: function binding template not in allowed set.