List campaigns
Lists the campaigns synced from the project's ad accounts, ordered by name.
Filter by adAccountId, status, deliveryStatus, destination, or search (the name, ignoring case, or the exact id). Needs project:ads:read.
Guide: Ads reports
A project secret key: vh_sk_... for production, vh_sk_test_... for test. Keep it on your servers.
In: header
Path parameters
The project's id, proj_.... A secret key works only in the project it belongs to.
Query parameters
Where the page starts: the pageInfo.endCursor of the previous page. Omit it for the first page.
How many items to return, from 1 to 100. Defaults to 50.
1 <= value <= 100Only objects of this connected account, ad_acct_...; an account the project has not connected fails with ad_account_not_connected.
Only objects with this status set on the platform: on, paused or removed.
Value in
- "on"
- "paused"
- "removed"
Only objects with this delivery status, such as delivering or rejected.
Value in
- "delivering"
- "learning"
- "learning_limited"
- "not_delivering"
- "in_review"
- "rejected"
- "paused"
- "off_by_parent"
- "scheduled"
- "ended"
- "account_issue"
Only objects whose ads send people here: website, app_store, web_to_app or mixed.
Value in
- "website"
- "app_store"
- "web_to_app"
- "mixed"
Only objects whose name contains this text, ignoring case, or whose id is exactly it. At most 200 characters.
length <= 200Examples
curl -X GET "https://api.voidhash.com/api/v1/projects/proj_tz4a98xxat96iws9zmbrgj3a/ads/campaigns?adAccountId=ad_acct_k3m9x2c7v1b8n4q6w0e5r2t7&status=on" \ -H "Authorization: Bearer vh_sk_..."{ "data": [ { "projectId": "proj_tz4a98xxat96iws9zmbrgj3a", "adAccountId": "ad_acct_k3m9x2c7v1b8n4q6w0e5r2t7", "platform": "meta", "status": "on", "deliveryStatus": "delivering", "deliveryReasons": [], "destination": "web_to_app", "budget": { "amount": 20000, "currency": "USD", "period": "daily", "level": "campaign" }, "startsAt": "2026-02-28T23:00:00.000Z", "endsAt": null, "createdAt": "2026-02-27T14:10:00.000Z", "updatedAt": "2026-03-14T08:52:00.000Z", "syncedAt": "2026-03-14T10:00:12.000Z", "id": "120210000000000001", "name": "Spring trial", "platformUrl": "https://adsmanager.facebook.com/adsmanager/manage/campaigns?act=1234567890&selected_campaign_ids=120210000000000001", "objective": "sales", "bidStrategy": "lowest_cost", "spendCap": null } ], "pageInfo": { "endCursor": null, "hasNextPage": false }}{ "error": { "type": "invalid_request", "code": "ad_account_not_connected", "message": "Ad account ad_acct_k3m9x2c7v1b8n4q6w0e5r2t7 is not connected to this project.", "param": "adAccountId" }}{ "error": { "type": "unauthenticated", "code": "invalid_api_key", "message": "This secret key is not valid." }}{ "error": { "type": "permission_denied", "code": "permission_denied", "message": "Insufficient permissions." }}{ "error": { "type": "not_found", "code": "project_not_found", "message": "There is no project proj_tz4a98xxat96iws9zmbrgj3a, or this credential cannot use it.", "param": "projectId" }}{ "error": { "type": "internal", "code": "internal_error", "message": "Something went wrong on our side. Try again, and contact support with the Request-Id header if it keeps failing." }}Response body
application/json
application/json
application/json
application/json
application/json
application/json
Errors
| Status | type | code | When |
|---|---|---|---|
| 400 | invalid_request | ad_account_not_connected | For a filter naming an account the project has not connected. |
It can also fail with the errors every operation shares, such as unauthenticated; see Errors.
More in Ads
- Retrieve a campaign
GET - List ad groups
GET - Retrieve an ad group
GET - List ads
GET - Retrieve an ad
GET - Preview a creative
GET - Retrieve ads settings
GET - Update ads settings
PATCH - Report ad performance
POST - Report creatives
POST - Report ad cohorts
POST - Report ad changes
POST
Something wrong or missing on this page? Tell us by email or on Discord.