---
title: "List the creatives (ads) on a LinkedIn campaign (ad set)"
method: POST
path: "/api/v1/tools/linkedin_list_creatives/execute"
tags: ["LinkedIn Ads"]
---

# List the creatives (ads) on a LinkedIn campaign (ad set)

`POST /api/v1/tools/linkedin_list_creatives/execute`

## Request

- Base URL: `https://adako.ai`
- URL: `https://adako.ai/api/v1/tools/linkedin_list_creatives/execute`
- Auth: HTTP bearer

Lists the creatives (ads in Campaign Manager) attached to one or more campaigns (ad sets), with their intended status, whether they are actually serving, their review verdict and any rejection reason.
Use when: a campaign is ACTIVE but spending nothing (the answer is usually a creative in review or rejected), before pausing or deleting a creative, and to get the creative ids the pause/resume/delete tools take.
Do not read performance here — that is linkedin_get_creative_performance. Do not treat "intended status ACTIVE" as live: the is_serving column is the truth, and a paused parent campaign overrides an active creative.
Returns one row per creative, including the post URN it renders so you can tell two similar ads apart.
If a creative is rejected, report the rejection reason verbatim and stop — appealing is done in Campaign Manager, not through this server.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object
    - `ad_account_id` string: LinkedIn ad account id — the numeric id from Campaign Manager, as a string ("506699162"). Omit it to use the primary account; pass it when the user manages several.
    - `campaign_id` string: The campaign whose creatives to list. LinkedIn ids are numeric strings; a full urn:li:… value is also accepted.
    - `campaign_ids` string[]: Several campaigns at once, instead of campaign_id.
    - `status` 'ACTIVE' | 'PAUSED' | 'DRAFT' | 'ARCHIVED' | 'COMPLETED' | 'all': Only objects in this state. LinkedIn statuses are upper case. Defaults to everything except archived, cancelled and removed.
    - `limit` integer: Maximum rows to return (default 100).
    - `raw_data` boolean: Return compact JSON only (no markdown). Use when you will compute on the result.

## Response `200`

The tool ran. A write returns proposal_id and approve_url while the change waits for approval.

- SuccessEnvelope
  - `success` unknown, required
  - `tool` string, required
  - `data` object, required: Machine-readable result.
  - `markdown` string, required: The same result written for a person or a model.
  - `quota` Quota: Task usage for the current billing period.
    - `plan` string
    - `used` integer
    - `limit` integer
    - `period_end` string
    - `upgrade_url` string
  - `proposal_id` string: Present for writes. Nothing changes on the ad platform until it is approved.
  - `approve_url` string: Where a person approves the proposal.
  - `request_id` string, required

## Other responses

- `400`: Invalid arguments, or the ad account could not be resolved.
- `401`: Missing, invalid, revoked or expired API key.
- `402`: Monthly task quota used up, or the plan does not include this tool.
- `403`: The connected ad account lacks the access level this tool needs.
- `404`: Unknown tool name.
- `409`: Not connected, reconnect needed, confirmation required, a proposal already pending or no longer pending, an identical create that failed earlier today (proposal_failed_before), a create that duplicates an approved one (duplicate_create), the ad-account limit of the plan reached (account_limit), or an Idempotency-Key reused with different arguments.
- `429`: Rate limited by Adako or by the ad platform. See Retry-After.
- `500`: Unexpected error inside Adako.
- `502`: The ad platform returned an error.

---

[API](https://skmtc.dev/adako/apis/adako-rest-api.md) · [All operations](https://skmtc.dev/adako/apis/adako-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adako/apis/adako-rest-api/revisions/59ee60d48a56?raw)
