---
search:
  tags:
    - Campaigns
    - GET
seo:
  description: >-
    Gives the payload the provider reports for one campaign, exactly as…
    Reference for the GET /observe/{advertiserId}/campaigns/{id} endpoint in the
    AdCrunch API.
sidebar:
  label: Get one campaign
  badge: GET
title: Get one campaign
type: openapi-operation
---
Gives the payload the provider reports for one campaign, exactly as the provider sent it. This is the escape hatch from the normalized fields: bid strategy, schedule, spending limits, and everything else AdCrunch does not model. The budget and the objective are normalized on every listed row.

The keys are the provider’s. A TikTok campaign answers `campaign_id`, `campaign_name`, `objective_type` and `budget_mode`; a Meta campaign answers `id`, `name`, `objective` and `daily_budget`.

## When there is nothing to give

Two different empty answers, and they mean different things.

- **`200` with an empty body** — AdCrunch does not know this campaign, it belongs to another advertiser, or your organization does not own the advertiser in the path. They are deliberately not told apart: distinguishing them would confirm that a campaign exists to somebody who cannot read it.
- **`404`** — AdCrunch knows the campaign but holds no stored payload for it. It is a fresh row whose payload has not landed yet.

Neither is an error on your side. Only the `404` is likely to change on a retry.

`GET /observe/{advertiserId}/campaigns/{id}`
