# API reference

Adspy API · https://www.adspy.sh/docs/api/reference · Updated October 24, 2026

Every route of API v1 under https://www.adspy.sh/api/v1. Request and response schemas: https://www.adspy.sh/openapi.json (OpenAPI 3.1).

### Search brands

`GET /api/v1/brands`

Brands in Adspy's library, by name. Each brand carries its key (brand_key), which every brand route takes. `social_only_brands` lists brands Adspy knows only from a TikTok or YouTube account matching the query (first page only). Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| query | query | string | Part of the brand's name. Without it, brands are listed by name. |
| limit | query | integer | Items per page, 1 to 100 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Get a brand

`GET /api/v1/brands/{brand_key}`

One brand: its name, website, ad platforms, industry, creative count and collected social accounts. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| brand_key | path | string | The brand's key, from GET /v1/brands. |

Errors: 400 invalid_request, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### List a brand's creatives

`GET /api/v1/brands/{brand_key}/creatives`

The brand's creatives with the creative search filters. Pages can be shorter than `limit`: follow `has_more`. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| brand_key | path | string | The brand's key, from GET /v1/brands. |
| query | query | string | Words to find, in the scope chosen. |
| scope | query | "all" \| "ad_copy" \| "content_transcript" \| "visual_analysis" \| "all_keywords" \| "hooks" | Where `query` is matched (default all). |
| platform | query | "all" \| "meta" \| "google" | The ad library: meta (Facebook, Instagram and Messenger placements) or google (Search, YouTube, Display). |
| format | query | "all" \| "image" \| "video" \| "carousel" |  |
| status | query | "all" \| "active" \| "inactive" | Whether the library last saw the ad running. |
| sort | query | "newest" \| "oldest" \| "longest" | newest or oldest first sighting, or longest running (default newest). |
| tags | query | string | AI tags the creative must all carry, comma-separated, e.g. hook_type:Question. |
| language | query | string |  |
| min_days_active | query | integer | Only creatives seen running for at least this many days. |
| limit | query | integer | Items per page, 1 to 100 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable, 504 timeout.

### Get a brand's X-Ray

`GET /api/v1/brands/{brand_key}/xray`

The brand's X-Ray: the observed creative strategy (formats, hooks, funnel, longevity, audience estimates, destinations, changes) over a range, from public creatives. Evidence, not ad performance. A report is reused for 24 hours. Needs the actions permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| brand_key | path | string | The brand's key, from GET /v1/brands. |
| range | query | "30d" \| "90d" \| "180d" \| "all" | The window of first sightings the report covers (default 90d). |

Errors: 400 invalid_request, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable, 504 timeout.

### Get a brand's social report

`GET /api/v1/brands/{brand_key}/social`

The brand's organic TikTok and YouTube report: accounts, cadence, views and engagement per view with confidence intervals, breakouts, paid reach (listed apart from organic numbers) and posts run as ads. Instagram is left out; aggregates over all platforms are null when the brand also has Instagram (`instagram_excluded`). Needs the actions permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| brand_key | path | string | The brand's key, from GET /v1/brands. |
| range | query | "30d" \| "90d" | The statistics window: the last 30 or 90 days (default 90d). |

Errors: 400 invalid_request, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### List a brand's posts run as ads

`GET /api/v1/brands/{brand_key}/posts-run-as-ads`

Pairs of a brand's organic post and the ad cut from it (or the ad later posted organically), matched by media. Instagram pairs are left out; without `platform`, `summary` is null when the brand also has Instagram. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| brand_key | path | string | The brand's key, from GET /v1/brands. |
| range | query | "30d" \| "90d" \| "180d" \| "all" | Posts published in this window (default 90d). |
| platform | query | "tiktok" \| "youtube" | tiktok or youtube. Instagram is not available in the API. |
| direction | query | "organic_to_paid" \| "paid_to_organic" \| "all" | organic_to_paid: posts later run as ads. paid_to_organic: ads later posted organically. |
| limit | query | integer | Items per page, 1 to 100 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 422 instagram_not_in_api, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### Run a brand's Full Analysis

`POST /api/v1/brands/{brand_key}/full-analysis`

The Brand Full Analysis: the ads, the organic posts and the links between them, with every number's n, confidence interval and test, multiple-testing corrected. Evidence from public data, never spend or results. Reused for 24 hours. When the brand has Instagram, Instagram is left out and the cross-platform aggregates are withheld (`instagram_excluded`). Needs the actions permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| brand_key | path | string | The brand's key, from GET /v1/brands. |

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 409 idempotency_conflict, 409 operation_in_progress, 413 payload_too_large, 415 unsupported_media_type, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable, 504 timeout.

### Search creatives

`GET /api/v1/creatives`

Meta and Google creatives in Adspy's library, with filters. Live offset pages, not a fixed snapshot: a page can repeat or skip an item when the library changes between pages. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| query | query | string | Words to find, in the scope chosen. |
| scope | query | "all" \| "ad_copy" \| "content_transcript" \| "visual_analysis" \| "all_keywords" \| "hooks" | Where `query` is matched (default all). |
| platform | query | "all" \| "meta" \| "google" | The ad library: meta (Facebook, Instagram and Messenger placements) or google (Search, YouTube, Display). |
| format | query | "all" \| "image" \| "video" \| "carousel" |  |
| status | query | "all" \| "active" \| "inactive" | Whether the library last saw the ad running. |
| sort | query | "newest" \| "oldest" \| "longest" | newest or oldest first sighting, or longest running (default newest). |
| tags | query | string | AI tags the creative must all carry, comma-separated, e.g. hook_type:Question. |
| language | query | string |  |
| min_days_active | query | integer | Only creatives seen running for at least this many days. |
| brand_key | query | string | Only this brand's creatives. |
| brand_keys | query | string | Only these brands' creatives, comma-separated (up to 100). |
| limit | query | integer | Items per page, 1 to 100 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable, 504 timeout.

### Search creatives by meaning

`GET /api/v1/creatives/by-meaning`

Creatives whose transcript says what you describe, closest meaning first, in any language and even with other words. A creative without a transcript is never found here: use the creative search for exact words, ad copy or a brand's full list. Filters apply before ordering. Status, tags and days active are not offered here. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| query | query | string | What the ads should say, in plain words and any language: an idea, an angle, a pain point. |
| brand_key | query | string | Only this brand's creatives. |
| brand_keys | query | string | Only these brands' creatives, comma-separated (up to 100). |
| platform | query | "all" \| "meta" \| "google" | The ad library: meta (Facebook, Instagram and Messenger placements) or google (Search, YouTube, Display). |
| format | query | "all" \| "image" \| "video" \| "carousel" |  |
| language | query | string |  |
| since | query | string | Only creatives first seen on or after this day, e.g. 2026-09-01. |
| limit | query | integer | Items per page, 1 to 100 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable, 504 timeout.

### Get a creative

`GET /api/v1/creatives/{id}`

One creative with its transcript, source ads (variants), hook, AI tags, CTA and landing pages. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The creative id. |

Errors: 400 invalid_request, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### Get a creative's AI analysis

`GET /api/v1/creatives/{id}/analysis`

The creative's record with its AI analysis: scores (an AI reading of the execution, not measured performance), objective, timed moments and the full analysis document. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The creative id. |

Errors: 400 invalid_request, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### List similar creatives

`GET /api/v1/creatives/{id}/similar`

Creatives of other brands that share the creative's execution and topic tags, ranked. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The creative id. |
| limit | query | integer | Matches to return, 1 to 100 (default 20). |

Errors: 400 invalid_request, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### Search advertisers in public ad libraries

`GET /api/v1/advertisers`

Advertisers on the Meta Ad Library or Google Ads Transparency, for a brand Adspy does not have yet. Give the chosen one's `url` to POST /v1/fetches. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| query | query | string | The advertiser's name. |
| source | query | "meta" \| "google" | The public ad library to search: Meta Ad Library or Google Ads Transparency. |

Errors: 400 invalid_request, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Collect a new brand

`POST /api/v1/fetches`

Asks Adspy to collect an advertiser's ads. A brand Adspy already has is returned at once (state existing), and one already being collected answers its running job: neither counts. New collections count toward the contract's monthly quota, shared with the organization's MCP connections. Follow the job with GET /v1/fetches/{id}. Needs the actions permission.

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 409 idempotency_conflict, 409 operation_in_progress, 409 conflict, 413 payload_too_large, 415 unsupported_media_type, 429 rate_limited, 429 partner_fair_use, 429 fetch_quota_exceeded, 429 fetch_limited, 500 internal_error, 503 service_unavailable.

### Get a fetch job

`GET /api/v1/fetches/{id}`

A brand or social account collection: its state and progress. A job is complete only when `is_complete` is true; then read the brand's creatives (GET /v1/brands/{brand_key}/creatives) or the account's posts (GET /v1/social/posts). Needs the actions permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The fetch job id. |

Errors: 400 invalid_request, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Search social accounts

`GET /api/v1/social/accounts`

TikTok or YouTube accounts for a brand or a handle: the ones Adspy collects, then the platform's own search. `official` is true only with proof that the account is the brand's. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| query | query | string | A brand name or a handle. |
| platform | query | "tiktok" \| "youtube" | tiktok or youtube. Instagram is not available in the API. |
| brand_key | query | string | The Adspy brand, when known: its linked accounts and website are used as proof. |

Errors: 400 invalid_request, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 422 instagram_not_in_api, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Collect a social account

`POST /api/v1/social/fetches`

Asks Adspy to collect a TikTok or YouTube account's posts. An account Adspy already collects is returned at once (state existing), and one already being collected answers its running job: neither counts. New collections count toward the contract's monthly quota, shared with the organization's MCP connections. Follow the job with GET /v1/fetches/{id}. Needs the actions permission.

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 409 idempotency_conflict, 409 operation_in_progress, 413 payload_too_large, 415 unsupported_media_type, 422 instagram_not_in_api, 429 rate_limited, 429 partner_fair_use, 429 fetch_quota_exceeded, 429 fetch_limited, 500 internal_error, 503 service_unavailable.

### List social posts

`GET /api/v1/social/posts`

A brand's (or one account's) organic TikTok and YouTube posts with their public counts. Instagram posts are left out, so a page can hold fewer posts than `limit`: follow `has_more`. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| brand_key | query | string | The brand; give brand_key or account_id. |
| account_id | query | string | An account id, e.g. social:tiktok:6643891469239320582. |
| platform | query | "tiktok" \| "youtube" | tiktok or youtube. Instagram is not available in the API. |
| format | query | "video" \| "short" \| "live" \| "carousel" \| "image" | TikTok: video, carousel (photo post), live. YouTube: video, short, live. |
| since | query | string | Posts published on or after this date (YYYY-MM-DD). |
| sort | query | "recent" \| "engagement" \| "breakouts" | recent: newest first. engagement: highest engagement per view first. breakouts: the posts far above the account's usual views (90-day statistics). |
| limit | query | integer | Items per page, 1 to 100 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 422 instagram_not_in_api, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### Get a social post

`GET /api/v1/social/posts/{id}`

One TikTok or YouTube post with its count snapshots, ad links, pre-ad counts and, on request, its AI tags. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | A post id, platform:native id, e.g. tiktok:7675005480867073311. |
| include_analysis | query | "true" \| "false" | true adds the post's AI tags (default false). |

Errors: 400 invalid_request, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 422 instagram_not_in_api, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### Compare brands

`POST /api/v1/compare/brands`

The X-Rays of 2 to 5 brands over one range, side by side. Each brand's report is reused for 24 hours. Needs the actions permission.

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 409 idempotency_conflict, 409 operation_in_progress, 413 payload_too_large, 415 unsupported_media_type, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable, 504 timeout.

### Compare brands on TikTok or YouTube

`POST /api/v1/compare/social`

2 to 5 brands' organic posts on one platform: engagement per view and views per post, each brand's median against its peers with a stratified bootstrap, cadence, breakouts and paid reach. Needs the actions permission.

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 409 idempotency_conflict, 409 operation_in_progress, 413 payload_too_large, 415 unsupported_media_type, 422 instagram_not_in_api, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### List collections

`GET /api/v1/collections`

The workspace's collections of saved creatives, 100 per page. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Save creatives to a new collection

`POST /api/v1/collections`

Creates a collection with these creatives, or adds them to your collection that already has this name. Creatives the library does not hold are left out and listed in `not_saved`; when none is held, nothing is created (404). Needs the actions permission.

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 409 idempotency_conflict, 409 operation_in_progress, 413 payload_too_large, 415 unsupported_media_type, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Get a collection

`GET /api/v1/collections/{id}`

A collection and its creatives with their notes. `expand=true` adds each creative's record. Needs the read permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The collection id. |
| expand | query | "true" \| "false" | true adds each creative's record (default false). |
| limit | query | integer | Items per page, 1 to 100 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 402 partner_key_cap_reached, 402 partner_tenant_cap_reached, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 429 rate_limited, 429 partner_fair_use, 500 internal_error, 503 service_unavailable.

### Add creatives to a collection

`POST /api/v1/collections/{id}/creatives`

Adds creatives to the collection. A creative already in it keeps its note. Creatives the library does not hold are left out and listed in `not_saved`; when none is held, nothing is added (404). Needs the actions permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The collection id. |

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 409 idempotency_conflict, 409 operation_in_progress, 413 payload_too_large, 415 unsupported_media_type, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Set a creative's note

`PATCH /api/v1/collections/{id}/creatives/{creative_id}`

Sets the note of a creative in the collection. Sending the same note again changes nothing. Needs the actions permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The collection id. |
| creative_id | path | string | The creative id. |

Errors: 400 invalid_request, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 404 not_found, 413 payload_too_large, 415 unsupported_media_type, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Create an export

`POST /api/v1/exports`

Exports up to 10,000 items as CSV, Excel, JSON, ZIP (with media), PDF, Markdown or HTML. The file is built in the background: follow the job with GET /v1/exports/{id}. Files are kept 7 days. Social exports take platform tiktok or youtube. Needs the export permission.

Takes an `Idempotency-Key` header.

Errors: 400 invalid_request, 400 idempotency_key_required, 401 unauthorized, 402 payment_required, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 403 not_offered_to_partner, 409 idempotency_conflict, 409 operation_in_progress, 413 payload_too_large, 415 unsupported_media_type, 422 instagram_not_in_api, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### List exports

`GET /api/v1/exports`

The exports the key's user made in its workspace in the last 7 days, newest first, through the API or in Adspy. Exports of a source the API does not offer (Instagram among them) are left out, so a page can hold fewer than `limit`: follow `has_more`. Needs the export permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| state | query | "pending" \| "running" \| "completed" \| "partial" \| "failed" |  |
| limit | query | integer | Items per page, 1 to 50 (default 20). |
| cursor | query | string | The `next_cursor` of the previous page. Send it with the same filters; it is valid for 24 hours. |

Errors: 400 invalid_request, 400 invalid_cursor, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 403 not_offered_to_partner, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Get an export

`GET /api/v1/exports/{id}`

An export job and, when the file is ready, a download link valid 5 minutes. An export of a source the API does not offer, made in Adspy, is not available here. Needs the export permission.

| Name | In | Type | Description |
| --- | --- | --- | --- |
| id | path | string | The export job id. |

Errors: 400 invalid_request, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 403 not_offered_to_partner, 404 not_found, 422 instagram_not_in_api, 429 rate_limited, 500 internal_error, 503 service_unavailable.

### Get usage

`GET /api/v1/usage`

The organization's plan, the contract's limits, this month's new collections and the operations of the last 30 days. Enterprise has no credit count: its credit fields are null or 0. Needs the read permission.

Errors: 400 invalid_request, 401 unauthorized, 403 enterprise_required, 403 insufficient_scope, 403 forbidden, 403 not_offered_to_partner, 429 rate_limited, 500 internal_error, 503 service_unavailable.