# List a shipment's integration errors

```http
GET https://secure.yoprint.com/v1/api/store/{team_slug}/external_integration_logs/shipment/{hash_id}
```

- API version: v1
- Operation ID: `v1_public_external_integration_logs_shipment`
- Section: Team settings › [Integration logs](https://developer.yoprint.com/reference/integration-logs.md)
- Web page: https://developer.yoprint.com/reference/integration-logs/v1-external-integration-logs-shipment/
- Authentication: `Authorization: Bearer YOUR_API_KEY`

Lists the newest sync errors recorded for a shipment, at most 10, such as Shopify fulfillment conflicts.

## Permission

Any member of the team.

## Path parameters

- `team_slug` (string, required): Your team slug, shown as Team ID next to your API key in Profile. Example `your-team`.
- `hash_id` (string, required): The shipment's `id`. A hash id; unique keys and document numbers are refused with 404. Example `1R5UAqv27Ln0FH`.

## Request body

This operation takes no request body.

### Example request

```bash
curl 'https://secure.yoprint.com/v1/api/store/your-team/external_integration_logs/shipment/1R5UAqv27Ln0FH' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: application/json' \
  -H 'X-Yoprint-Decimal-Format: exact-v1'
```

## Response

`200` Successful response.

Fields:

- `data` (array of objects, required): At most 10 items.
  - Each item:
    - `created_at` (string (date-time), optional)
    - `display_message` (string, optional)
    - `display_next_step` (string, optional)
    - `display_reference` (string, optional): The log's `id`, for support.
    - `display_title` (string, optional): Shopify logs only: a title, message, next step and reference to show people.
    - `display_variant` (string, optional): One of: `"error"`, `"warning"`.
    - `error_code` (string | null, optional): QuickBooks' error code, or for a Shopify fulfillment conflict the kind of conflict, such as `tracking_mismatch`.
    - `error_message` (string | null, optional): QuickBooks logs: the message with what was syncing in front, such as `(Invoice) Duplicate Name Exists Error`. Shopify logs: the same text as `display_message`.
    - `error_payload` (any, optional): Some QuickBooks Online logs: the details QuickBooks sent (text or an object). Otherwise null, and always null for Shopify logs.
    - `external_integration` (object | null, optional): Only with `with=external_integration`: the integration the log came from (`id`, `type`, `subtype`, `label`, `status` and more).
    - `helpscout_article_id` (string | null, optional): Always null: no log type links a help article.
    - `id` (string, optional)
    - `order` (object | null, optional): The sales order or quote the log is about; null when it is not about one.
      - `deleted` (boolean, required): True when the order has been deleted.
      - `id` (string, required): The order's id, for the order operations.
      - `scoped_id` (string, required): The order or quote number people see, such as `SO1001`. Not an id.
      - `type` (string, required): One of: `"sales_order"`, `"quote"`.
    - `quickbooks_message` (string | null, optional): QuickBooks' own words for the refusal, when the log kept them. Null otherwise.
    - `quickbooks_payment_id` (string | null, optional): The QuickBooks Payment's Id, when the log is about one (for example QuickBooks refused to delete it, or its sync is held). Null otherwise.
    - `retryable` (boolean, optional)
    - `shipment_id` (string, optional): Only when the log is about a shipment: the shipment's id.
    - `shopify_admin_url` (string, optional): Only when the log has one, such as a fulfillment conflict: the order in the Shopify admin.
    - `type` (string, optional): QuickBooks Online: `qbo_sync_endpoint_error` (QuickBooks refused the record), `qbo_sync_internal_error`, `qbo_sync_transform_error`, `qbo_sync_lookup_error`, `qbo_bootstrap_error` (the sync could not start, for example because QuickBooks must be reconnected); older logs can have `qbo_order_sync_error`, `qbo_po_sync_error` and other `qbo_*_sync_error` types. Shopify: `shopify_endpoint_error`, `shopify_processing_error`, `shopify_internal_error`, `shopify_fulfillment_conflict`.
- `status` (integer, required)
- `success` (boolean, required)

Example response:

```json
{
  "data": [
    {
      "created_at": "2026-11-03T09:30:00+00:00",
      "display_message": "The shipment tracking details in YoPrint do not match the fulfillment already recorded in Shopify.",
      "display_next_step": "Review the shipment summary and Shopify fulfillment details before retrying.",
      "display_reference": "GO7FnHrXOFVrg2",
      "display_title": "Shipment tracking does not match Shopify",
      "display_variant": "warning",
      "error_code": "tracking_mismatch",
      "error_message": "The shipment tracking details in YoPrint do not match the fulfillment already recorded in Shopify.",
      "error_payload": null,
      "helpscout_article_id": null,
      "id": "GO7FnHrXOFVrg2",
      "order": {
        "deleted": false,
        "id": "V4keXwwxMQyXw7",
        "scoped_id": "SO1001",
        "type": "sales_order"
      },
      "quickbooks_message": null,
      "quickbooks_payment_id": null,
      "retryable": false,
      "shipment_id": "1R5UAqv27Ln0FH",
      "shopify_admin_url": "https://example.com/admin/orders/1001",
      "type": "shopify_fulfillment_conflict"
    }
  ],
  "status": 200,
  "success": true
}
```

## Errors

- `401` The API key is missing or wrong (`unauthenticated`).
- `403` You are not allowed to do this. `api_access_not_in_plan`: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only `{"message": "Insufficient Permission"}`. Other refusals use the error envelope, with `unauthorized` or `user_is_not_authorized`.
- `404` Not found. `page_not_found`: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's. `code: null`, with a message that starts "No query results for": there is no record with that id.
  - When: The id is not a valid id for this team. Fix: Use the shipment's `id`.

## Notes

- At most the 10 newest logs, newest first, with no paging.
- An id that decodes but matches nothing returns an empty list, not 404.
- Add `?with=external_integration` to include the integration each log came from.

## Related

- [List a sales order's integration errors](https://developer.yoprint.com/reference/integration-logs/v1-external-integration-logs-order.md): `GET /v1/api/store/{team_slug}/external_integration_logs/order/{hash_id}`
