# Pick, pack and ship or hand over an order

Start the fulfilment job, pick it, pack it, and either ship it with the carrier or stage it for pickup and hand it to the customer.

Payments & fulfillment · a play in 4 steps.

## The steps

1. Start the fulfilment — the pick/pack/ship or pickup job. — [createFulfillment](/reference/fulfillment/createFulfillment/)
2. Start picking — the picker takes the job — then pack it, sealed and ready. — [startPickFulfillment](/reference/fulfillment/startPickFulfillment/), [packFulfillment](/reference/fulfillment/packFulfillment/)
3. Ship it — it leaves with the carrier; shipped stock leaves your books. — [shipFulfillment](/reference/inventory-operations/shipFulfillment/)
4. Or stage it for pickup and hand it to the customer — the delivery moment. — [stagePickupFulfillment](/reference/fulfillment/stagePickupFulfillment/), [handoverFulfillment](/reference/fulfillment/handoverFulfillment/)

## The calls

Every operation this use case runs, in the order it first appears, with the request and the response its reference page shows.

### createFulfillment

[createFulfillment](/reference/fulfillment/createFulfillment/) — mutation · Start a fulfilment — the pick/pack/ship (or pickup) job for an order’s items.

**Example request**

```graphql
mutation ExampleCreateFulfillment($input: NewFulfillmentInput!) {
  createFulfillment(input: $input) {
    id
    sysId
    type
    caption
    status
    parentId
    rootId
    createdAt
    updatedAt
    revisionNum
    revision
    orderId
    organizationId
    method
    carrierName
    trackingRef
    packedAt
  }
}
```

Variables:

```json
{
  "input": {
    "caption": "Blue jeans",
    "orderId": "01900000-0000-7000-8000-f6d8263a0000",
    "method": "ship",
    "lines": [
      {
        "orderLineNo": 1,
        "quantity": "2"
      }
    ]
  }
}
```

Send it with the envelope naming the version: `"extensions": {"at": {"version": {"name":"genesis","number":0}}}`.

**Example response**

```json
{
  "data": {
    "createFulfillment": {
      "id": "01900000-0000-7000-8000-37386ae00000",
      "sysId": "FF-EXMP-0000-000F",
      "type": "Fulfillment",
      "caption": "Blue jeans",
      "status": "pending",
      "parentId": "01900000-0000-7000-8000-065235280000",
      "rootId": "01900000-0000-7000-8000-a093dd800000",
      "createdAt": "2027-01-31T00:00:00.000Z",
      "updatedAt": "2027-01-31T00:00:00.000Z",
      "revisionNum": 1,
      "revision": "01900000-0000-7000-8000-b7960e180000",
      "orderId": "01900000-0000-7000-8000-f6d8263a0000",
      "organizationId": "01900000-0000-7000-8000-44b781470000",
      "method": "ship",
      "carrierName": "Blue jeans",
      "trackingRef": "<tracking ref>",
      "packedAt": "2027-01-31T00:00:00.000Z"
    }
  },
  "extensions": {
    "at": {
      "callId": "01EXAMPLE-CALL-ID",
      "version": {
        "requested": {
          "name": "genesis",
          "number": 0
        },
        "serviced": {
          "name": "genesis",
          "number": 0
        }
      }
    }
  }
}
```

### startPickFulfillment

[startPickFulfillment](/reference/fulfillment/startPickFulfillment/) — mutation · Start picking a fulfilment — the picker takes the job.

**Example request**

```graphql
mutation ExampleStartPickFulfillment($id: ID!, $revision: ID!, $reason: String) {
  startPickFulfillment(id: $id, revision: $revision, reason: $reason) {
    id
    sysId
    type
    caption
    status
    parentId
    rootId
    createdAt
    updatedAt
    revisionNum
    revision
    orderId
    organizationId
    method
    carrierName
    trackingRef
    packedAt
  }
}
```

Variables:

```json
{
  "id": "01900000-0000-7000-8000-37386ae00000",
  "revision": "01900000-0000-7000-8000-b7960e180000",
  "reason": "Correcting a miscount."
}
```

Send it with the envelope naming the version: `"extensions": {"at": {"version": {"name":"genesis","number":0}}}`.

**Example response**

```json
{
  "data": {
    "startPickFulfillment": {
      "id": "01900000-0000-7000-8000-37386ae00000",
      "sysId": "FF-EXMP-0000-000F",
      "type": "Fulfillment",
      "caption": "Blue jeans",
      "status": "pending",
      "parentId": "01900000-0000-7000-8000-065235280000",
      "rootId": "01900000-0000-7000-8000-a093dd800000",
      "createdAt": "2027-01-31T00:00:00.000Z",
      "updatedAt": "2027-01-31T00:00:00.000Z",
      "revisionNum": 1,
      "revision": "01900000-0000-7000-8000-b7960e180000",
      "orderId": "01900000-0000-7000-8000-f6d8263a0000",
      "organizationId": "01900000-0000-7000-8000-44b781470000",
      "method": "ship",
      "carrierName": "Blue jeans",
      "trackingRef": "<tracking ref>",
      "packedAt": "2027-01-31T00:00:00.000Z"
    }
  },
  "extensions": {
    "at": {
      "callId": "01EXAMPLE-CALL-ID",
      "version": {
        "requested": {
          "name": "genesis",
          "number": 0
        },
        "serviced": {
          "name": "genesis",
          "number": 0
        }
      }
    }
  }
}
```

### packFulfillment

[packFulfillment](/reference/fulfillment/packFulfillment/) — mutation · Pack a picked fulfilment — sealed and ready to go.

**Example request**

```graphql
mutation ExamplePackFulfillment($id: ID!, $revision: ID!, $reason: String) {
  packFulfillment(id: $id, revision: $revision, reason: $reason) {
    id
    sysId
    type
    caption
    status
    parentId
    rootId
    createdAt
    updatedAt
    revisionNum
    revision
    orderId
    organizationId
    method
    carrierName
    trackingRef
    packedAt
  }
}
```

Variables:

```json
{
  "id": "01900000-0000-7000-8000-37386ae00000",
  "revision": "01900000-0000-7000-8000-b7960e180000",
  "reason": "Correcting a miscount."
}
```

Send it with the envelope naming the version: `"extensions": {"at": {"version": {"name":"genesis","number":0}}}`.

**Example response**

```json
{
  "data": {
    "packFulfillment": {
      "id": "01900000-0000-7000-8000-37386ae00000",
      "sysId": "FF-EXMP-0000-000F",
      "type": "Fulfillment",
      "caption": "Blue jeans",
      "status": "pending",
      "parentId": "01900000-0000-7000-8000-065235280000",
      "rootId": "01900000-0000-7000-8000-a093dd800000",
      "createdAt": "2027-01-31T00:00:00.000Z",
      "updatedAt": "2027-01-31T00:00:00.000Z",
      "revisionNum": 1,
      "revision": "01900000-0000-7000-8000-b7960e180000",
      "orderId": "01900000-0000-7000-8000-f6d8263a0000",
      "organizationId": "01900000-0000-7000-8000-44b781470000",
      "method": "ship",
      "carrierName": "Blue jeans",
      "trackingRef": "<tracking ref>",
      "packedAt": "2027-01-31T00:00:00.000Z"
    }
  },
  "extensions": {
    "at": {
      "callId": "01EXAMPLE-CALL-ID",
      "version": {
        "requested": {
          "name": "genesis",
          "number": 0
        },
        "serviced": {
          "name": "genesis",
          "number": 0
        }
      }
    }
  }
}
```

### shipFulfillment

[shipFulfillment](/reference/inventory-operations/shipFulfillment/) — mutation · Ship a fulfilment — it leaves with the carrier.

**Example request**

```graphql
mutation ExampleShipFulfillment($input: ShipFulfillmentInput!) {
  shipFulfillment(input: $input) {
    id
    sysId
    type
    caption
    status
    parentId
    rootId
    createdAt
    updatedAt
    revisionNum
    revision
    orderId
    organizationId
    method
    carrierName
    trackingRef
    packedAt
  }
}
```

Variables:

```json
{
  "input": {
    "fulfillmentId": "01900000-0000-7000-8000-82dcede40000",
    "expectedRevision": "01900000-0000-7000-8000-e02b2e6c0000",
    "shipTo": {
      "name": "Blue jeans",
      "addressLines": [
        "<address lines>"
      ],
      "city": "Toronto",
      "region": "ON",
      "countryCode": "CA"
    }
  }
}
```

Send it with the envelope naming the version: `"extensions": {"at": {"version": {"name":"genesis","number":0}}}`.

**Example response**

```json
{
  "data": {
    "shipFulfillment": {
      "id": "01900000-0000-7000-8000-37386ae00000",
      "sysId": "FF-EXMP-0000-000F",
      "type": "Fulfillment",
      "caption": "Blue jeans",
      "status": "pending",
      "parentId": "01900000-0000-7000-8000-065235280000",
      "rootId": "01900000-0000-7000-8000-a093dd800000",
      "createdAt": "2027-01-31T00:00:00.000Z",
      "updatedAt": "2027-01-31T00:00:00.000Z",
      "revisionNum": 1,
      "revision": "01900000-0000-7000-8000-b7960e180000",
      "orderId": "01900000-0000-7000-8000-f6d8263a0000",
      "organizationId": "01900000-0000-7000-8000-44b781470000",
      "method": "ship",
      "carrierName": "Blue jeans",
      "trackingRef": "<tracking ref>",
      "packedAt": "2027-01-31T00:00:00.000Z"
    }
  },
  "extensions": {
    "at": {
      "callId": "01EXAMPLE-CALL-ID",
      "version": {
        "requested": {
          "name": "genesis",
          "number": 0
        },
        "serviced": {
          "name": "genesis",
          "number": 0
        }
      }
    }
  }
}
```

### stagePickupFulfillment

[stagePickupFulfillment](/reference/fulfillment/stagePickupFulfillment/) — mutation · Stage a pickup fulfilment — ready and waiting for the customer.

**Example request**

```graphql
mutation ExampleStagePickupFulfillment($id: ID!, $revision: ID!, $reason: String) {
  stagePickupFulfillment(id: $id, revision: $revision, reason: $reason) {
    id
    sysId
    type
    caption
    status
    parentId
    rootId
    createdAt
    updatedAt
    revisionNum
    revision
    orderId
    organizationId
    method
    carrierName
    trackingRef
    packedAt
  }
}
```

Variables:

```json
{
  "id": "01900000-0000-7000-8000-37386ae00000",
  "revision": "01900000-0000-7000-8000-b7960e180000",
  "reason": "Correcting a miscount."
}
```

Send it with the envelope naming the version: `"extensions": {"at": {"version": {"name":"genesis","number":0}}}`.

**Example response**

```json
{
  "data": {
    "stagePickupFulfillment": {
      "id": "01900000-0000-7000-8000-37386ae00000",
      "sysId": "FF-EXMP-0000-000F",
      "type": "Fulfillment",
      "caption": "Blue jeans",
      "status": "pending",
      "parentId": "01900000-0000-7000-8000-065235280000",
      "rootId": "01900000-0000-7000-8000-a093dd800000",
      "createdAt": "2027-01-31T00:00:00.000Z",
      "updatedAt": "2027-01-31T00:00:00.000Z",
      "revisionNum": 1,
      "revision": "01900000-0000-7000-8000-b7960e180000",
      "orderId": "01900000-0000-7000-8000-f6d8263a0000",
      "organizationId": "01900000-0000-7000-8000-44b781470000",
      "method": "ship",
      "carrierName": "Blue jeans",
      "trackingRef": "<tracking ref>",
      "packedAt": "2027-01-31T00:00:00.000Z"
    }
  },
  "extensions": {
    "at": {
      "callId": "01EXAMPLE-CALL-ID",
      "version": {
        "requested": {
          "name": "genesis",
          "number": 0
        },
        "serviced": {
          "name": "genesis",
          "number": 0
        }
      }
    }
  }
}
```

### handoverFulfillment

[handoverFulfillment](/reference/fulfillment/handoverFulfillment/) — mutation · Hand a pickup fulfilment to the customer — the goods change hands.

**Example request**

```graphql
mutation ExampleHandoverFulfillment($id: ID!, $revision: ID!, $reason: String) {
  handoverFulfillment(id: $id, revision: $revision, reason: $reason) {
    id
    sysId
    type
    caption
    status
    parentId
    rootId
    createdAt
    updatedAt
    revisionNum
    revision
    orderId
    organizationId
    method
    carrierName
    trackingRef
    packedAt
  }
}
```

Variables:

```json
{
  "id": "01900000-0000-7000-8000-37386ae00000",
  "revision": "01900000-0000-7000-8000-b7960e180000",
  "reason": "Correcting a miscount."
}
```

Send it with the envelope naming the version: `"extensions": {"at": {"version": {"name":"genesis","number":0}}}`.

**Example response**

```json
{
  "data": {
    "handoverFulfillment": {
      "id": "01900000-0000-7000-8000-37386ae00000",
      "sysId": "FF-EXMP-0000-000F",
      "type": "Fulfillment",
      "caption": "Blue jeans",
      "status": "pending",
      "parentId": "01900000-0000-7000-8000-065235280000",
      "rootId": "01900000-0000-7000-8000-a093dd800000",
      "createdAt": "2027-01-31T00:00:00.000Z",
      "updatedAt": "2027-01-31T00:00:00.000Z",
      "revisionNum": 1,
      "revision": "01900000-0000-7000-8000-b7960e180000",
      "orderId": "01900000-0000-7000-8000-f6d8263a0000",
      "organizationId": "01900000-0000-7000-8000-44b781470000",
      "method": "ship",
      "carrierName": "Blue jeans",
      "trackingRef": "<tracking ref>",
      "packedAt": "2027-01-31T00:00:00.000Z"
    }
  },
  "extensions": {
    "at": {
      "callId": "01EXAMPLE-CALL-ID",
      "version": {
        "requested": {
          "name": "genesis",
          "number": 0
        },
        "serviced": {
          "name": "genesis",
          "number": 0
        }
      }
    }
  }
}
```
