---
title: "Per-creator outcome ledger"
method: GET
path: "/automations/{automation_id}/creators"
tags: ["Automations"]
---

# Per-creator outcome ledger

`GET /automations/{automation_id}/creators`

## Request

- Base URL: `https://api.reacherapp.com/public/v1`
- URL: `https://api.reacherapp.com/public/v1/automations/{automation_id}/creators`
- Auth: API key in header `x-api-key` and API key in header `x-shop-id`

Per-creator outcomes for ONE automation: which creators got an invite/DM submitted, which were skipped (and why), which were previously invited, etc. This is the authoritative per-creator answer to 'what happened to each invite' — backed by the always-present `target_collabs` / `Messages` / `skipped_creators` tables, so it stays populated even after the aggregate `creators_reached` / `skipped` counters on the list/detail responses age out (those read from a stats view that only retains recently-active automations).

**Queued ≠ delivered.** An `invite_submitted` / `outreach_sent` outcome means Reacher's worker submitted the invite/DM through the same browser-automation path the portal uses. TikTok does not return a per-creator inbox-delivery receipt, so this is the most authoritative delivery signal available — not a confirmed inbox event. Requires a single shop.

## Path parameters

- `automation_id` integer, required

## Query parameters

- `page` integer
- `page_size` integer

## Response `200`

Successful Response

- AutomationCreatorsResponse: Per-creator outcome ledger for one automation. Read-only, single-shop. Backed by the always-present `skipped_creators` / `target_collabs` / `Messages` tables — so unlike the aggregate `creators_reached` / `skipped` counters on the list/detail responses (which read null once the stats view ages out an idle automation), this endpoint stays populated for the life of the automation.
  - `data` AutomationCreatorOutcome[], required
    - `creator_handle` string, required: TikTok handle as submitted.
    - `outcome` string, required: Machine-stable outcome: `invite_submitted` (TC invite queued to the worker), `outreach_sent` (DM submitted), `previously_invited` (already invited for this product), `invite_removed` (invitation was withdrawn/edited), `dm_blocked` (TikTok refused every DM to the creator — a messaging limit; a TC invite, if any, still stands), `skipped` (worker evaluated but did not send — see `skip_reason`), or `unknown`.
    - `status` string, required: Human-readable status label, e.g. 'Outreach Sent'.
    - `detail` string, required: Human-readable explanation of the outcome/status.
    - `skip_reason` string, nullable: Machine skip-reason code, present only when `outcome='skipped'`. One of the `CreatorSkipReason` values: `creator_not_found`, `creator_ineligible`, `five_message_limit_hit`, `previously_invited`, `previously_messaged`, `blocked_by_outreach_limit`, `performance_criteria_not_met`, `already_accepted_invite`, `conflicting_invitation`, `shop_blocked_creator`, `creator_blocked_shop`, `follower_threshold_exceeded`, `agency_sample_request_blocked`, `sample_request_expired`, `max_send_attempts_reached`, `tiktok_contact_restricted`, `creator_tier_quota_exhausted`, `already_connected`, `creator_level_not_targeted`, `unknown`. Branch on this rather than parsing `detail`.
    - `invitation_id` string, nullable: TikTok `target_collaboration_id` for this creator's Target Collab invite — the id used to reference or look up the collaboration. Populated only for creators invited via Target Collab (outcomes `invite_submitted` / `previously_invited` / `invite_removed`, and `dm_blocked` when the blocked DM followed a TC invite); `null` for DM outreach, skipped creators, and TC invites the worker has not submitted to TikTok yet (it is written asynchronously after the invite lands). This is an identifier, not a link: TikTok's TC-details API returns no shareable invite URL, so there is no ready-made link to hand to the creator.
  - `summary` AutomationCreatorsSummary, required: Outcome counts across the FULL result set (not just the page).
    - `total` integer
    - `invite_submitted` integer
    - `outreach_sent` integer
    - `previously_invited` integer
    - `invite_removed` integer
    - `dm_blocked` integer
    - `skipped` integer
    - `unknown` integer
  - `pagination` unknown, required

## Other responses

- `422`: Validation Error

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-10-30** `cdae94c45b82`: 1 info
  - added the optional property `summary/dm_blocked` to the response with the `200` status
- **2026-09-19** `291230805105`: 1 info
  - api operation id `automation_creators_automations__automation_id__creators_get` removed and replaced with `automation_creators`

[Operation history](https://skmtc.dev/reacherapp/apis/reacher-data-api/changes/automations/:automation_id/creators/get.md)

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) - [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/reacherapp/apis/reacher-data-api/revisions/63ce74b30b5a?raw)
