# List a sales order's integration errors

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

- API version: v1
- Operation ID: `v1_public_external_integration_logs_order`
- 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-order/
- Authentication: `Authorization: Bearer YOUR_API_KEY`

Lists the newest QuickBooks Online and Shopify sync errors recorded for a sales order or quote, at most 10. Use `type` to see only one integration's errors.

Some QuickBooks errors include the details QuickBooks sent in `error_payload`; errors about a QuickBooks Payment also name it in `quickbooks_payment_id`, with QuickBooks' own words in `quickbooks_message`. Shopify errors come with words to show people: `display_title`, `display_message` and `display_next_step`. Every log names its order in `order`.

## 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 sales order's or quote's `id`. A hash id; unique keys and document numbers are refused with 404. Example `V4keXwwxMQyXw7`.

## Query parameters

- `type` (string, optional): Only this integration's errors. `shopify`: the four `shopify_*` types. `qbo`: `qbo_bootstrap_error` (the sync could not start), `qbo_sync_endpoint_error`, `qbo_sync_internal_error`, `qbo_sync_transform_error`, `qbo_sync_lookup_error` and the older `qbo_order_sync_error`; it leaves out the older `qbo_order_payment_sync_error`. Leave it out for every type. One of: `"shopify"`, `"qbo"`. Example `shopify`.

## Request body

This operation takes no request body.

### Example request

```bash
curl 'https://secure.yoprint.com/v1/api/store/your-team/external_integration_logs/order/V4keXwwxMQyXw7' \
  -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",
      "error_code": "6240",
      "error_message": "(Invoice) Duplicate Name Exists Error",
      "error_payload": "The name supplied already exists.",
      "helpscout_article_id": null,
      "id": "cD67OPTEAMlQ96",
      "order": {
        "deleted": false,
        "id": "V4keXwwxMQyXw7",
        "scoped_id": "SO1001",
        "type": "sales_order"
      },
      "quickbooks_message": null,
      "quickbooks_payment_id": null,
      "retryable": false,
      "type": "qbo_sync_endpoint_error"
    }
  ],
  "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 order's `id`, not its unique key or number.
- `422` The request was refused and changed nothing. `validation_failed` lists what to fix in `error.fields`; other codes name a business rule, explained in `error.message`. A few checks answer with only `{"message": "..."}`. An operation that calls another service (a payment provider, a carrier, an accounting app) can answer `connect_timeout` ("Please retry again") when that service does not answer in time: the change may or may not have happened there, so read the record back before you retry.
  - When: `type` is not `shopify` or `qbo` (`validation_failed`; `error.fields` names the field). Fix: Send `shopify`, `qbo`, or nothing.

## 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 purchase order's integration errors](https://developer.yoprint.com/reference/integration-logs/v1-external-integration-logs-purchase-order.md): `GET /v1/api/store/{team_slug}/external_integration_logs/purchase_order/{hash_id}`
- [List a shipment's integration errors](https://developer.yoprint.com/reference/integration-logs/v1-external-integration-logs-shipment.md): `GET /v1/api/store/{team_slug}/external_integration_logs/shipment/{hash_id}`
