Reports API
REST endpoints for reports in SKUFlow: 9 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
| Operation | Endpoint | Risk |
|---|---|---|
| Revenue report | GET /organizations/{organizationId}/reports/revenue | read |
| Export the revenue report as CSV | GET /organizations/{organizationId}/reports/revenue/export | read |
| Accounts receivable aging | GET /organizations/{organizationId}/reports/ar-aging | read |
| A customer's open invoices by age | GET /organizations/{organizationId}/reports/ar-aging/customers/{customerId} | read |
| Export AR aging as CSV | GET /organizations/{organizationId}/reports/ar-aging/export | read |
| Sales pipeline report | GET /organizations/{organizationId}/reports/pipeline | read |
| Export the pipeline report as CSV | GET /organizations/{organizationId}/reports/pipeline/export | read |
| Inventory report | GET /organizations/{organizationId}/reports/inventory | read |
| Export the inventory report as CSV | GET /organizations/{organizationId}/reports/inventory/export | read |
Revenue report
GET /organizations/{organizationId}/reports/revenue
Invoiced against collected over a date range, in day / week / month buckets, with the previous period of the same length for comparison. Invoiced = issued invoices (not drafts or cancelled) on the day they were created, tax included; collected = payments by their date, net of refunds; tips are reported apart and are not revenue. Breakdowns by lead source, customer type and business unit, with average ticket per invoice. Filters narrow everything; businessUnitId narrows to one unit (the invoice's) and byBusinessUnit gives each unit's own numbers. Read-only.
| Permission | reports.financial (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_revenue (toolset reports, in the default set) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | Yes | First day of the range, YYYY-MM-DD (business calendar). |
to | query | string | Yes | Last day of the range (inclusive), at most 731 days after from. |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
granularity | query | enum | No | Chart buckets: day, week (Monday) or month. Default: day up to 31 days, week up to 120, else month. One of day, week, month. |
compareFrom | query | string | No | First day of the comparison period (with compareTo). Default by the range's shape: month / quarter / year to date → the same days of the previous month / quarter / last year; whole months → the months before; else the same number of days just before. |
compareTo | query | string | No | Last day of the comparison period. |
leadSourceId | query | string | No | Only customers from this lead source (GET /lead-sources). |
customerType | query | enum | No | One of RESIDENTIAL, COMMERCIAL. |
businessUnitId | query | string | No | Only one business unit (ids from GET /business-units), or "none" for records without a unit. Uses the invoice's unit. Omit for the whole business (a business without units never needs it). Up to 100 characters. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/revenue?from=2026-11-03&to=2026-11-03" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
range | object | |
range.from | string | |
range.to | string | |
range.timezone | string | |
range.granularity | enum | One of day, week, month. |
previousRange | object | |
previousRange.from | string | |
previousRange.to | string | |
totals | object | |
totals.invoicedCents | number | Integer cents. |
totals.invoiceCount | integer | |
totals.collectedCents | number | Integer cents. |
totals.tipsCents | number | Integer cents. |
totals.feesCents | number | Online-payment fees the business paid on what was collected (Stripe's processing fees plus any SKUFlow fee); Collected stays gross. |
totals.averageTicketCents | number | Integer cents. |
previousTotals | object | |
previousTotals.invoicedCents | number | Integer cents. |
previousTotals.invoiceCount | integer | |
previousTotals.collectedCents | number | Integer cents. |
previousTotals.tipsCents | number | Integer cents. |
previousTotals.feesCents | number | Online-payment fees the business paid on what was collected (Stripe's processing fees plus any SKUFlow fee); Collected stays gross. |
previousTotals.averageTicketCents | number | Integer cents. |
changes | object | |
changes.invoicedCents | number or null | Percent change from the previous period; null when the previous period was 0. |
changes.collectedCents | number or null | Percent change from the previous period; null when the previous period was 0. |
changes.averageTicketCents | number or null | Percent change from the previous period; null when the previous period was 0. |
changes.tipsCents | number or null | Percent change from the previous period; null when the previous period was 0. |
changes.invoiceCount | number or null | Percent change from the previous period; null when the previous period was 0. |
series | array of object | |
series[].key | string | The bucket's first day (Monday for weeks, the 1st for months). |
series[].from | string | |
series[].to | string | |
series[].invoicedCents | number | Integer cents. |
series[].invoiceCount | integer | |
series[].collectedCents | number | Integer cents. |
series[].tipsCents | number | Integer cents. |
series[].feesCents | number | Integer cents. |
series[].previousInvoicedCents | number or null | Integer cents. |
series[].previousCollectedCents | number or null | Integer cents. |
byLeadSource | array of object | |
byLeadSource[].id | string or null | |
byLeadSource[].name | string | |
byLeadSource[].color | string or null | |
byLeadSource[].invoiceCount | integer | |
byLeadSource[].invoicedCents | number | Integer cents. |
byLeadSource[].averageTicketCents | number | Integer cents. |
byLeadSource[].sharePercent | number | |
byCustomerType | array of object | |
byCustomerType[].id | string or null | |
byCustomerType[].name | string | |
byCustomerType[].color | string or null | |
byCustomerType[].invoiceCount | integer | |
byCustomerType[].invoicedCents | number | Integer cents. |
byCustomerType[].averageTicketCents | number | Integer cents. |
byCustomerType[].sharePercent | number | |
byBusinessUnit | array of object | Each business unit's own numbers: every active unit (zeros included; with a unit filter only that unit), then "No unit" (invoices, and payments, without one) when it has any. Empty for a business without units. |
byBusinessUnit[].id | string or null | The unit's id; null = the "No unit" row. |
byBusinessUnit[].name | string | |
byBusinessUnit[].invoiceCount | integer | |
byBusinessUnit[].invoicedCents | number | Integer cents. |
byBusinessUnit[].collectedCents | number | Payments by their date on this unit's invoices, net of refunds, tips apart. |
byBusinessUnit[].tipsCents | number | Integer cents. |
byBusinessUnit[].averageTicketCents | number | Integer cents. |
byBusinessUnit[].sharePercent | number | Share of the report's invoiced total. |
Export the revenue report as CSV
GET /organizations/{organizationId}/reports/revenue/export
The revenue report's table as CSV: table = series (one row per bucket, the default) or a breakdown (leadSource, customerType, businessUnit). Same inputs as GET /reports/revenue. Read-only.
| Permission | reports.financial (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_revenueExport (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | Yes | First day of the range, YYYY-MM-DD (business calendar). |
to | query | string | Yes | Last day of the range (inclusive), at most 731 days after from. |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
granularity | query | enum | No | Chart buckets: day, week (Monday) or month. Default: day up to 31 days, week up to 120, else month. One of day, week, month. |
compareFrom | query | string | No | First day of the comparison period (with compareTo). Default by the range's shape: month / quarter / year to date → the same days of the previous month / quarter / last year; whole months → the months before; else the same number of days just before. |
compareTo | query | string | No | Last day of the comparison period. |
leadSourceId | query | string | No | Only customers from this lead source (GET /lead-sources). |
customerType | query | enum | No | One of RESIDENTIAL, COMMERCIAL. |
businessUnitId | query | string | No | Only one business unit (ids from GET /business-units), or "none" for records without a unit. Uses the invoice's unit. Omit for the whole business (a business without units never needs it). Up to 100 characters. |
table | query | enum | No | Which table: series, or a breakdown (businessUnit = per business unit). One of series, leadSource, customerType, businessUnit. Default series. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/revenue/export?from=2026-11-03&to=2026-11-03" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
fileName | string | |
csv | string | Comma-separated, CRLF line ends, header first; money as decimals. |
count | integer |
Accounts receivable aging
GET /organizations/{organizationId}/reports/ar-aging
Open balances today (sent and overdue invoices, total less payments) by days past due: current (not yet due), 1–30, 31–60, 61–90 and 90+, in total and per customer (largest balance first). Days count from the due date, or from the issue date when there is none. Drill into a customer with GET /reports/ar-aging/customers/{customerId}. Read-only.
| Permission | reports.financial (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_arAging (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
today | query | string | No | Your today (YYYY-MM-DD), accepted within a day of the server's; defaults to the server's (UTC). |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
customerType | query | enum | No | One of RESIDENTIAL, COMMERCIAL. |
businessUnitId | query | string | No | Only one business unit (ids from GET /business-units), or "none" for records without a unit. Uses the invoice's unit. Omit for the whole business (a business without units never needs it). Up to 100 characters. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/ar-aging" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
asOf | string | |
totals | object | |
totals.current | number | Not yet due. |
totals.days1to30 | number | Integer cents. |
totals.days31to60 | number | Integer cents. |
totals.days61to90 | number | Integer cents. |
totals.days90plus | number | Integer cents. |
totals.totalCents | number | Integer cents. |
totals.invoiceCount | integer | |
totals.customerCount | integer | |
overduePercent | number | Share of the open balance that is past due. |
customers | array of object | |
customers[].customerId | string | |
customers[].name | string | |
customers[].type | enum | One of RESIDENTIAL, COMMERCIAL. |
customers[].invoiceCount | integer | |
customers[].oldestDaysPastDue | integer | |
customers[].current | number | Not yet due. |
customers[].days1to30 | number | Integer cents. |
customers[].days31to60 | number | Integer cents. |
customers[].days61to90 | number | Integer cents. |
customers[].days90plus | number | Integer cents. |
customers[].totalCents | number | Integer cents. |
A customer's open invoices by age
GET /organizations/{organizationId}/reports/ar-aging/customers/{customerId}
The AR aging drill-down: one customer's open invoices (identifier, issue and due dates, days past due, bucket, total, paid, balance), oldest due first. Get customer ids from GET /reports/ar-aging. Read-only.
| Permission | reports.financial (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_arAgingCustomer (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customerId | path | string | Yes | |
today | query | string | No | Your today (YYYY-MM-DD), accepted within a day of the server's; defaults to the server's (UTC). |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
businessUnitId | query | string | No | Only one business unit (ids from GET /business-units), or "none" for records without a unit. Only the customer's invoices of that unit. Omit for the whole business (a business without units never needs it). Up to 100 characters. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/ar-aging/customers/{customerId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
customerId | string | |
name | string | |
asOf | string | |
invoices | array of object | |
invoices[].id | string | |
invoices[].identifier | string | |
invoices[].status | enum | One of SENT, OVERDUE. |
invoices[].issuedOn | string | |
invoices[].dueDate | string or null | |
invoices[].daysPastDue | integer | |
invoices[].bucket | enum | One of current, days1to30, days31to60, days61to90, days90plus. |
invoices[].totalCents | number | Integer cents. |
invoices[].paidCents | number | Integer cents. |
invoices[].balanceCents | number | Integer cents. |
Export AR aging as CSV
GET /organizations/{organizationId}/reports/ar-aging/export
The AR aging report per customer as CSV (one row per customer, one column per bucket). Read-only.
| Permission | reports.financial (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_arAgingExport (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
today | query | string | No | Your today (YYYY-MM-DD), accepted within a day of the server's; defaults to the server's (UTC). |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
customerType | query | enum | No | One of RESIDENTIAL, COMMERCIAL. |
businessUnitId | query | string | No | Only one business unit (ids from GET /business-units), or "none" for records without a unit. Uses the invoice's unit. Omit for the whole business (a business without units never needs it). Up to 100 characters. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/ar-aging/export" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
fileName | string | |
csv | string | Comma-separated, CRLF line ends, header first; money as decimals. |
count | integer |
Sales pipeline report
GET /organizations/{organizationId}/reports/pipeline
Requests → quotes → approved → converted for work that came in during the range, close rate (approved ÷ sent), average quote value (approved total, else the largest option's default lines, before tax), days from sent to approved (average and median), per salesperson (the quote's sold-by user) and per lead source (new customers, requests, quotes, approved, revenue invoiced, and ad spend for the lead sources ads create: Google Ads, Facebook / Instagram, Google Local Services), with the previous period. Read-only.
| Permission | reports.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_pipeline (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | Yes | First day of the range, YYYY-MM-DD (business calendar). |
to | query | string | Yes | Last day of the range (inclusive), at most 731 days after from. |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
granularity | query | enum | No | Chart buckets: day, week (Monday) or month. Default: day up to 31 days, week up to 120, else month. One of day, week, month. |
compareFrom | query | string | No | First day of the comparison period (with compareTo). Default by the range's shape: month / quarter / year to date → the same days of the previous month / quarter / last year; whole months → the months before; else the same number of days just before. |
compareTo | query | string | No | Last day of the comparison period. |
leadSourceId | query | string | No | Only customers from this lead source (GET /lead-sources). |
customerType | query | enum | No | One of RESIDENTIAL, COMMERCIAL. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/pipeline?from=2026-11-03&to=2026-11-03" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
range | object | |
range.from | string | |
range.to | string | |
range.timezone | string | |
range.granularity | enum | One of day, week, month. |
previousRange | object | |
previousRange.from | string | |
previousRange.to | string | |
totals | object | |
totals.requests | integer | |
totals.requestsConverted | integer | |
totals.quotes | integer | |
totals.sent | integer | |
totals.approved | integer | |
totals.converted | integer | |
totals.closeRate | number or null | Percent with one decimal; null when there is nothing to divide by. |
totals.averageQuoteCents | number | Integer cents. |
totals.approvedValueCents | number | Integer cents. |
totals.timeToApprove | object | |
totals.timeToApprove.averageDays | number or null | |
totals.timeToApprove.medianDays | number or null | |
totals.timeToApprove.count | integer | |
previousTotals | object | |
previousTotals.requests | integer | |
previousTotals.requestsConverted | integer | |
previousTotals.quotes | integer | |
previousTotals.sent | integer | |
previousTotals.approved | integer | |
previousTotals.converted | integer | |
previousTotals.closeRate | number or null | Percent with one decimal; null when there is nothing to divide by. |
previousTotals.averageQuoteCents | number | Integer cents. |
previousTotals.approvedValueCents | number | Integer cents. |
previousTotals.timeToApprove | object | |
previousTotals.timeToApprove.averageDays | number or null | |
previousTotals.timeToApprove.medianDays | number or null | |
previousTotals.timeToApprove.count | integer | |
changes | object | |
changes.quotes | number or null | Percent change from the previous period; null when the previous period was 0. |
changes.approvedValueCents | number or null | Percent change from the previous period; null when the previous period was 0. |
changes.averageQuoteCents | number or null | Percent change from the previous period; null when the previous period was 0. |
changes.closeRate | number or null | Change in percentage points. |
series | array of object | |
series[].key | string | |
series[].from | string | |
series[].to | string | |
series[].quotesCreated | number | |
series[].quotesSent | number | |
series[].quotesApproved | number | |
series[].approvedValueCents | number | Integer cents. |
bySalesperson | array of object | |
bySalesperson[].userId | string or null | The quote's sold-by user; null = not set. |
bySalesperson[].name | string | |
bySalesperson[].quotes | integer | |
bySalesperson[].sent | integer | |
bySalesperson[].approved | integer | |
bySalesperson[].closeRate | number or null | Percent with one decimal; null when there is nothing to divide by. |
bySalesperson[].approvedValueCents | number | Integer cents. |
bySalesperson[].averageQuoteCents | number | Integer cents. |
byLeadSource | array of object | |
byLeadSource[].leadSourceId | string or null | |
byLeadSource[].name | string | |
byLeadSource[].newCustomers | integer | |
byLeadSource[].requests | integer | |
byLeadSource[].quotes | integer | |
byLeadSource[].approved | integer | |
byLeadSource[].closeRate | number or null | Percent with one decimal; null when there is nothing to divide by. |
byLeadSource[].revenueCents | number | Integer cents. |
byLeadSource[].revenuePerCustomerCents | number | Integer cents. |
byLeadSource[].adSpendCents | number or null | Ad spend in the range for an ad platform's lead source; null for other sources. |
byLeadSource[].costPerCustomerCents | number or null | Ad spend ÷ new customers; null without ad spend or new customers. |
Export the pipeline report as CSV
GET /organizations/{organizationId}/reports/pipeline/export
The pipeline report as CSV: table = series (default), salesperson or leadSource. Same inputs as GET /reports/pipeline. Read-only.
| Permission | reports.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_pipelineExport (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | Yes | First day of the range, YYYY-MM-DD (business calendar). |
to | query | string | Yes | Last day of the range (inclusive), at most 731 days after from. |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
granularity | query | enum | No | Chart buckets: day, week (Monday) or month. Default: day up to 31 days, week up to 120, else month. One of day, week, month. |
compareFrom | query | string | No | First day of the comparison period (with compareTo). Default by the range's shape: month / quarter / year to date → the same days of the previous month / quarter / last year; whole months → the months before; else the same number of days just before. |
compareTo | query | string | No | Last day of the comparison period. |
leadSourceId | query | string | No | Only customers from this lead source (GET /lead-sources). |
customerType | query | enum | No | One of RESIDENTIAL, COMMERCIAL. |
table | query | enum | No | One of series, salesperson, leadSource. Default series. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/pipeline/export?from=2026-11-03&to=2026-11-03" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
fileName | string | |
csv | string | Comma-separated, CRLF line ends, header first; money as decimals. |
count | integer |
Inventory report
GET /organizations/{organizationId}/reports/inventory
Stock value at cost by location (now; cost needs costing.read), quantity used by item over the range (stock used less returns, with its cost) and the items at or below their reorder point with a suggested order. With the previous period's usage. Read-only.
| Permission | reports.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_inventory (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | Yes | First day of the range, YYYY-MM-DD (business calendar). |
to | query | string | Yes | Last day of the range (inclusive), at most 731 days after from. |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
granularity | query | enum | No | Chart buckets: day, week (Monday) or month. Default: day up to 31 days, week up to 120, else month. One of day, week, month. |
compareFrom | query | string | No | First day of the comparison period (with compareTo). Default by the range's shape: month / quarter / year to date → the same days of the previous month / quarter / last year; whole months → the months before; else the same number of days just before. |
compareTo | query | string | No | Last day of the comparison period. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/inventory?from=2026-11-03&to=2026-11-03" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
range | object | |
range.from | string | |
range.to | string | |
range.timezone | string | |
range.granularity | enum | One of day, week, month. |
previousRange | object | |
previousRange.from | string | |
previousRange.to | string | |
totals | object | |
totals.quantityUsed | number | |
totals.costCents | number | Integer cents. |
totals.stockValueCents | number | Integer cents. |
totals.lowStockCount | integer | |
previousTotals | object | |
previousTotals.quantityUsed | number | |
previousTotals.costCents | number | Integer cents. |
changes | object | |
changes.quantityUsed | number or null | Percent change from the previous period; null when the previous period was 0. |
series | array of object | |
series[].key | string | |
series[].from | string | |
series[].to | string | |
series[].quantityUsed | number | |
series[].costCents | number | Integer cents. |
locations | array of object | |
locations[].locationId | string | |
locations[].name | string | |
locations[].items | integer | |
locations[].units | number | |
locations[].stockValueCents | number | Integer cents. |
usage | array of object | |
usage[].itemId | string | |
usage[].name | string | |
usage[].unit | string | |
usage[].quantityUsed | number | |
usage[].costCents | number | Integer cents. |
lowStock | array of object | |
lowStock[].itemId | string | |
lowStock[].name | string | |
lowStock[].unit | string | |
lowStock[].locationId | string | |
lowStock[].locationName | string | |
lowStock[].onHand | number | |
lowStock[].reorderPoint | number | |
lowStock[].suggestedQuantity | number |
Export the inventory report as CSV
GET /organizations/{organizationId}/reports/inventory/export
The inventory report as CSV: table = usage (default), locations or lowStock. Cost columns only for costing.read. Read-only.
| Permission | reports.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | reports_inventoryExport (toolset reports) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | Yes | First day of the range, YYYY-MM-DD (business calendar). |
to | query | string | Yes | Last day of the range (inclusive), at most 731 days after from. |
timezone | query | string | No | Override of the IANA timezone the business's days are counted in (timestamps such as invoice creation become dates in it), e.g. America/Chicago. Default: the organization's timezone (Settings → General). Up to 100 characters. |
granularity | query | enum | No | Chart buckets: day, week (Monday) or month. Default: day up to 31 days, week up to 120, else month. One of day, week, month. |
compareFrom | query | string | No | First day of the comparison period (with compareTo). Default by the range's shape: month / quarter / year to date → the same days of the previous month / quarter / last year; whole months → the months before; else the same number of days just before. |
compareTo | query | string | No | Last day of the comparison period. |
table | query | enum | No | One of usage, locations, lowStock. Default usage. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reports/inventory/export?from=2026-11-03&to=2026-11-03" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
fileName | string | |
csv | string | Comma-separated, CRLF line ends, header first; money as decimals. |
count | integer |