# List sync issues

> List the record changes the syncs of the workspace could not write, newest first, one page at a time. Filter by sync, destination app, table or one issue id.

Source: https://docs.stacksync.com/api-reference/syncs/issues/list_sync_issues

`GET https://api.stacksync.com/v1/workspaces/{workspace_id}/issues`

- Operation: `list_sync_issues`
- Resource: Sync issues
- Access: read-only

## Authentication

- `Authorization: Bearer <key>`: A workspace API key (workspace_…, created by a workspace owner under Workspace settings > Stacksync API) acts with editor rights on that workspace only; a user API key (user_…, created under Profile > Stacksync API) acts as that user in every workspace they belong to. POST, PUT and PATCH requests must send Content-Type: application/json. Every authentication failure answers 403.

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `workspace_id` | integer | Yes | The workspace the resources belong to |

## Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `region` | string (besg \| usnv) | Yes | Data region of the syncs |
| `base_id` | string (uuid) | No | Only the issues of this sync |
| `sync_id` | string (uuid) | No | Same as `base_id`; `base_id` wins when both are sent |
| `app_id` | string | No | Only the issues whose destination is this app of the sync (filtered on the page read, so a page can come back shorter) |
| `table_id` | string | No | Only the issues of this table pair (its `table_mapping_id`) |
| `issue_id` | string (uuid) | No | Only this issue |
| `ordering_property` | string (created_time \| last_modified_time), default "last_modified_time" | No | The time the issues are ordered by |
| `ordering_direction` | string (ASC \| DESC), default "DESC" | No | The order |
| `page_number` | integer, at least 0, default 0 | No | The page to read, counted from 0 |
| `page_size` | integer, 1 to 1000, default 100 | No | Issues per page, 1 to 1000 |

## Returns

### 200 A page of issues

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | array of object (SyncIssue) | Yes | The issues of the page |
| `data[].issue_id` | string (uuid) | Yes | The issue |
| `data[].base_id` | string (uuid) | Yes | The sync |
| `data[].destination_app_id` | string | Yes | The app the change could not be written to |
| `data[].destination_app_type` | string | Yes | That app, as shown in Stacksync |
| `data[].destination_table_id` | string | No | The id of the table in that app |
| `data[].destination_table_name` | string | No | The name of the table in that app |
| `data[].action` | string | Yes | What the sync tried: `insert`, `update` or `delete` |
| `data[].issue_message` | string | Yes | Why the write failed, as the app answered |
| `data[].changed_columns` | object | No | The columns that changed, by name, with the value that could not be written |
| `data[].source_record_id` | string \| null | No | The id of the record in the app the change came from |
| `data[].destination_record_id` | string \| null | No | The id of the record in the destination app, null for a record not created yet |
| `data[].created_time` | string | Yes | When the issue first happened, ISO 8601 UTC |
| `data[].last_modified_time` | string | Yes | When the issue last happened, ISO 8601 UTC |
| `pagination` | object (SyncIssuePagination) | Yes | The page answered |
| `pagination.current_page` | integer | Yes | The page answered, counted from 0 |
| `pagination.next_page` | integer | No | The next page, absent on the last page |
| `pagination.total_pages` | integer | No | The number of full pages (total issues divided by page size, rounded down); absent when the page is empty |
| `total_number_of_issues` | integer | Yes | The number of issues matching the filters |

## Example request

```bash
curl -X GET "https://api.stacksync.com/v1/workspaces/{workspace_id}/issues?region=besg" \
  -H "Authorization: Bearer $STACKSYNC_API_KEY"
```

## Example response (200)

```json
{
  "data": [
    {
      "issue_id": "4c5d6e7f-8a9b-4c0d-9e1f-2a3b4c5d6e7f",
      "base_id": "3f6c1d2e-8a4b-4c7d-9e21-5b6f7a8c9d01",
      "destination_app_id": "b71d04e5",
      "destination_app_type": "postgres",
      "destination_table_id": "accounts",
      "destination_table_name": "accounts",
      "action": "update",
      "issue_message": "value too long for type character varying(80)",
      "changed_columns": {
        "website": "https://www.example.com/a-very-long-path-that-does-not-fit-the-column"
      },
      "source_record_id": "001Hs00001ZXkQ9IAL",
      "destination_record_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "created_time": "2026-10-01T09:12:44",
      "last_modified_time": "2026-10-01T09:12:44"
    }
  ],
  "pagination": {
    "current_page": 0,
    "total_pages": 0
  },
  "total_number_of_issues": 1
}
```

## Errors

| Status | Meaning | Body |
| --- | --- | --- |
| 400 | The `region` is missing or not one of besg, usnv; `issue_id` or `base_id` is not a UUID, `page_number` is not an integer of 0 or more, `page_size` is not an integer of 1 to 1000, `ordering_property` or `ordering_direction` is not one of its values (`Invalid Request Params`); the issues could not be read (`Failed to get issues`) | `{ "error": string }` |
| 403 | Forbidden: invalid API key, API key of another workspace, insufficient scope, workspace unavailable, or a non-GET request without `Content-Type: application/json` | `{ "error": string }` |

## Related

- [API Reference overview](https://docs.stacksync.com/api-reference): base URLs, regions, pagination, idempotency and errors
- [Authentication](https://docs.stacksync.com/api-reference/authentication): API keys and the 403 answers
- OpenAPI document: https://docs.stacksync.com/openapi.json
- [Resolve sync issues](https://docs.stacksync.com/api-reference/syncs/issues/resolve_sync_issues)