Fulcrumpro Reporting API
The Reporting API from Fulcrumpro — 8 operation(s) for reporting.
The Reporting API from Fulcrumpro — 8 operation(s) for reporting.
openapi: 3.0.4
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:
DtoPagedResultDtoDtoReportingInvoiceReportRow:
required:
- data
- hasNextPage
- hasPreviousPage
- page
- pageSize
- totalCount
- totalPages
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DtoReportingInvoiceReportRow'
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
description: Inclusive lower bound applied to the run's Started or Created Date. Null means no lower bound.
format: date-time
nullable: true
startedOrCreatedDateTo:
type: string
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
nullable: true
employee:
type: string
description: Optional exact-match filter on the operator / employee name. Null means no operator filter.
nullable: true
department:
type: string
description: 'Optional exact-match filter on the department containing the operation''s work center. Null means
no department filter.'
nullable: true
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.'
DtoReportingJobActivityReportRow:
type: object
properties:
jobName:
type: string
description: Job name (typically the user-facing job identifier).
nullable: true
item:
type: string
description: Item number being produced.
nullable: true
itemDescription:
type: string
description: Item description.
nullable: true
itemRevision:
type: string
description: Item revision when revision tracking is enabled.
nullable: true
itemTags:
type: string
description: Comma-separated descriptive tags from the item.
nullable: true
productionDueDate:
type: string
description: Job's production due date.
format: date-time
nullable: true
salesOrderNumber:
type: string
description: Source sales order number, when the job is SO-driven.
nullable: true
customer:
type: string
description: Customer name from the sales order.
nullable: true
customerPurchaseOrder:
type: string
description: Customer's PO number from the sales order.
nullable: true
jobPriority:
type: string
description: Job priority value (High, Medium, or Low).
nullable: true
jobStatus:
type: string
description: Job lifecycle status (Approved, Scheduled, In Progress, Complete, etc.).
nullable: true
jobScheduledStart:
type: string
description: Scheduled start time of the job.
format: date-time
nullable: true
jobScheduledEnd:
type: string
description: Scheduled end time of the job.
format: date-time
nullable: true
jobLateStatus:
type: string
description: Late classification for the job (Late or On Time).
nullable: true
jobPlannedQty:
type: number
description: Planned quantity for the job.
format: double
nullable: true
uoM:
type: string
description: Unit of measure for the item being produced.
nullable: true
department:
type: string
description: Department containing the operation's scheduled work center.
nullable: true
shift:
type: string
description: Shift assigned to the operation.
nullable: true
operationName:
type: string
description: Operation name within the routing.
nullable: true
scheduledEquipment:
type: string
description: Equipment scheduled for this operation.
nullable: true
operationNumber:
type: integer
description: Operation sequence number within the routing.
format: int32
nullable: true
operationStatus:
type: string
description: Operation lifecycle status (Ready, Pending, Running, Paused, Complete).
nullable: true
setupComplete:
type: string
description: '"TRUE" when the setup phase is complete, otherwise "FALSE".'
nullable: true
runComplete:
type: string
description: '"TRUE" when the run phase is complete, otherwise "FALSE".'
nullable: true
estimatedSetupTimeHours:
type: number
description: Estimated setup hours for this operation.
format: double
nullable: true
estimatedRunTimeHours:
type: number
description: Estimated run hours for this operation.
format: double
nullable: true
estimatedMachineTimeHours:
type: number
description: Estimated machine hours for this operation.
format: double
nullable: true
unitsCompletedOnOperation:
type: number
description: Quantity completed on this operation so far.
format: double
nullable: true
unitsCompletedOnJob:
type: number
description: Quantity completed on the job overall.
format: double
nullable: true
isOutsideProcessing:
type: string
description: '"Outside Processing" when this operation is performed by an outside vendor, otherwise empty.'
nullable: true
outsideProcessingLeadTime:
type: integer
description: Configured lead time for outside-processing operations.
format: int32
nullable: true
isRework:
type: boolean
description: True when this operation row represents rework rather than original production.
nullable: true
totalOperationTimeHours:
type: number
description: Total elapsed operator time on this operation (across all phases).
format: double
nullable: true
totalMachineTimeHours:
type: number
description: Total elapsed machine time on this operation.
format: double
nullable: true
operationScheduledStart:
type: string
description: Scheduled start time for this operation.
format: date-time
nullable: true
actualStart:
type: string
description: Actual start timestamp (from timer data).
format: date-time
nullable: true
lastStoppedOn:
type: string
description: Timestamp of the most recent timer stop.
format: date-time
nullable: true
latestUser:
type: string
description: Name of the most recent operator to work on the operation.
nullable: true
scheduledEnd:
type: string
description: Scheduled end time for this operation.
format: date-time
nullable: true
additionalProperties: false
description: 'One row of the pre-joined job-activity reporting view
(`rpt.View_ExposedReportingData_JobActivity`): one operation per item-to-make per job, carrying
schedule, timer, completion-progress, and routing context. Property names are clean identifiers; the
query aliases each source column (e.g. `[Production Due Date]`) to the matching property so
Dapper can bind it.'
DtoPagedResultDtoDtoReportingTimeClockReportRow:
required:
- data
- hasNextPage
- hasPreviousPage
- page
- pageSize
- totalCount
- totalPages
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DtoReportingTimeClockReportRow'
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
DtoReportingSalesOrderLinesReportRow:
type: object
properties:
companyName:
type: string
description: Issuing company / tenant company name.
nullable: true
associatedQuote:
type: string
description: Quote number this SO was converted from, when applicable.
nullable: true
salesOrderNumber:
type: integer
description: Numeric sales-order identifier.
format: int32
nullable: true
customerPONumber:
type: string
description: Customer's PO number recorded on the sales order.
nullable: true
salesOrderStatus:
type: string
description: SO lifecycle status.
nullable: true
completedDate:
type: string
description: Date the SO was marked complete.
format: date-time
nullable: true
orderPriority:
type: string
description: Order priority value.
nullable: true
customerName:
type: string
description: Customer display name.
nullable: true
customerTier:
type: string
description: Customer tier classification.
nullable: true
paymentTerms:
type: string
description: Payment terms name.
nullable: true
city:
type: string
description: Customer city.
nullable: true
customerStateProvince:
type: string
description: Customer state or province.
nullable: true
customerContact:
type: string
description: Name of the customer contact recorded on the order.
nullable: true
customerPhone:
type: string
description: Customer contact phone number.
nullable: true
customerEmail:
type: string
description: Customer contact email address.
nullable: true
salesperson:
type: string
description: Name of the assigned salesperson.
nullable: true
orderedDate:
type: string
description: Date the order was placed.
format: date-time
nullable: true
lineItem:
type: string
description: Item name on the SO line.
nullable: true
lineItemDescription:
type: string
description: Item description on the SO line.
nullable: true
deliverBy:
type: string
description: Customer-requested delivery-by date.
format: date-time
nullable: true
lineItemType:
type: string
description: Line classification (part, fee, etc.).
nullable: true
blanketOrder:
type: integer
description: 1 when the SO line is a blanket order, otherwise 0. (Computed 1/0 flag in the view.)
format: int32
nullable: true
deliveryDueDate:
type: string
description: Computed delivery due date for the line.
format: date-time
nullable: true
internalUnitOfMeasure:
type: string
description: Internal unit of measure used by Fulcrum.
nullable: true
customerPartNumber:
type: string
description: Customer's part number for the line.
nullable: true
customerPartDescription:
type: string
description: Customer's description for the line.
nullable: true
customerUnitOfMeasure:
type: string
description: Unit of measure used on the customer's PO.
nullable: true
accountingCode:
type: string
description: Accounting code mapped to the line.
nullable: true
accountingClass:
type: string
description: Accounting classification for the line's account.
nullable: true
itemTags:
type: string
description: Comma-separated tags from the line's item.
# --- truncated at 32 KB (91 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fulcrumpro/refs/heads/main/openapi/fulcrumpro-reporting-api-openapi.yml