# Other **Category:** Admin **Base URL:** `/admin/algolia` **Authentication:** Required **Routes:** 153 routes documented ## Overview This section documents 153 API routes for other. > ⚠️ **These endpoints operate on your live store.** `POST`/`PUT`/`DELETE` operations here — including sync, push, resync, and cache operations — modify or delete production data, and some trigger downstream effects such as warehouse orders or customer emails. `DELETE` operations are generally irreversible. Verify IDs and parameters carefully before calling them from scripts. ## Quick Reference | Method | Endpoint | Description | |--------|----------|-------------| | POST | `/admin/algolia` | POST /admin/algolia/index Index data to Algolia (admin only) | | DELETE | `/admin/algolia` | DELETE /admin/algolia Delete items from Algolia index | | GET | `/admin/algolia/search` | GET /admin/algolia/search Search across Algolia indexes for ... | | GET | `/admin/announcements` | Announcements published so far, newest first, plus the types... | | POST | `/admin/announcements` | Publish an announcement: `POST /admin/announcements`. Body: ... | | GET | `/admin/audiences` | GET /admin/audiences — list audience definitions across ever... | | POST | `/admin/audiences` | No description | | GET | `/admin/banner-options` | Choices for the banner editor's two targeting fields. WHY TH... | | GET | `/admin/banners` | GET /admin/banners?promotion_id=... | | POST | `/admin/banners` | POST /admin/banners | | POST | `/admin/banners/:id` | POST /admin/banners/:id — partial update. | | DELETE | `/admin/banners/:id` | DELETE /admin/banners/:id — soft delete. | | POST | `/admin/bundled-products` | No description | | GET | `/admin/bundled-products` | No description | | GET | `/admin/bundled-products/:id` | No description | | PATCH | `/admin/bundled-products/:id` | No description | | DELETE | `/admin/bundled-products/:id` | No description | | GET | `/admin/cancellations` | No description | | GET | `/admin/cancellations/:id` | No description | | POST | `/admin/cancellations/:id/apply-offer` | No description | | POST | `/admin/cancellations/:id/finalize` | No description | | POST | `/admin/cancellations/:id/reason` | No description | | GET | `/admin/carts` | GET /admin/carts?customer_id={id} Returns carts for a given ... | | GET | `/admin/cogs/settings` | No description | | POST | `/admin/cogs/settings` | No description | | GET | `/admin/content-page-options` | Choices for the content-page editor. WHY THIS EXISTS -------... | | GET | `/admin/content-page-settings` | GET /admin/content-page-settings?store_handle=vnsh | | POST | `/admin/content-page-settings` | POST /admin/content-page-settings | | GET | `/admin/content-pages` | GET /admin/content-pages?store_handle=vnsh | | POST | `/admin/content-pages` | POST /admin/content-pages | | PATCH | `/admin/content-pages/:id` | PATCH /admin/content-pages/:id — partial update. `store_hand... | | DELETE | `/admin/content-pages/:id` | DELETE /admin/content-pages/:id — soft delete. | | GET | `/admin/custom` | No description | | GET | `/admin/customers/:id/notes` | GET /admin/customers/:id/notes Returns all notes for a custo... | | POST | `/admin/customers/:id/notes` | POST /admin/customers/:id/notes Add a new note to a customer... | | DELETE | `/admin/customers/:id/notes/:noteId` | DELETE /admin/customers/:id/notes/:noteId Delete a specific ... | | PUT | `/admin/customers/:id/notes/:noteId` | PUT /admin/customers/:id/notes/:noteId Update a specific not... | | POST | `/admin/demo-magic-link` | No description | | GET | `/admin/disputes` | GET /admin/disputes List locally-mirrored Stripe disputes. B... | | POST | `/admin/disputes/:id/accept` | POST /admin/disputes/:id/accept Concede the dispute: the cus... | | POST | `/admin/disputes/:id/evidence` | No description | | POST | `/admin/draft-orders/:id/payment-link` | Create (or reuse) the payment link for a draft order and opt... | | GET | `/admin/draft-orders/:id/payment-link` | Read the draft order's stored payment link plus the live sta... | | GET | `/admin/dunning` | No description | | GET | `/admin/dunning/:id` | No description | | POST | `/admin/dunning/:id/mark-recovered` | No description | | POST | `/admin/dunning/:id/mark-unrecovered` | No description | | POST | `/admin/dunning/:id/retry-now` | No description | | POST | `/admin/dunning/:id/retry-schedule` | No description | | GET | `/admin/extensions` | No description | | GET | `/admin/extensions/:id` | No description | | POST | `/admin/extensions/:id/toggle` | No description | | GET | `/admin/extensions/check-enabled` | GET /admin/extensions/check-enabled?module=marketing Check i... | | GET | `/admin/extensions/check/:name` | Check if an extension is enabled GET /admin/extensions/check... | | GET | `/admin/free-shipping-report` | No description | | GET | `/admin/free-shipping-threshold` | No description | | POST | `/admin/free-shipping-threshold` | // Update the free-shipping threshold by surgically updating... | | POST | `/admin/funnel-carts/:id/line-items` | No description | | GET | `/admin/funnels` | No description | | POST | `/admin/funnels` | No description | | GET | `/admin/funnels/:id` | @swagger /admin/funnels/{id}: get: tags: [Funnels] descripti... | | POST | `/admin/funnels/:id` | @swagger /admin/funnels/{id}: post: tags: [Funnels] descript... | | DELETE | `/admin/funnels/:id` | @swagger /admin/funnels/{id}: delete: tags: [Funnels] descri... | | GET | `/admin/funnels/analytics` | @swagger /admin/funnels/analytics: get: tags: [Funnels] desc... | | GET | `/admin/funnels/pages` | @swagger /admin/funnels/pages: get: tags: [Funnels] descript... | | POST | `/admin/funnels/pages` | @swagger /admin/funnels/pages: post: tags: [Funnels] descrip... | | GET | `/admin/funnels/stages` | @swagger /admin/funnels/stages: get: tags: [Funnels] descrip... | | POST | `/admin/funnels/stages` | @swagger /admin/funnels/stages: post: tags: [Funnels] descri... | | PUT | `/admin/funnels/stages/:id` | Update an existing funnel stage | | DELETE | `/admin/funnels/stages/:id` | Delete a funnel stage | | POST | `/admin/funnels/stages/reorder` | Reorder funnel stages | | POST | `/admin/internal/checkout-context` | No description | | POST | `/admin/internal/members` | No description | | GET | `/admin/internal/members` | Snapshot of this store's federated members: every user that ... | | GET | `/admin/internal/sales-metrics` | No description | | POST | `/admin/internal/superplane-cart` | No description | | POST | `/admin/internal/unified-context` | No description | | POST | `/admin/konnektive/outbound-sync/:orderId/force` | POST /admin/konnektive/outbound-sync/:orderId/force Force im... | | POST | `/admin/konnektive/outbound-sync/:orderId/retry` | POST /admin/konnektive/outbound-sync/:orderId/retry Retry a ... | | GET | `/admin/konnektive/outbound-sync/:orderId/status` | GET /admin/konnektive/outbound-sync/:orderId/status Get sync... | | GET | `/admin/konnektive/outbound-sync/failed` | GET /admin/konnektive/outbound-sync/failed List all failed s... | | GET | `/admin/konnektive/outbound-sync/statistics` | GET /admin/konnektive/outbound-sync/statistics Get overall s... | | GET | `/admin/konnektive/product-mapping` | GET /admin/konnektive/product-mapping Get all product SKU ma... | | POST | `/admin/konnektive/product-mapping` | POST /admin/konnektive/product-mapping Add or update product... | | DELETE | `/admin/konnektive/product-mapping` | DELETE /admin/konnektive/product-mapping Remove product SKU ... | | GET | `/admin/konnektive/products` | GET /admin/konnektive/products Fetch Konnektive products fro... | | GET | `/admin/marketing` | No description | | GET | `/admin/marketing/ad-sets` | // List ad sets | | POST | `/admin/marketing/ad-sets` | // Create ad set | | GET | `/admin/marketing/ai-insights` | No description | | GET | `/admin/marketing/analytics-simple` | No description | | GET | `/admin/marketing/analytics/platforms` | No description | | GET | `/admin/marketing/attribution` | No description | | GET | `/admin/marketing/campaigns` | // List campaigns | | POST | `/admin/marketing/campaigns` | // Create campaign | | GET | `/admin/marketing/campaigns/:id` | // Get campaign by ID | | PATCH | `/admin/marketing/campaigns/:id` | // Update campaign | | DELETE | `/admin/marketing/campaigns/:id` | // Delete campaign | | GET | `/admin/marketing/campaigns/:id/insights` | // Get campaign insights | | GET | `/admin/marketing/clickhouse` | // GET /admin/marketing/clickhouse - Get ClickHouse configur... | | POST | `/admin/marketing/clickhouse` | // POST /admin/marketing/clickhouse - Save ClickHouse config... | | DELETE | `/admin/marketing/clickhouse` | // DELETE /admin/marketing/clickhouse - Remove ClickHouse co... | | GET | `/admin/marketing/creatives` | // List creatives | | POST | `/admin/marketing/creatives` | // Create creative | | GET | `/admin/marketing/credentials` | // GET - Get credentials for all platforms | | POST | `/admin/marketing/credentials` | // POST - Save credentials for a platform | | PUT | `/admin/marketing/credentials` | // PUT - Update credentials for a platform | | DELETE | `/admin/marketing/credentials` | // DELETE - Remove credentials for a platform | | GET | `/admin/marketing/customer-journey/:customerId` | // Get customer journey analysis | | GET | `/admin/marketing/dashboard` | No description | | GET | `/admin/marketing/paid-acquisition` | GET /admin/marketing/paid-acquisition Generate paid acquisit... | | POST | `/admin/marketing/paid-acquisition` | POST /admin/marketing/paid-acquisition Generate paid acquisi... | | POST | `/admin/marketing/paid-acquisition/export` | POST /admin/marketing/paid-acquisition/export Export paid ac... | | GET | `/admin/marketing/paid-acquisition/search` | GET /admin/marketing/paid-acquisition/search Search and filt... | | POST | `/admin/marketing/paid-acquisition/search` | POST /admin/marketing/paid-acquisition/search Advanced searc... | | GET | `/admin/marketing/platforms` | // Get platform overview | | GET | `/admin/marketing/simple` | No description | | POST | `/admin/marketing/sync` | // Sync campaigns from advertising platforms | | POST | `/admin/marketing/sync/campaign` | // POST - Trigger campaign sync | | POST | `/admin/marketing/sync/incremental` | // POST - Trigger incremental sync | | GET | `/admin/marketing/webhooks/facebook` | // GET endpoint for webhook verification | | POST | `/admin/marketing/webhooks/facebook` | // POST endpoint for webhook events | | HEAD | `/admin/marketing/webhooks/facebook` | // Health check endpoint | | POST | `/admin/marketing/webhooks/google` | // POST endpoint for Google Ads webhook events | | GET | `/admin/marketing/webhooks/google` | // GET endpoint for webhook verification (if Google implemen... | | POST | `/admin/marketing/webhooks/tiktok` | // POST endpoint for TikTok webhook events | | GET | `/admin/marketing/webhooks/tiktok` | // GET endpoint for webhook verification | | HEAD | `/admin/marketing/webhooks/tiktok` | // HEAD endpoint for health check | | GET | `/admin/me` | GET /admin/me Returns the currently logged-in admin user | | GET | `/admin/my-stores` | No description | | POST | `/admin/my-stores/switch` | No description | | GET | `/admin/payment-diagnostics` | GET /admin/payment-diagnostics Diagnostic endpoint to identi... | | POST | `/admin/payment-diagnostics` | POST /admin/payment-diagnostics/cleanup Force cleanup of sta... | | POST | `/admin/payments/:id/sync-stripe` | POST /admin/payments/:id/sync-stripe Syncs payment status fr... | | GET | `/admin/promotions/:id/:rule_type` | No description | | GET | `/admin/promotions/:id/rule-divergence` | No description | | POST | `/admin/promotions/:id/rule-divergence` | No description | | GET | `/admin/promotions/rule-attribute-options/:rule_type` | No description | | GET | `/admin/promotions/rule-value-options/:rule_type/:rule_attribute_id` | No description | | GET | `/admin/purchase-orders` | No description | | POST | `/admin/purchase-orders` | No description | | GET | `/admin/renewals` | No description | | GET | `/admin/renewals/:id` | No description | | POST | `/admin/renewals/:id/approve-changes` | No description | | POST | `/admin/renewals/:id/force` | No description | | POST | `/admin/renewals/:id/reject-changes` | No description | | GET | `/admin/reviews` | No description | | POST | `/admin/reviews/status` | No description | | GET | `/admin/scheduled-jobs` | No description | | GET | `/admin/scheduled-jobs/:name` | No description | | GET | `/admin/send` | Parent route for /admin/send This route handles delegation t... | | POST | `/admin/send` | No description | | GET | `/admin/send/email-templates` | GET /admin/send/email-templates List all email templates wit... | | POST | `/admin/send/email-templates` | POST /admin/send/email-templates Create a new email template | | GET | `/admin/send/email-templates/:id` | GET /admin/send/email-templates/:id Get a specific email tem... | | PUT | `/admin/send/email-templates/:id` | PUT /admin/send/email-templates/:id Update an email template | | DELETE | `/admin/send/email-templates/:id` | DELETE /admin/send/email-templates/:id Delete an email templ... | | POST | `/admin/send/email-templates/:id/preview` | POST /admin/send/email-templates/:id/preview Preview an emai... | | POST | `/admin/send/email-templates/:id/render` | POST /admin/send/email-templates/:id/render Render an email ... | | POST | `/admin/send/email-templates/validate` | POST /admin/send/email-templates/validate Validate email tem... | | GET | `/admin/site-types` | No description | | POST | `/admin/site-types` | No description | | GET | `/admin/site-types/:id` | No description | | PATCH | `/admin/site-types/:id` | No description | | DELETE | `/admin/site-types/:id` | No description | | GET | `/admin/subscription-analytics/export` | No description | | GET | `/admin/subscription-analytics/kpis` | No description | | POST | `/admin/subscription-analytics/rebuild` | No description | | GET | `/admin/subscription-analytics/trends` | No description | | GET | `/admin/subscription-logs` | No description | | GET | `/admin/subscription-logs/:id` | No description | | GET | `/admin/subscription-offers` | No description | | POST | `/admin/subscription-offers` | No description | | GET | `/admin/subscription-offers/:id` | No description | | POST | `/admin/subscription-offers/:id` | No description | | DELETE | `/admin/subscription-offers/:id` | Remove a plan offer. Until now an offer could only be disabl... | | POST | `/admin/subscription-offers/:id/toggle` | No description | | GET | `/admin/subscription-settings` | No description | | POST | `/admin/subscription-settings` | No description | | GET | `/admin/subscriptions` | No description | | GET | `/admin/subscriptions/:id` | No description | | POST | `/admin/subscriptions/:id/cancel` | No description | | GET | `/admin/subscriptions/:id/notes` | GET /admin/subscriptions/:id/notes Returns all notes for a s... | | POST | `/admin/subscriptions/:id/notes` | POST /admin/subscriptions/:id/notes Add a new note to a subs... | | DELETE | `/admin/subscriptions/:id/notes/:noteId` | DELETE /admin/subscriptions/:id/notes/:noteId Delete a speci... | | PUT | `/admin/subscriptions/:id/notes/:noteId` | PUT /admin/subscriptions/:id/notes/:noteId Update a specific... | | POST | `/admin/subscriptions/:id/pause` | No description | | GET | `/admin/subscriptions/:id/payment-method` | GET /admin/subscriptions/:id/payment-method The card a subsc... | | POST | `/admin/subscriptions/:id/payment-method` | POST /admin/subscriptions/:id/payment-method Body `{ setup_i... | | POST | `/admin/subscriptions/:id/payment-method/setup` | POST /admin/subscriptions/:id/payment-method/setup Start a c... | | POST | `/admin/subscriptions/:id/resume` | No description | | POST | `/admin/subscriptions/:id/schedule-plan-change` | No description | | POST | `/admin/subscriptions/:id/update-discount` | No description | | POST | `/admin/subscriptions/:id/update-next-cycle-discount` | No description | | POST | `/admin/subscriptions/:id/update-quantity` | No description | | POST | `/admin/subscriptions/:id/update-renewal` | No description | | POST | `/admin/subscriptions/:id/update-shipping-address` | No description | | GET | `/admin/ultracart` | GET /admin/ultracart Get UltraCart module status and statist... | | POST | `/admin/ultracart` | POST /admin/ultracart Manually sync an order to UltraCart (r... | | POST | `/admin/ultracart/force-sync` | No description | | GET | `/admin/ultracart/modification-window` | No description | | POST | `/admin/ultracart/modification-window` | POST /admin/ultracart/modification-window Reset modification... | | GET | `/admin/ultracart/scheduled` | No description | | POST | `/admin/ultracart/scheduled` | POST /admin/ultracart/scheduled Manually trigger processing ... | | GET | `/admin/ultracart/stats` | No description | | GET | `/admin/vibe` | GET /admin/vibe/* Serve Vibe SDK static files from vibe-stat... | | GET | `/admin/vibesdk/config/:siteId` | GET /admin/vibesdk/config/:siteId Get VibeSDK configuration ... | | POST | `/admin/vibesdk/proxy` | POST /admin/vibesdk/proxy Proxy requests to VibeSDK with our... | | GET | `/admin/vibesdk/sso-token` | GET /admin/vibesdk/sso-token?siteId=... Returns a short-live... | | POST | `/admin/vibesdk/validate-sso` | POST /admin/vibesdk/validate-sso Validates SSO tokens from e... | | GET | `/admin/webhook-logs` | GET /admin/webhook-logs List all webhook logs with filtering... | | GET | `/admin/webhook-logs/:id` | GET /admin/webhook-logs/:id Get a single webhook log by ID w... | | DELETE | `/admin/webhook-logs/:id` | DELETE /admin/webhook-logs/:id Delete a webhook log (for cle... | | POST | `/admin/webhook-logs/cleanup` | POST /admin/webhook-logs/cleanup Cleanup old webhook logs Bo... | | GET | `/admin/webhook-logs/providers` | GET /admin/webhook-logs/providers Get list of unique provide... | | GET | `/admin/webhook-logs/stats` | GET /admin/webhook-logs/stats Get webhook statistics and ana... | --- ## POST Admin Algolia **Endpoint:** `POST /admin/algolia` **Authentication:** Admin (Required) ### Description POST /admin/algolia/index Index data to Algolia (admin only) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { success, indexed, type, } ``` **Error (503):** ```typescript { error, } ``` **Error (503):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/algolia' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Algolia **Endpoint:** `DELETE /admin/algolia` **Authentication:** Admin (Required) ### Description DELETE /admin/algolia Delete items from Algolia index ### Response **Success:** ```typescript { success, deleted, type, } ``` **Error (503):** ```typescript { error, } ``` **Error (503):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/algolia' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Algolia Search **Endpoint:** `GET /admin/algolia/search` **Authentication:** Admin (Required) ### Description GET /admin/algolia/search Search across Algolia indexes for orders, customers, or products ### Response **Success:** ```typescript { results, query, type, } ``` **Error (503):** ```typescript { error, } ``` **Error (503):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` **Error (500):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/algolia/search' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Announcements **Endpoint:** `GET /admin/announcements` **Authentication:** Admin (Required) ### Description Announcements published so far, newest first, plus the types an operator may publish. The type list ships in the same response so the compose form never hard-codes the registry — adding a kind in `src/lib/notification-types.ts` makes it selectable with no admin rebuild. ### Response **Success:** ```typescript { announcements, types, } ``` **Also returns:** ```typescript { announcements, types, degraded, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/announcements' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Announcements **Endpoint:** `POST /admin/announcements` **Authentication:** Admin (Required) ### Description Publish an announcement: `POST /admin/announcements`. Body: `{ type, title, body, external_ref?, source? }`. `type` must be a publishable id from the notification-type registry — the event types are emitted by jobs and are not forgeable here. Delivers one notification per admin, each addressed to that person, so recipients dismiss their own copy without clearing it for anyone else. Repeating a publish with the same `external_ref` is a 409, which is what makes a retried deploy safe. Returns the announcement as it will read back, plus a `delivery` block, so a publish that reached nobody is visible instead of silently looking like a success. ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (201):** ```typescript { announcement, delivery, } ``` **Error (409):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/announcements' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Audiences **Endpoint:** `GET /admin/audiences` **Authentication:** Admin (Required) ### Description GET /admin/audiences — list audience definitions across every version. POST /admin/audiences — create a draft definition; pass `publish: true` to publish it in the same call. Auth follows the existing admin route pattern (src/api/admin/dunning, src/api/admin/renewals): OmniCart's built-in admin authentication guards every /admin/* route — no route-specific auth middleware here. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/audiences' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Audiences **Endpoint:** `POST /admin/audiences` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` **Also returns (201):** ```typescript { audience_definition, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/audiences' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Banner-options **Endpoint:** `GET /admin/banner-options` **Authentication:** Admin (Required) ### Description Choices for the banner editor's two targeting fields. WHY THIS EXISTS --------------- `store_handle` used to be a free-text box. It is compared literally by the store endpoint, so a typo produced a banner that saved cleanly and then never appeared anywhere, with nothing on screen explaining why — and because the handle is immutable after creation, the fix was delete-and-recreate. Handles come from two places, unioned: 1. BANNER_STORE_HANDLES env — the handles this deployment serves. Set this; it is the only source that works on a tenant with no banners yet. 2. handles already present on banner rows — so an existing deployment is never locked out of its own handle by a missing env var. Sales channels come from the sales-channel module and are the FINE key: a banner with one set shows only on the surface whose publishable key maps to that channel (VNSH's LSS funnel vs its main storefront). Null = all surfaces. ### Response **Success:** ```typescript { preview_base_url, store_handles, sales_channels, handles_unconfigured, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/banner-options' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Banners **Endpoint:** `GET /admin/banners` **Authentication:** Admin (Required) ### Description GET /admin/banners?promotion_id=... ### Response **Success:** ```typescript { banners, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/banners' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Banners **Endpoint:** `POST /admin/banners` **Authentication:** Admin (Required) ### Description POST /admin/banners ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (201):** ```typescript { banner, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/banners' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Banners :id **Endpoint:** `POST /admin/banners/:id` **Authentication:** Admin (Required) ### Description POST /admin/banners/:id — partial update. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { banner, } ``` **Error (400):** ```typescript { message, } ``` **Error (404):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/banners/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Banners :id **Endpoint:** `DELETE /admin/banners/:id` **Authentication:** Admin (Required) ### Description DELETE /admin/banners/:id — soft delete. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { id, object, deleted, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/banners/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Bundled-products **Endpoint:** `POST /admin/bundled-products` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `title` | string | Yes | | `product` | unknown | Yes | | `items` | array | Yes | ### Response **Success:** ```typescript { bundled_product, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/bundled-products' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Bundled-products **Endpoint:** `GET /admin/bundled-products` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { bundled_products, count, limit, offset, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/bundled-products' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Bundled-products :id **Endpoint:** `GET /admin/bundled-products/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Error (404):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/bundled-products/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PATCH Admin Bundled-products :id **Endpoint:** `PATCH /admin/bundled-products/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body | Field | Type | Required | |-------|------|----------| | `title` | string | No | | `items` | array | No | ### Response **Success:** ```typescript { bundled_product, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X PATCH 'https://your-store.omnicart.cc/admin/bundled-products/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Bundled-products :id **Endpoint:** `DELETE /admin/bundled-products/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { id, deleted, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/bundled-products/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Cancellations **Endpoint:** `GET /admin/cancellations` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/cancellations' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Cancellations :id **Endpoint:** `GET /admin/cancellations/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/cancellations/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Cancellations :id Apply-offer **Endpoint:** `POST /admin/cancellations/:id/apply-offer` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/cancellations/:id/apply-offer' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Cancellations :id Finalize **Endpoint:** `POST /admin/cancellations/:id/finalize` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/cancellations/:id/finalize' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Cancellations :id Reason **Endpoint:** `POST /admin/cancellations/:id/reason` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/cancellations/:id/reason' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Carts **Endpoint:** `GET /admin/carts` **Authentication:** Admin (Required) ### Description GET /admin/carts?customer_id={id} Returns carts for a given customer for use in Admin UI widgets ### Response **Success:** ```typescript { carts, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/carts' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Cogs Settings **Endpoint:** `GET /admin/cogs/settings` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { module_enabled, settings, } ``` **Error (400):** ```typescript { message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/cogs/settings' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Cogs Settings **Endpoint:** `POST /admin/cogs/settings` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `default_valuation_method` | enum(FIFO, LIFO, WEIGHTED_AVG) | Yes | | `replenishment_alerts_enabled` | boolean | No | ### Response **Success:** ```typescript { module_enabled, settings, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, issues, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/cogs/settings' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Content-page-options **Endpoint:** `GET /admin/content-page-options` **Authentication:** Admin (Required) ### Description Choices for the content-page editor. WHY THIS EXISTS --------------- Same reason as /admin/banner-options: `store_handle` is compared literally by the store endpoint, so a free-text typo produces a page that saves cleanly and then never appears, with nothing on screen explaining why. Handles come from three places, unioned: 1. CONTENT_PAGE_STORE_HANDLES env, when set. 2. BANNER_STORE_HANDLES env — the same list of storefronts this deployment serves. Reused rather than duplicated so a tenant that has already configured banners does not have to configure this too. 3. handles already present on content_page rows — so an existing deployment is never locked out of its own handle by a missing env var. ### Response **Success:** ```typescript { preview_base_url, store_handles, handles_unconfigured, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/content-page-options' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Content-page-settings **Endpoint:** `GET /admin/content-page-settings` **Authentication:** Admin (Required) ### Description GET /admin/content-page-settings?store_handle=vnsh ### Response **Success:** ```typescript { content_page_settings, } ``` **Error (400):** ```typescript { message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/content-page-settings' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Content-page-settings **Endpoint:** `POST /admin/content-page-settings` **Authentication:** Admin (Required) ### Description POST /admin/content-page-settings ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { content_page_settings, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/content-page-settings' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Content-pages **Endpoint:** `GET /admin/content-pages` **Authentication:** Admin (Required) ### Description GET /admin/content-pages?store_handle=vnsh ### Response **Success:** ```typescript { content_pages, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/content-pages' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Content-pages **Endpoint:** `POST /admin/content-pages` **Authentication:** Admin (Required) ### Description POST /admin/content-pages ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (201):** ```typescript { content_page, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (409):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/content-pages' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PATCH Admin Content-pages :id **Endpoint:** `PATCH /admin/content-pages/:id` **Authentication:** Admin (Required) ### Description PATCH /admin/content-pages/:id — partial update. `store_handle` is deliberately absent: moving a page between storefronts would move its URL out from under whatever links to it, and the slug is unique per handle so the move can also collide. Delete and recreate instead. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { content_page, } ``` **Error (404):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (409):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X PATCH 'https://your-store.omnicart.cc/admin/content-pages/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Content-pages :id **Endpoint:** `DELETE /admin/content-pages/:id` **Authentication:** Admin (Required) ### Description DELETE /admin/content-pages/:id — soft delete. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { id, object, deleted, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/content-pages/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Custom **Endpoint:** `GET /admin/custom` **Authentication:** Admin (Required) ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/custom' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Customers :id Notes **Endpoint:** `GET /admin/customers/:id/notes` **Authentication:** Admin (Required) ### Description GET /admin/customers/:id/notes Returns all notes for a customer ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { notes, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/customers/:id/notes' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Customers :id Notes **Endpoint:** `POST /admin/customers/:id/notes` **Authentication:** Admin (Required) ### Description POST /admin/customers/:id/notes Add a new note to a customer Body: { content: string, tag?: "Called" | "Email" | "Issue" | "Shipping" | "Refund" | null } ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { note, notes, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/customers/:id/notes' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Customers :id Notes :noteId **Endpoint:** `DELETE /admin/customers/:id/notes/:noteId` **Authentication:** Admin (Required) ### Description DELETE /admin/customers/:id/notes/:noteId Delete a specific note from a customer ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | | `noteId` | string | Yes | NoteId identifier | ### Response **Success:** ```typescript { success, notes, } ``` **Error (404):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/customers/:id/notes/:noteId' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PUT Admin Customers :id Notes :noteId **Endpoint:** `PUT /admin/customers/:id/notes/:noteId` **Authentication:** Admin (Required) ### Description PUT /admin/customers/:id/notes/:noteId Update a specific note (content and tag; author and created_at are preserved) Body: { content: string, tag?: "Called" | "Email" | "Issue" | "Shipping" | "Refund" | null } ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | | `noteId` | string | Yes | NoteId identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { note, notes, } ``` **Error (404):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X PUT 'https://your-store.omnicart.cc/admin/customers/:id/notes/:noteId' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Demo-magic-link **Endpoint:** `POST /admin/demo-magic-link` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { url, token, landingPath, expiresInSeconds, } ``` **Error (503):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/demo-magic-link' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Disputes **Endpoint:** `GET /admin/disputes` **Authentication:** Admin (Required) ### Description GET /admin/disputes List locally-mirrored Stripe disputes. Backs the order-page dispute banner (?order_id=...) and gives ops a queryable view of open chargebacks and their evidence deadlines (?open=true). Query params: - order_id / payment_id — scope to one order or payment - open=true — only disputes that currently block refunds - limit / offset — pagination (default 50) ### Response **Success:** ```typescript { disputes, count, limit, offset, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/disputes' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Disputes :id Accept **Endpoint:** `POST /admin/disputes/:id/accept` **Authentication:** Admin (Required) ### Description POST /admin/disputes/:id/accept Concede the dispute: the customer keeps the funds via the chargeback. This is FINAL — Stripe closes the dispute as lost and the money is gone, so the UI confirms before calling this. :id is the LOCAL payment_dispute record id (pdis_...). Actions are routed by the record's provider — only Stripe is implemented; other providers get a clean 400 instead of a silent no-op. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` **Also returns:** ```typescript { dispute, } ``` **Error (404):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/disputes/:id/accept' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Disputes :id Evidence **Endpoint:** `POST /admin/disputes/:id/evidence` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { submitted, evidence_field_count, dispute, } ``` **Also returns:** ```typescript { type, message, } ``` **Error (404):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/disputes/:id/evidence' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Draft-orders :id Payment-link **Endpoint:** `POST /admin/draft-orders/:id/payment-link` **Authentication:** Admin (Required) ### Description Create (or reuse) the payment link for a draft order and optionally send it. Body: - `channel` — "none" (create only), "sms", or "email". Default "none". - `to` — override recipient. Defaults to the draft's phone (sms) or email. - `expires_in_hours` — link lifetime, 1..720. Default 72. - `regenerate` — mint a new cart even if the current link is still valid. Responds 200 with `{ url, cart_id, expires_at, warnings, delivery }`. `warnings` lists non-fatal problems replaying the draft onto the cart — shipping or promotion codes that could not be applied. `delivery.status` is "sent", "failed", or "skipped" (channel "none"); a failed SEND still returns 200 because the link itself exists and can be copied from the admin. 404 when the order does not exist, 409 when it is not a draft order, 422 when the draft has no line item that can be placed on a cart. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body | Field | Type | Required | |-------|------|----------| | `channel` | enum(none, sms, email) | No | | `to` | string | No | | `expires_in_hours` | number | No | | `regenerate` | boolean | No | ### Response **Success (200):** ```typescript { url, cart_id, expires_at, reused, skipped_items, warnings, delivery, } ``` **Also returns:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/draft-orders/:id/payment-link' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Draft-orders :id Payment-link **Endpoint:** `GET /admin/draft-orders/:id/payment-link` **Authentication:** Admin (Required) ### Description Read the draft order's stored payment link plus the live state of its cart. Responds 200 with `{ payment_link, cart }`. `payment_link` is null when no link was ever created. `cart` carries `completed_at` so the admin can tell a link that is still open from one the customer already paid, and `expired` reflects the stored expiry against the current time. 404 when the order does not exist, 409 when it is not a draft order. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success (200):** ```typescript { payment_link, cart, } ``` **Also returns (200):** ```typescript { payment_link, cart, } ``` **Error (404):** ```typescript { type, message, } ``` **Error (409):** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/draft-orders/:id/payment-link' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Dunning **Endpoint:** `GET /admin/dunning` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/dunning' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Dunning :id **Endpoint:** `GET /admin/dunning/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/dunning/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Dunning :id Mark-recovered **Endpoint:** `POST /admin/dunning/:id/mark-recovered` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/dunning/:id/mark-recovered' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Dunning :id Mark-unrecovered **Endpoint:** `POST /admin/dunning/:id/mark-unrecovered` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/dunning/:id/mark-unrecovered' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Dunning :id Retry-now **Endpoint:** `POST /admin/dunning/:id/retry-now` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/dunning/:id/retry-now' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Dunning :id Retry-schedule **Endpoint:** `POST /admin/dunning/:id/retry-schedule` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/dunning/:id/retry-schedule' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Extensions **Endpoint:** `GET /admin/extensions` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { extensions, count, } ``` **Also returns:** ```typescript { message, code, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/extensions' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Extensions :id **Endpoint:** `GET /admin/extensions/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { extension, } ``` **Also returns:** ```typescript { message, code, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/extensions/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Extensions :id Toggle **Endpoint:** `POST /admin/extensions/:id/toggle` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { extension, } ``` **Also returns:** ```typescript { message, code, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/extensions/:id/toggle' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Extensions Check-enabled **Endpoint:** `GET /admin/extensions/check-enabled` **Authentication:** Admin (Required) ### Description GET /admin/extensions/check-enabled?module=marketing Check if a specific module is enabled ### Response **Success:** ```typescript { enabled, module, } ``` **Error (400):** ```typescript { enabled, message, } ``` **Error (500):** ```typescript { enabled, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/extensions/check-enabled' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Extensions Check :name **Endpoint:** `GET /admin/extensions/check/:name` **Authentication:** Admin (Required) ### Description Check if an extension is enabled GET /admin/extensions/check/:name ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `name` | string | Yes | Name identifier | ### Response **Success:** ```typescript { enabled, } ``` **Error (400):** ```typescript { message, enabled, } ``` **Error (500):** ```typescript { message, enabled, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/extensions/check/:name' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Free-shipping-report **Endpoint:** `GET /admin/free-shipping-report` **Authentication:** Admin (Required) ### Response **Error (400):** ```typescript { message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/free-shipping-report' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Free-shipping-threshold **Endpoint:** `GET /admin/free-shipping-threshold` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { shipping_option_id, shipping_option_name, threshold, operator, } ``` **Also returns:** ```typescript { shipping_option_id, threshold, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/free-shipping-threshold' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Free-shipping-threshold **Endpoint:** `POST /admin/free-shipping-threshold` **Authentication:** Admin (Required) ### Description // Update the free-shipping threshold by surgically updating the item_total price rule value(s). ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { threshold, updated_rules, } ``` **Error (400):** ```typescript { message, } ``` **Error (404):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/free-shipping-threshold' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Funnel-carts :id Line-items **Endpoint:** `POST /admin/funnel-carts/:id/line-items` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { cart, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/funnel-carts/:id/line-items' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Funnels **Endpoint:** `GET /admin/funnels` **Authentication:** Admin (Required) ### Response **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/funnels' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Funnels **Endpoint:** `POST /admin/funnels` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { funnel, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/funnels' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Funnels :id **Endpoint:** `GET /admin/funnels/:id` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/{id}: get: tags: [Funnels] description: Retrieves a funnel by ID parameters: - in: path name: id required: true schema: type: string responses: 200: description: OK content: application/json: schema: properties: funnel: $ref: "#/components/schemas/Funnel" ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { funnel, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/funnels/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Funnels :id **Endpoint:** `POST /admin/funnels/:id` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/{id}: post: tags: [Funnels] description: Updates a funnel by ID parameters: - in: path name: id required: true schema: type: string requestBody: content: application/json: schema: properties: name: type: string description: type: string conversion_goal: type: string status: type: string enum: [draft, active, archived] responses: 200: description: OK content: application/json: schema: properties: funnel: $ref: "#/components/schemas/Funnel" ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { funnel, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/funnels/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Funnels :id **Endpoint:** `DELETE /admin/funnels/:id` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/{id}: delete: tags: [Funnels] description: Deletes a funnel by ID parameters: - in: path name: id required: true schema: type: string responses: 200: description: OK ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { id, deleted, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/funnels/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Funnels Analytics **Endpoint:** `GET /admin/funnels/analytics` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/analytics: get: tags: [Funnels] description: Retrieves funnel analytics parameters: - in: query name: funnel_id schema: type: string required: true responses: 200: description: OK content: application/json: schema: properties: analytics: type: object ### Response **Success:** ```typescript { analytics, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/funnels/analytics' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Funnels Pages **Endpoint:** `GET /admin/funnels/pages` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/pages: get: tags: [Funnels] description: Retrieves funnel pages responses: 200: description: OK content: application/json: schema: properties: pages: type: array ### Response **Success:** ```typescript { pages, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/funnels/pages' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Funnels Pages **Endpoint:** `POST /admin/funnels/pages` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/pages: post: tags: [Funnels] description: Creates a new funnel page requestBody: content: application/json: schema: required: - title - slug - funnel_id - stage_id properties: title: type: string slug: type: string funnel_id: type: string stage_id: type: string content_id: type: string template: type: string position: type: number responses: 200: description: OK content: application/json: schema: properties: page: $ref: "#/components/schemas/FunnelPage" ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { page, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/funnels/pages' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Funnels Stages **Endpoint:** `GET /admin/funnels/stages` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/stages: get: tags: [Funnels] description: Retrieves funnel stages responses: 200: description: OK content: application/json: schema: properties: stages: type: array ### Response **Success:** ```typescript { stages, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, stages, } ``` **Error (500):** ```typescript { message, stack, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/funnels/stages' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Funnels Stages **Endpoint:** `POST /admin/funnels/stages` **Authentication:** Admin (Required) ### Description @swagger /admin/funnels/stages: post: tags: [Funnels] description: Creates a new funnel stage requestBody: content: application/json: schema: required: - name - funnel_id - position properties: name: type: string description: type: string funnel_id: type: string position: type: number is_entry_point: type: boolean responses: 200: description: OK content: application/json: schema: properties: stage: $ref: "#/components/schemas/FunnelStage" ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { stage, } ``` **Error (400):** ```typescript { message, } ``` **Error (404):** ```typescript { message, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/funnels/stages' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PUT Admin Funnels Stages :id **Endpoint:** `PUT /admin/funnels/stages/:id` **Authentication:** Admin (Required) ### Description Update an existing funnel stage ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { stage, } ``` **Error (400):** ```typescript { message, } ``` **Error (404):** ```typescript { message, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X PUT 'https://your-store.omnicart.cc/admin/funnels/stages/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Funnels Stages :id **Endpoint:** `DELETE /admin/funnels/stages/:id` **Authentication:** Admin (Required) ### Description Delete a funnel stage ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { id, deleted, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/funnels/stages/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Funnels Stages Reorder **Endpoint:** `POST /admin/funnels/stages/reorder` **Authentication:** Admin (Required) ### Description Reorder funnel stages ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (200):** ```typescript { stages, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/funnels/stages/reorder' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Internal Checkout-context **Endpoint:** `POST /admin/internal/checkout-context` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `cart_id` | string | Yes | | `checkout_token` | string | Yes | ### Response **Success:** ```typescript { ok, cart_id, stamped, } ``` **Also returns:** ```typescript { ok, cart_id, stamped, } ``` **Error (400):** ```typescript { error, issues, } ``` **Error (503):** ```typescript { error, } ``` **Error (401):** ```typescript { error, } ``` **Error (401):** ```typescript { error, } ``` **Error (503):** ```typescript { error, } ``` **Error (403):** ```typescript { error, } ``` **Error (404):** ```typescript { error, } ``` **Error (409):** ```typescript { error, } ``` **Error (401):** ```typescript { error, } ``` **Error (503):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/internal/checkout-context' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Internal Members **Endpoint:** `POST /admin/internal/members` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `email` | string | Yes | | `role` | enum(admin, editor, viewer) | Yes | | `action` | enum(upsert, remove) | Yes | ### Response **Error (400):** ```typescript { error, issues, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/internal/members' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Internal Members **Endpoint:** `GET /admin/internal/members` **Authentication:** Admin (Required) ### Description Snapshot of this store's federated members: every user that holds one of the three standard roles, with its store role. Used by the SysOp reconcile job to detect + heal drift. Users with no standard role are omitted (they're not part of the federation). ### Response **Success:** ```typescript { members, } ``` **Also returns:** ```typescript { members, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/internal/members' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Internal Sales-metrics **Endpoint:** `GET /admin/internal/sales-metrics` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { total, days, meta, } ``` **Error (400):** ```typescript { message, issues, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { code, message, maxDays, requestedDays, } ``` **Error (500):** ```typescript { message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/internal/sales-metrics' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Internal Superplane-cart **Endpoint:** `POST /admin/internal/superplane-cart` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `email` | string | Yes | | `first_name` | string | No | | `last_name` | string | No | | `region_id` | string | No | | `sales_channel_id` | string | No | | `currency_code` | string | No | | `purchase_mode` | enum(subscription, one_time) | No | | `items` | record | No | | `metadata` | record | No | ### Response **Success (200):** ```typescript { cart_id, checkout_url, customer_id, attributed, } ``` **Error (400):** ```typescript { error, issues, } ``` **Error (422):** ```typescript { error, } ``` **Error (422):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/internal/superplane-cart' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Internal Unified-context **Endpoint:** `POST /admin/internal/unified-context` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { ok, cart_id, stamped, } ``` **Error (400):** ```typescript { error, } ``` **Error (404):** ```typescript { error, } ``` **Error (409):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/internal/unified-context' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Konnektive Outbound-sync :orderId Force **Endpoint:** `POST /admin/konnektive/outbound-sync/:orderId/force` **Authentication:** Admin (Required) ### Description POST /admin/konnektive/outbound-sync/:orderId/force Force immediate sync of an order (bypass modification window) Use cases: - Urgent orders requiring immediate fulfillment - Manual correction after failed sync - Customer service requests @returns Sync result with Konnektive customer ID and order ID ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `orderId` | string | Yes | OrderId identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (200):** ```typescript { message, result, } ``` **Error (400):** ```typescript { error, message, errorCode, attempts, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/konnektive/outbound-sync/:orderId/force' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Konnektive Outbound-sync :orderId Retry **Endpoint:** `POST /admin/konnektive/outbound-sync/:orderId/retry` **Authentication:** Admin (Required) ### Description POST /admin/konnektive/outbound-sync/:orderId/retry Retry a failed sync for a specific order Use cases: - Recover from transient API errors - Retry after fixing product SKU mappings - Retry after Konnektive service restoration @returns Sync result with success/failure status ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `orderId` | string | Yes | OrderId identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (200):** ```typescript { message, result, } ``` **Error (400):** ```typescript { error, message, errorCode, attempts, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/konnektive/outbound-sync/:orderId/retry' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Konnektive Outbound-sync :orderId Status **Endpoint:** `GET /admin/konnektive/outbound-sync/:orderId/status` **Authentication:** Admin (Required) ### Description GET /admin/konnektive/outbound-sync/:orderId/status Get sync status for a specific order @returns Sync status including scheduled time, attempts, Konnektive IDs, errors ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `orderId` | string | Yes | OrderId identifier | ### Response **Success (200):** ```typescript { status, } ``` **Error (404):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/konnektive/outbound-sync/:orderId/status' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Konnektive Outbound-sync Failed **Endpoint:** `GET /admin/konnektive/outbound-sync/failed` **Authentication:** Admin (Required) ### Description GET /admin/konnektive/outbound-sync/failed List all failed syncs for troubleshooting Query params: - limit: Maximum number of results (default: 50) @returns List of failed sync records with error details ### Response **Success (200):** ```typescript { failedSyncs, count, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/konnektive/outbound-sync/failed' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Konnektive Outbound-sync Statistics **Endpoint:** `GET /admin/konnektive/outbound-sync/statistics` **Authentication:** Admin (Required) ### Description GET /admin/konnektive/outbound-sync/statistics Get overall sync statistics and metrics Metrics include: - Total syncs by status (scheduled, pending, synced, failed) - Average modifications per order (Flow Builder upsells) - Average sync attempts (retry metrics) @returns Comprehensive sync statistics ### Response **Success (200):** ```typescript { statistics, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/konnektive/outbound-sync/statistics' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Konnektive Product-mapping **Endpoint:** `GET /admin/konnektive/product-mapping` **Authentication:** Admin (Required) ### Description GET /admin/konnektive/product-mapping Get all product SKU mappings (OmniCart SKU → Konnektive product_id) @returns Map of OmniCart SKUs to Konnektive product IDs ### Response **Success (200):** ```typescript { mapping, count, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/konnektive/product-mapping' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Konnektive Product-mapping **Endpoint:** `POST /admin/konnektive/product-mapping` **Authentication:** Admin (Required) ### Description POST /admin/konnektive/product-mapping Add or update product SKU mappings Request body: { "mappings": { "OMNICART_SKU": "KONNEKTIVE_PRODUCT_ID", ... } } @returns Updated mapping ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (200):** ```typescript { message, mapping, count, } ``` **Error (400):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/konnektive/product-mapping' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Konnektive Product-mapping **Endpoint:** `DELETE /admin/konnektive/product-mapping` **Authentication:** Admin (Required) ### Description DELETE /admin/konnektive/product-mapping Remove product SKU mappings Request body: { "skus": ["OMNICART_SKU1", "OMNICART_SKU2", ...] } @returns Updated mapping ### Response **Success (200):** ```typescript { message, removedCount, mapping, count, } ``` **Error (400):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/konnektive/product-mapping' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Konnektive Products **Endpoint:** `GET /admin/konnektive/products` **Authentication:** Admin (Required) ### Description GET /admin/konnektive/products Fetch Konnektive products from the Konnektive API ### Response **Success (200):** ```typescript { products, } ``` **Error (503):** ```typescript { error, } ``` **Error (500):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/konnektive/products' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing **Endpoint:** `GET /admin/marketing` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { success, data, } ``` **Error (500):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Ad-sets **Endpoint:** `GET /admin/marketing/ad-sets` **Authentication:** Admin (Required) ### Description // List ad sets ### Response **Success:** ```typescript { success, data, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/ad-sets' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Ad-sets **Endpoint:** `POST /admin/marketing/ad-sets` **Authentication:** Admin (Required) ### Description // Create ad set ### Request Body | Field | Type | Required | |-------|------|----------| | `campaignId` | string | No | | `status` | enum | No | | `limit` | number | No | | `offset` | number | No | ### Response **Success (201):** ```typescript { success, data, } ``` **Error (404):** ```typescript { success, message, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/ad-sets' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Ai-insights **Endpoint:** `GET /admin/marketing/ai-insights` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { success, data, } ``` **Also returns:** ```typescript { success, data, } ``` **Error (500):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/ai-insights' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Analytics-simple **Endpoint:** `GET /admin/marketing/analytics-simple` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { platforms, totals, dateRange, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/analytics-simple' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Analytics Platforms **Endpoint:** `GET /admin/marketing/analytics/platforms` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { success, data, } ``` **Also returns:** ```typescript { success, data, } ``` **Error (500):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/analytics/platforms' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Attribution **Endpoint:** `GET /admin/marketing/attribution` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { success, data, } ``` **Also returns:** ```typescript { success, data, } ``` **Error (500):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/attribution' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Campaigns **Endpoint:** `GET /admin/marketing/campaigns` **Authentication:** Admin (Required) ### Description // List campaigns ### Response **Success:** ```typescript { success, data, meta, } ``` **Also returns:** ```typescript { success, data, meta, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/campaigns' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Campaigns **Endpoint:** `POST /admin/marketing/campaigns` **Authentication:** Admin (Required) ### Description // Create campaign ### Request Body | Field | Type | Required | |-------|------|----------| | `name` | string | Yes | | `platform` | enum | Yes | | `platform_campaign_id` | string | Yes | | `status` | enum | No | | `objective` | string | No | | `budget` | number | No | | `start_date` | string | No | | `end_date` | string | No | | `metadata` | record | No | ### Response **Success (201):** ```typescript { success, data, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/campaigns' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Campaigns :id **Endpoint:** `GET /admin/marketing/campaigns/:id` **Authentication:** Admin (Required) ### Description // Get campaign by ID ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { success, data, } ``` **Also returns:** ```typescript { success, data, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/campaigns/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PATCH Admin Marketing Campaigns :id **Endpoint:** `PATCH /admin/marketing/campaigns/:id` **Authentication:** Admin (Required) ### Description // Update campaign ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body | Field | Type | Required | |-------|------|----------| | `name` | string | No | | `status` | enum | No | | `budget` | number | No | | `end_date` | string | No | | `metadata` | record | No | ### Response **Success:** ```typescript { success, data, message, } ``` ### Example Request ```bash curl -X PATCH 'https://your-store.omnicart.cc/admin/marketing/campaigns/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Marketing Campaigns :id **Endpoint:** `DELETE /admin/marketing/campaigns/:id` **Authentication:** Admin (Required) ### Description // Delete campaign ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { success, message, archived, } ``` **Also returns:** ```typescript { success, message, deleted, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/marketing/campaigns/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Campaigns :id Insights **Endpoint:** `GET /admin/marketing/campaigns/:id/insights` **Authentication:** Admin (Required) ### Description // Get campaign insights ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { success, data, } ``` **Error (404):** ```typescript { success, message, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/campaigns/:id/insights' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Clickhouse **Endpoint:** `GET /admin/marketing/clickhouse` **Authentication:** Admin (Required) ### Description // GET /admin/marketing/clickhouse - Get ClickHouse configuration ### Response **Success:** ```typescript { success, data, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/clickhouse' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Clickhouse **Endpoint:** `POST /admin/marketing/clickhouse` **Authentication:** Admin (Required) ### Description // POST /admin/marketing/clickhouse - Save ClickHouse configuration ### Request Body | Field | Type | Required | |-------|------|----------| | `url` | unknown | Yes | | `database` | string | Yes | | `user` | string | Yes | | `password` | string | Yes | ### Response **Success:** ```typescript { success, message, data, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/clickhouse' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Marketing Clickhouse **Endpoint:** `DELETE /admin/marketing/clickhouse` **Authentication:** Admin (Required) ### Description // DELETE /admin/marketing/clickhouse - Remove ClickHouse configuration ### Response **Success:** ```typescript { success, message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/marketing/clickhouse' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Creatives **Endpoint:** `GET /admin/marketing/creatives` **Authentication:** Admin (Required) ### Description // List creatives ### Response **Success:** ```typescript { success, data, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/creatives' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Creatives **Endpoint:** `POST /admin/marketing/creatives` **Authentication:** Admin (Required) ### Description // Create creative ### Request Body | Field | Type | Required | |-------|------|----------| | `adSetId` | string | No | | `campaignId` | string | No | | `type` | enum | No | | `status` | enum | No | | `performanceStatus` | enum | No | | `limit` | number | No | | `offset` | number | No | | `order` | enum(created_at, ctr, conversions, spend) | No | | `direction` | enum(ASC, DESC) | No | ### Response **Success (201):** ```typescript { success, data, } ``` **Error (404):** ```typescript { success, message, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/creatives' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Credentials **Endpoint:** `GET /admin/marketing/credentials` **Authentication:** Admin (Required) ### Description // GET - Get credentials for all platforms ### Response **Success:** ```typescript { success, data, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/credentials' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Credentials **Endpoint:** `POST /admin/marketing/credentials` **Authentication:** Admin (Required) ### Description // POST - Save credentials for a platform ### Request Body | Field | Type | Required | |-------|------|----------| | `platform` | enum | Yes | | `facebook_app_id` | string | No | | `facebook_app_secret` | string | No | | `facebook_access_token` | string | No | | `facebook_ad_account_id` | string | No | | `facebook_webhook_verify_token` | string | No | | `google_client_id` | string | No | | `google_client_secret` | string | No | | `google_refresh_token` | string | No | | `google_developer_token` | string | No | | `google_customer_id` | string | No | | `google_webhook_secret` | string | No | | `tiktok_app_id` | string | No | | `tiktok_app_secret` | string | No | | `tiktok_access_token` | string | No | | `tiktok_advertiser_id` | string | No | | `tiktok_webhook_secret` | string | No | | `tiktok_webhook_verify_token` | string | No | | `clickhouse_url` | string | No | | `clickhouse_database` | string | No | | `clickhouse_user` | string | No | | `clickhouse_password` | string | No | | `campaign_sync_enabled` | boolean | No | | `campaign_sync_schedule` | string | No | | `incremental_sync_enabled` | boolean | No | | `incremental_sync_schedule` | string | No | ### Response **Success:** ```typescript { success, message, data, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/credentials' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PUT Admin Marketing Credentials **Endpoint:** `PUT /admin/marketing/credentials` **Authentication:** Admin (Required) ### Description // PUT - Update credentials for a platform ### Request Body | Field | Type | Required | |-------|------|----------| | `platform` | enum | Yes | | `facebook_app_id` | string | No | | `facebook_app_secret` | string | No | | `facebook_access_token` | string | No | | `facebook_ad_account_id` | string | No | | `facebook_webhook_verify_token` | string | No | | `google_client_id` | string | No | | `google_client_secret` | string | No | | `google_refresh_token` | string | No | | `google_developer_token` | string | No | | `google_customer_id` | string | No | | `google_webhook_secret` | string | No | | `tiktok_app_id` | string | No | | `tiktok_app_secret` | string | No | | `tiktok_access_token` | string | No | | `tiktok_advertiser_id` | string | No | | `tiktok_webhook_secret` | string | No | | `tiktok_webhook_verify_token` | string | No | | `clickhouse_url` | string | No | | `clickhouse_database` | string | No | | `clickhouse_user` | string | No | | `clickhouse_password` | string | No | | `campaign_sync_enabled` | boolean | No | | `campaign_sync_schedule` | string | No | | `incremental_sync_enabled` | boolean | No | | `incremental_sync_schedule` | string | No | ### Response **Success:** ```typescript { success, message, data, } ``` ### Example Request ```bash curl -X PUT 'https://your-store.omnicart.cc/admin/marketing/credentials' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Marketing Credentials **Endpoint:** `DELETE /admin/marketing/credentials` **Authentication:** Admin (Required) ### Description // DELETE - Remove credentials for a platform ### Response **Success:** ```typescript { success, message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/marketing/credentials' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Customer-journey :customerId **Endpoint:** `GET /admin/marketing/customer-journey/:customerId` **Authentication:** Admin (Required) ### Description // Get customer journey analysis ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `customerId` | string | Yes | CustomerId identifier | ### Response **Success:** ```typescript { success, data, } ``` **Error (404):** ```typescript { success, message, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/customer-journey/:customerId' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Dashboard **Endpoint:** `GET /admin/marketing/dashboard` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { metrics, platformBreakdown, recentCampaigns, timeSeriesData, dateRange, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/dashboard' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Paid-acquisition **Endpoint:** `GET /admin/marketing/paid-acquisition` **Authentication:** Admin (Required) ### Description GET /admin/marketing/paid-acquisition Generate paid acquisition operational report with query parameters ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/paid-acquisition' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Paid-acquisition **Endpoint:** `POST /admin/marketing/paid-acquisition` **Authentication:** Admin (Required) ### Description POST /admin/marketing/paid-acquisition Generate paid acquisition operational report with advanced filtering ### Request Body | Field | Type | Required | |-------|------|----------| | `start_date` | string | Yes | | `end_date` | string | Yes | | `platforms` | string | No | | `campaigns` | string | No | | `funnel_stages` | string | No | | `funnel_types` | string | No | | `attribution_model` | unknown | No | | `attribution_window_days` | string | No | | `granularity` | unknown | No | | `drill_down_dimensions` | string | No | | `metrics` | string | No | | `sort_by` | string | No | | `sort_order` | enum(asc, desc) | No | | `limit` | string | No | | `offset` | string | No | ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/paid-acquisition' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Paid-acquisition Export **Endpoint:** `POST /admin/marketing/paid-acquisition/export` **Authentication:** Admin (Required) ### Description POST /admin/marketing/paid-acquisition/export Export paid acquisition operational report in various formats ### Request Body | Field | Type | Required | |-------|------|----------| | `reportRequest` | record | No | | `format` | unknown | Yes | | `includeCharts` | boolean | No | | `includeRawData` | boolean | No | | `customFields` | array | No | | `fileName` | string | No | ### Response **Success:** ```typescript { success, data, meta, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/paid-acquisition/export' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Paid-acquisition Search **Endpoint:** `GET /admin/marketing/paid-acquisition/search` **Authentication:** Admin (Required) ### Description GET /admin/marketing/paid-acquisition/search Search and filter paid acquisition data with query parameters ### Response **Success:** ```typescript { success, data, facets, meta, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/paid-acquisition/search' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Paid-acquisition Search **Endpoint:** `POST /admin/marketing/paid-acquisition/search` **Authentication:** Admin (Required) ### Description POST /admin/marketing/paid-acquisition/search Advanced search with complex filtering and faceted search ### Request Body | Field | Type | Required | |-------|------|----------| | `query` | string | No | | `facets` | string | No | | `platforms` | string | No | | `campaigns` | string | No | | `funnel_stages` | string | No | | `funnel_types` | string | No | | `attribution_model` | unknown | No | | `start_date` | string | No | | `end_date` | string | No | | `min_spend` | string | No | | `max_spend` | string | No | | `min_roas` | string | No | | `max_roas` | string | No | | `min_conversions` | string | No | | `max_conversions` | string | No | | `countries` | string | No | | `regions` | string | No | | `age_groups` | string | No | | `genders` | string | No | | `device_types` | string | No | | `sort_by` | string | No | | `sort_order` | enum(asc, desc) | No | | `limit` | string | No | | `offset` | string | No | ### Response **Success:** ```typescript { success, data, facets, aggregations, meta, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/paid-acquisition/search' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Platforms **Endpoint:** `GET /admin/marketing/platforms` **Authentication:** Admin (Required) ### Description // Get platform overview ### Response **Success:** ```typescript { success, data, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/platforms' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Simple **Endpoint:** `GET /admin/marketing/simple` **Authentication:** Admin (Required) ### Response **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/simple' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Sync **Endpoint:** `POST /admin/marketing/sync` **Authentication:** Admin (Required) ### Description // Sync campaigns from advertising platforms ### Request Body | Field | Type | Required | |-------|------|----------| | `platform` | enum | Yes | | `accountId` | string | Yes | | `syncType` | enum(campaigns, full) | No | | `options` | object | No | ### Response **Success:** ```typescript { success, data, message, } ``` **Error (400):** ```typescript { success, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/sync' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Sync Campaign **Endpoint:** `POST /admin/marketing/sync/campaign` **Authentication:** Admin (Required) ### Description // POST - Trigger campaign sync ### Request Body | Field | Type | Required | |-------|------|----------| | `platform` | enum | No | | `accountId` | string | No | ### Response **Success:** ```typescript { success, message, data, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/sync/campaign' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Sync Incremental **Endpoint:** `POST /admin/marketing/sync/incremental` **Authentication:** Admin (Required) ### Description // POST - Trigger incremental sync ### Request Body | Field | Type | Required | |-------|------|----------| | `platform` | enum | No | | `lookbackDays` | number | No | ### Response **Success:** ```typescript { success, message, data, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/sync/incremental' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Webhooks Facebook **Endpoint:** `GET /admin/marketing/webhooks/facebook` **Authentication:** Admin (Required) ### Description // GET endpoint for webhook verification ### Response **Error (400):** ```typescript { success, message, errors, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/webhooks/facebook' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Webhooks Facebook **Endpoint:** `POST /admin/marketing/webhooks/facebook` **Authentication:** Admin (Required) ### Description // POST endpoint for webhook events ### Request Body | Field | Type | Required | |-------|------|----------| | `hub.mode` | unknown | Yes | | `hub.challenge` | string | Yes | | `hub.verify_token` | string | Yes | ### Response **Success (200):** ```typescript { success, received, processed, errors, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/webhooks/facebook' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## HEAD Admin Marketing Webhooks Facebook **Endpoint:** `HEAD /admin/marketing/webhooks/facebook` **Authentication:** Admin (Required) ### Description // Health check endpoint ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X HEAD 'https://your-store.omnicart.cc/admin/marketing/webhooks/facebook' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Webhooks Google **Endpoint:** `POST /admin/marketing/webhooks/google` **Authentication:** Admin (Required) ### Description // POST endpoint for Google Ads webhook events ### Request Body | Field | Type | Required | |-------|------|----------| | `customerId` | string | Yes | | `eventType` | enum(update, update, update, new, tracked, tracked, view, tracked, exhausted, violation) | Yes | | `timestamp` | string | Yes | | `data` | record | No | | `signature` | string | Yes | ### Response **Success (200):** ```typescript { success, received, eventType, processed, } ``` **Also returns (200):** ```typescript { success, received, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/webhooks/google' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Webhooks Google **Endpoint:** `GET /admin/marketing/webhooks/google` **Authentication:** Admin (Required) ### Description // GET endpoint for webhook verification (if Google implements it) ### Response **Success (200):** ```typescript { status, webhook, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/webhooks/google' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Marketing Webhooks Tiktok **Endpoint:** `POST /admin/marketing/webhooks/tiktok` **Authentication:** Admin (Required) ### Description // POST endpoint for TikTok webhook events ### Request Body | Field | Type | Required | |-------|------|----------| | `event_type` | enum(track, complete, impression, click, view, view, submit, add_to_cart, checkout, purchase, install, open, status_change, exhausted) | Yes | | `timestamp` | number | Yes | | `advertiser_id` | string | Yes | | `data` | record | No | ### Response **Success (200):** ```typescript { success, received, event_type, processed, } ``` **Also returns (200):** ```typescript { success, received, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/marketing/webhooks/tiktok' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Marketing Webhooks Tiktok **Endpoint:** `GET /admin/marketing/webhooks/tiktok` **Authentication:** Admin (Required) ### Description // GET endpoint for webhook verification ### Response **Success (200):** ```typescript { code, message, } ``` **Also returns (200):** ```typescript { status, webhook, } ``` **Error (401):** ```typescript { code, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/marketing/webhooks/tiktok' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## HEAD Admin Marketing Webhooks Tiktok **Endpoint:** `HEAD /admin/marketing/webhooks/tiktok` **Authentication:** Admin (Required) ### Description // HEAD endpoint for health check ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X HEAD 'https://your-store.omnicart.cc/admin/marketing/webhooks/tiktok' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Me **Endpoint:** `GET /admin/me` **Authentication:** Admin (Required) ### Description GET /admin/me Returns the currently logged-in admin user ### Response **Success:** ```typescript { user, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/me' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin My-stores **Endpoint:** `GET /admin/my-stores` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { stores, } ``` **Also returns:** ```typescript { stores, } ``` **Also returns:** ```typescript { stores, } ``` **Also returns:** ```typescript { stores, } ``` **Also returns:** ```typescript { stores, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/my-stores' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin My-stores Switch **Endpoint:** `POST /admin/my-stores/switch` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { error, } ``` **Also returns:** ```typescript { redirectUrl, expiresInSeconds, } ``` **Error (400):** ```typescript { error, } ``` **Error (503):** ```typescript { error, } ``` **Error (403):** ```typescript { error, } ``` **Error (502):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/my-stores/switch' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Payment-diagnostics **Endpoint:** `GET /admin/payment-diagnostics` **Authentication:** Admin (Required) ### Description GET /admin/payment-diagnostics Diagnostic endpoint to identify payment session issues ### Response **Success:** ```typescript { ...diagnostics summary, } ``` **Error (400):** ```typescript { message, } ``` **Error (404):** ```typescript { message, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/payment-diagnostics' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Payment-diagnostics **Endpoint:** `POST /admin/payment-diagnostics` **Authentication:** Admin (Required) ### Description POST /admin/payment-diagnostics/cleanup Force cleanup of stale payment sessions ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { success, cleaned, failed, details, duration, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/payment-diagnostics' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Payments :id Sync-stripe **Endpoint:** `POST /admin/payments/:id/sync-stripe` **Authentication:** Admin (Required) ### Description POST /admin/payments/:id/sync-stripe Syncs payment status from Stripe to OmniCart. Fetches the latest payment intent status including: - Payment status (succeeded, canceled, etc.) - Dispute status (if disputed) - Refund status Updates the payment record metadata with current Stripe status. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (200):** ```typescript { success, payment_id, stripe_payment_intent, status, warnings, sync_details, } ``` **Error (404):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` **Error (500):** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, code, } ``` **Error (500):** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/payments/:id/sync-stripe' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Promotions :id :rule_type **Endpoint:** `GET /admin/promotions/:id/:rule_type` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | | `rule_type` | string | Yes | Rule_type identifier | ### Response **Success:** ```typescript { rules, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/promotions/:id/:rule_type' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Promotions :id Rule-divergence **Endpoint:** `GET /admin/promotions/:id/rule-divergence` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/promotions/:id/rule-divergence' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Promotions :id Rule-divergence **Endpoint:** `POST /admin/promotions/:id/rule-divergence` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { applied, mode, synced_product_ids, synced_products, ...serialise(after.promotion, after.divergence, after.missingProducts, after.plan) } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/promotions/:id/rule-divergence' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Promotions Rule-attribute-options :rule_type **Endpoint:** `GET /admin/promotions/rule-attribute-options/:rule_type` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `rule_type` | string | Yes | Rule_type identifier | ### Response **Success:** ```typescript { attributes, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/promotions/rule-attribute-options/:rule_type' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Promotions Rule-value-options :rule_type :rule_attribute_id **Endpoint:** `GET /admin/promotions/rule-value-options/:rule_type/:rule_attribute_id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `rule_type` | string | Yes | Rule_type identifier | | `rule_attribute_id` | string | Yes | Rule_attribute_id identifier | ### Response **Success:** ```typescript { values, count, offset, limit, } ``` **Also returns:** ```typescript { values, count, estimate_count, offset, limit, } ``` **Also returns:** ```typescript { values, count, offset, limit, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/promotions/rule-value-options/:rule_type/:rule_attribute_id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Purchase-orders **Endpoint:** `GET /admin/purchase-orders` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { purchase_orders, count, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/purchase-orders' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Purchase-orders **Endpoint:** `POST /admin/purchase-orders` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `inventory_item_id` | string | No | | `variant_id` | string | No | | `location_id` | string | Yes | | `quantity` | string | Yes | | `unit_cost` | string | Yes | | `valuation_method` | enum(FIFO, LIFO, WEIGHTED_AVG) | No | | `supplier_id` | string | No | | `purchase_date` | string | No | | `currency_code` | string | No | | `notes` | string | No | | `metadata` | record | No | ### Response **Success (201):** ```typescript { module_enabled, purchase_order, inventory_costs, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, issues, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (400):** ```typescript { message, } ``` **Error (500):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/purchase-orders' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Renewals **Endpoint:** `GET /admin/renewals` **Authentication:** Admin (Required) ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/renewals' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Renewals :id **Endpoint:** `GET /admin/renewals/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/renewals/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Renewals :id Approve-changes **Endpoint:** `POST /admin/renewals/:id/approve-changes` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/renewals/:id/approve-changes' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Renewals :id Force **Endpoint:** `POST /admin/renewals/:id/force` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/renewals/:id/force' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Renewals :id Reject-changes **Endpoint:** `POST /admin/renewals/:id/reject-changes` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/renewals/:id/reject-changes' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Reviews **Endpoint:** `GET /admin/reviews` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { reviews, count, limit, offset, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/reviews' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Reviews Status **Endpoint:** `POST /admin/reviews/status` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `ids` | array | Yes | | `status` | enum(pending, approved, rejected) | Yes | ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/reviews/status' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Scheduled-jobs **Endpoint:** `GET /admin/scheduled-jobs` **Authentication:** Admin (Required) ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/scheduled-jobs' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Scheduled-jobs :name **Endpoint:** `GET /admin/scheduled-jobs/:name` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `name` | string | Yes | Name identifier | ### Response **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/scheduled-jobs/:name' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Send **Endpoint:** `GET /admin/send` **Authentication:** Admin (Required) ### Description Parent route for /admin/send This route handles delegation to sub-routes ### Response **Error (404):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/send' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Send **Endpoint:** `POST /admin/send` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Error (404):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/send' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Send Email-templates **Endpoint:** `GET /admin/send/email-templates` **Authentication:** Admin (Required) ### Description GET /admin/send/email-templates List all email templates with optional filtering ### Response **Success:** ```typescript { templates, count, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/send/email-templates' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Send Email-templates **Endpoint:** `POST /admin/send/email-templates` **Authentication:** Admin (Required) ### Description POST /admin/send/email-templates Create a new email template ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (201):** ```typescript { template, } ``` **Error (400):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/send/email-templates' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Send Email-templates :id **Endpoint:** `GET /admin/send/email-templates/:id` **Authentication:** Admin (Required) ### Description GET /admin/send/email-templates/:id Get a specific email template ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { template, } ``` **Error (404):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/send/email-templates/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PUT Admin Send Email-templates :id **Endpoint:** `PUT /admin/send/email-templates/:id` **Authentication:** Admin (Required) ### Description PUT /admin/send/email-templates/:id Update an email template ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { template, } ``` **Error (400):** ```typescript { error, } ``` **Error (404):** ```typescript { error, } ``` **Error (404):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X PUT 'https://your-store.omnicart.cc/admin/send/email-templates/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Send Email-templates :id **Endpoint:** `DELETE /admin/send/email-templates/:id` **Authentication:** Admin (Required) ### Description DELETE /admin/send/email-templates/:id Delete an email template (soft delete) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { success, } ``` **Error (404):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/send/email-templates/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Send Email-templates :id Preview **Endpoint:** `POST /admin/send/email-templates/:id/preview` **Authentication:** Admin (Required) ### Description POST /admin/send/email-templates/:id/preview Preview an email template with sample or custom data ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { preview, } ``` **Error (404):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/send/email-templates/:id/preview' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Send Email-templates :id Render **Endpoint:** `POST /admin/send/email-templates/:id/render` **Authentication:** Admin (Required) ### Description POST /admin/send/email-templates/:id/render Render an email template with sample data ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { rendered, sampleData, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/send/email-templates/:id/render' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Send Email-templates Validate **Endpoint:** `POST /admin/send/email-templates/validate` **Authentication:** Admin (Required) ### Description POST /admin/send/email-templates/validate Validate email template syntax without saving ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { isValid, message, } ``` **Error (400):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/send/email-templates/validate' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Site-types **Endpoint:** `GET /admin/site-types` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { items, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/site-types' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Site-types **Endpoint:** `POST /admin/site-types` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `key` | string | Yes | | `label` | string | No | | `framework` | string | No | | `active` | boolean | No | | `template_owner` | string | No | | `template_repo` | string | No | | `repo_provider` | string | No | | `repo_owner` | string | No | | `repo_name` | string | No | | `default_branch` | string | No | | `suggested_envs` | any | No | ### Response **Success:** ```typescript { item, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/site-types' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Site-types :id **Endpoint:** `GET /admin/site-types/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { item, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/site-types/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PATCH Admin Site-types :id **Endpoint:** `PATCH /admin/site-types/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body | Field | Type | Required | |-------|------|----------| | `label` | string | No | | `framework` | string | No | | `active` | boolean | No | | `template_owner` | string | No | | `template_repo` | string | No | | `repo_provider` | string | No | | `repo_owner` | string | No | | `repo_name` | string | No | | `default_branch` | string | No | | `suggested_envs` | any | No | ### Response **Success:** ```typescript { item, } ``` ### Example Request ```bash curl -X PATCH 'https://your-store.omnicart.cc/admin/site-types/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Site-types :id **Endpoint:** `DELETE /admin/site-types/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/site-types/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-analytics Export **Endpoint:** `GET /admin/subscription-analytics/export` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-analytics/export' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-analytics Kpis **Endpoint:** `GET /admin/subscription-analytics/kpis` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-analytics/kpis' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscription-analytics Rebuild **Endpoint:** `POST /admin/subscription-analytics/rebuild` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (200):** ```typescript { rebuild, } ``` **Also returns:** ```typescript { type, message, } ``` **Error (400):** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscription-analytics/rebuild' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-analytics Trends **Endpoint:** `GET /admin/subscription-analytics/trends` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-analytics/trends' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-logs **Endpoint:** `GET /admin/subscription-logs` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-logs' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-logs :id **Endpoint:** `GET /admin/subscription-logs/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-logs/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-offers **Endpoint:** `GET /admin/subscription-offers` **Authentication:** Admin (Required) ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-offers' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscription-offers **Endpoint:** `POST /admin/subscription-offers` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscription-offers' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-offers :id **Endpoint:** `GET /admin/subscription-offers/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-offers/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscription-offers :id **Endpoint:** `POST /admin/subscription-offers/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscription-offers/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Subscription-offers :id **Endpoint:** `DELETE /admin/subscription-offers/:id` **Authentication:** Admin (Required) ### Description Remove a plan offer. Until now an offer could only be disabled, so a list accumulated every one created by mistake and there was no way to tell those apart from offers deliberately paused. The delete is soft: the record stays available to anyone reconstructing why a subscription renewed at the price it did. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success (200):** ```typescript { id, object, deleted, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/subscription-offers/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscription-offers :id Toggle **Endpoint:** `POST /admin/subscription-offers/:id/toggle` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscription-offers/:id/toggle' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscription-settings **Endpoint:** `GET /admin/subscription-settings` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscription-settings' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscription-settings **Endpoint:** `POST /admin/subscription-settings` **Authentication:** Admin (Required) ### Request Body | Field | Type | Required | |-------|------|----------| | `default_trial_days` | number | No | | `dunning_retry_intervals` | array | No | | `max_dunning_attempts` | number | No | | `default_renewal_behavior` | unknown | No | | `default_cancellation_behavior` | unknown | No | | `expected_version` | number | No | | `reason` | string | No | ### Response **Success:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscription-settings' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscriptions **Endpoint:** `GET /admin/subscriptions` **Authentication:** Admin (Required) ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscriptions' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscriptions :id **Endpoint:** `GET /admin/subscriptions/:id` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscriptions/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Cancel **Endpoint:** `POST /admin/subscriptions/:id/cancel` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/cancel' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscriptions :id Notes **Endpoint:** `GET /admin/subscriptions/:id/notes` **Authentication:** Admin (Required) ### Description GET /admin/subscriptions/:id/notes Returns all notes for a subscription ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { notes, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscriptions/:id/notes' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Notes **Endpoint:** `POST /admin/subscriptions/:id/notes` **Authentication:** Admin (Required) ### Description POST /admin/subscriptions/:id/notes Add a new note to a subscription Body: { content: string, tag?: "Called" | "Email" | "Issue" | "Shipping" | "Refund" | null } ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { note, notes, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/notes' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Subscriptions :id Notes :noteId **Endpoint:** `DELETE /admin/subscriptions/:id/notes/:noteId` **Authentication:** Admin (Required) ### Description DELETE /admin/subscriptions/:id/notes/:noteId Delete a specific note from a subscription ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | | `noteId` | string | Yes | NoteId identifier | ### Response **Success:** ```typescript { success, notes, } ``` **Error (404):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/subscriptions/:id/notes/:noteId' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## PUT Admin Subscriptions :id Notes :noteId **Endpoint:** `PUT /admin/subscriptions/:id/notes/:noteId` **Authentication:** Admin (Required) ### Description PUT /admin/subscriptions/:id/notes/:noteId Update a specific note (content and tag; author and created_at are preserved) Body: { content: string, tag?: "Called" | "Email" | "Issue" | "Shipping" | "Refund" | null } ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | | `noteId` | string | Yes | NoteId identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { note, notes, } ``` **Error (404):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X PUT 'https://your-store.omnicart.cc/admin/subscriptions/:id/notes/:noteId' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Pause **Endpoint:** `POST /admin/subscriptions/:id/pause` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/pause' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Subscriptions :id Payment-method **Endpoint:** `GET /admin/subscriptions/:id/payment-method` **Authentication:** Admin (Required) ### Description GET /admin/subscriptions/:id/payment-method The card a subscription renews on: `{ provider_id, payment_method: { id, type, brand, last4, exp_month, exp_year } | null }`. Lists the Stripe customer's saved methods through the payment module and picks the one `payment_context.payment_method_reference` names. The raw `payment_context` is never returned. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success (200):** ```typescript { provider_id, payment_method, } ``` **Also returns:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/subscriptions/:id/payment-method' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Payment-method **Endpoint:** `POST /admin/subscriptions/:id/payment-method` **Authentication:** Admin (Required) ### Description POST /admin/subscriptions/:id/payment-method Body `{ setup_intent_id, retry_dunning? = true }`. Verifies the SetupIntent at Stripe (succeeded, on this customer, minted for this subscription), writes the new method into `payment_context`, logs `subscription.payment_method_updated`, and on a PAST_DUE subscription runs the dunning retry `POST /admin/dunning/:id/retry-now` runs. Response: the subscription detail plus `payment_method_summary` and `dunning_retry` (`ran | skipped_no_case | skipped_retrying | skipped_max_attempts | disabled | failed`), with `dunning_case_id` and `dunning_retry_error` when a case was involved. The card is saved before the detail is read back. A detail read that fails still answers 200, with `subscription: null` and `detail_error` set — a 500 there would tell the operator to retry an action that already charged. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { type, message, } ``` **Also returns (200):** ```typescript { ...(detail ?? { subscription: null }) detail_error, payment_method_summary, dunning_retry, dunning_case_id, dunning_retry_error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/payment-method' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Payment-method Setup **Endpoint:** `POST /admin/subscriptions/:id/payment-method/setup` **Authentication:** Admin (Required) ### Description POST /admin/subscriptions/:id/payment-method/setup Start a card replacement: create a Stripe SetupIntent on the subscription's Stripe customer and return what the admin form needs to confirm it. The SetupIntent is created through the subscription's own payment provider (live or sandbox), so its secret key and the publishable key returned here belong to the same Stripe account. `metadata.subscription_id` is stamped here and checked again when the intent comes back. Response: `{ setup_intent_id, client_secret, publishable_key, provider_id, account_holder_id, sandbox }`. ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success (200):** ```typescript { setup_intent_id, client_secret, publishable_key, provider_id, account_holder_id, sandbox, } ``` **Also returns:** ```typescript { type, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/payment-method/setup' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Resume **Endpoint:** `POST /admin/subscriptions/:id/resume` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/resume' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Schedule-plan-change **Endpoint:** `POST /admin/subscriptions/:id/schedule-plan-change` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/schedule-plan-change' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Update-discount **Endpoint:** `POST /admin/subscriptions/:id/update-discount` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/update-discount' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Update-next-cycle-discount **Endpoint:** `POST /admin/subscriptions/:id/update-next-cycle-discount` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/update-next-cycle-discount' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Update-quantity **Endpoint:** `POST /admin/subscriptions/:id/update-quantity` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/update-quantity' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Update-renewal **Endpoint:** `POST /admin/subscriptions/:id/update-renewal` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/update-renewal' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Subscriptions :id Update-shipping-address **Endpoint:** `POST /admin/subscriptions/:id/update-shipping-address` **Authentication:** Admin (Required) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/subscriptions/:id/update-shipping-address' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Ultracart **Endpoint:** `GET /admin/ultracart` **Authentication:** Admin (Required) ### Description GET /admin/ultracart Get UltraCart module status and statistics ### Response **Success:** ```typescript { status, health, statistics, scheduledSync, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/ultracart' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Ultracart **Endpoint:** `POST /admin/ultracart` **Authentication:** Admin (Required) ### Description POST /admin/ultracart Manually sync an order to UltraCart (respects modification window) Body: { orderId: string } ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { success, message, ultracartOrderId, attempts, } ``` **Also returns:** ```typescript { success, error, message, errorCode, } ``` **Error (400):** ```typescript { error, ...formattedErrors } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/ultracart' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Ultracart Force-sync **Endpoint:** `POST /admin/ultracart/force-sync` **Authentication:** Admin (Required) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { success, message, ultracartOrderId, attempts, } ``` **Error (400):** ```typescript { error, ...formattedErrors } ``` **Error (400):** ```typescript { success, message, error, errorCode, attempts, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/ultracart/force-sync' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Ultracart Modification-window **Endpoint:** `GET /admin/ultracart/modification-window` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { orderId, canModify, syncStatus, scheduledSyncAt, modificationWindowExpiresAt, isLocked, modificationCount, lastModifiedAt, } ``` **Error (400):** ```typescript { error, ...formattedErrors } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/ultracart/modification-window' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Ultracart Modification-window **Endpoint:** `POST /admin/ultracart/modification-window` **Authentication:** Admin (Required) ### Description POST /admin/ultracart/modification-window Reset modification window for an order (extends sync delay) Body: { orderId: string } ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { success, message, ...result } ``` **Error (400):** ```typescript { error, ...formattedErrors } ``` **Error (400):** ```typescript { error, message, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/ultracart/modification-window' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Ultracart Scheduled **Endpoint:** `GET /admin/ultracart/scheduled` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { orders, stats, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/ultracart/scheduled' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Ultracart Scheduled **Endpoint:** `POST /admin/ultracart/scheduled` **Authentication:** Admin (Required) ### Description POST /admin/ultracart/scheduled Manually trigger processing of scheduled syncs ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { success, message, ...result } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/ultracart/scheduled' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Ultracart Stats **Endpoint:** `GET /admin/ultracart/stats` **Authentication:** Admin (Required) ### Response **Success:** ```typescript { health, sync, scheduled, delayedSyncConfig, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/ultracart/stats' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Vibe **Endpoint:** `GET /admin/vibe` **Authentication:** Admin (Required) ### Description GET /admin/vibe/* Serve Vibe SDK static files from vibe-static/ directory Note: This route handles both /admin/vibe and /admin/vibe/* paths by extracting the path from the request URL. ### Response The handler does not return an object literal, so the response shape is not derivable from the source. ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/vibe' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Vibesdk Config :siteId **Endpoint:** `GET /admin/vibesdk/config/:siteId` **Authentication:** Admin (Required) ### Description GET /admin/vibesdk/config/:siteId Get VibeSDK configuration for a specific site Returns configuration needed to initialize the embedded VibeSDK ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `siteId` | string | Yes | SiteId identifier | ### Response **Error (400):** ```typescript { error, } ``` **Error (404):** ```typescript { error, } ``` **Error (500):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/vibesdk/config/:siteId' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Vibesdk Proxy **Endpoint:** `POST /admin/vibesdk/proxy` **Authentication:** Admin (Required) ### Description POST /admin/vibesdk/proxy Proxy requests to VibeSDK with our GitHub credentials This allows the embedded VibeSDK to access our GitHub repos through our backend authentication ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Error (400):** ```typescript { error, } ``` **Error (404):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` **Error (401):** ```typescript { error, } ``` **Error (400):** ```typescript { error, } ``` **Error (500):** ```typescript { error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/vibesdk/proxy' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Vibesdk Sso-token **Endpoint:** `GET /admin/vibesdk/sso-token` **Authentication:** Admin (Required) ### Description GET /admin/vibesdk/sso-token?siteId=... Returns a short-lived JWT for embedded VibeSDK sessions. ### Response **Success:** ```typescript { token, } ``` **Error (400):** ```typescript { error, } ``` **Error (500):** ```typescript { error, } ``` **Error (404):** ```typescript { error, } ``` **Error (500):** ```typescript { error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/vibesdk/sso-token' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Vibesdk Validate-sso **Endpoint:** `POST /admin/vibesdk/validate-sso` **Authentication:** Admin (Required) ### Description POST /admin/vibesdk/validate-sso Validates SSO tokens from embedded VibeSDK sessions. Called by VibeSDK worker to verify authentication tokens. Expected header: Authorization: Bearer {ssoToken} Returns user data for VibeSDK session creation. ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { user, validated_at, token_expires_at, } ``` **Error (401):** ```typescript { error, } ``` **Error (500):** ```typescript { error, } ``` **Error (401):** ```typescript { error, details, } ``` **Error (401):** ```typescript { error, } ``` **Error (500):** ```typescript { error, message, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/vibesdk/validate-sso' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Webhook-logs **Endpoint:** `GET /admin/webhook-logs` **Authentication:** Admin (Required) ### Description GET /admin/webhook-logs List all webhook logs with filtering and pagination Query params: - provider: Filter by provider (stripe, paypal, nmi, etc.) - event_type: Filter by event type - status: Filter by status (received, processing, success, failed, skipped) - order_id: Filter by order ID - payment_id: Filter by payment ID - from_date: Filter from date (ISO string) - to_date: Filter to date (ISO string) - limit: Number of results (default 50) - offset: Pagination offset (default 0) ### Response **Success:** ```typescript { webhook_logs, count, limit, offset, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/webhook-logs' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Webhook-logs :id **Endpoint:** `GET /admin/webhook-logs/:id` **Authentication:** Admin (Required) ### Description GET /admin/webhook-logs/:id Get a single webhook log by ID with full details ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success:** ```typescript { webhook_log, } ``` **Error (404):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/webhook-logs/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## DELETE Admin Webhook-logs :id **Endpoint:** `DELETE /admin/webhook-logs/:id` **Authentication:** Admin (Required) ### Description DELETE /admin/webhook-logs/:id Delete a webhook log (for cleanup purposes) ### URL Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `id` | string | Yes | Id identifier | ### Response **Success (200):** ```typescript { id, deleted, } ``` **Error (404):** ```typescript { message, error, } ``` ### Example Request ```bash curl -X DELETE 'https://your-store.omnicart.cc/admin/webhook-logs/:id' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## POST Admin Webhook-logs Cleanup **Endpoint:** `POST /admin/webhook-logs/cleanup` **Authentication:** Admin (Required) ### Description POST /admin/webhook-logs/cleanup Cleanup old webhook logs Body: - days_to_keep: Number of days to keep logs (default 30) ### Request Body This route does not declare a validation schema, so the accepted fields are not derivable from the source. Check the handler before relying on a particular body. ### Response **Success:** ```typescript { success, deleted_count, days_kept, } ``` **Error (500):** ```typescript { success, error, } ``` ### Example Request ```bash curl -X POST 'https://your-store.omnicart.cc/admin/webhook-logs/cleanup' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Webhook-logs Providers **Endpoint:** `GET /admin/webhook-logs/providers` **Authentication:** Admin (Required) ### Description GET /admin/webhook-logs/providers Get list of unique providers that have sent webhooks ### Response **Success:** ```typescript { providers, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/webhook-logs/providers' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` --- ## GET Admin Webhook-logs Stats **Endpoint:** `GET /admin/webhook-logs/stats` **Authentication:** Admin (Required) ### Description GET /admin/webhook-logs/stats Get webhook statistics and analytics Query params: - provider: Filter by provider - from_date: Filter from date (ISO string) - to_date: Filter to date (ISO string) ### Response **Success:** ```typescript { stats, } ``` ### Example Request ```bash curl -X GET 'https://your-store.omnicart.cc/admin/webhook-logs/stats' \ -H 'Authorization: Bearer YOUR_TOKEN' \ -H 'Content-Type: application/json' ``` ---