Fulfillment
First-Pass Node Dossier
This page is an evidence-backed node dossier generated from the domain hierarchy and node questionnaire.
What It Is
Fulfillment is the executed fulfillment record created after confirmed fulfillment-request items are actually fulfilled. It stores tracking data, customer-notification intent, linked fulfillment items, and invoice or packing-slip outputs.
Parent hierarchy:
Fulfillment & ShippingFulfillment ExecutionFulfillment
Primary implementation paths:
packages/framework/src/Models/Fulfillment.phppackages/framework/src/Actions/Fulfillmentpackages/framework/src/Http/Controllers/Api/Admin/FulfillmentsController.phppackages/framework/src/Http/Controllers/Api/Storefront/OrdersController.php
What Users Can Do With It
Direct capabilities
Operators can:
- list fulfillments for an order through the admin API
- download packing-slip PDFs
- download invoice PDFs when an invoice exists
- indirectly create a fulfillment by fulfilling items on a fulfillment request
Indirect capabilities
Other workflows use Fulfillment to:
- create invoice records and invoice items
- debit fulfilled inventory
- send fulfillment-confirmed emails
- expose fulfillment status and tracking to customers in storefront order history
Things users cannot do directly
This pass did not find a standalone packaged CRUD page for fulfillments in packages/admin. In the shared package, fulfillments are mostly downstream results rather than independently authored records.
Where It Is Managed
| Channel | Role | Notes |
|---|---|---|
| Fulfillment-request fulfill action | Parent-owned | Main creation path |
Admin API (orders.fulfillments) | Direct read-only | Order-scoped listing plus PDF download endpoints |
| Storefront order history | Indirect read-only | Customers see completed fulfillments and tracking |
| Invoicing and inventory actions | Indirect | Fulfillments feed invoice and stock side effects |
Sources:
packages/framework/src/Actions/FulfillmentRequest/FulfillFulfillmentRequestItems.phppackages/framework/src/Http/Controllers/Api/Admin/FulfillmentsController.phppackages/framework/src/Http/Controllers/Api/Storefront/OrdersController.php
Channel-Level Field Coverage
Creation payload
When a fulfillment is created from a fulfillment request, the creation path requires:
- fulfillment-request items to fulfill
- tracking numbers
- tracking company
notify_customerfulfillment_request_id
It then creates:
- the fulfillment record
- fulfillment items for each non-zero quantity
Source:
packages/framework/src/Actions/Fulfillment/CreateFulfillmentFromFulfillmentRequest.php
Admin API
The admin API exposes:
- order-scoped listing with optional invoice include
- packing-slip PDF download
- invoice PDF download when an invoice exists
Source:
packages/framework/src/Http/Controllers/Api/Admin/FulfillmentsController.php
Storefront resource
The storefront resource returns:
- ID and UUID
- name
- service
- status and shipment status
- tracking company, numbers, and URLs
- invoice ID
- fulfillment items
Sources:
packages/framework/src/Http/Controllers/Api/Storefront/OrdersController.phppackages/framework/src/Http/Resources/Storefront/FulfillmentResource.php
Configuration And Data Model
Key model characteristics:
- soft-deletable
- UUID-based
- belongs to an order and optionally a fulfillment request
- owns fulfillment items
- can own an invoice morph
Important relationships:
order()fulfillmentRequest()invoice()items()
Source:
packages/framework/src/Models/Fulfillment.php
Rules And Downstream Effects
Creation side effects
Creating a fulfillment from a fulfillment request:
- names the fulfillment from the order name and count
- creates fulfillment items
- recalculates the fulfillment request
- recalculates the order
- emits
FulfillmentConfirmed
Source:
packages/framework/src/Actions/Fulfillment/CreateFulfillmentFromFulfillmentRequest.php
Invoicing and stock
Fulfillments are a key input to:
- invoice creation
- invoice-item creation
- inventory debiting
Sources:
packages/framework/src/Actions/Invoice/CreateInvoiceFromFulfillment.phppackages/framework/src/Actions/InvoiceItem/CreateInvoiceItemFromFulfillmentItem.phppackages/framework/src/Actions/Fulfillment/DebitFulfilledItemsFromInventory.php
Customer communication
Fulfillments can drive fulfillment-confirmed emails and order-history visibility.
Sources:
packages/framework/src/Models/Fulfillment.phppackages/framework/src/Actions/Fulfillment/SendFulfillmentEmail.php
Integrations And Automation
PDFs and email
Fulfillments can generate:
- invoice PDFs
- packing-slip PDFs
- fulfillment-confirmation emails
Sources:
packages/framework/src/Models/Fulfillment.phppackages/framework/src/Actions/Fulfillment/GenerateInvoicePDF.phppackages/framework/src/Actions/Fulfillment/GeneratePackingSlipPDF.php
Storefront order history
Customers can retrieve fulfillments for an order and download the invoice for a selected fulfillment when available.
Source:
packages/framework/src/Http/Controllers/Api/Storefront/OrdersController.php
Where It Appears To End Users
Fulfillment is customer visible in a way FulfillmentRequest usually is not.
Customers can see:
- shipped or completed fulfillment status
- tracking information
- fulfillment items
- invoice availability
Operators mainly use it as the result of completing fulfillment-request work.
Current Documentation Takeaways
Fulfillmentis the executed shipment or delivery record, not the planning record.- The shared package creates it from fulfillment-request actions and then uses it for inventory, invoicing, and customer communication.
- Customers do see fulfillments in storefront order history, so this node is operationally internal but externally visible.
Open Questions
- This first pass focused on the shared package behavior. Host applications may surface richer fulfillment UIs than the order-scoped admin API shown here.