Analyze Delivery Performance

Beta
PUT/v1/core/analytics/delivery-performance

This endpoint is idempotent. Learn more

Returns how reliably promised delivery dates were met.

Orders are counted in the period their promise came due, not the period they shipped — an order promised in March and shipped in May is March's miss. On time means the first shipment left on or before the promised date, because the promise is that the order starts moving by then; judging on the last shipment would fail an order the customer received on time in two boxes. On time in full adds that the whole ordered quantity was packed.

The denominator is orders that were due, not orders that shipped, so an order past its date and still unshipped counts against the rate rather than being held back until it moves. Excluding open orders would let a plant with a growing late backlog report perfect delivery.

Only orders carrying a ship-by commitment participate. An order with no commitment cannot be late, and counting it as on time would inflate the rate with orders nobody promised anything about — uncommitted_order_count says how many were excluded, so the gap is visible rather than silent.

Every rate is null rather than zero when nothing was due, and average lateness is measured over late orders only.

The same window is also returned sliced by customer, customer group, product line, and the rule each ship-by date came from — each ordered worst-first, and each derived from the same set of orders as the headline so a drilldown always adds up to it. by_product_line is the one exception to that: an order spanning two lines is counted under both, because a late order is late for every line on it.

Every filter is empty-means-all and they combine with AND. They narrow uncommitted_order_count too, so the excluded count always describes the same slice of the order book the rates do.

Permissions requiredValues:sales_orders:read
The role behind your API key or agent must grant every one of these permissions.
starts_atstring (date-time)

The start date for the analysis period.

ends_atstring (date-time)

The end date for the analysis period.

granularityoptional stringenumValues:dayweekmonth

The period to break the results down by. Defaults to week.

customer_idsoptional array of string

Only measure orders bought by these customers. Their child accounts are included, matching how the sales analytics resolve a customer.

customer_group_idsoptional array of string

Only measure orders whose customer sits in these groups.

product_line_idsoptional array of string

Only measure orders containing at least one line in these product lines.

sales_rep_idsoptional array of string

Only measure orders owned by these sales reps.

objectstringenumValues:analyze_delivery_performance_response

Resource type identifier.

overalldelivery_performancenullable

The whole window as one figure.

objectstringenumValues:delivery_performance

Resource type identifier.

period_startstring (date-time)nullable

First day of the period; absent on the overall figure.

committed_order_countinteger

Orders whose promised ship date fell in this period.

This is the denominator for both rates below — orders that were due, not orders that shipped. Measuring against shipments only would let unshipped late orders disappear from the score.

shipped_order_countinteger

How many of them have shipped at all.

on_time_order_countinteger

How many shipped on or before the promised date.

on_time_in_full_countinteger

How many shipped on time and complete.

late_order_countinteger

How many shipped late, plus those already past their date and still unshipped.

not_yet_shipped_countinteger

How many due in this period have not shipped at all.

These count against on-time: a promise not yet met is not a promise kept.

on_time_pctnumbernullable

Share of due orders that shipped on time, as a percentage.

Null rather than zero when nothing was due, so a quiet week does not render as total failure.

on_time_in_full_pctnumbernullable

Share of due orders that shipped on time and complete, as a percentage.

average_days_latenumbernullable

Average days late, over late orders only.

Averaging over every order would dilute a real problem into a number that looks fine.

average_lead_time_daysnumbernullable

Average days from issue to first shipment, over orders that have shipped.

average_committed_lead_time_daysnumbernullable

Average lead time these orders were promised.

The gap between this and average_lead_time_days is what a lead time is renegotiated on.

periodslistnullable

The same figures broken into periods, by the date each order was due.

objectstringenumValues:list

Resource type identifier.

page_infoobject

Pagination metadata.

next_page_urlstringnullable

Relative URL that fetches the next page of results.

previous_page_urlstringnullable

Relative URL that fetches the previous page of results.

has_next_pageboolean

Whether more results exist after this page.

has_prev_pageboolean

Whether results exist before this page.

dataarray of delivery_performance

Resources in this page.

objectstringenumValues:delivery_performance

Resource type identifier.

period_startstring (date-time)nullable

First day of the period; absent on the overall figure.

committed_order_countinteger

Orders whose promised ship date fell in this period.

This is the denominator for both rates below — orders that were due, not orders that shipped. Measuring against shipments only would let unshipped late orders disappear from the score.

shipped_order_countinteger

How many of them have shipped at all.

on_time_order_countinteger

How many shipped on or before the promised date.

on_time_in_full_countinteger

How many shipped on time and complete.

late_order_countinteger

How many shipped late, plus those already past their date and still unshipped.

not_yet_shipped_countinteger

How many due in this period have not shipped at all.

These count against on-time: a promise not yet met is not a promise kept.

on_time_pctnumbernullable

Share of due orders that shipped on time, as a percentage.

Null rather than zero when nothing was due, so a quiet week does not render as total failure.

on_time_in_full_pctnumbernullable

Share of due orders that shipped on time and complete, as a percentage.

average_days_latenumbernullable

Average days late, over late orders only.

Averaging over every order would dilute a real problem into a number that looks fine.

average_lead_time_daysnumbernullable

Average days from issue to first shipment, over orders that have shipped.

average_committed_lead_time_daysnumbernullable

Average lead time these orders were promised.

The gap between this and average_lead_time_days is what a lead time is renegotiated on.

backloglistnullable

Orders already past their promise and still unshipped, by how late they are.

objectstringenumValues:list

Resource type identifier.

page_infoobject

Pagination metadata.

next_page_urlstringnullable

Relative URL that fetches the next page of results.

previous_page_urlstringnullable

Relative URL that fetches the previous page of results.

has_next_pageboolean

Whether more results exist after this page.

has_prev_pageboolean

Whether results exist before this page.

dataarray of delivery_backlog_bucket

Resources in this page.

objectstringenumValues:delivery_backlog_bucket

Resource type identifier.

labelstring

Name of the band.

min_days_lateinteger

Lower bound of the band in days late.

max_days_lateinteger

Upper bound in days late; 0 means unbounded.

order_countinteger

Orders in the band.

unitsnumber

Quantity still owed across them, which is what remains unpacked rather than what was ordered.

latenesslistnullable

Every miss in the window banded by how far it missed by, shipped and unshipped alike.

The companion to average_days_late, which cannot tell "everything slips a day" from "most orders are fine and four are two months late". Those are opposite problems with opposite fixes, and one mean reports them identically.

objectstringenumValues:list

Resource type identifier.

page_infoobject

Pagination metadata.

next_page_urlstringnullable

Relative URL that fetches the next page of results.

previous_page_urlstringnullable

Relative URL that fetches the previous page of results.

has_next_pageboolean

Whether more results exist after this page.

has_prev_pageboolean

Whether results exist before this page.

dataarray of delivery_lateness_bucket

Resources in this page.

objectstringenumValues:delivery_lateness_bucket

Resource type identifier.

labelstring

Name of the band.

min_days_lateinteger

Lower bound of the band in days late.

max_days_lateinteger

Upper bound in days late; 0 means unbounded.

order_countinteger

Orders in the band, shipped and unshipped.

shipped_countinteger

How many of them have since shipped. The remainder are still owed, and are the same orders backlog counts.

unitsnumber

Quantity still unpacked across the band's orders.

by_customerlistnullable

The same window by customer, worst first.

objectstringenumValues:list

Resource type identifier.

page_infoobject

Pagination metadata.

next_page_urlstringnullable

Relative URL that fetches the next page of results.

previous_page_urlstringnullable

Relative URL that fetches the previous page of results.

has_next_pageboolean

Whether more results exist after this page.

has_prev_pageboolean

Whether results exist before this page.

dataarray of delivery_breakdown

Resources in this page.

objectstringenumValues:delivery_breakdown

Resource type identifier.

keystring

Identifier of the slice — a customer, customer group, product line, or commitment source. Empty when the dimension is unset on the orders in it.

labelstring

Display name for the slice.

performancedelivery_performancenullable

The delivery figures for it, on the same shape as the overall window.

objectstringenumValues:delivery_performance

Resource type identifier.

period_startstring (date-time)nullable

First day of the period; absent on the overall figure.

committed_order_countinteger

Orders whose promised ship date fell in this period.

This is the denominator for both rates below — orders that were due, not orders that shipped. Measuring against shipments only would let unshipped late orders disappear from the score.

shipped_order_countinteger

How many of them have shipped at all.

on_time_order_countinteger

How many shipped on or before the promised date.

on_time_in_full_countinteger

How many shipped on time and complete.

late_order_countinteger

How many shipped late, plus those already past their date and still unshipped.

not_yet_shipped_countinteger

How many due in this period have not shipped at all.

These count against on-time: a promise not yet met is not a promise kept.

on_time_pctnumbernullable

Share of due orders that shipped on time, as a percentage.

Null rather than zero when nothing was due, so a quiet week does not render as total failure.

on_time_in_full_pctnumbernullable

Share of due orders that shipped on time and complete, as a percentage.

average_days_latenumbernullable

Average days late, over late orders only.

Averaging over every order would dilute a real problem into a number that looks fine.

average_lead_time_daysnumbernullable

Average days from issue to first shipment, over orders that have shipped.

average_committed_lead_time_daysnumbernullable

Average lead time these orders were promised.

The gap between this and average_lead_time_days is what a lead time is renegotiated on.

by_customer_grouplistnullable

The same window by customer group, worst first.

objectstringenumValues:list

Resource type identifier.

page_infoobject

Pagination metadata.

next_page_urlstringnullable

Relative URL that fetches the next page of results.

previous_page_urlstringnullable

Relative URL that fetches the previous page of results.

has_next_pageboolean

Whether more results exist after this page.

has_prev_pageboolean

Whether results exist before this page.

dataarray of delivery_breakdown

Resources in this page.

objectstringenumValues:delivery_breakdown

Resource type identifier.

keystring

Identifier of the slice — a customer, customer group, product line, or commitment source. Empty when the dimension is unset on the orders in it.

labelstring

Display name for the slice.

performancedelivery_performancenullable

The delivery figures for it, on the same shape as the overall window.

objectstringenumValues:delivery_performance

Resource type identifier.

period_startstring (date-time)nullable

First day of the period; absent on the overall figure.

committed_order_countinteger

Orders whose promised ship date fell in this period.

This is the denominator for both rates below — orders that were due, not orders that shipped. Measuring against shipments only would let unshipped late orders disappear from the score.

shipped_order_countinteger

How many of them have shipped at all.

on_time_order_countinteger

How many shipped on or before the promised date.

on_time_in_full_countinteger

How many shipped on time and complete.

late_order_countinteger

How many shipped late, plus those already past their date and still unshipped.

not_yet_shipped_countinteger

How many due in this period have not shipped at all.

These count against on-time: a promise not yet met is not a promise kept.

on_time_pctnumbernullable

Share of due orders that shipped on time, as a percentage.

Null rather than zero when nothing was due, so a quiet week does not render as total failure.

on_time_in_full_pctnumbernullable

Share of due orders that shipped on time and complete, as a percentage.

average_days_latenumbernullable

Average days late, over late orders only.

Averaging over every order would dilute a real problem into a number that looks fine.

average_lead_time_daysnumbernullable

Average days from issue to first shipment, over orders that have shipped.

average_committed_lead_time_daysnumbernullable

Average lead time these orders were promised.

The gap between this and average_lead_time_days is what a lead time is renegotiated on.

by_product_linelistnullable

The same window by product line, worst first. An order spanning two lines is counted under both — a late order is late for every line on it — so these counts sum to more than the overall total.

objectstringenumValues:list

Resource type identifier.

page_infoobject

Pagination metadata.

next_page_urlstringnullable

Relative URL that fetches the next page of results.

previous_page_urlstringnullable

Relative URL that fetches the previous page of results.

has_next_pageboolean

Whether more results exist after this page.

has_prev_pageboolean

Whether results exist before this page.

dataarray of delivery_breakdown

Resources in this page.

objectstringenumValues:delivery_breakdown

Resource type identifier.

keystring

Identifier of the slice — a customer, customer group, product line, or commitment source. Empty when the dimension is unset on the orders in it.

labelstring

Display name for the slice.

performancedelivery_performancenullable

The delivery figures for it, on the same shape as the overall window.

objectstringenumValues:delivery_performance

Resource type identifier.

period_startstring (date-time)nullable

First day of the period; absent on the overall figure.

committed_order_countinteger

Orders whose promised ship date fell in this period.

This is the denominator for both rates below — orders that were due, not orders that shipped. Measuring against shipments only would let unshipped late orders disappear from the score.

shipped_order_countinteger

How many of them have shipped at all.

on_time_order_countinteger

How many shipped on or before the promised date.

on_time_in_full_countinteger

How many shipped on time and complete.

late_order_countinteger

How many shipped late, plus those already past their date and still unshipped.

not_yet_shipped_countinteger

How many due in this period have not shipped at all.

These count against on-time: a promise not yet met is not a promise kept.

on_time_pctnumbernullable

Share of due orders that shipped on time, as a percentage.

Null rather than zero when nothing was due, so a quiet week does not render as total failure.

on_time_in_full_pctnumbernullable

Share of due orders that shipped on time and complete, as a percentage.

average_days_latenumbernullable

Average days late, over late orders only.

Averaging over every order would dilute a real problem into a number that looks fine.

average_lead_time_daysnumbernullable

Average days from issue to first shipment, over orders that have shipped.

average_committed_lead_time_daysnumbernullable

Average lead time these orders were promised.

The gap between this and average_lead_time_days is what a lead time is renegotiated on.

by_commitment_sourcelistnullable

The same window by which rule produced each ship-by date: an explicitly promised date, the customer's lead time, their parent's, their group's, or the account default.

This is what says how much of the score rests on a default nobody deliberately set. A plant whose on-time rate is carried by account-sourced commitments is measuring itself against a number it invented.

objectstringenumValues:list

Resource type identifier.

page_infoobject

Pagination metadata.

next_page_urlstringnullable

Relative URL that fetches the next page of results.

previous_page_urlstringnullable

Relative URL that fetches the previous page of results.

has_next_pageboolean

Whether more results exist after this page.

has_prev_pageboolean

Whether results exist before this page.

dataarray of delivery_breakdown

Resources in this page.

objectstringenumValues:delivery_breakdown

Resource type identifier.

keystring

Identifier of the slice — a customer, customer group, product line, or commitment source. Empty when the dimension is unset on the orders in it.

labelstring

Display name for the slice.

performancedelivery_performancenullable

The delivery figures for it, on the same shape as the overall window.

objectstringenumValues:delivery_performance

Resource type identifier.

period_startstring (date-time)nullable

First day of the period; absent on the overall figure.

committed_order_countinteger

Orders whose promised ship date fell in this period.

This is the denominator for both rates below — orders that were due, not orders that shipped. Measuring against shipments only would let unshipped late orders disappear from the score.

shipped_order_countinteger

How many of them have shipped at all.

on_time_order_countinteger

How many shipped on or before the promised date.

on_time_in_full_countinteger

How many shipped on time and complete.

late_order_countinteger

How many shipped late, plus those already past their date and still unshipped.

not_yet_shipped_countinteger

How many due in this period have not shipped at all.

These count against on-time: a promise not yet met is not a promise kept.

on_time_pctnumbernullable

Share of due orders that shipped on time, as a percentage.

Null rather than zero when nothing was due, so a quiet week does not render as total failure.

on_time_in_full_pctnumbernullable

Share of due orders that shipped on time and complete, as a percentage.

average_days_latenumbernullable

Average days late, over late orders only.

Averaging over every order would dilute a real problem into a number that looks fine.

average_lead_time_daysnumbernullable

Average days from issue to first shipment, over orders that have shipped.

average_committed_lead_time_daysnumbernullable

Average lead time these orders were promised.

The gap between this and average_lead_time_days is what a lead time is renegotiated on.

uncommitted_order_countinteger

Issued orders in the window carrying no ship-by date, excluded from every rate above.

Reported so the exclusion is visible: a delivery score computed over half the order book, silently, is worse than one that says which half. A non-zero count here means orders placed before commitments were tracked still need a ship-by date.

Responses

200

Successful response for Analyze Delivery Performance