curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/ads/google/campaigns/21534567890"
const API_KEY = "API_KEY";
fetch("https://api.ayrshare.com/api/ads/google/campaigns/21534567890", {
method: "GET",
headers: {
"Authorization": `Bearer ${API_KEY}`
}
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
headers = {
"Authorization": "Bearer API_KEY",
}
r = requests.get("https://api.ayrshare.com/api/ads/google/campaigns/21534567890", headers=headers)
print(r.json())
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ayrshare.com/api/ads/google/campaigns/21534567890",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer API_KEY"
]
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error: " . $err;
} else {
echo $response;
}
?>
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer API_KEY");
var response = await client.GetAsync("https://api.ayrshare.com/api/ads/google/campaigns/21534567890");
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.ayrshare.com/api/ads/google/campaigns/21534567890", nil)
req.Header.Add("Authorization", "Bearer API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class GetCampaign {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.ayrshare.com/api/ads/google/campaigns/21534567890"))
.header("Authorization", "Bearer API_KEY")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
require 'net/http'
require 'uri'
uri = URI.parse('https://api.ayrshare.com/api/ads/google/campaigns/21534567890')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer API_KEY'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
{
"status": "success",
"platform": "google",
"campaignId": "21534567890",
"name": "Fall sale",
"campaignStatus": "active",
"platformStatus": "ENABLED",
"budget": { "amount": 25, "currency": "USD", "type": "daily" },
"ads": [
{
"adId": "71234567890",
"approvalStatus": "APPROVED_LIMITED",
"reviewStatus": "REVIEWED",
"policyTopics": [{ "topic": "ALCOHOL", "type": "LIMITED" }]
}
]
}
{
"status": "success",
"platform": "google",
"campaignId": "21534567891",
"name": "Fall sale PMax",
"campaignStatus": "paused",
"platformStatus": "PAUSED",
"budget": { "amount": 40, "currency": "USD", "type": "daily" },
"ads": [
{
"adId": "asset:6512345678~31234567890~HEADLINE",
"assetId": "31234567890",
"fieldType": "HEADLINE",
"primaryStatus": "ELIGIBLE",
"approvalStatus": "APPROVED",
"reviewStatus": "REVIEWED",
"policyTopics": []
}
]
}
{
"action": "ads",
"status": "error",
"code": 400,
"message": "Campaign not found or you are not authorized to access it."
}
Google Ads
Obtener campaña
Consulta el estado y el presupuesto diario de una campaña de Google Ads, y la revisión de Google de cada uno de sus anuncios o recursos.
GET
/
ads
/
google
/
campaigns
/
{id}
curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/ads/google/campaigns/21534567890"
const API_KEY = "API_KEY";
fetch("https://api.ayrshare.com/api/ads/google/campaigns/21534567890", {
method: "GET",
headers: {
"Authorization": `Bearer ${API_KEY}`
}
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
headers = {
"Authorization": "Bearer API_KEY",
}
r = requests.get("https://api.ayrshare.com/api/ads/google/campaigns/21534567890", headers=headers)
print(r.json())
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ayrshare.com/api/ads/google/campaigns/21534567890",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer API_KEY"
]
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error: " . $err;
} else {
echo $response;
}
?>
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer API_KEY");
var response = await client.GetAsync("https://api.ayrshare.com/api/ads/google/campaigns/21534567890");
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.ayrshare.com/api/ads/google/campaigns/21534567890", nil)
req.Header.Add("Authorization", "Bearer API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class GetCampaign {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.ayrshare.com/api/ads/google/campaigns/21534567890"))
.header("Authorization", "Bearer API_KEY")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
require 'net/http'
require 'uri'
uri = URI.parse('https://api.ayrshare.com/api/ads/google/campaigns/21534567890')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer API_KEY'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
{
"status": "success",
"platform": "google",
"campaignId": "21534567890",
"name": "Fall sale",
"campaignStatus": "active",
"platformStatus": "ENABLED",
"budget": { "amount": 25, "currency": "USD", "type": "daily" },
"ads": [
{
"adId": "71234567890",
"approvalStatus": "APPROVED_LIMITED",
"reviewStatus": "REVIEWED",
"policyTopics": [{ "topic": "ALCOHOL", "type": "LIMITED" }]
}
]
}
{
"status": "success",
"platform": "google",
"campaignId": "21534567891",
"name": "Fall sale PMax",
"campaignStatus": "paused",
"platformStatus": "PAUSED",
"budget": { "amount": 40, "currency": "USD", "type": "daily" },
"ads": [
{
"adId": "asset:6512345678~31234567890~HEADLINE",
"assetId": "31234567890",
"fieldType": "HEADLINE",
"primaryStatus": "ELIGIBLE",
"approvalStatus": "APPROVED",
"reviewStatus": "REVIEWED",
"policyTopics": []
}
]
}
{
"action": "ads",
"status": "error",
"code": 400,
"message": "Campaign not found or you are not authorized to access it."
}
Obtén una campaña de Google Ads que creaste a través de Ayrshare: su nombre, su estado, su presupuesto diario y la revisión de Google de cada uno de sus anuncios.
Un anuncio rechazado no se publica. Modifícalo en Google Ads o crea una campaña nueva con un texto que cumpla las políticas.
El nombre de la empresa, los logotipos y los logotipos horizontales son recursos de marca, vinculados a la campaña en lugar de al grupo de recursos. También tienen una fila aquí, después de las filas del grupo de recursos, con el ID de la campaña como clave:
Parámetros del encabezado
Parámetros de ruta
string
requerido
El
campaignId que se devolvió al crear la campaña.Respuesta
| Campo | Qué contiene |
|---|---|
campaignId | El ID de la campaña |
name | El nombre de la campaña |
campaignStatus | active o paused |
platformStatus | El estado propio de Google: ENABLED, PAUSED o REMOVED para una campaña eliminada en Google Ads. Una campaña eliminada conserva el último campaignStatus que estableciste a través de Ayrshare |
budget | El presupuesto diario: amount, currency (la moneda de la cuenta publicitaria) y type (daily) |
ads | La revisión de Google de cada anuncio (Búsqueda) o recurso (Performance Max). Consulta Revisión de anuncios |
Revisión de anuncios
Google revisa cada anuncio nuevo según sus políticas publicitarias, normalmente en un día hábil. Cada fila deads contiene:
| Campo | Qué contiene |
|---|---|
adId | El ID del anuncio, tal como lo devuelve Create |
approvalStatus | La decisión de Google: APPROVED, APPROVED_LIMITED (se muestra con límites, por ejemplo no en algunos países), AREA_OF_INTEREST_ONLY o DISAPPROVED. Hasta que Google decide, contiene otro valor, como UNKNOWN o UNSPECIFIED |
reviewStatus | En qué punto está la revisión, por ejemplo REVIEW_IN_PROGRESS o REVIEWED |
policyTopics | Las políticas detrás de un límite o un rechazo: [{ "topic": "ALCOHOL", "type": "PROHIBITED" }] |
ads se omite cuando no se pudo leer la revisión de Google en ese momento, o tardó más de unos segundos; vuelve a leer la campaña más tarde.
Cada noche, Ayrshare también comprueba cada revisión y envía un webhook ads con type: "reviewChanged" cuando cambia la decisión de Google. Consulta Ads Action.
Revisión de recursos
Google revisa por separado cada recurso de una campaña Performance Max.ads contiene una fila por recurso, con los mismos campos que una revisión de anuncio, más:
| Campo | Qué contiene |
|---|---|
adId | La clave del recurso en esta campaña: asset:<assetGroupId>~<assetId>~<fieldType>, o asset:<campaignId>~<assetId>~<fieldType> para un recurso de marca |
assetId | El ID de Google del recurso |
fieldType | Dónde se usa, por ejemplo HEADLINE, MARKETING_IMAGE, SQUARE_MARKETING_IMAGE, BUSINESS_NAME o LOGO |
primaryStatus | Si se puede publicar, por ejemplo ELIGIBLE o NOT_ELIGIBLE |
asset:<campaignId>~<assetId>~<fieldType>, donde fieldType es BUSINESS_NAME, LOGO o LANDSCAPE_LOGO.
Errores
| Código | Cuándo |
|---|---|
400 | La campaña no es tuya, no existe o ya no está en la cuenta de Google Ads. También cuando el usuario de Google que vinculaste no puede acceder a la cuenta publicitaria o se revocó el acceso a Google Ads. |
370 | Google no pudo completar la solicitud. Inténtalo de nuevo. |
curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/ads/google/campaigns/21534567890"
const API_KEY = "API_KEY";
fetch("https://api.ayrshare.com/api/ads/google/campaigns/21534567890", {
method: "GET",
headers: {
"Authorization": `Bearer ${API_KEY}`
}
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
headers = {
"Authorization": "Bearer API_KEY",
}
r = requests.get("https://api.ayrshare.com/api/ads/google/campaigns/21534567890", headers=headers)
print(r.json())
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ayrshare.com/api/ads/google/campaigns/21534567890",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer API_KEY"
]
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error: " . $err;
} else {
echo $response;
}
?>
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer API_KEY");
var response = await client.GetAsync("https://api.ayrshare.com/api/ads/google/campaigns/21534567890");
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.ayrshare.com/api/ads/google/campaigns/21534567890", nil)
req.Header.Add("Authorization", "Bearer API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class GetCampaign {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.ayrshare.com/api/ads/google/campaigns/21534567890"))
.header("Authorization", "Bearer API_KEY")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
require 'net/http'
require 'uri'
uri = URI.parse('https://api.ayrshare.com/api/ads/google/campaigns/21534567890')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer API_KEY'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
{
"status": "success",
"platform": "google",
"campaignId": "21534567890",
"name": "Fall sale",
"campaignStatus": "active",
"platformStatus": "ENABLED",
"budget": { "amount": 25, "currency": "USD", "type": "daily" },
"ads": [
{
"adId": "71234567890",
"approvalStatus": "APPROVED_LIMITED",
"reviewStatus": "REVIEWED",
"policyTopics": [{ "topic": "ALCOHOL", "type": "LIMITED" }]
}
]
}
{
"status": "success",
"platform": "google",
"campaignId": "21534567891",
"name": "Fall sale PMax",
"campaignStatus": "paused",
"platformStatus": "PAUSED",
"budget": { "amount": 40, "currency": "USD", "type": "daily" },
"ads": [
{
"adId": "asset:6512345678~31234567890~HEADLINE",
"assetId": "31234567890",
"fieldType": "HEADLINE",
"primaryStatus": "ELIGIBLE",
"approvalStatus": "APPROVED",
"reviewStatus": "REVIEWED",
"policyTopics": []
}
]
}
{
"action": "ads",
"status": "error",
"code": 400,
"message": "Campaign not found or you are not authorized to access it."
}