Create in Google Ads
curl --request POST \
--url https://fandom-api-preview.vercel.app/api/v1/campaigns/{campaignId}/google-ads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"customerId": "1234567890"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({customerId: '1234567890'})
};
fetch('https://fandom-api-preview.vercel.app/api/v1/campaigns/{campaignId}/google-ads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://fandom-api-preview.vercel.app/api/v1/campaigns/{campaignId}/google-ads"
payload = { "customerId": "1234567890" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"name": "<string>",
"status": "<string>",
"objective": "<string>",
"brandId": "<string>",
"brand": {
"name": "<string>",
"website": "<string>",
"description": "<string>"
},
"industry": "<string>",
"language": "<string>",
"locations": [
"<string>"
],
"successMetrics": [
"<string>"
],
"campaignType": "<string>",
"budget": 123,
"budgetType": "daily",
"endDate": "<string>",
"biddingStrategy": "<string>",
"targetCpa": 123,
"targetRoas": 123,
"audiences": [
{
"id": "<string>",
"name": "<string>",
"audienceId": "<string>",
"dataStoreIds": [
"<string>"
]
}
],
"googleAds": {
"customerId": "<string>",
"accountName": "<string>",
"campaignId": "<string>",
"status": "<string>"
},
"url": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}Google Ads
Create in Google Ads
Creates the campaign in Google Ads, paused, exactly as the campaign page does. Nothing spends until someone turns it on in Google Ads. Targeting goes over when the app syncs.
Scope: google-ads:write.
Send an Idempotency-Key header to make retries safe.
POST
/
campaigns
/
{campaignId}
/
google-ads
Create in Google Ads
curl --request POST \
--url https://fandom-api-preview.vercel.app/api/v1/campaigns/{campaignId}/google-ads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"customerId": "1234567890"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({customerId: '1234567890'})
};
fetch('https://fandom-api-preview.vercel.app/api/v1/campaigns/{campaignId}/google-ads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://fandom-api-preview.vercel.app/api/v1/campaigns/{campaignId}/google-ads"
payload = { "customerId": "1234567890" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"name": "<string>",
"status": "<string>",
"objective": "<string>",
"brandId": "<string>",
"brand": {
"name": "<string>",
"website": "<string>",
"description": "<string>"
},
"industry": "<string>",
"language": "<string>",
"locations": [
"<string>"
],
"successMetrics": [
"<string>"
],
"campaignType": "<string>",
"budget": 123,
"budgetType": "daily",
"endDate": "<string>",
"biddingStrategy": "<string>",
"targetCpa": 123,
"targetRoas": 123,
"audiences": [
{
"id": "<string>",
"name": "<string>",
"audienceId": "<string>",
"dataStoreIds": [
"<string>"
]
}
],
"googleAds": {
"customerId": "<string>",
"accountName": "<string>",
"campaignId": "<string>",
"status": "<string>"
},
"url": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"requestId": "<string>"
}
}Authorizations
An API key from Settings → API access, starting with fnd_.
Headers
Any unique string. Repeating a request with the same key returns the first result instead of doing it twice.
Maximum string length:
200Path Parameters
Campaign id.
Pattern:
^[a-f0-9]{24}$Body
application/json
The account to create it in. Defaults to the campaign's account.
Pattern:
^\d{3}-?\d{3}-?\d{4}$Response
Success
draft, loading (collecting data), ready or error.
Show child attributes
Show child attributes
In the account's currency.
Available options:
daily, total Show child attributes
Show child attributes
Show child attributes
Show child attributes
Opens the campaign in Fandom.

