API DocumentationManufacturer analytics controller

Get dashboard analytics

GET
/api/manufacturer/v1/analytics/dashboard

Returns the manufacturer analytics dashboard in one call, including revenue, funnel, production, customer and material insights. Use this endpoint for reporting dashboards and external BI syncs that need the same aggregates shown in the manufacturer app. The response is scoped to the authenticated operator. Supply a period preset or an explicit from/to range, which wins over period. Aggregation is computed at the database level. All period math is in UTC. The funnel section returns three stage lists over the quotes-created-in-window cohort - acquisition (visits -> sign-ups -> first order), quoteToOrder (quote opened -> accepted -> order created) and fulfillment (order created -> production started -> production completed -> order completed) - each stage carrying drop-off counts/conversions and median/p95 days from the previous stage, so you can see where flow is lost and where it slows down. Transition times come from the audit trail, so later edits do not rewrite history; order completion is a kanban state and is reported count-only.

Authorization

Phasio API Bearer Token
AuthorizationBearer <token>

In: header

Query Parameters

period?string

Preset reporting window. Defaults to last_30_days when omitted. Ignored when both from and to are supplied.

from?string

Explicit reporting window start date in yyyy-MM-dd format. Together with to, overrides period.

to?string

Explicit reporting window end date in yyyy-MM-dd format, inclusive. Together with from, overrides period.

granularity?string

Time-series bucket granularity. Auto-derived from the requested window when omitted.

sections?string

Dashboard sections to compute. Repeat the query parameter for multiple sections, e.g. sections=revenue&sections=funnel. All sections are returned when omitted.

customerType?string

Optional dimension filter by customer type.

source?string

Optional dimension filter by order source.

compare?boolean

When true, include a compact previous block (equal-length prior window) of KPI scalars for period-over-period deltas. Ignored for all_time.

includeArchived?boolean

When true, include archived orders in every count/sum. Defaults to false so the dashboard reflects only live, active orders.

Response Body

application/json

curl -X GET "https://example.com/api/manufacturer/v1/analytics/dashboard?period=last_30_days&from=2026-01-01&to=2026-01-31&granularity=day&sections=revenue&customerType=ACCOUNT&source=INBOUND"
{  "range": {    "period": "last_30_days",    "from": "2026-01-01",    "to": "2026-01-31",    "granularity": "day",    "primaryCurrency": "USD"  },  "previous": {    "from": "2025-12-01",    "to": "2025-12-31",    "revenue": {      "paid": "12500.00",      "confirmed": "4100.00",      "outstanding": "2250.00",      "orders": 42    },    "funnel": {      "conversion": "0.38",      "completionRate": "0.72",      "medianDaysToCompletion": "6.5"    },    "customers": {      "new": 12,      "payingCustomers": 31,      "avgOrderValue": "395.50",      "repeatRate": "0.24"    },    "production": {      "openRequisitions": 18,      "avgLeadTimeDays": "5.8",      "onTimePct": 0.1,      "scrapRate": "0.03"    }  },  "revenue": {    "byCurrency": [      {        "currency": "USD",        "total": "18850.00",        "paid": "12500.00",        "confirmed": "4100.00",        "outstanding": "2250.00",        "orders": 42      }    ],    "byBucket": [      {        "bucket": "2026-01-01",        "currency": "USD",        "paid": "1200.00",        "confirmed": "450.00",        "orders": 5      }    ],    "byPaymentStatus": {      "PAID": 12,      "CONFIRMED": 8    }  },  "funnel": {    "quotesGenerated": 120,    "ordersCreated": 48,    "accepted": 51,    "confirmed": 30,    "paid": 18,    "conversion": "0.4",    "acquisition": [      {        "stage": "order_created",        "label": "Order created",        "count": 48,        "dropOff": 12,        "conversionFromPrevious": "0.8",        "conversionFromStart": "0.4",        "medianDaysFromPrevious": "2.0",        "p95DaysFromPrevious": "7.5"      }    ],    "quoteToOrder": [      {        "stage": "order_created",        "label": "Order created",        "count": 48,        "dropOff": 12,        "conversionFromPrevious": "0.8",        "conversionFromStart": "0.4",        "medianDaysFromPrevious": "2.0",        "p95DaysFromPrevious": "7.5"      }    ],    "quoteToOrderInbound": [      {        "stage": "order_created",        "label": "Order created",        "count": 48,        "dropOff": 12,        "conversionFromPrevious": "0.8",        "conversionFromStart": "0.4",        "medianDaysFromPrevious": "2.0",        "p95DaysFromPrevious": "7.5"      }    ],    "quoteToOrderOutbound": [      {        "stage": "order_created",        "label": "Order created",        "count": 48,        "dropOff": 12,        "conversionFromPrevious": "0.8",        "conversionFromStart": "0.4",        "medianDaysFromPrevious": "2.0",        "p95DaysFromPrevious": "7.5"      }    ],    "fulfillment": [      {        "stage": "order_created",        "label": "Order created",        "count": 48,        "dropOff": 12,        "conversionFromPrevious": "0.8",        "conversionFromStart": "0.4",        "medianDaysFromPrevious": "2.0",        "p95DaysFromPrevious": "7.5"      }    ]  },  "production": {    "openRequisitions": 24,    "avgLeadTimeDays": "5.4",    "onTimePct": 0.1,    "throughput": [      {        "operation": "FDM Printing",        "bucket": "2026-01-01",        "quantity": 35      }    ],    "wip": [      {        "operation": "Finishing",        "count": 9      }    ],    "cycleTime": [      {        "operation": "CNC Milling",        "avgDays": "2.4",        "p95Days": "6.8",        "samples": 22      }    ],    "scrap": {      "scrappedUnits": 7,      "producedUnits": 240,      "scrapRate": "0.029",      "byOperation": [        {          "operation": "FDM Printing",          "scrappedUnits": 4        }      ]    },    "kanban": [      {        "name": "In Production",        "sequence": 3,        "count": 14      }    ]  },  "customers": {    "new": 15,    "byType": {      "ACCOUNT": 8,      "PRO_FORMA": 7    },    "topByRevenue": [      {        "customerOrganisationId": 123,        "name": "Acme Manufacturing",        "currency": "USD",        "paid": "8200.00",        "confirmed": "1500.00"      }    ],    "value": [      {        "currency": "USD",        "totalPaid": "25000.00",        "totalConfirmed": "8000.00",        "payingCustomers": 31,        "orders": 68,        "avgOrderValue": "485.29",        "avgLifetimeValue": "1064.52"      }    ],    "retention": {      "customersWithOrders": 80,      "repeatCustomers": 22,      "repeatRate": "0.275",      "atRiskCustomers": 9,      "churnedCustomers": 4,      "atRiskThresholdDays": 90    },    "acquisition": [      {        "source": "STORE_FRONT",        "customers": 18,        "paid": "5200.00",        "confirmed": "1400.00"      }    ],    "geography": [      {        "country": "US",        "orders": 17,        "paid": "6200.00",        "confirmed": "2100.00"      }    ],    "paymentBehaviour": [      {        "currency": "USD",        "daysSalesOutstanding": "14.2",        "latePaymentRate": "0.12",        "outstanding": "4100.00",        "paidOrders": 18,        "confirmedOrders": 11      }    ],    "cartConversion": {      "carts": 96,      "converted": 34,      "abandoned": 62,      "conversionRate": "0.354"    },    "discountUsage": {      "ordersWithDiscount": 12,      "totalOrders": 68,      "usageRate": "0.176",      "avgDiscountPercentage": "8.5"    }  },  "materials": {    "topMaterials": [      {        "materialId": 42,        "name": "PLA",        "requisitions": 26,        "quantity": 210,        "estimatedVolume": "1250.75"      }    ],    "topTechnologies": [      {        "technology": "FDM",        "requisitions": 31,        "quantity": 280,        "estimatedVolume": "1540.50"      }    ],    "materialProcessMatrix": [      {        "material": "Aluminium 6061",        "technology": "CNC",        "requisitions": 8,        "revenue": "3200.00"      }    ],    "postProcessing": [      {        "name": "Anodising",        "count": 14      }    ],    "scrapByMaterial": [      {        "material": "PLA",        "scrappedUnits": 5      }    ]  }}
Empty
Empty
Empty