> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.dyspach.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Import activities (JSON)

> Push warehouse activity into your fulfilment ledger.

<Note>
  **`POST`** `/v1/org/fulfilment/activities`
</Note>

Send up to **10,000 activities** in one call, in the
[published structure](/guides/fulfilment-structure) — enough for a full day of warehouse
activity in a single request.

The data is turned into exactly the file your customer would have uploaded and handed to
the same importer, so validation and error reporting are identical either way. The call
returns as soon as the batch is accepted; [check the import](/api-reference/get-fulfilment-import)
for the outcome.

<Warning>
  **Every push appends.** Activities have no identity, so sending the same batch twice
  records it twice — and each activity is billable. Send a run once and check the import
  rather than retrying blindly.
</Warning>

## Authorization

<ParamField header="x-api-key" type="string" required>
  Your organisation API key (`dzk_live_…`).
</ParamField>

## Body

<ParamField body="activities" type="Activity[]" required>
  1–10,000 activities. See [Fulfilment activity structure](/guides/fulfilment-structure)
  for every field. `warehouseCode`, `chargeCode`, `quantity` and `activityTimestamp`
  are required; the rest are optional.
</ParamField>

<ParamField body="sourceDetails" type="string">
  Your own reference for this push — a batch id, run date or filename. Recorded on the
  import so a specific run can be found later.
</ParamField>

## Response

`202 Accepted` with the import's id.

| Field                | Description                                                 |
| -------------------- | ----------------------------------------------------------- |
| `importId`           | Check this for the outcome                                  |
| `status`             | `queued` on acceptance                                      |
| `source`             | `data` for this endpoint                                    |
| `activitiesReceived` | Activities accepted for processing. One activity is one row |
| `statusUrl`          | Convenience path to the status endpoint                     |

## Errors

| Status | When                                                                                                                                                                                |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | Malformed body, more than 10,000 activities, an activity missing one of the four required fields (or with `quantity: 0`), an unrecognised field, or too many imports already queued |
| `401`  | Missing or invalid API key                                                                                                                                                          |
| `429`  | Rate limit exceeded — see [Rate limits](/guides/rate-limits)                                                                                                                        |

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.dyspach.com/v1/org/fulfilment/activities \
    -H "x-api-key: $DYSPACH_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "sourceDetails": "nightly-2026-08-17",
      "activities": [
        {
          "customerId": "ACME",
          "warehouseCode": "SYD01",
          "chargeCode": "Picking",
          "quantity": 3,
          "reference": "ORD-598782",
          "activityTimestamp": "2026-08-10T16:00:00Z",
          "status": "Approved"
        }
      ]
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 202 theme={null}
  {
    "importId": "7c1e2f90-2b44-4f0e-9a11-6d1f0c22ab31",
    "status": "queued",
    "source": "data",
    "activitiesReceived": 1,
    "statusUrl": "/v1/org/fulfilment/imports/7c1e2f90-2b44-4f0e-9a11-6d1f0c22ab31"
  }
  ```
</ResponseExample>
