---
title: "Check images before a LinkedIn ad is built"
method: POST
path: "/api/v1/tools/linkedin_validate_assets/execute"
tags: ["LinkedIn Ads"]
---

# Check images before a LinkedIn ad is built

`POST /api/v1/tools/linkedin_validate_assets/execute`

## Request

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

Checks image URLs against LinkedIn's sponsored-content specs before anything is created: reachable over https, an accepted file type, under the size limit, and either 1.91:1 (1200×627) or square (1200×1200) so the feed does not choose its own crop.
Use when: the user supplies creative URLs, and always before linkedin_create_image_campaign or linkedin_add_creative. An image that fails here fails mid-way through a create, after the campaign has already been made — which leaves half a campaign behind.
Do not treat a warning as a blocker: a non-standard ratio uploads fine and simply gets cropped, and the user may be happy with that. Errors are blockers; warnings are the user's call.
Do not use it for video — LinkedIn's video specs are not checked here.
Returns per-URL content type, byte size, dimensions, which recommended size it matches, and separate error and warning lists. Costs nothing and downloads only the file header.
If dimensions cannot be read, say so plainly rather than assuming the image is fine.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `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.
    - `image_urls` string[], required: The images to check. Adako hosts no files: the platform downloads this URL itself, from its own servers and often hours later, so it must be a public link straight to the file — not a file on the computer, not a Drive, Dropbox or design-tool share page, not a link that expires or asks for a login. Call check_media first: it repairs the usual share links, checks the file against this platform, and says where to put a file that has no link yet.
    - `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)
