View as Markdown

Metrics Reporting

Category: Admin Base URL: /admin/metrics Authentication: Required Routes: 49 routes documented

Overview#

This section documents 49 API routes for metrics reporting.

⚠️ 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
GET /admin/metrics GET /admin/metrics Rate limited to 60 requests per minute pe...
POST /admin/metrics POST /admin/metrics Rate limited to 10 requests per minute p...
POST /admin/metrics-registry/compute POST /admin/metrics-registry/compute Compute multiple metric...
GET /admin/metrics-registry/definitions GET /admin/metrics-registry/definitions List all metric defi...
POST /admin/metrics-registry/definitions POST /admin/metrics-registry/definitions Create a new metric...
GET /admin/metrics-registry/definitions/:id GET /admin/metrics-registry/definitions/:id Get a specific m...
PATCH /admin/metrics-registry/definitions/:id PATCH /admin/metrics-registry/definitions/:id Update a metri...
DELETE /admin/metrics-registry/definitions/:id DELETE /admin/metrics-registry/definitions/:id Soft delete a...
GET /admin/metrics-registry/definitions/:id/versions GET /admin/metrics-registry/definitions/:id/versions Get ver...
POST /admin/metrics-registry/definitions/:id/versions POST /admin/metrics-registry/definitions/:id/versions/rollba...
POST /admin/metrics-registry/execute POST /admin/metrics-registry/execute Execute a metric formul...
GET /admin/metrics-registry/placeholders GET /admin/metrics-registry/placeholders List all placeholde...
POST /admin/metrics-registry/placeholders POST /admin/metrics-registry/placeholders Create a new place...
POST /admin/metrics-registry/validate POST /admin/metrics-registry/validate Validate a formula and...
GET /admin/metrics/alerts GET /admin/metrics/alerts List all alerts
POST /admin/metrics/alerts POST /admin/metrics/alerts Create a new alert
GET /admin/metrics/alerts/:id GET /admin/metrics/alerts/:id Get a specific alert
POST /admin/metrics/alerts/:id POST /admin/metrics/alerts/:id Update an alert
DELETE /admin/metrics/alerts/:id DELETE /admin/metrics/alerts/:id Delete an alert
GET /admin/metrics/audit GET /admin/metrics/audit/recent Get recent changes across al...
POST /admin/metrics/audit POST /admin/metrics/audit/export Export audit trail for comp...
POST /admin/metrics/batch POST /admin/metrics/batch Compute multiple metrics in parall...
POST /admin/metrics/cache POST /admin/metrics/cache/warm Warm metrics cache for common...
DELETE /admin/metrics/cache DELETE /admin/metrics/cache Invalidate all metrics cache
GET /admin/metrics/cache GET /admin/metrics/cache/stats Get cache statistics
GET /admin/metrics/catalog GET /admin/metrics/catalog Search metrics catalog
POST /admin/metrics/catalog POST /admin/metrics/catalog Register new metric
GET /admin/metrics/catalog/:id GET /admin/metrics/catalog/:id Get metric by ID
PUT /admin/metrics/catalog/:id PUT /admin/metrics/catalog/:id Update metric
DELETE /admin/metrics/catalog/:id DELETE /admin/metrics/catalog/:id Archive metric (soft delet...
GET /admin/metrics/catalog/:id/dependencies GET /admin/metrics/catalog/:id/dependencies Get metric depen...
GET /admin/metrics/catalog/:id/dependents GET /admin/metrics/catalog/:id/dependents Get metrics that d...
POST /admin/metrics/catalog/:id/lifecycle POST /admin/metrics/catalog/:id/lifecycle Transition metric ...
GET /admin/metrics/catalog/:id/versions GET /admin/metrics/catalog/:id/versions Get metric version h...
POST /admin/metrics/catalog/seed-examples POST /admin/metrics/catalog/seed-examples Trigger the seed e...
POST /admin/metrics/catalog/validate POST /admin/metrics/catalog/validate Validate metric formula...
POST /admin/metrics/compute No description
GET /admin/metrics/dashboard GET /admin/metrics/dashboard — the COMBINED dashboard payloa...
GET /admin/metrics/dashboard/sales-channels GET /admin/metrics/dashboard/sales-channels Orders + revenue...
GET /admin/metrics/dashboard/summary GET /admin/metrics/dashboard/summary Summary metric cards on...
GET /admin/metrics/dashboard/unfulfilled-orders GET /admin/metrics/dashboard/unfulfilled-orders Unfulfilled ...
GET /admin/metrics/dashboard/unfulfilled-products GET /admin/metrics/dashboard/unfulfilled-products — products...
POST /admin/metrics/definitions POST /admin/metrics/definitions Create a new metric definiti...
GET /admin/metrics/definitions GET /admin/metrics/definitions List metric definitions with ...
GET /admin/metrics/definitions/:id GET /admin/metrics/definitions/:id Get a single metric defin...
PUT /admin/metrics/definitions/:id PUT /admin/metrics/definitions/:id Update a metric definitio...
DELETE /admin/metrics/definitions/:id DELETE /admin/metrics/definitions/:id Delete a metric defini...
POST /admin/metrics/fulfillment-report No description
GET /admin/metrics/performance GET /admin/metrics/performance Get current performance metri...
POST /admin/metrics/performance POST /admin/metrics/performance/report Generate and log perf...
GET /admin/metrics/performance/events GET /admin/metrics/performance/events Get recent computation...
GET /admin/metrics/placeholders GET /admin/metrics/placeholders List available placeholders
POST /admin/metrics/placeholders POST /admin/metrics/placeholders Create a new placeholder
GET /admin/metrics/rate-limit-status GET /admin/metrics/rate-limit-status Get rate limit metrics ...
DELETE /admin/metrics/rate-limit-status DELETE /admin/metrics/rate-limit-status Clear rate limit met...
POST /admin/metrics/report No description
GET /admin/metrics/reports No description
GET /admin/metrics/reports/top-products No description
GET /admin/metrics/suggestions GET /admin/metrics/suggestions Get AI-powered metric suggest...
GET /admin/metrics/templates GET /admin/metrics/templates List all metric templates
POST /admin/metrics/templates POST /admin/metrics/templates/:id/instantiate Create a metri...
GET /admin/metrics/templates/:id GET /admin/metrics/templates/:id Get a specific template
POST /admin/metrics/validate POST /admin/metrics/validate Validate a metric formula Rate ...
GET /admin/reports/cogs/alerts No description
GET /admin/reports/cogs/inventory-turnover No description
GET /admin/reports/cogs/margins No description
GET /admin/reports/cogs/snapshots No description
GET /admin/reports/promotions No description
GET /admin/reports/promotions/codes No description
GET /admin/reports/taxes/dashboard TAX QUERY SHAPE — three predicates on every one of the five ...
GET /admin/reports/taxes/export No description

GET Admin Metrics#

Endpoint: GET /admin/metrics Authentication: Admin (Required)

Description#

GET /admin/metrics Rate limited to 60 requests per minute per user

Response#

Success:

{
  success,
  metrics,
  filters,
  requestedMetrics,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics#

Endpoint: POST /admin/metrics Authentication: Admin (Required)

Description#

POST /admin/metrics Rate limited to 10 requests per minute per user

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:

{
  success,
  message,
  date,
  metrics,
  filters,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics-registry Compute#

Endpoint: POST /admin/metrics-registry/compute Authentication: Admin (Required)

Description#

POST /admin/metrics-registry/compute Compute multiple metrics in a single request (batch computation) @example POST /admin/metrics-registry/compute { "requests": [ { "metric_id": "metric-123", "context": { "orderTotal": 1000 } }, { "metric_id": "metric-456", "context": { "customerCount": 50 } } ] } Response: { "results": [ { "metric_id": "metric-123", "result": 1200, "success": true, "execution_time_ms": 15 }, { "metric_id": "metric-456", "result": 75, "success": true, "execution_time_ms": 12 } ], "summary": { "total": 2, "succeeded": 2, "failed": 0, "total_execution_time_ms": 27 } }

Request Body#

Field Type Required
requests record No

Response#

Success:

{
  results,
  summary,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics-registry/compute' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics-registry Definitions#

Endpoint: GET /admin/metrics-registry/definitions Authentication: Admin (Required)

Description#

GET /admin/metrics-registry/definitions List all metric definitions with optional filtering

Response#

Success:

{
  metrics,
  count,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics-registry/definitions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics-registry Definitions#

Endpoint: POST /admin/metrics-registry/definitions Authentication: Admin (Required)

Description#

POST /admin/metrics-registry/definitions Create a new metric definition

Request Body#

Field Type Required
name string Yes
description string No
category enum Yes
scope enum Yes
formula string Yes
data_type enum Yes
formatting_rules record No
org_id string No
owner_id string No
visibility enum No
is_system boolean No

Response#

Success (201):

{
  metric,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics-registry/definitions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics-registry Definitions :id#

Endpoint: GET /admin/metrics-registry/definitions/:id Authentication: Admin (Required)

Description#

GET /admin/metrics-registry/definitions/:id Get a specific metric definition

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  metric,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics-registry/definitions/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

PATCH Admin Metrics-registry Definitions :id#

Endpoint: PATCH /admin/metrics-registry/definitions/:id Authentication: Admin (Required)

Description#

PATCH /admin/metrics-registry/definitions/:id Update a metric definition

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Request Body#

Field Type Required
name string No
description string No
formula string No
data_type enum No
formatting_rules record No
is_active boolean No
is_locked boolean No
visibility enum No
updated_by string No
force_update boolean No

Response#

Success:

{
  metric,
}

Example Request#

curl -X PATCH 'https://your-store.omnicart.cc/admin/metrics-registry/definitions/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

DELETE Admin Metrics-registry Definitions :id#

Endpoint: DELETE /admin/metrics-registry/definitions/:id Authentication: Admin (Required)

Description#

DELETE /admin/metrics-registry/definitions/:id Soft delete a metric definition

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  id,
  deleted,
}

Example Request#

curl -X DELETE 'https://your-store.omnicart.cc/admin/metrics-registry/definitions/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics-registry Definitions :id Versions#

Endpoint: GET /admin/metrics-registry/definitions/:id/versions Authentication: Admin (Required)

Description#

GET /admin/metrics-registry/definitions/:id/versions Get version history for a metric

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  versions,
  count,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics-registry/definitions/:id/versions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics-registry Definitions :id Versions#

Endpoint: POST /admin/metrics-registry/definitions/:id/versions Authentication: Admin (Required)

Description#

POST /admin/metrics-registry/definitions/:id/versions/rollback Rollback to a specific version

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:

{
  metric,
  message,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics-registry/definitions/:id/versions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics-registry Execute#

Endpoint: POST /admin/metrics-registry/execute Authentication: Admin (Required)

Description#

POST /admin/metrics-registry/execute Execute a metric formula with optional context

Request Body#

Field Type Required
metric_id string Yes
context record No

Response#

Success:

{
  metric_id,
  result,
  execution_time_ms,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics-registry/execute' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics-registry Placeholders#

Endpoint: GET /admin/metrics-registry/placeholders Authentication: Admin (Required)

Description#

GET /admin/metrics-registry/placeholders List all placeholders with optional filtering

Response#

Success:

{
  placeholders,
  count,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics-registry/placeholders' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics-registry Placeholders#

Endpoint: POST /admin/metrics-registry/placeholders Authentication: Admin (Required)

Description#

POST /admin/metrics-registry/placeholders Create a new placeholder

Request Body#

Field Type Required
key string Yes
display_name string Yes
description string No
data_source enum Yes
source_field string Yes
data_type enum Yes
default_aggregation enum No
category string No

Response#

Success (201):

{
  placeholder,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics-registry/placeholders' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics-registry Validate#

Endpoint: POST /admin/metrics-registry/validate Authentication: Admin (Required)

Description#

POST /admin/metrics-registry/validate Validate a formula and check for circular dependencies

Request Body#

Field Type Required
formula string Yes
metric_id string No

Response#

Success:

{
  validation,
  is_valid,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics-registry/validate' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Alerts#

Endpoint: GET /admin/metrics/alerts Authentication: Admin (Required)

Description#

GET /admin/metrics/alerts List all alerts

Response#

Success:

{
  alerts,
  count,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/alerts' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Alerts#

Endpoint: POST /admin/metrics/alerts Authentication: Admin (Required)

Description#

POST /admin/metrics/alerts Create a new alert

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):

{
  alert,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/alerts' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Alerts :id#

Endpoint: GET /admin/metrics/alerts/:id Authentication: Admin (Required)

Description#

GET /admin/metrics/alerts/:id Get a specific alert

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  alert,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/alerts/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Alerts :id#

Endpoint: POST /admin/metrics/alerts/:id Authentication: Admin (Required)

Description#

POST /admin/metrics/alerts/:id Update an alert

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:

{
  alert,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/alerts/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

DELETE Admin Metrics Alerts :id#

Endpoint: DELETE /admin/metrics/alerts/:id Authentication: Admin (Required)

Description#

DELETE /admin/metrics/alerts/:id Delete an alert

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success (200):

{
  id,
  deleted,
}

Example Request#

curl -X DELETE 'https://your-store.omnicart.cc/admin/metrics/alerts/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Audit#

Endpoint: GET /admin/metrics/audit Authentication: Admin (Required)

Description#

GET /admin/metrics/audit/recent Get recent changes across all metrics

Response#

Success:

{
  changes,
  count,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/audit' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Audit#

Endpoint: POST /admin/metrics/audit Authentication: Admin (Required)

Description#

POST /admin/metrics/audit/export Export audit trail for compliance

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#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/audit' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Batch#

Endpoint: POST /admin/metrics/batch Authentication: Admin (Required)

Description#

POST /admin/metrics/batch Compute multiple metrics in parallel with intelligent caching Rate limited to 5 requests per minute per user (stricter limit for batch operations) Request body: { requests: [ { id: "dashboard-7d", type: "dashboard", filters: { range: { start: "2024-01-01", end: "2024-01-07" } }, priority: 10 }, ... ] }

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:

{
  results,
  summary,
}

Error (400):

{
  error,
}

Error (400):

{
  error,
}

Error (400):

{
  error,
}

Error (500):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/batch' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Cache#

Endpoint: POST /admin/metrics/cache Authentication: Admin (Required)

Description#

POST /admin/metrics/cache/warm Warm metrics cache for common date ranges

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:

{
  success,
  warmed,
  failed,
  durationMs,
  ranges,
}

Error (500):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/cache' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

DELETE Admin Metrics Cache#

Endpoint: DELETE /admin/metrics/cache Authentication: Admin (Required)

Description#

DELETE /admin/metrics/cache Invalidate all metrics cache

Response#

Success:

{
  success,
  message,
}

Error (500):

{
  error,
}

Example Request#

curl -X DELETE 'https://your-store.omnicart.cc/admin/metrics/cache' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Cache#

Endpoint: GET /admin/metrics/cache Authentication: Admin (Required)

Description#

GET /admin/metrics/cache/stats Get cache statistics

Response#

Success:

{
  cache,
  performance,
}

Error (500):

{
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/cache' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Catalog#

Endpoint: GET /admin/metrics/catalog Authentication: Admin (Required)

Description#

GET /admin/metrics/catalog Search metrics catalog

Response#

Success:

{
  metrics,
  count,
}

Error (503):

{
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/catalog' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Catalog#

Endpoint: POST /admin/metrics/catalog Authentication: Admin (Required)

Description#

POST /admin/metrics/catalog Register new metric

Request Body#

Field Type Required
name string Yes
description string No
category enum Yes
scope enum Yes
formula string Yes
dataType enum Yes
formattingRules record No
dependencies array No
tags array No
visibility enum No
orgId string No
ownerId string No
isSystem boolean No

Response#

Success (201):

{
  metric,
}

Error (503):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/catalog' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Catalog :id#

Endpoint: GET /admin/metrics/catalog/:id Authentication: Admin (Required)

Description#

GET /admin/metrics/catalog/:id Get metric by ID

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  metric,
}

Error (503):

{
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/catalog/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

PUT Admin Metrics Catalog :id#

Endpoint: PUT /admin/metrics/catalog/:id Authentication: Admin (Required)

Description#

PUT /admin/metrics/catalog/:id Update metric

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Request Body#

Field Type Required
name string No
description string No
formula string No
formattingRules record No
dependencies array No
tags array No
visibility enum No
isActive boolean No
isLocked boolean No
forceUpdate boolean No

Response#

Success:

{
  metric,
}

Error (503):

{
  error,
}

Example Request#

curl -X PUT 'https://your-store.omnicart.cc/admin/metrics/catalog/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

DELETE Admin Metrics Catalog :id#

Endpoint: DELETE /admin/metrics/catalog/:id Authentication: Admin (Required)

Description#

DELETE /admin/metrics/catalog/:id Archive metric (soft delete)

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Error (503):

{
  error,
}

Example Request#

curl -X DELETE 'https://your-store.omnicart.cc/admin/metrics/catalog/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Catalog :id Dependencies#

Endpoint: GET /admin/metrics/catalog/:id/dependencies Authentication: Admin (Required)

Description#

GET /admin/metrics/catalog/:id/dependencies Get metric dependency tree

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  dependencies,
}

Error (503):

{
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/catalog/:id/dependencies' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Catalog :id Dependents#

Endpoint: GET /admin/metrics/catalog/:id/dependents Authentication: Admin (Required)

Description#

GET /admin/metrics/catalog/:id/dependents Get metrics that depend on this metric

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  dependents,
  count,
}

Error (503):

{
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/catalog/:id/dependents' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Catalog :id Lifecycle#

Endpoint: POST /admin/metrics/catalog/:id/lifecycle Authentication: Admin (Required)

Description#

POST /admin/metrics/catalog/:id/lifecycle Transition metric lifecycle state

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Request Body#

Field Type Required
state enum(draft, active, deprecated, archived) Yes

Response#

Success:

{
  metric,
}

Error (503):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/catalog/:id/lifecycle' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Catalog :id Versions#

Endpoint: GET /admin/metrics/catalog/:id/versions Authentication: Admin (Required)

Description#

GET /admin/metrics/catalog/:id/versions Get metric version history

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  versions,
  count,
}

Error (503):

{
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/catalog/:id/versions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Catalog Seed-examples#

Endpoint: POST /admin/metrics/catalog/seed-examples Authentication: Admin (Required)

Description#

POST /admin/metrics/catalog/seed-examples Trigger the seed example metrics workflow This endpoint triggers a workflow that seeds 3 example metrics: - example_daily_gmv - example_orders_count - example_average_order_value The workflow is idempotent - it will skip metrics that already exist.

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):

{
  message,
  summary,
  metrics,
}

Error (500):

{
  error,
  message,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/catalog/seed-examples' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Catalog Validate#

Endpoint: POST /admin/metrics/catalog/validate Authentication: Admin (Required)

Description#

POST /admin/metrics/catalog/validate Validate metric formula Rate limited to 10 requests per minute per user

Request Body#

Field Type Required
formula string Yes

Response#

Success:

{
  validation,
}

Error (503):

{
  error,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/catalog/validate' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Compute#

Endpoint: POST /admin/metrics/compute 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:

{
  success,
  message,
  metrics,
  filters,
  computeTime,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/compute' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Dashboard#

Endpoint: GET /admin/metrics/dashboard Authentication: Admin (Required)

Description#

GET /admin/metrics/dashboard — the COMBINED dashboard payload. The admin Overview page no longer uses this route; it fetches each widget from the per-section endpoints under /admin/metrics/dashboard/* so no single slow section can hold the page hostage. This route is kept intact for backwards compatibility (external/scripted consumers, cache warming) and still returns the exact same shape it always has, including the section_errors map and the unfulfilled_paid_orders card overwritten with the bucket total. The query-param contract, defaults and MAX_RANGE_DAYS guard are shared with the section endpoints via parseDashboardQuery.

Response#

Error (500):

{
  code,
  type,
  message,
  error,
  details,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/dashboard' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Dashboard Sales-channels#

Endpoint: GET /admin/metrics/dashboard/sales-channels Authentication: Admin (Required)

Description#

GET /admin/metrics/dashboard/sales-channels Orders + revenue per sales channel. Always returns EVERY channel: the underlying breakdown groups by sales_channel_id and ignores the sales_channel filter param (the param is still accepted so the query contract is identical across every section endpoint).

Response#

The handler does not return an object literal, so the response shape is not derivable from the source.

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/dashboard/sales-channels' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Dashboard Summary#

Endpoint: GET /admin/metrics/dashboard/summary Authentication: Admin (Required)

Description#

GET /admin/metrics/dashboard/summary Summary metric cards only (current range + comparison range aggregates). NOTE on unfulfilled_paid_orders: this endpoint returns that card with its placeholder value of 0, exactly as the aggregate pass builds it. In the combined /admin/metrics/dashboard response the value was overwritten with the sum of the unfulfilled-by-age buckets. The UI now applies that same total from /admin/metrics/dashboard/unfulfilled-orders (which publishes it as totalUnfulfilled), so the tile still displays the same number.

Response#

The handler does not return an object literal, so the response shape is not derivable from the source.

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/dashboard/summary' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Dashboard Unfulfilled-orders#

Endpoint: GET /admin/metrics/dashboard/unfulfilled-orders Authentication: Admin (Required)

Description#

GET /admin/metrics/dashboard/unfulfilled-orders Unfulfilled orders bucketed by age, plus totalUnfulfilled — the sum the combined endpoint used to write over the unfulfilled_paid_orders summary card's value.

Response#

The handler does not return an object literal, so the response shape is not derivable from the source.

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/dashboard/unfulfilled-orders' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Dashboard Unfulfilled-products#

Endpoint: GET /admin/metrics/dashboard/unfulfilled-products Authentication: Admin (Required)

Description#

GET /admin/metrics/dashboard/unfulfilled-products — products blocking fulfillment.

Response#

The handler does not return an object literal, so the response shape is not derivable from the source.

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/dashboard/unfulfilled-products' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Definitions#

Endpoint: POST /admin/metrics/definitions Authentication: Admin (Required)

Description#

POST /admin/metrics/definitions Create a new metric definition

Request Body#

Field Type Required
name string Yes
description string No
category enum Yes
scope enum Yes
formula string Yes
data_type enum Yes
formatting_rules record No
org_id string No
owner_id string No
visibility enum No
is_system boolean No

Response#

Success (201):

{
  metric,
}

Error (400):

{
  message,
  errors,
}

Error (400):

{
  message,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/definitions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Definitions#

Endpoint: GET /admin/metrics/definitions Authentication: Admin (Required)

Description#

GET /admin/metrics/definitions List metric definitions with optional filters

Response#

Success:

{
  metrics,
}

Error (400):

{
  message,
  errors,
}

Error (500):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/definitions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Definitions :id#

Endpoint: GET /admin/metrics/definitions/:id Authentication: Admin (Required)

Description#

GET /admin/metrics/definitions/:id Get a single metric definition

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  metric,
}

Error (404):

{
  message,
}

Error (500):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/definitions/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

PUT Admin Metrics Definitions :id#

Endpoint: PUT /admin/metrics/definitions/:id Authentication: Admin (Required)

Description#

PUT /admin/metrics/definitions/:id Update a metric definition

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Request Body#

Field Type Required
name string No
description string No
formula string No
data_type enum No
formatting_rules record No
is_active boolean No
is_locked boolean No
visibility enum No
updated_by string No
force_update boolean No

Response#

Success:

{
  metric,
}

Error (400):

{
  message,
  errors,
}

Error (400):

{
  message,
}

Example Request#

curl -X PUT 'https://your-store.omnicart.cc/admin/metrics/definitions/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

DELETE Admin Metrics Definitions :id#

Endpoint: DELETE /admin/metrics/definitions/:id Authentication: Admin (Required)

Description#

DELETE /admin/metrics/definitions/:id Delete a metric definition (soft delete)

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Error (400):

{
  message,
}

Example Request#

curl -X DELETE 'https://your-store.omnicart.cc/admin/metrics/definitions/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Fulfillment-report#

Endpoint: POST /admin/metrics/fulfillment-report Authentication: Admin (Required)

Request Body#

Field Type Required
date object No
fulfillmentIds array No
orderIds array No
status array No
providerIds array No
shippingOptionIds array No
locationIds array No
regionIds array No
countryCodes array No
states array No
search string No

Response#

Success:

{
  success,
  report,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/fulfillment-report' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Performance#

Endpoint: GET /admin/metrics/performance Authentication: Admin (Required)

Description#

GET /admin/metrics/performance Get current performance metrics

Response#

Success:

{
  performance,
}

Error (500):

{
  error,
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/performance' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Performance#

Endpoint: POST /admin/metrics/performance Authentication: Admin (Required)

Description#

POST /admin/metrics/performance/report Generate and log performance report

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:

{
  success,
  message,
  performance,
}

Error (500):

{
  error,
  message,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/performance' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Performance Events#

Endpoint: GET /admin/metrics/performance/events Authentication: Admin (Required)

Description#

GET /admin/metrics/performance/events Get recent computation events

Response#

Success:

{
  events,
  count,
}

Error (500):

{
  error,
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/performance/events' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Placeholders#

Endpoint: GET /admin/metrics/placeholders Authentication: Admin (Required)

Description#

GET /admin/metrics/placeholders List available placeholders

Response#

Success:

{
  placeholders,
}

Error (400):

{
  message,
  errors,
}

Error (500):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/placeholders' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Placeholders#

Endpoint: POST /admin/metrics/placeholders Authentication: Admin (Required)

Description#

POST /admin/metrics/placeholders Create a new placeholder

Request Body#

Field Type Required
data_source string No
category string No
is_active string No

Response#

Success (201):

{
  placeholder,
}

Error (400):

{
  message,
  errors,
}

Error (400):

{
  message,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/placeholders' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Rate-limit-status#

Endpoint: GET /admin/metrics/rate-limit-status Authentication: Admin (Required)

Description#

GET /admin/metrics/rate-limit-status Get rate limit metrics and monitoring data

Response#

Success:

{
  success,
  metrics,
}

Error (500):

{
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/rate-limit-status' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

DELETE Admin Metrics Rate-limit-status#

Endpoint: DELETE /admin/metrics/rate-limit-status Authentication: Admin (Required)

Description#

DELETE /admin/metrics/rate-limit-status Clear rate limit metrics (admin only)

Response#

Success:

{
  success,
  message,
}

Error (500):

{
  error,
}

Example Request#

curl -X DELETE 'https://your-store.omnicart.cc/admin/metrics/rate-limit-status' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Report#

Endpoint: POST /admin/metrics/report Authentication: Admin (Required)

Request Body#

Field Type Required
date object No
orderIds array No
displayIds array No
customerIds array No
customerEmails array No
status array No
paymentStatus array No
regionIds array No
salesChannelIds array No
productIds array No
countryCodes array No
states array No
search string No

Response#

Success:

{
  success,
  report,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/report' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Reports#

Endpoint: GET /admin/metrics/reports Authentication: Admin (Required)

Response#

Success:

{
  days,
  meta,
}

Error (400):

{
  message,
  issues,
}

Error (400):

{
  message,
}

Error (400):

{
  message,
}

Error (400):

{
  code,
  message,
  maxDays,
  requestedDays,
}

Error (500):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/reports' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Reports Top-products#

Endpoint: GET /admin/metrics/reports/top-products Authentication: Admin (Required)

Response#

Success:

{
  products,
  meta,
}

Error (400):

{
  message,
  issues,
}

Error (400):

{
  message,
}

Error (400):

{
  message,
}

Error (400):

{
  code,
  message,
  maxDays,
  requestedDays,
}

Error (400):

{
  message,
}

Error (500):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/reports/top-products' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Suggestions#

Endpoint: GET /admin/metrics/suggestions Authentication: Admin (Required)

Description#

GET /admin/metrics/suggestions Get AI-powered metric suggestions

Response#

Success:

{
  suggestions,
  count,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/suggestions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Templates#

Endpoint: GET /admin/metrics/templates Authentication: Admin (Required)

Description#

GET /admin/metrics/templates List all metric templates

Response#

Success:

{
  templates,
  count,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/templates' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Templates#

Endpoint: POST /admin/metrics/templates Authentication: Admin (Required)

Description#

POST /admin/metrics/templates/:id/instantiate Create a metric from a template

Request Body#

Field Type Required
category string No
tags array No
search string No

Response#

Success (201):

{
  metric,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/templates' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Metrics Templates :id#

Endpoint: GET /admin/metrics/templates/:id Authentication: Admin (Required)

Description#

GET /admin/metrics/templates/:id Get a specific template

URL Parameters#

Parameter Type Required Description
id string Yes Id identifier

Response#

Success:

{
  template,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/metrics/templates/:id' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

POST Admin Metrics Validate#

Endpoint: POST /admin/metrics/validate Authentication: Admin (Required)

Description#

POST /admin/metrics/validate Validate a metric formula Rate limited to 10 requests per minute per user

Request Body#

Field Type Required
formula string Yes

Response#

Success:

{
  validation,
}

Error (400):

{
  message,
  errors,
}

Error (400):

{
  message,
}

Example Request#

curl -X POST 'https://your-store.omnicart.cc/admin/metrics/validate' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Cogs Alerts#

Endpoint: GET /admin/reports/cogs/alerts Authentication: Admin (Required)

Response#

Error (400):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/cogs/alerts' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Cogs Inventory-turnover#

Endpoint: GET /admin/reports/cogs/inventory-turnover Authentication: Admin (Required)

Response#

Error (400):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/cogs/inventory-turnover' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Cogs Margins#

Endpoint: GET /admin/reports/cogs/margins Authentication: Admin (Required)

Response#

Error (400):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/cogs/margins' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Cogs Snapshots#

Endpoint: GET /admin/reports/cogs/snapshots Authentication: Admin (Required)

Response#

Error (400):

{
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/cogs/snapshots' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Promotions#

Endpoint: GET /admin/reports/promotions Authentication: Admin (Required)

Response#

Success:

{
  code,
  from,
  to,
  summary,
  rows,
  limit,
  offset,
  has_more,
  next_offset,
}

Error (400):

{
  message,
}

Error (400):

{
  message,
}

Error (400):

{
  message,
}

Error (400):

{
  code,
  message,
  maxDays,
  requestedDays,
}

Error (503):

{
  code,
  message,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/promotions' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Promotions Codes#

Endpoint: GET /admin/reports/promotions/codes Authentication: Admin (Required)

Response#

Success:

{
  codes,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/promotions/codes' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Taxes Dashboard#

Endpoint: GET /admin/reports/taxes/dashboard Authentication: Admin (Required)

Description#

TAX QUERY SHAPE — three predicates on every one of the five aggregates: oi.version = o.version Orders are versioned. Without it an edited order contributes its old line rows too, and every tax figure inflates. Measured over one week: 1318 tax lines counted vs 583 real ones. oi.deleted_at IS NULL order_item is ~3GB and its item_id index is PARTIAL on this predicate. Omitting it forces a scan — this dashboard took 17-18s per load, which reads as a hang and times out entirely on a wide range. o.deleted_at IS NULL soft-deleted orders were being counted. olt.deleted_at IS NULL order_line_item_tax_line has the same PARTIAL index on deleted_at; soft-deleted tax lines were still adding to the totals. The same three predicates are on reports/taxes/export — the screen and the downloaded file have to agree, and the export is what people file from. KNOWN DISCREPANCY (not fixed here): total_tax_collected recomputes tax as unit_price * quantity * rate, which ignores discounts — tax is charged on the discounted subtotal. For the week of 2026-08-12 that reports $3161.28 against $1129.21 actually charged per order_summary.totals.tax_total. Treat this dashboard as directional until the total is sourced from the recorded amount rather than recomputed. Do not file from it.

Response#

Error (400):

{
  message,
  issues,
}

Error (400):

{
  message,
}

Error (400):

{
  code,
  message,
  maxDays,
  requestedDays,
}

Error (500):

{
  code,
  type,
  message,
  error,
  details,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/taxes/dashboard' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'

GET Admin Reports Taxes Export#

Endpoint: GET /admin/reports/taxes/export Authentication: Admin (Required)

Response#

Error (400):

{
  message,
  issues,
}

Error (400):

{
  message,
}

Error (500):

{
  code,
  type,
  message,
  error,
}

Example Request#

curl -X GET 'https://your-store.omnicart.cc/admin/reports/taxes/export' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json'