# List import activity

```http
GET https://secure.yoprint.com/v1/api/store/{team_slug}/source-imports/activity
```

- API version: v1
- Operation ID: `v1_public_source_imports_activity_index`
- Section: Imports and exports › [CSV imports](https://developer.yoprint.com/reference/csv-imports.md)
- Web page: https://developer.yoprint.com/reference/csv-imports/v1-source-imports-activity-index/
- Authentication: `Authorization: Bearer YOUR_API_KEY`

Lists the Import Portal's import activity, newest first unless you ask for `sort=oldest`, with paging by cursor. Pass `meta.next_cursor` as `cursor` to read the next page. The answer is plain JSON, `{data, meta}`, not the usual `{success, status, data}` envelope.

CSV events are the Import Portal's CSV imports of customers, vendors and products, once finished: `import_completed`, `import_partial_completed` or `import_failed`, with counts. You see each kind only if you can import it. Service pricing uploads are not in this feed; list them with `GET /v1/api/store/{team_slug}/imports`.

## Permission

Any member who can import some kind of record.

## Path parameters

- `team_slug` (string, required): Your team slug, shown as Team ID next to your API key in Profile. Example `your-team`.

## Query parameters

- `source` (string, optional): One of: `"all"`, `"csv"`. Default `"all"`. Example `all`.
- `sort` (string, optional): One of: `"newest"`, `"oldest"`. Default `"newest"`. Example `newest`.
- `limit` (integer, optional): Events per page. Below 1 or not a number reads as 50; above 100 reads as 100. Default `50`. Minimum 1. Maximum 100.
- `cursor` (string, optional): The previous page's `meta.next_cursor`. An invalid cursor is ignored, and you get the first page.

## Request body

This operation takes no request body.

### Example request

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

## Response

`200` A page of events.

Fields:

- `data` (array of objects, required)
  - Each item:
    - `sourceType` (string, optional): Always `"csv"`.
    - `counts` (object, optional): Entity and source-row counts: `entity_count` and `source_row_count`, then `submitted_`, `imported_`, `failed_`, `not_processed_`, `unresolved_`, `removed_`, `already_existing_`, `preflight_blocked_`, `excluded_` and `pending_` each with `entity_count` and `source_row_count`. Left out when the import could not be verified.
    - `detail` (string, optional): For example "2 imported · 0 need attention".
    - `entityType` (string, optional): One of: `"customer"`, `"vendor"`, `"simple_product"`, `"variant_product"`.
    - `id` (string, optional): `csv:` and the import's `receipt_id`.
    - `message` (string, optional): "CSV import completed", "Some entries were imported" or "No entries were imported" ("CSV import could not be verified" when YoPrint stopped the import for a failed integrity check).
    - `receipt_id` (string, optional): The Import Portal CSV import's id (`csv-...`).
    - `timestamp` (string (date-time), optional): When the import finished.
    - `type` (string, optional): One of: `"import_completed"`, `"import_partial_completed"`, `"import_failed"`.
- `meta` (object, required)
  - `has_more` (boolean, optional)
  - `limit` (integer, optional)
  - `next_cursor` (string | null, optional): Null on the last page.

Example response:

```json
{
  "data": [
    {
      "counts": {
        "already_existing_entity_count": 0,
        "already_existing_source_row_count": 0,
        "entity_count": 2,
        "excluded_entity_count": 0,
        "excluded_source_row_count": 0,
        "failed_entity_count": 0,
        "failed_source_row_count": 0,
        "imported_entity_count": 2,
        "imported_source_row_count": 2,
        "not_processed_entity_count": 0,
        "not_processed_source_row_count": 0,
        "pending_entity_count": 0,
        "pending_source_row_count": 0,
        "preflight_blocked_entity_count": 0,
        "preflight_blocked_source_row_count": 0,
        "removed_entity_count": 0,
        "removed_source_row_count": 0,
        "source_row_count": 2,
        "submitted_entity_count": 2,
        "submitted_source_row_count": 2,
        "unresolved_entity_count": 0,
        "unresolved_source_row_count": 0
      },
      "detail": "2 imported · 0 need attention",
      "entityType": "customer",
      "id": "csv:csv-mNEytAlBIJf7j1",
      "message": "CSV import completed",
      "receipt_id": "csv-mNEytAlBIJf7j1",
      "sourceType": "csv",
      "timestamp": "2026-11-03T10:10:00+00:00",
      "type": "import_completed"
    }
  ],
  "meta": {
    "has_more": false,
    "limit": 50,
    "next_cursor": null
  }
}
```

## 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`.
  - When: You can't import anything (a plain `{"message": "Insufficient Permission"}` body, not the usual envelope). Fix: Ask a team admin.
- `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.

## Notes

- Unrecognized `source` or `sort` values are treated as their defaults.

## Related

- [List import jobs](https://developer.yoprint.com/reference/csv-imports/v1-imports-index.md): `GET /v1/api/store/{team_slug}/imports`
