Skip to main content

Overview

Admin endpoints manage platform-level configuration including API keys, organizations, subscription tiers, and the enrichment pipeline. Most require ADMIN role access.
Most developers interact with API keys and organization settings through the Podium Developer Portal. The admin API is for programmatic management and platform-level automation.

API Key Management

Create a Key

curl -X POST https://api.podium.build/api/v1/admin/api-keys \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "organizationId": "clorg_abc" }'
{
  "id": "clkey_xyz",
  "key": "podium_live_sk_abc123...",
  "organizationId": "clorg_abc",
  "isActive": true,
  "createdAt": "2026-03-07T12:00:00.000Z"
}
The full API key is only returned once at creation time. Store it securely — subsequent queries return a masked version.

List Organization Keys

curl "https://api.podium.build/api/v1/admin/api-keys?organizationId=clorg_abc" \
  -H "Authorization: Bearer $PODIUM_API_KEY"
[
  {
    "id": "clkey_xyz",
    "keyPrefix": "podium_live_sk_abc1...",
    "isActive": true,
    "lastUsedAt": "2026-03-07T11:45:00.000Z",
    "createdAt": "2026-01-15T10:00:00.000Z"
  }
]

Get Key Details

curl https://api.podium.build/api/v1/admin/api-keys/clkey_xyz \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Deactivate a Key

curl -X PATCH https://api.podium.build/api/v1/admin/api-keys/clkey_xyz \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "isActive": false }'
Setting isActive: false immediately blocks all requests using this key.

Rotate a Key

curl -X POST https://api.podium.build/api/v1/admin/api-keys/clkey_xyz/rotate \
  -H "Authorization: Bearer $PODIUM_API_KEY"
{
  "id": "clkey_xyz",
  "key": "podium_live_sk_newkey456...",
  "previousKeyId": "clkey_xyz_old",
  "rotatedAt": "2026-03-07T12:00:00.000Z"
}
Key rotation:
  1. Generates a new key value for the same key ID
  2. Invalidates the old key value
  3. Publishes an api-key-changed event to flush caches across all API instances
  4. Returns the new full key (one-time display)

Delete a Key

curl -X DELETE https://api.podium.build/api/v1/admin/api-keys/clkey_xyz \
  -H "Authorization: Bearer $PODIUM_API_KEY"
Permanently removes the key. This cannot be undone.

Organizations

List Organizations

curl https://api.podium.build/api/v1/admin/organizations \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Create an Organization

curl -X POST https://api.podium.build/api/v1/admin/organizations \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Beauty",
    "domain": "acmebeauty.com",
    "subscriptionTierId": "tier_growth"
  }'
FieldTypeRequiredDescription
namestringYesOrganization display name
domainstringNoOrganization domain
subscriptionTierIdstringNoSubscription tier to assign

Get Organization Details

curl https://api.podium.build/api/v1/admin/organizations/clorg_abc \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Organization Settings

Settings control organization-specific behavior like blockchain preferences, x402 configuration, and reward modes.
curl https://api.podium.build/api/v1/admin/organizations/clorg_abc/settings \
  -H "Authorization: Bearer $PODIUM_API_KEY"
{
  "organizationId": "clorg_abc",
  "x402Enabled": true,
  "x402WalletAddress": "0x...",
  "defaultChainId": 8453,
  "rewardMode": "QUEUE",
  "enrichmentEnabled": true,
  "autoPublishProducts": false
}

Update Settings

curl -X PATCH https://api.podium.build/api/v1/admin/organizations/clorg_abc/settings \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "x402Enabled": true,
    "x402WalletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18",
    "defaultChainId": 8453
  }'

App Configuration

Global application configuration:
curl https://api.podium.build/api/v1/admin/app-config \
  -H "Authorization: Bearer $PODIUM_API_KEY"
curl -X PATCH https://api.podium.build/api/v1/admin/app-config \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "network": "base-mainnet",
    "rewardMode": "QUEUE"
  }'

Subscription Tiers

List Tiers

curl https://api.podium.build/api/v1/admin/subscription-tiers \
  -H "Authorization: Bearer $PODIUM_API_KEY"
[
  {
    "id": "tier_builder",
    "name": "BUILDER",
    "price": 0,
    "monthlyApiCalls": 10000,
    "maxApiKeys": 5,
    "maxCreators": 2,
    "features": ["Core commerce endpoints"]
  },
  {
    "id": "tier_growth",
    "name": "GROWTH",
    "price": 9900,
    "monthlyApiCalls": 100000,
    "maxApiKeys": 20,
    "maxCreators": 10,
    "features": ["All endpoints", "Enrichment pipeline", "Priority support"]
  },
  {
    "id": "tier_pro",
    "name": "PRO",
    "price": 49900,
    "monthlyApiCalls": 1000000,
    "maxApiKeys": 100,
    "maxCreators": 50,
    "features": ["All endpoints", "Enrichment pipeline", "Dedicated support", "Custom integrations"]
  }
]

Get Tier Details

curl https://api.podium.build/api/v1/admin/subscription-tiers/tier_growth \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Campaign Administration

Admin-level campaign management across the organization:

List All Campaigns

curl https://api.podium.build/api/v1/admin/campaigns \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Approve or Reject a Campaign

curl -X PATCH https://api.podium.build/api/v1/admin/campaigns/clcamp_xyz/status \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "APPROVED" }'
Valid transitions: SUBMITTEDAPPROVED or SUBMITTEDDRAFT (rejection).

Enrichment Pipeline

Admin endpoints for managing the enrichment pipeline.

Trigger Source Ingestion

curl -X POST https://api.podium.build/api/v1/admin/enrichment/run \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "sourceId": "clsource_sephora" }'
Dispatches an enrichment-crawl event for the specified source. The system fetches and processes data, then queues it for AI-powered extraction.

Ingest Products from a Domain

curl -X POST https://api.podium.build/api/v1/admin/enrichment/crawl-domain \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "sephora.com",
    "limit": 50,
    "crawlMode": false
  }'
FieldTypeDescription
domainstringDomain to discover product pages from
limitnumberMax pages to process (optional)
crawlModebooleantrue for deep crawl, false (default) for map-and-scrape

Discover Product URLs on a Domain

Dry-run endpoint to preview which product URLs Podium would find on a domain, without ingesting anything:
curl -X POST https://api.podium.build/api/v1/admin/enrichment/map-domain \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "domain": "sephora.com", "search": "moisturizer", "limit": 20 }'

Trigger Product Discovery

Discover and ingest products from shopping search results. Provide specific queries, filter by category, or omit both to run the full discovery catalog:
curl -X POST https://api.podium.build/api/v1/admin/enrichment/serp-search \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "category": "skincare",
    "maxPages": 3
  }'
FieldTypeDescription
queriesstring[]Specific search queries (optional)
categorystringFilter by product category (optional)
maxPagesnumberMax result pages per query (optional)

Discovery Catalog Stats

View the discovery query catalog — how many queries are available per category:
curl https://api.podium.build/api/v1/admin/enrichment/serp-catalog \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Recompute Baselines

curl -X POST https://api.podium.build/api/v1/admin/enrichment/baseline/recompute \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "productId": "clprod_abc123" }'
Omit productId to recompute all stale baselines. For immediate (synchronous) recomputation:
curl -X POST https://api.podium.build/api/v1/admin/enrichment/baseline/recompute-now \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Baseline Statistics

View detailed statistics across all three baseline levels (product, category, market):
curl https://api.podium.build/api/v1/admin/enrichment/baseline/stats \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Pipeline Status

curl https://api.podium.build/api/v1/admin/enrichment/status \
  -H "Authorization: Bearer $PODIUM_API_KEY"
{
  "sources": [
    { "id": "...", "name": "Sephora Pages", "sourceType": "WEB_PAGE", "lastRunAt": "...", "lastRunStatus": "SUCCESS" }
  ],
  "signalCount": 45230,
  "rawRecordCount": 12400,
  "baselines": {
    "product": 3200,
    "category": 45,
    "market": 13,
    "total": 3258
  }
}

Catalog Sync

Sync enrichment data into the companion product catalog. Creates ProductCatalogItem records from enrichment raw records:
curl -X POST https://api.podium.build/api/v1/admin/enrichment/catalog-sync \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Reprocess Unprocessed Records

Re-queue all unprocessed raw records for AI-powered attribute extraction:
curl -X POST https://api.podium.build/api/v1/admin/enrichment/reprocess \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Manage Enrichment Sources

Create a Source

curl -X POST https://api.podium.build/api/v1/admin/enrichment/sources \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sephora Product Pages",
    "sourceType": "WEB_PAGE",
    "config": {
      "domain": "sephora.com",
      "categories": ["skincare", "makeup"]
    }
  }'

List Sources

curl https://api.podium.build/api/v1/admin/enrichment/sources \
  -H "Authorization: Bearer $PODIUM_API_KEY"

Enrichment Endpoint Summary

MethodPathDescription
POST/admin/enrichment/runTrigger ingestion for a specific source
POST/admin/enrichment/crawl-domainIngest products from a domain
POST/admin/enrichment/map-domainDiscover product URLs on a domain (dry run)
POST/admin/enrichment/serp-searchTrigger product discovery
GET/admin/enrichment/serp-catalogView discovery query catalog stats
POST/admin/enrichment/baseline/recomputeQueue baseline recomputation
POST/admin/enrichment/baseline/recompute-nowSynchronous baseline recomputation
GET/admin/enrichment/baseline/statsDetailed baseline statistics
POST/admin/enrichment/catalog-syncSync enrichment data to companion catalog
POST/admin/enrichment/reprocessRe-queue unprocessed records for extraction
GET/admin/enrichment/statusPipeline dashboard
POST/admin/enrichment/sourcesCreate a new enrichment source
GET/admin/enrichment/sourcesList all enrichment sources

Task Administration

EndpointDescription
GET /admin/tasks/pending-reviewTasks flagged for manual review
POST /admin/tasks/{taskId}/resolveManual approval/rejection
POST /admin/tasks/{taskId}/retry-verificationRetry failed oracle verification
curl https://api.podium.build/api/v1/admin/tasks/pending-review \
  -H "Authorization: Bearer $PODIUM_API_KEY"
curl -X POST https://api.podium.build/api/v1/admin/tasks/0xabc123.../resolve \
  -H "Authorization: Bearer $PODIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "approved": true }'
See Task Pool API for details.

Endpoint Summary

MethodPathDescription
POST/admin/api-keysCreate API key
GET/admin/api-keysList keys
GET/admin/api-keys/{id}Get key (masked)
PATCH/admin/api-keys/{id}Activate/deactivate
DELETE/admin/api-keys/{id}Delete key
POST/admin/api-keys/{id}/rotateRotate key
GET/admin/organizationsList organizations
POST/admin/organizationsCreate organization
GET/admin/organizations/{id}Get organization
GET/admin/organizations/{id}/settingsGet settings
PATCH/admin/organizations/{id}/settingsUpdate settings
GET/admin/app-configGet app config
PATCH/admin/app-configUpdate app config
GET/admin/subscription-tiersList tiers
GET/admin/subscription-tiers/{id}Get tier
GET/admin/campaignsList campaigns
PATCH/admin/campaigns/{id}/statusApprove/reject campaign
POST/admin/enrichment/runTrigger crawl
POST/admin/enrichment/baseline/recomputeRecompute baselines
GET/admin/enrichment/statusPipeline status
POST/admin/enrichment/sourcesCreate source
GET/admin/enrichment/sourcesList sources
GET/admin/tasks/pending-reviewTasks for review
POST/admin/tasks/{taskId}/resolveResolve task
POST/admin/tasks/{taskId}/retry-verificationRetry verification