API Endpoints Reference
API Endpoints
Customer-facing API surface grouped by domain, with implemented paths only.
Audience: Integration engineers who need one authoritative endpoint index.
Critical: Base URL: https://api.selwise.com/api/v1. All non-public endpoints require Bearer authentication.
Who This Page Is For
Use this page as a navigation index for implemented, customer-facing endpoints across modules, analytics, integrations, AI, and public runtime APIs.
Quick Start (2-5 Minutes)
Pick API domain
Find endpoint group by module or workflow.
Modules | Analytics | Integrations | AI | Public Runtime | Reference HelpersConfirm auth model
Use Bearer auth for private routes; siteKey + public guard for runtime routes.
See /reference/auth-permissions and /reference/security-rate-limits.Use canonical paths
Copy paths exactly; avoid legacy/outdated route aliases.
All routes below are from implemented controllers.Validate with smoke calls
Run one read and one write endpoint in staging before production rollout.
Example: GET config + POST create/update path.Instrument errors and retries
Adopt retry/idempotency strategy for tracked and revenue-impacting paths.
See /reference/errors-and-retries.Required Fields / Minimum Payload
| Field | Required | Type | Used by events | Description |
|---|---|---|---|---|
Authorization | Conditional | Bearer token | All private endpoints | Required for authenticated API domains. |
siteId | Conditional | uuid | Site-scoped private endpoints | Most module/integration analytics routes are site-scoped. |
siteKey | Conditional | string | Public runtime endpoints | Public route identifier validated by guard layer. |
Content-Type | Conditional | application/json | POST/PUT/PATCH endpoints | Required for JSON payload parsing and validation. |
Event or Endpoint Decision Matrix
| Scenario | Use This | Why |
|---|---|---|
| Need module CRUD endpoint quickly | Use Modules section below | Fast lookup by business domain. |
| Need customer-owned SMTP sending | Use Email Marketing routes in Modules section | Covers sender onboarding, campaign send, and provider events. |
| Need analytics deep-dive route | Use Analytics section below | Includes overview, funnels, journeys, cohorts, revenue, etc. |
| Need channel forwarding setup | Use Integrations section below | Provider + webhook + data-layer endpoints grouped together. |
| Need runtime storefront contracts | Use Public Runtime section below | All siteKey public APIs in one list. |
| Need permissions/rate-limit context | See linked reference pages | Avoids auth and throttling surprises. |
Auth
POST /api/v1/auth/register
POST /api/v1/auth/login
POST /api/v1/auth/login/verify-mfa
POST /api/v1/auth/refresh
GET /api/v1/auth/csrf
POST /api/v1/auth/logout
POST /api/v1/auth/revoke
GET /api/v1/auth/mfa/status
POST /api/v1/auth/mfa/setup
POST /api/v1/auth/mfa/verify
POST /api/v1/auth/mfa/enable
POST /api/v1/auth/mfa/disable
POST /api/v1/auth/mfa/backup-codes/regenerate
POST /api/v1/auth/verify-email
POST /api/v1/auth/resend-verification
GET /api/v1/auth/verification-statusSites
POST /api/v1/sites
GET /api/v1/sites
GET /api/v1/sites/feeds-summary
GET /api/v1/sites/:id
PUT /api/v1/sites/:id
GET /api/v1/sites/:id/stats
POST /api/v1/sites/:id/verify-domain
DELETE /api/v1/sites/:id
GET /api/v1/sites/:id/predictive-thresholds
PUT /api/v1/sites/:id/predictive-thresholds
GET /api/v1/sites/:id/predictive-thresholds/stats
POST /api/v1/sites/:id/predictive-thresholds/calculate
GET /api/v1/sites/:id/tracking-config
PUT /api/v1/sites/:id/tracking-config
GET /api/v1/sites/:siteId/public-api-keys
POST /api/v1/sites/:siteId/public-api-keys
POST /api/v1/sites/:siteId/public-api-keys/:keyId/rotate
POST /api/v1/sites/:siteId/public-api-keys/:keyId/revokeCurrency Contract Updates (v2)
- Site create/update endpoints accept
currency(ISO-4217 uppercase). - Product APIs return
currencyas required field. - Category conversion analytics returns
metrics.revenueByCurrency[]instead of single scalar mixed totals.
Modules
# Widgets
POST /api/v1/widgets
GET /api/v1/widgets
GET /api/v1/widgets/:id
PUT /api/v1/widgets/:id
POST /api/v1/widgets/:id/toggle-status
POST /api/v1/widgets/:id/duplicate
DELETE /api/v1/widgets/:id
# Campaigns
POST /api/v1/campaigns
GET /api/v1/campaigns
GET /api/v1/campaigns/:id
PUT /api/v1/campaigns/:id
POST /api/v1/campaigns/:id/publish
POST /api/v1/campaigns/:id/pause
POST /api/v1/campaigns/:id/activate
POST /api/v1/campaigns/:id/clone
DELETE /api/v1/campaigns/:id
# Email Marketing (SMTP-first)
POST /api/v1/email/senders
GET /api/v1/email/senders
GET /api/v1/email/senders/:id
PUT /api/v1/email/senders/:id
POST /api/v1/email/senders/:id/test
POST /api/v1/email/senders/:id/verify
POST /api/v1/email/senders/:id/set-default
DELETE /api/v1/email/senders/:id
POST /api/v1/email/campaigns
GET /api/v1/email/campaigns
GET /api/v1/email/campaigns/:id
PUT /api/v1/email/campaigns/:id
POST /api/v1/email/campaigns/:id/cancel
GET /api/v1/email/provider-connectors
POST /api/v1/email/provider-connectors
PUT /api/v1/email/provider-connectors/:id
DELETE /api/v1/email/provider-connectors/:id
GET /api/v1/email/provider-connectors/:id/health
GET /api/v1/email/suppressions
POST /api/v1/email/suppressions
POST /api/v1/email/suppressions/:id/lift
GET /api/v1/email/audience/contacts
POST /api/v1/email/audience/preview
POST /api/v1/email/audience/sync-users
GET /api/v1/email/public-api-keys
POST /api/v1/email/public-api-keys
POST /api/v1/email/public-api-keys/:id/rotate
POST /api/v1/email/public-api-keys/:id/revoke
POST /api/v1/email/providers/:provider/events
# Recommendations
GET /api/v1/recommendations/strategies
GET /api/v1/recommendations/platforms
GET /api/v1/recommendations
GET /api/v1/recommendations/site/:siteId
GET /api/v1/recommendations/:id
GET /api/v1/recommendations/:id/site/:siteId
POST /api/v1/recommendations/:id/site/:siteId/preview
GET /api/v1/recommendations/:id/site/:siteId/analytics
POST /api/v1/recommendations/site/:siteId
PUT /api/v1/recommendations/:id
PUT /api/v1/recommendations/:id/site/:siteId
POST /api/v1/recommendations/:id/duplicate
POST /api/v1/recommendations/:id/site/:siteId/duplicate
DELETE /api/v1/recommendations/:id
DELETE /api/v1/recommendations/:id/site/:siteId
PUT /api/v1/recommendations/:id/site/:siteId/toggle-active
PATCH /api/v1/recommendations/:id
POST /api/v1/recommendations/site/:siteId/track/event
POST /api/v1/recommendations/site/:siteId/track/behavior
# Search
GET /api/v1/search/configs
GET /api/v1/search/config/:siteId
PUT /api/v1/search/config/:siteId
POST /api/v1/search/:siteId/reindex
GET /api/v1/search/:siteId/stats
GET /api/v1/search/:siteId/products
GET /api/v1/search/:siteId/categories
GET /api/v1/sites/:siteId/search/analytics/queries
GET /api/v1/sites/:siteId/search/analytics/funnel
GET /api/v1/sites/:siteId/search/analytics/products
GET /api/v1/sites/:siteId/search/analytics/zero-results
POST /api/v1/sites/:siteId/search/analytics/zero-results/:queryId/resolve
GET /api/v1/sites/:siteId/search/analytics/synonyms
POST /api/v1/sites/:siteId/search/analytics/synonyms
PUT /api/v1/sites/:siteId/search/analytics/synonyms/:synonymId
DELETE /api/v1/sites/:siteId/search/analytics/synonyms/:synonymId
GET /api/v1/sites/:siteId/search/analytics/redirects
POST /api/v1/sites/:siteId/search/analytics/redirects
PUT /api/v1/sites/:siteId/search/analytics/redirects/:redirectId
DELETE /api/v1/sites/:siteId/search/analytics/redirects/:redirectId
GET /api/v1/sites/:siteId/search/analytics/boost-rules
POST /api/v1/sites/:siteId/search/analytics/boost-rules
PUT /api/v1/sites/:siteId/search/analytics/boost-rules/:ruleId
DELETE /api/v1/sites/:siteId/search/analytics/boost-rules/:ruleId
# Segments
POST /api/v1/segments
GET /api/v1/segments
GET /api/v1/segments/templates
POST /api/v1/segments/templates/:templateId
GET /api/v1/segments/:id
PATCH /api/v1/segments/:id
DELETE /api/v1/segments/:id
POST /api/v1/segments/:id/evaluate
POST /api/v1/segments/:id/compute-size
POST /api/v1/segments/preview-size
POST /api/v1/public/segments/evaluate
GET /api/v1/segments/:id/members
POST /api/v1/segments/:id/members
DELETE /api/v1/segments/:id/members/:visitorId
POST /api/v1/segments/:id/members/bulk
POST /api/v1/public/segments/evaluate
# Experiments
POST /api/v1/experiments
GET /api/v1/experiments
GET /api/v1/experiments/:id
PUT /api/v1/experiments/:id
POST /api/v1/experiments/:id/start
POST /api/v1/experiments/:id/pause
POST /api/v1/experiments/:id/complete
GET /api/v1/experiments/:id/results
DELETE /api/v1/experiments/:id
GET /api/v1/public/experiments/assign
POST /api/v1/public/experiments/track
POST /api/v1/public/experiments/track-event
# Scripts
POST /api/v1/scripts
PATCH /api/v1/scripts/:id
DELETE /api/v1/scripts/:id
GET /api/v1/scripts
GET /api/v1/scripts/:id
POST /api/v1/sites/:siteId/scripts
GET /api/v1/sites/:siteId/scripts
PATCH /api/v1/sites/:siteId/scripts/:id
DELETE /api/v1/sites/:siteId/scripts/:idAnalytics
GET /api/v1/analytics/overview
GET /api/v1/analytics/activity-logs
GET /api/v1/analytics/dashboard-summary
GET /api/v1/analytics/events/breakdown
POST /api/v1/analytics/track
POST /api/v1/analytics/track/batch
GET /api/v1/analytics/journeys/:siteId
GET /api/v1/analytics/journeys/:siteId/stats
GET /api/v1/analytics/journeys/:siteId/funnel
GET /api/v1/analytics/journeys/:siteId/export
GET /api/v1/analytics/journeys/:siteId/:journeyId
GET /api/v1/analytics/correlations/:siteId
GET /api/v1/analytics/events/:eventId/attribution
GET /api/v1/analytics/event-sequences/:siteId/insights
GET /api/v1/analytics/event-sequences/:siteId/raw
GET /api/v1/analytics/funnels/:siteId
POST /api/v1/analytics/funnels/definitions
GET /api/v1/analytics/funnels/definitions/site/:siteId
GET /api/v1/analytics/funnels/definitions/:id
PUT /api/v1/analytics/funnels/definitions/:id
DELETE /api/v1/analytics/funnels/definitions/:id
POST /api/v1/analytics/funnels/definitions/:id/duplicate
GET /api/v1/analytics/funnels/definitions/site/:siteId/templates
GET /api/v1/analytics/funnels/definitions/:id/analyze
GET /api/v1/analytics/funnels/:siteId/export
GET /api/v1/analytics/funnels/:siteId/steps/:eventName/export
GET /api/v1/analytics/cohort/:siteId
GET /api/v1/analytics/cohort/:siteId/export
POST /api/v1/analytics/cohort/:siteId/cache/rebuild
GET /api/v1/analytics/product/:siteId/catalog
GET /api/v1/analytics/product/:siteId/overview
GET /api/v1/analytics/product/:siteId/associations
GET /api/v1/analytics/product/:siteId/dwell-time
GET /api/v1/analytics/product/:siteId/tracking-status
GET /api/v1/analytics/product/:siteId/top
GET /api/v1/analytics/category/:siteId/overview
GET /api/v1/analytics/category/:siteId/top
GET /api/v1/analytics/category/:siteId/conversion
GET /api/v1/analytics/category/:siteId/products
GET /api/v1/analytics/category/:siteId/paths
GET /api/v1/analytics/category/:siteId/trends
GET /api/v1/analytics/category/:siteId/filters
GET /api/v1/analytics/category/:siteId/all
GET /api/v1/analytics/search/top-queries
GET /api/v1/analytics/search/top-products
GET /api/v1/analytics/search/zero-results
GET /api/v1/analytics/consent/:siteId/stats
GET /api/v1/analytics/consent/:siteId/trends
GET /api/v1/analytics/consent/:siteId/impact
GET /api/v1/analytics/consent/:siteId/categories
POST /api/v1/analytics/consent/:siteId/simulate
GET /api/v1/analytics/consent/:siteId/export
GET /api/v1/analytics/consent/compare
GET /api/v1/analytics/sites/:siteId/datalayer/events
GET /api/v1/analytics/sites/:siteId/events/types
GET /api/v1/analytics/sites/:siteId/events
GET /api/v1/analytics/sites/:siteId/metrics
GET /api/v1/analytics/sites/:siteId/events/timeseries
GET /api/v1/analytics/sites/:siteId
GET /api/v1/analytics/revenue/overview
GET /api/v1/analytics/revenue/campaigns/:id
GET /api/v1/analytics/revenue/widgets/:id
GET /api/v1/analytics/revenue/recommendations/:id
GET /api/v1/analytics/recommendations/breakdown
GET /api/v1/analytics/identity/conversion-metricsNotes:
GET /api/v1/analytics/correlations/:siteIdsupports optionalstartDateandendDate(ISO timestamp) query params to filter conversion events.GET /api/v1/analytics/events/:eventId/attributionnow returnsconversionEventAt,totalTouchpoints, andtotalInteractionsin the primary response contract.GET /api/v1/analytics/events/:eventId/attributionno longer returnstotalTouches.
Integrations
GET /api/v1/sites/:siteId/integrations
GET /api/v1/sites/:siteId/integrations/health
GET /api/v1/sites/:siteId/integrations/:provider
PUT /api/v1/sites/:siteId/integrations/:provider
DELETE /api/v1/sites/:siteId/integrations/:provider
POST /api/v1/sites/:siteId/integrations/:provider/test
GET /api/v1/sites/:siteId/integrations/:provider/logs
GET /api/v1/sites/:siteId/integrations/:provider/mappings
GET /api/v1/sites/:siteId/integrations/data-layer
PUT /api/v1/sites/:siteId/integrations/data-layer
POST /api/v1/sites/:siteId/integrations/data-layer/test
GET /api/v1/sites/:siteId/integrations/data-layer/events
GET /api/v1/sites/:siteId/integrations/data-layer/stats
DELETE /api/v1/sites/:siteId/integrations/data-layer
GET /api/v1/sites/:siteId/integrations/webhooks
POST /api/v1/sites/:siteId/integrations/webhooks
GET /api/v1/sites/:siteId/integrations/webhooks/:webhookId
PUT /api/v1/sites/:siteId/integrations/webhooks/:webhookId
DELETE /api/v1/sites/:siteId/integrations/webhooks/:webhookId
POST /api/v1/sites/:siteId/integrations/webhooks/:webhookId/test
GET /api/v1/sites/:siteId/integrations/webhooks/:webhookId/logsAI
POST /api/v1/ai/generate-text
GET /api/v1/ai/insights/:campaignId
POST /api/v1/ai/generate-html
POST /api/v1/ai/generate-strategy
GET /api/v1/ai/sites/:siteId/personalization-config
PUT /api/v1/ai/sites/:siteId/personalization-config
POST /api/v1/ai/sites/:siteId/sync-embeddings
GET /api/v1/ai/sites/:siteId/embedding-stats
POST /api/v1/ai/sites/:siteId/calculate-user-profiles
GET /api/v1/ai/sites/:siteId/sync-progress
GET /api/v1/ai/sites/:siteId/performanceProduct Card Definitions
GET /api/v1/product-card-definitions/templates
GET /api/v1/product-card-definitions/product-fields
GET /api/v1/product-card-definitions/site/:siteId
GET /api/v1/product-card-definitions/:id/site/:siteId
POST /api/v1/product-card-definitions/site/:siteId
POST /api/v1/product-card-definitions/site/:siteId/from-template/:templateId
PUT /api/v1/product-card-definitions/:id/site/:siteId
POST /api/v1/product-card-definitions/:id/site/:siteId/duplicate
POST /api/v1/product-card-definitions/:id/site/:siteId/preview
DELETE /api/v1/product-card-definitions/:id/site/:siteIdPublic Runtime
GET /api/v1/public/sites/:siteKey/config
GET /api/v1/public/sites/:siteKey/tracking-config
POST /api/v1/public/sites/:siteKey/events/batch
POST /api/v1/public/sites/:siteKey/metrics
GET /api/v1/public/sites/:siteKey/campaigns
GET /api/v1/public/sites/:siteKey/widgets
GET /api/v1/public/sites/:siteKey/search
GET /api/v1/public/sites/:siteKey/search-config
GET /api/v1/public/sites/:siteKey/search/suggestions
POST /api/v1/public/sites/:siteKey/search/log
POST /api/v1/public/sites/:siteKey/search/click
POST /api/v1/public/sites/:siteKey/search/zero-results
GET /api/v1/public/sites/:siteKey/recommendations
POST /api/v1/public/sites/:siteKey/recommendations/:widgetId/products
POST /api/v1/public/sites/:siteKey/recommendations/track/event
POST /api/v1/public/sites/:siteKey/recommendations/track/behavior
GET /api/v1/public/sites/:siteKey/scripts
POST /api/v1/public/sites/:siteKey/orders
GET /api/v1/public/sites/:siteKey/email/open/:token
GET /api/v1/public/sites/:siteKey/email/click/:token
GET /api/v1/public/sites/:siteKey/email/unsubscribe?token=...
GET /api/v1/public/sites/:siteKey/integrations
POST /api/v1/public/sites/:siteKey/users/identify
POST /api/v1/public/sites/:siteKey/users/traits
POST /api/v1/public/sites/:siteKey/consent
DELETE /api/v1/public/sites/:siteKey/consent
GET /api/v1/public/sites/:siteKey/product-metrics/view-count
GET /api/v1/public/sites/:siteKey/product-metrics/cart-count
POST /api/v1/public/sites/:siteKey/product-metrics/batch
POST /api/v1/public/sites/:siteKey/newsletter
POST /api/v1/public/sites/:siteKey/newsletter/confirm
GET /api/v1/public/sites/:siteKey/newsletter/confirm?token=...
POST /api/v1/public/sites/:siteKey/newsletter/api/subscribe
POST /api/v1/public/newsletter
POST /api/v1/public/newsletter/subscribe
POST /api/v1/public/newsletter/confirm
GET /api/v1/public/newsletter/confirm?token=...
POST /api/v1/public/contact
GET /api/v1/public/pricingImportant runtime tracking notes:
POST /api/v1/public/sites/:siteKey/events/batchvalidates payloads per event. Invalid events are rejected individually, valid events in the same batch are accepted.- Deprecated product metadata keys (
productId,productSku,sku) are rejected by batch ingestion. - Mobile originless runtime requests are supported through scoped key auth (
x-selwise-api-key) with method-based scope checks (GET -> mobile_read, write methods ->mobile_write). - Mobile SDK metadata headers are
x-selwise-client-platformandx-selwise-client-version. - Email open/click/unsubscribe tracking endpoints are tokenized and should be called only through renderer-generated URLs.
- Tenant newsletter endpoints are site-scoped (
/public/sites/:siteKey/newsletter/*) and write to tenant audience data; they do not use admin/global newsletter sender configuration. - Legacy
/public/newsletter*endpoints remain for admin/global newsletter domain.
Public newsletter quick usage:
# Browser/widget
curl -X POST "https://YOUR_API_DOMAIN/api/v1/public/sites/SITE_KEY/newsletter" \
-H "Content-Type: application/json" \
-H "Origin: https://store.example.com" \
-d '{"email":"alice@example.com"}'
# API-only
curl -X POST "https://YOUR_API_DOMAIN/api/v1/public/sites/SITE_KEY/newsletter/api/subscribe" \
-H "Content-Type: application/json" \
-H "x-selwise-api-key: swpk_live_xxxxx" \
-d '{"email":"alice@example.com","consentGranted":true}'
For full request/response contract and field-level behavior, see:
Common Errors and Fixes
Calling non-implemented endpoint from old docs
Cause: Legacy route references in internal notes.
Fix: Use only this reference and module-specific pages with validated paths.
Public endpoint fails with site/origin error
Cause: siteKey invalid, site unverified, or domain mismatch.
Fix: Verify site setup and origin headers against site domain.
403 on private endpoints
Cause: Missing token or insufficient permission.
Fix: Check auth token validity and role permissions.
429 responses on tracking/order routes
Cause: Visitor/order throttling limits exceeded.
Fix: Implement client backoff and dedup logic; see security/rate-limit reference.
Production Checklist
- Endpoint usage is sourced from this implemented-path reference only.Required
- Auth and permission model is documented per integration service.Required
- Public runtime requests are validated against site/origin constraints.Required
- Retry and backoff behavior is implemented for 429/5xx responses.Required
- Release smoke tests include representative private and public endpoints.Required