Skip to content

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 & Shipping
  • Fulfillment Execution
  • Fulfillment

Primary implementation paths:

  • packages/framework/src/Models/Fulfillment.php
  • packages/framework/src/Actions/Fulfillment
  • packages/framework/src/Http/Controllers/Api/Admin/FulfillmentsController.php
  • packages/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

ChannelRoleNotes
Fulfillment-request fulfill actionParent-ownedMain creation path
Admin API (orders.fulfillments)Direct read-onlyOrder-scoped listing plus PDF download endpoints
Storefront order historyIndirect read-onlyCustomers see completed fulfillments and tracking
Invoicing and inventory actionsIndirectFulfillments feed invoice and stock side effects

Sources:

  • packages/framework/src/Actions/FulfillmentRequest/FulfillFulfillmentRequestItems.php
  • packages/framework/src/Http/Controllers/Api/Admin/FulfillmentsController.php
  • packages/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_customer
  • fulfillment_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.php
  • packages/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.php
  • packages/framework/src/Actions/InvoiceItem/CreateInvoiceItemFromFulfillmentItem.php
  • packages/framework/src/Actions/Fulfillment/DebitFulfilledItemsFromInventory.php

Customer communication

Fulfillments can drive fulfillment-confirmed emails and order-history visibility.

Sources:

  • packages/framework/src/Models/Fulfillment.php
  • packages/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.php
  • packages/framework/src/Actions/Fulfillment/GenerateInvoicePDF.php
  • packages/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

  1. Fulfillment is the executed shipment or delivery record, not the planning record.
  2. The shared package creates it from fulfillment-request actions and then uses it for inventory, invoicing, and customer communication.
  3. 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.