Fulcrumpro Reporting API
The Reporting API from Fulcrumpro — 8 operation(s) for reporting.
The Reporting API from Fulcrumpro — 8 operation(s) for reporting.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/fulcrumpro-reporting-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Fulcrum Public Accounting Code Reporting API
version: v1
servers:
- url: https://api.fulcrumpro.com
tags:
- name: Reporting
paths:
/api/reporting/inventory/list:
post:
tags:
- Reporting
summary: 'Lists report-ready on-hand inventory rows from the inventory reporting view, including per-unit and
extended valuation (material/labor/machine/OP), lot and location context, and item categorization
so callers do not need to hand-join inventory to lots, items, and their details. Returns exactly
one row per (item, lot, location), so summing on-hand quantity or value across the rows does not
over-count a lot.'
operationId: ListInventoryReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingInventoryReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingInventoryReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingInventoryReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingInventoryReportFilter'
responses:
'200':
description: A page of inventory report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingInventoryReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingInventoryReportRow'
'403':
description: The viewer lacks the View Inventory permission.
x-c4-required-permissions:
- ItemsAndInventory-Items-View Inventory
/api/reporting/invoice/list:
post:
tags:
- Reporting
summary: 'Lists report-ready invoice-line rows from the invoice reporting view, including line type,
pricing, tax, and aging detail joined to sales-order and shipment context so callers do not need
to hand-join invoices to invoice line items, sales orders, and shipments.'
operationId: ListInvoiceReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingInvoiceReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingInvoiceReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingInvoiceReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingInvoiceReportFilter'
responses:
'200':
description: A page of invoice report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingInvoiceReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingInvoiceReportRow'
'403':
description: The viewer lacks the View Invoices permission.
x-c4-required-permissions:
- Invoicing-Invoicing-View Invoices
/api/reporting/job-activity-by-operator/list:
post:
tags:
- Reporting
summary: 'Lists report-ready per-operator operation rows from the job-activity-by-operator reporting view,
including setup/labor/machine time and cost, run-by-run quantities, rates, and job/routing context
so callers do not need to hand-join jobs to items-to-make, operations, timers, and job logs.'
operationId: ListJobActivityByOperatorReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityByOperatorReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityByOperatorReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityByOperatorReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityByOperatorReportFilter'
responses:
'200':
description: A page of job-activity-by-operator report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityByOperatorReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityByOperatorReportRow'
'403':
description: The viewer lacks one of the required permissions (View Job and View Time Management).
x-c4-required-permissions:
- Jobs-Jobs-View Job
/api/reporting/job-activity/list:
post:
tags:
- Reporting
summary: 'Lists report-ready job-operation rows from the job-activity reporting view, including schedule,
timer, completion-progress, and routing context so callers do not need to hand-join jobs to
items-to-make, operations, timers, and scheduling data.'
operationId: ListJobActivityReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingJobActivityReportFilter'
responses:
'200':
description: A page of job-activity report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityReportRow'
'403':
description: The viewer lacks the View Job permission.
x-c4-required-permissions:
- Jobs-Jobs-View Job
/api/reporting/quote/list:
post:
tags:
- Reporting
summary: 'Lists report-ready quote rows from the quote reporting view, including totals, cost, status, and
lifecycle dates, so callers do not need to hand-assemble quote-level summary data.'
operationId: ListQuoteReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingQuoteReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingQuoteReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingQuoteReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingQuoteReportFilter'
responses:
'200':
description: A page of quote report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingQuoteReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingQuoteReportRow'
'403':
description: The viewer lacks the View Quote permission.
x-c4-required-permissions:
- Orders-Quotes-View Quote
/api/reporting/sales-order-lines/list:
post:
tags:
- Reporting
summary: 'Lists report-ready sales-order line rows from the sales-order line-items reporting view,
including pre-computed cost, invoice, ship, and return columns so callers do not need to
hand-join sales orders to line items, jobs, invoices, shipments, and returns.'
operationId: ListSalesOrderLinesReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingSalesOrderLinesReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingSalesOrderLinesReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingSalesOrderLinesReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingSalesOrderLinesReportFilter'
responses:
'200':
description: A page of sales-order line report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingSalesOrderLinesReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingSalesOrderLinesReportRow'
'403':
description: The viewer lacks one of the required permissions (View Sales Order, View Customer, View Job, View Invoices, and View Shipments).
x-c4-required-permissions:
- Orders-SalesOrders-View Sales Order
/api/reporting/shipping/list:
post:
tags:
- Reporting
summary: 'Lists report-ready shipment line rows from the shipping reporting view, including pre-computed
dollar columns ($ shipped, $ unshipped, total $ ordered, unit price) so callers do not need to
hand-join shipments to sales-order line items.'
operationId: ListShippingReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingShippingReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingShippingReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingShippingReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingShippingReportFilter'
responses:
'200':
description: A page of shipping report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingShippingReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingShippingReportRow'
'403':
description: The viewer lacks the View Shipments permission.
x-c4-required-permissions:
- Shipping-Shipping-View Shipments
/api/reporting/time-clock/list:
post:
tags:
- Reporting
summary: 'Lists report-ready time-clock rows from the time-clock reporting view, including clock-in/clock-out
times, computed shift hours, reason and clock codes, and override-audit context so callers do not
need to hand-join timer entries to their reason and clock-code tags.'
operationId: ListTimeClockReport
parameters:
- name: Sort.Field
in: query
description: Sort field
schema:
minLength: 1
type: string
- name: Sort.Dir
in: query
description: Sort direction
schema:
$ref: '#/components/schemas/CommonEnumSortDirectionEnum'
- name: Skip
in: query
description: Number of records to skip.
schema:
minimum: 0
type: integer
format: int32
- name: Take
in: query
description: Number of records to return (maximum)
schema:
maximum: 5000
minimum: 0
type: integer
format: int32
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/DtoReportingTimeClockReportFilter'
application/json:
schema:
$ref: '#/components/schemas/DtoReportingTimeClockReportFilter'
text/json:
schema:
$ref: '#/components/schemas/DtoReportingTimeClockReportFilter'
application/*+json:
schema:
$ref: '#/components/schemas/DtoReportingTimeClockReportFilter'
responses:
'200':
description: A page of time-clock report rows with the total matching count.
content:
application/json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingTimeClockReportRow'
application/problem+json:
schema:
$ref: '#/components/schemas/DtoPagedResultDtoDtoReportingTimeClockReportRow'
'403':
description: The viewer lacks the View Time Management permission.
x-c4-required-permissions:
- Time-Time-View Time Management
components:
schemas:
DtoPagedResultDtoDtoReportingJobActivityByOperatorReportRow:
required:
- data
- hasNextPage
- hasPreviousPage
- page
- pageSize
- totalCount
- totalPages
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DtoReportingJobActivityByOperatorReportRow'
description: The data
page:
type: integer
description: The 1-indexed page
format: int32
readOnly: true
pageSize:
type: integer
description: The page size
format: int32
readOnly: true
totalCount:
type: integer
description: The total count of records
format: int32
totalPages:
type: integer
description: The total pages
format: int32
readOnly: true
hasPreviousPage:
type: boolean
description: True if there is a previous page
readOnly: true
hasNextPage:
type: boolean
description: True if there is a next page
readOnly: true
additionalProperties: false
description: Paged result
DtoReportingJobActivityByOperatorReportFilter:
type: object
properties:
startedOrCreatedDateFrom:
type:
- string
- 'null'
description: Inclusive lower bound applied to the run's Started or Created Date. Null means no lower bound.
format: date-time
startedOrCreatedDateTo:
type:
- string
- 'null'
description: 'Inclusive upper bound applied to the run''s Started or Created Date (the whole `to` day is
included). Null means no upper bound.'
format: date-time
employee:
type:
- string
- 'null'
description: Optional exact-match filter on the operator / employee name. Null means no operator filter.
department:
type:
- string
- 'null'
description: 'Optional exact-match filter on the department containing the operation''s work center. Null means
no department filter.'
additionalProperties: false
description: 'Constrained filter for the job-activity-by-operator reporting list endpoint. Every field maps to a
fixed, server-controlled column; values are always bound as Dapper parameters and never concatenated
into SQL.'
DtoReportingInvoiceReportRow:
type: object
properties:
company:
type:
- string
- 'null'
description: Issuing company / tenant company name.
invoiceNumber:
type:
- integer
- 'null'
description: Numeric invoice identifier assigned by Fulcrum.
format: int32
invoiceStatus:
type:
- string
- 'null'
description: Lifecycle state — typically New, Approved, Issued, Paid.
salesOrderNumber:
type:
- integer
- 'null'
description: Number identifying the sales order being invoiced.
format: int32
customerPurchaseOrder:
type:
- string
- 'null'
description: Customer's PO number recorded on the sales order.
customerName:
type:
- string
- 'null'
description: Display name of the billed customer.
salesPerson:
type:
- string
- 'null'
description: Name of the salesperson associated with the sales order.
isDeposit:
type:
- string
- 'null'
description: Set to the string "Deposit" when the row represents a deposit; null otherwise.
createdDate:
type:
- string
- 'null'
description: UTC timestamp when the invoice record was created.
format: date-time
lineType:
type:
- string
- 'null'
description: Discriminator — Part, Shipping, Fee, Deposit, Discount, Refund, Tax, or NA.
lineItemName:
type:
- string
- 'null'
description: Item name (for part lines) or descriptive label for non-part lines.
customerPartNumber:
type:
- string
- 'null'
description: Customer's part number for this line, when supplied.
customerPartDescription:
type:
- string
- 'null'
description: Customer's description for this line, when supplied.
itemDescription:
type:
- string
- 'null'
description: Internal item description for the line.
accountingCode:
type:
- string
- 'null'
description: Accounting code mapped to the invoice line.
itemTags:
type:
- string
- 'null'
description: Comma-separated list of descriptive tags from the item.
issuedDate:
type:
- string
- 'null'
description: Date the invoice was issued. NULL for drafts.
format: date-time
dueDate:
type:
- string
- 'null'
description: Date payment is due per the invoice's payment terms.
format: date-time
salesOrderTotal:
type:
- number
- 'null'
description: Total of the source sales order (may differ from invoice total).
format: double
unitPrice:
type:
- number
- 'null'
description: Per-unit price for the line (varies by Line Type; negative for discounts).
format: double
quantityInvoiced:
type:
- number
- 'null'
description: Quantity billed on this line.
format: double
invoiceAmount:
type:
- number
- 'null'
description: Extended amount for this line before tax.
format: double
isTaxable:
type:
- integer
- 'null'
description: 1 when the line is subject to taxation, otherwise 0. (Computed 1/0 flag in the view.)
format: int32
taxCode:
type:
- string
- 'null'
description: Descriptive name of the tax code applied to the line, when applicable.
taxTotal:
type:
- number
- 'null'
description: Equivalent to Invoice Amount for tax line items; 0 otherwise.
format: double
invoiceTotalWithoutTax:
type:
- number
- 'null'
description: Invoice-level total excluding tax (repeats on every line of the invoice).
format: double
invoiceTotalWithTax:
type:
- number
- 'null'
description: Invoice-level total including tax (repeats on every line of the invoice).
format: double
paidDate:
type:
- string
- 'null'
description: Date the invoice was marked paid; null while open.
format: date-time
late:
type:
- integer
- 'null'
description: 1 when the invoice is past Due Date and unpaid or was paid late, otherwise 0. (Computed 1/0 flag in the view.)
format: int32
daysLate:
type:
- integer
- 'null'
description: Days between Due Date and either Paid Date (if paid) or today (if open). 0 if not yet due.
format: int32
customerCurrencyCode:
type:
- string
- 'null'
description: ISO currency code of the customer's billing currency.
shipmentName:
type:
- string
- 'null'
description: Concatenated names of shipments invoiced on this line (comma-separated).
shipmentsLine1s:
type:
- string
- 'null'
description: Together with ShipmentsLine2s, concatenated shipment address values (comma-separated).
shipmentsLine2s:
type:
- string
- 'null'
description: Together with ShipmentsLine1s, concatenated shipment address values (comma-separated).
shipmentsCities:
type:
- string
- 'null'
description: Concatenated shipment cities (comma-separated).
shipmentsStates:
type:
- string
- 'null'
description: Concatenated shipment state/provinces (comma-separated).
shipmentsCountries:
type:
- string
- 'null'
description: Concatenated shipment countries (comma-separated).
accountingClass:
type:
- string
- 'null'
description: Accounting classification for the item associated to the line, if applicable.
additionalProperties: false
description: 'One row of the pre-joined invoice reporting view (`rpt.View_ExposedReportingData_Invoice`): one
invoice line item, joined to sales-order and shipment context with line type, pricing, tax, and aging
detail. Property names are clean identifiers; the query aliases each source column (e.g.
`[Issued Date]`) to the matching property so Dapper can bind it.'
DtoReportingTimeClockReportFilter:
type: object
properties:
startedFrom:
type:
- string
- 'null'
description: Inclusive lower bound applied to the entry's clock-in time (Started). Null means no lower bound.
format: date-time
startedTo:
type:
- string
- 'null'
description: 'Inclusive upper bound applied to the entry''s clock-in time (Started); the whole `to` day is
included. Null means no upper bound.'
format: date-time
employee:
type:
- string
- 'null'
description: Optional exact-match filter on the operator / employee name. Null means no employee filter.
type:
type:
- string
- 'null'
description: Optional exact-match filter on the timer-entry type (ClockIn or Break). Null means no type filter.
additionalProperties: false
description: 'Constrained filter for the time-clock reporting list endpoint. Every field maps to a fixed,
server-controlled column; values are always bound as Dapper parameters and never concatenated
into SQL.'
DtoPagedResultDtoDtoReportingSalesOrderLinesReportRow:
required:
- data
- hasNextPage
- hasPreviousPage
- page
- pageSize
- totalCount
- totalPages
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DtoReportingSalesOrderLinesReportRow'
description: The data
page:
type: integer
description: The 1-indexed page
format: int32
readOnly: true
pageSize:
type: integer
description: The page size
format: int32
readOnly: true
totalCount:
type: integer
description: The total count of records
format: int32
totalPages:
type: integer
description: The total pages
format: int32
readOnly: true
hasPreviousPage:
type: boolean
description: True if there is a previous page
readOnly: true
hasNextPage:
type: boolean
description: True if there is a next page
readOnly: true
additionalProperties: false
description: Paged result
DtoReportingJobActivityReportRow:
type: object
properties:
jobName:
type:
- string
- 'null'
description: Job name (typically the user-facing job identifier).
item:
type:
- string
- 'null'
description: Item number being produced.
itemDescription:
type:
- string
- 'null'
description: Item description.
itemRevision:
type:
- string
- 'null'
description: Item revision when revision tracking is enabled.
itemTags:
type:
- string
- 'null'
description: Comma-separated descriptive tags from the item.
productionDueDate:
type:
- string
- 'null'
description: Job's production due date.
format: date-time
salesOrderNumber:
type:
- string
- 'null'
description: Source sales order number, when the job is SO-driven.
customer:
type:
- string
- 'null'
description: Customer name from the sales order.
customerPurchaseOrder:
type:
- string
- 'null'
description: Customer's PO number from the sales order.
jobPriority:
type:
- string
- 'null'
description: Job priority value (High, Medium, or Low).
jobStatus:
type:
- string
- 'null'
description: Job lifecycle status (Approved, Scheduled, In Progress, Complete, etc.).
jobScheduledStart:
type:
- string
- 'null'
description: Scheduled start time of the job.
format: date-time
jobScheduledEnd:
type:
- string
- 'null'
description: Scheduled end time of the job.
format: date-time
jobLateStatus:
type:
- string
- 'null'
description: Late classification for the job (Late or On Time).
jobPlannedQty:
type:
- number
- 'null'
description: Planned quantity for the job.
format: double
uoM:
type:
- string
- 'null'
description: Unit of measur
# --- truncated at 32 KB (92 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fulcrumpro/refs/heads/main/openapi/fulcrumpro-reporting-api-openapi.yml