Skip to main content

Order Status Lifecycle

The workflow is deliberately short. A new order item arrives as pending, you accept or reject it, and once the service is live you mark it active:
Or, if something goes wrong:
Two notes on the happy path:
  • Use completed instead of active for one-time work with no ongoing subscription. An active item can also pass through completed first if you want to record install-done and service-live as separate moments.
  • You do not need to send submitted_to_provider. It is an optional “received, not yet decided” acknowledgement (the dashboard’s Mark received button) for teams whose intake and acceptance are separate steps. Accepting or rejecting straight from pending records the received time automatically.
The statuses scheduled and in_progress are not part of the workflow at the moment. The API rejects moves into them with a 409. Put appointment and progress details in providerNotes and metadata on the accepted item instead — resellers see every note you add.

Status Definitions

pending
  • Order just created by reseller
  • Awaiting your review
  • Your action: Accept or reject
submitted_to_provider (optional)
  • You have acknowledged receipt but not yet decided
  • Set it yourself if your intake and acceptance are separate steps; skip it otherwise
  • Your action: Accept or reject
accepted
  • You’ve confirmed you can fulfill the order
  • Any appointment or progress detail goes in providerNotes / metadata
  • Your action: Deliver the service, then mark it active (or completed)
completed
  • One-time work finished (for example an installation with no subscription), or install-done ahead of active
  • Your action: None, or mark active once the subscription is live
active
  • Service is live and the customer is using it
  • Your action: None (terminal state)
rejected
  • You cannot fulfill the order; include a clear reason
  • Can be flipped to accepted if it was a mistake
  • Your action: None
cancelled
  • Order cancelled after acceptance, by you or at the reseller’s request
  • Your action: None (terminal state)
failed
  • Fulfillment could not be completed
  • Can be reopened to pending for another attempt
  • Your action: Document the reason, coordinate with the reseller

Allowed Transitions

The API enforces the lifecycle. A PATCH to a status the current status cannot move to returns 409 Conflict with Cannot transition order item from "<from>" to "<to>" — see Errors. Sending the status the item is already in is a no-op 200, not a 409. rejected → accepted and accepted → rejected are both allowed so a mistaken call can be corrected after the fact.

Updating Order Status

Via API

Update order item status with a PATCH request:

Required vs. Optional Fields

Always required:
  • status - The new status value
Recommended:
  • providerNotes - Human-readable update for the reseller
  • metadata - Additional context (account numbers, appointment details, work-order ids)
Optional:
  • scheduledFor - An appointment or activation date/time (ISO 8601), if one applies

Common Workflows

Workflow 1: Standard Fulfillment

1

Order received

Status: pendingAction: Review order details and verify service availability
2

Accept order

Status: accepted
Appointment details, when you have them, go in a follow-up PATCH that keeps status: "accepted" and updates providerNotes / metadata.
3

Service live

Status: active (or completed for one-time work)

Workflow 2: Instant Activation (No Installation)

For services that activate immediately, such as electricity switches, the two calls can follow each other straight away. active still requires accepted first, so send both:

Workflow 3: Rejection

If you cannot fulfill:

Workflow 4: Cancellation After Acceptance

If an accepted order must be cancelled:

Status Update Best Practices

Update within hours of status changes, not days. Real-time updates build trust with resellers.
Use providerNotes to explain what happened and what happens next. Resellers relay this info to customers.
While an item is accepted, send the appointment window, technician name and confirmation number in providerNotes and metadata. No status change is needed for that.
Add account numbers, work order IDs, or tracking numbers in metadata for future reference.
If rejecting or failing an order, clearly explain why and suggest alternatives when possible.
Structure metadata consistently so resellers can parse and use it programmatically.

Automated Status Updates

Integrate Offergrid status updates into your existing systems:

Monitoring Order Progress

Track order metrics in your dashboard:
  • Acceptance rate: % of orders accepted vs. rejected
  • Time to accept: How quickly you respond to new orders
  • Completion rate: % of accepted orders that reach active
  • Average fulfillment time: Days from acceptance to activation

Next Steps

Receiving Orders

Understanding incoming orders

Fulfillment Best Practices

Tips for smooth fulfillment

API Reference

View complete API documentation

Webhooks

Automate status updates