curl -X POST https://api.ayrshare.com/api/ads/facebook/boost \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": { "countries": ["US"] },
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": [1234567890, 1234567891]
}'
curl -X POST https://api.ayrshare.com/api/ads/facebook/boost \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "Nurse Practitioner Hiring",
"status": "active",
"goal": "traffic",
"callToAction": {
"type": "APPLY_NOW",
"link": "https://example.com/careers/nurse-practitioner",
"linkTitle": "Apply today"
},
"specialAdCategories": ["employment"],
"minAge": 18,
"maxAge": 65,
"locations": { "countries": ["US"] },
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z"
}'
const API_KEY = "API_KEY";
fetch("https://api.ayrshare.com/api/ads/facebook/boost", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`
},
body: JSON.stringify({
postId: "1234567890",
accountId: "1234567890",
adName: "My Ad",
status: "active",
goal: "engagement",
minAge: 18,
maxAge: 65,
locations: { countries: ["US"] },
budget: 100,
bidAmount: 1,
startDate: "2025-03-01T00:00:00Z",
endDate: "2025-03-07T23:59:59Z",
interests: [1234567890, 1234567891]
})
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
API_KEY = "API_KEY"
url = "https://api.ayrshare.com/api/ads/facebook/boost"
payload = {
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": {"countries": ["US"]},
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": [1234567890, 1234567891]
}
response = requests.post(url, headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}, json=payload)
print(response.json())
<?php
$API_KEY = "API_KEY";
$payload = [
"postId" => "1234567890",
"accountId" => "1234567890",
"adName" => "My Ad",
"status" => "active",
"goal" => "engagement",
"minAge" => 18,
"maxAge" => 65,
"locations" => ["countries" => ["US"]],
"budget" => 100,
"bidAmount" => 1,
"startDate" => "2025-03-01T00:00:00Z",
"endDate" => "2025-03-07T23:59:59Z",
"interests" => [1234567890, 1234567891]
];
$ch = curl_init("https://api.ayrshare.com/api/ads/facebook/boost");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Authorization: Bearer " . $API_KEY
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
print_r($result);
curl_close($ch);
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string API_KEY = "API_KEY";
var payload = new
{
postId = "1234567890",
accountId = "1234567890",
adName = "My Ad",
status = "active",
goal = "engagement",
minAge = 18,
maxAge = 65,
locations = new { countries = new[] { "US" } },
budget = 100,
bidAmount = 1,
startDate = "2025-03-01T00:00:00Z",
endDate = "2025-03-07T23:59:59Z",
interests = new[] { 1234567890, 1234567891 }
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", API_KEY);
var content = new StringContent(
JsonSerializer.Serialize(payload),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://api.ayrshare.com/api/ads/facebook/boost", content);
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
apiKey := "API_KEY"
payload := map[string]interface{}{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": map[string]interface{}{"countries": []string{"US"}},
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": []int{1234567890, 1234567891},
}
jsonData, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error marshaling JSON:", err)
return
}
req, err := http.NewRequest("POST", "https://api.ayrshare.com/api/ads/facebook/boost", bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+apiKey)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
public class BoostPost {
public static void main(String[] args) {
String API_KEY = "API_KEY";
String url = "https://api.ayrshare.com/api/ads/facebook/boost";
Map<String, Object> payload = new HashMap<>();
payload.put("postId", "1234567890");
payload.put("accountId", "1234567890");
payload.put("adName", "My Ad");
payload.put("status", "active");
payload.put("goal", "engagement");
payload.put("minAge", 18);
payload.put("maxAge", 65);
Map<String, Object> locations = new HashMap<>();
locations.put("countries", Arrays.asList("US"));
payload.put("locations", locations);
payload.put("budget", 100);
payload.put("bidAmount", 1);
payload.put("startDate", "2025-03-01T00:00:00Z");
payload.put("endDate", "2025-03-07T23:59:59Z");
payload.put("interests", Arrays.asList(1234567890, 1234567891));
try {
ObjectMapper objectMapper = new ObjectMapper();
String requestBody = objectMapper.writeValueAsString(payload);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
require 'net/http'
require 'uri'
require 'json'
API_KEY = "API_KEY"
uri = URI.parse("https://api.ayrshare.com/api/ads/facebook/boost")
payload = {
postId: "1234567890",
accountId: "1234567890",
adName: "My Ad",
status: "active",
goal: "engagement",
minAge: 18,
maxAge: 65,
locations: { countries: ["US"] },
budget: 100,
bidAmount: 1,
startDate: "2025-03-01T00:00:00Z",
endDate: "2025-03-07T23:59:59Z",
interests: [1234567890, 1234567891]
}
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer #{API_KEY}"
request.body = payload.to_json
response = http.request(request)
puts response.body
{
"status": "success",
"adId": "120217670757750410",
"adName": "API Post - DE6gpw8kxlonHy2b7Lo - 2025-03-26T23:42:43",
"adStatus": "active",
"bidAmount": 10,
"budget": 100,
"endDate": "2026-03-28T22:30:00Z",
"goal": {
"title": "Get More Engagement",
"description": "This goal seeks to increase engagement...",
"type": "engagement"
},
"interests": [
"6003195554098"
],
"locations": { "countries": ["US"] },
"maxAge": 65,
"minAge": 18,
"postId": "DE6gpw8kxlonHy2b7Lo",
"startDate": "2026-03-26T22:30:00Z"
}
{
"status": "success",
"adId": "120217670757750411",
"adName": "Nurse Practitioner Hiring - DE6gpw8kxlonHy2b7Lo - 2025-03-26T23:42:43",
"adStatus": "active",
"bidAmount": 1,
"budget": 100,
"callToAction": {
"type": "APPLY_NOW",
"link": "https://example.com/careers/nurse-practitioner",
"linkTitle": "Apply today"
},
"endDate": "2025-03-07T23:59:59Z",
"goal": {
"title": "Drive Traffic",
"description": "Sends people from the boosted post to a destination off Facebook...",
"type": "traffic"
},
"locations": { "countries": ["US"] },
"maxAge": 65,
"minAge": 18,
"postId": "DE6gpw8kxlonHy2b7Lo",
"startDate": "2025-03-01T00:00:00Z"
}
{
"action": "boost post",
"status": "error",
"code": 369,
"message": "Unable to boost post. Please try again or contact us if the issue persists.",
"details": "The accountId likely does not exist. Please check the accountId and try again."
}
{
"action": "request",
"status": "error",
"code": 101,
"message": "Missing or incorrect parameters. Please verify with the docs. https://www.ayrshare.com/docs/apis",
"details": "Missing required fields: budget"
}
Facebook Ads
Просування допису
Просувайте допис, надіславши його на рекламну платформу Facebook
POST
/
ads
/
facebook
/
boost
curl -X POST https://api.ayrshare.com/api/ads/facebook/boost \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": { "countries": ["US"] },
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": [1234567890, 1234567891]
}'
curl -X POST https://api.ayrshare.com/api/ads/facebook/boost \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "Nurse Practitioner Hiring",
"status": "active",
"goal": "traffic",
"callToAction": {
"type": "APPLY_NOW",
"link": "https://example.com/careers/nurse-practitioner",
"linkTitle": "Apply today"
},
"specialAdCategories": ["employment"],
"minAge": 18,
"maxAge": 65,
"locations": { "countries": ["US"] },
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z"
}'
const API_KEY = "API_KEY";
fetch("https://api.ayrshare.com/api/ads/facebook/boost", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`
},
body: JSON.stringify({
postId: "1234567890",
accountId: "1234567890",
adName: "My Ad",
status: "active",
goal: "engagement",
minAge: 18,
maxAge: 65,
locations: { countries: ["US"] },
budget: 100,
bidAmount: 1,
startDate: "2025-03-01T00:00:00Z",
endDate: "2025-03-07T23:59:59Z",
interests: [1234567890, 1234567891]
})
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
API_KEY = "API_KEY"
url = "https://api.ayrshare.com/api/ads/facebook/boost"
payload = {
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": {"countries": ["US"]},
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": [1234567890, 1234567891]
}
response = requests.post(url, headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}, json=payload)
print(response.json())
<?php
$API_KEY = "API_KEY";
$payload = [
"postId" => "1234567890",
"accountId" => "1234567890",
"adName" => "My Ad",
"status" => "active",
"goal" => "engagement",
"minAge" => 18,
"maxAge" => 65,
"locations" => ["countries" => ["US"]],
"budget" => 100,
"bidAmount" => 1,
"startDate" => "2025-03-01T00:00:00Z",
"endDate" => "2025-03-07T23:59:59Z",
"interests" => [1234567890, 1234567891]
];
$ch = curl_init("https://api.ayrshare.com/api/ads/facebook/boost");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Authorization: Bearer " . $API_KEY
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
print_r($result);
curl_close($ch);
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string API_KEY = "API_KEY";
var payload = new
{
postId = "1234567890",
accountId = "1234567890",
adName = "My Ad",
status = "active",
goal = "engagement",
minAge = 18,
maxAge = 65,
locations = new { countries = new[] { "US" } },
budget = 100,
bidAmount = 1,
startDate = "2025-03-01T00:00:00Z",
endDate = "2025-03-07T23:59:59Z",
interests = new[] { 1234567890, 1234567891 }
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", API_KEY);
var content = new StringContent(
JsonSerializer.Serialize(payload),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://api.ayrshare.com/api/ads/facebook/boost", content);
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
apiKey := "API_KEY"
payload := map[string]interface{}{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": map[string]interface{}{"countries": []string{"US"}},
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": []int{1234567890, 1234567891},
}
jsonData, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error marshaling JSON:", err)
return
}
req, err := http.NewRequest("POST", "https://api.ayrshare.com/api/ads/facebook/boost", bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+apiKey)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
public class BoostPost {
public static void main(String[] args) {
String API_KEY = "API_KEY";
String url = "https://api.ayrshare.com/api/ads/facebook/boost";
Map<String, Object> payload = new HashMap<>();
payload.put("postId", "1234567890");
payload.put("accountId", "1234567890");
payload.put("adName", "My Ad");
payload.put("status", "active");
payload.put("goal", "engagement");
payload.put("minAge", 18);
payload.put("maxAge", 65);
Map<String, Object> locations = new HashMap<>();
locations.put("countries", Arrays.asList("US"));
payload.put("locations", locations);
payload.put("budget", 100);
payload.put("bidAmount", 1);
payload.put("startDate", "2025-03-01T00:00:00Z");
payload.put("endDate", "2025-03-07T23:59:59Z");
payload.put("interests", Arrays.asList(1234567890, 1234567891));
try {
ObjectMapper objectMapper = new ObjectMapper();
String requestBody = objectMapper.writeValueAsString(payload);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
require 'net/http'
require 'uri'
require 'json'
API_KEY = "API_KEY"
uri = URI.parse("https://api.ayrshare.com/api/ads/facebook/boost")
payload = {
postId: "1234567890",
accountId: "1234567890",
adName: "My Ad",
status: "active",
goal: "engagement",
minAge: 18,
maxAge: 65,
locations: { countries: ["US"] },
budget: 100,
bidAmount: 1,
startDate: "2025-03-01T00:00:00Z",
endDate: "2025-03-07T23:59:59Z",
interests: [1234567890, 1234567891]
}
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer #{API_KEY}"
request.body = payload.to_json
response = http.request(request)
puts response.body
{
"status": "success",
"adId": "120217670757750410",
"adName": "API Post - DE6gpw8kxlonHy2b7Lo - 2025-03-26T23:42:43",
"adStatus": "active",
"bidAmount": 10,
"budget": 100,
"endDate": "2026-03-28T22:30:00Z",
"goal": {
"title": "Get More Engagement",
"description": "This goal seeks to increase engagement...",
"type": "engagement"
},
"interests": [
"6003195554098"
],
"locations": { "countries": ["US"] },
"maxAge": 65,
"minAge": 18,
"postId": "DE6gpw8kxlonHy2b7Lo",
"startDate": "2026-03-26T22:30:00Z"
}
{
"status": "success",
"adId": "120217670757750411",
"adName": "Nurse Practitioner Hiring - DE6gpw8kxlonHy2b7Lo - 2025-03-26T23:42:43",
"adStatus": "active",
"bidAmount": 1,
"budget": 100,
"callToAction": {
"type": "APPLY_NOW",
"link": "https://example.com/careers/nurse-practitioner",
"linkTitle": "Apply today"
},
"endDate": "2025-03-07T23:59:59Z",
"goal": {
"title": "Drive Traffic",
"description": "Sends people from the boosted post to a destination off Facebook...",
"type": "traffic"
},
"locations": { "countries": ["US"] },
"maxAge": 65,
"minAge": 18,
"postId": "DE6gpw8kxlonHy2b7Lo",
"startDate": "2025-03-01T00:00:00Z"
}
{
"action": "boost post",
"status": "error",
"code": 369,
"message": "Unable to boost post. Please try again or contact us if the issue persists.",
"details": "The accountId likely does not exist. Please check the accountId and try again."
}
{
"action": "request",
"status": "error",
"code": 101,
"message": "Missing or incorrect parameters. Please verify with the docs. https://www.ayrshare.com/docs/apis",
"details": "Missing required fields: budget"
}
Просувайте наявний допис у Facebook для створення реклами.
Цей ендпоінт дає змогу перетворювати ваші органічні дописи на платні оголошення з користувацькими параметрами таргетингу, бюджету та планування.
- Суми бюджету та ставки мають бути вказані в USD з точністю до двох десяткових знаків.
- Оголошення має тривати щонайменше 30 годин, щоб відповідати вимозі Facebook.
- Ви можете використати ендпоінт інтересів, щоб знайти ID інтересів для таргетингу.
- Facebook може знадобитися до 24 годин, щоб переглянути та схвалити просунуті дописи.
- Якщо ви використовуєте
fbPostIdбезпосередньо (замість AyrsharepostId), переконайтеся, що це коректний ID допису Facebook. - Якщо просування не вдається після того, як Facebook створив його кампанію (на етапі креативу, групи оголошень або оголошення), ми намагаємося видалити цю кампанію. Якщо видалення також не вдається, порожня кампанія залишається у вашому рекламному акаунті. Ви можете знайти й видалити її в Ads Manager.
Meta відхиляє оголошення, доки не виконано обидві умови:
- Спосіб оплати в рекламному акаунті. Додайте його в розділі Рахунки й платежі Meta та прив’яжіть до рекламного акаунта, який ви надсилаєте в
accountId. Способу оплати, збереженого лише в бізнес-портфоліо, недостатньо. - Увімкнено персоналізовану рекламу (ЄС, ЄЕЗ і Швейцарія). Якщо власник акаунта Facebook або Instagram, прив’язаного до вашої сторінки Facebook, вибрав менш персоналізовану рекламу або оформив підписку на Meta без реклами, Meta не дозволяє цьому акаунту й сторінці показувати рекламу. Власник може повернутися до персоналізованої реклами або скасувати підписку в Центрі облікових записів → Налаштування реклами → Рекламний досвід. Докладніше.
Цілі оголошення
Кожне оголошення має мати ціль. Ціль визначає, як оголошення буде оптимізовано для показу.engagement: Ця ціль спрямована на підвищення залученості, водночас гарантуючи, що оголошення досягає максимальної кількості унікальних користувачів. Вона балансує між видимістю та залученістю, показуючи оголошення якомога більшій кількості різних людей, які можуть з ним взаємодіяти.interactions: Розроблена для підвищення взаємодії, як-от вподобання, коментарі та поширення оголошення. Facebook надає пріоритет показу оголошення користувачам, які найімовірніше з ним взаємодіятимуть.awareness_views: Зосереджується на підвищенні впізнаваності бренду, максимізуючи кількість разів, коли оголошення показується. Пріоритет — показати оголошення якомога більше разів у межах бюджету, незалежно від унікального охоплення.awareness_audience: Спрямована на підвищення впізнаваності бренду шляхом максимізації кількості унікальних людей, які бачать оголошення. Гарантує, що оголошення досягає якомога більшої кількості різних користувачів, і максимізує розмір унікальної аудиторії, а не показує його багато разів одній і тій самій аудиторії.traffic: Спрямовує людей за межі Facebook до вибраного вами місця призначення, як-от вашого вебсайту, цільової сторінки або оголошення про вакансію. Facebook оптимізує для кліків за посиланням, а не для залученості на платформі. Це єдина ціль, яка підтримує кнопкуcallToAction.
Параметри заголовка
Параметри тіла
string
обов'язково
ID рекламного облікового запису Facebook, у якому потрібно просунути допис. ID облікового запису можна отримати з
ендпоінту рекламних облікових записів.
string
обов'язково
Назва вашого оголошення (відображається у Facebook Ad Manager) у форматі
{adName} - {postId or fbPostId} - {current date}.number
обов'язково
Максимальна сума ставки в USD. Мінімальна сума ставки — $1.00.
number
обов'язково
Денний бюджет в USD. Мінімальний бюджет — $1.00.
string
обов'язково
ID соціального допису Facebook допису для просування, що дозволяє
створити оголошення з допису, створеного безпосередньо у Facebook. Це ID допису у
Facebook, а не Ayrshare. Обов’язковий, якщо
postId не задано.string
за замовчуванням:"engagement"
обов'язково
Ціль оголошення. Значення:
engagement, interactions, awareness_views,
awareness_audience та traffic. Див. деталі цілей
оголошення вище для отримання додаткової інформації.object
Цільові локації оголошення у вигляді об’єкта з масивами:
countries, regions, cities.
Об’єкт, який не вказує жодної країни, регіону чи міста, як-от {}, відхиляється з кодом 101; щоб таргетувати США, не передавайте locations.Показати child attributes
Показати child attributes
array
Список кодів країн.
{
"countries": ["US", "CA"]
}
array
Регіони потребують значення
key регіону Facebook. Див. ендпоінт регіонів для отримання додаткової інформації.{
"regions": [{ "key": "3886" }]
}
array
Міста потребують:
key (з Facebook), radius та distance_unit.
radius — це відстань навколо міста: 10–50 миль або 17–80 кілометрів.
distance_unit — це mile або kilometer.
Див. ендпоінт міст для отримання додаткової інформації.{
"cities": [
{ "key": "2420605", "radius": 25, "distance_unit": "mile" }
]
}
string
обов'язково
Ayrshare post ID допису для просування. Обов’язковий, якщо
fbPostId не задано.string
за замовчуванням:"active"
обов'язково
Статус оголошення. Значення:
active та paused.Ви можете пізніше змінити статус оголошення за допомогою ендпоінту оновлення оголошення.boolean
за замовчуванням:false
Керує спільним використанням бюджету на рівні кампанії Meta для наборів оголошень.
Meta тепер вимагає це поле для кожної кампанії, створеної без бюджету на рівні кампанії, тому Ayrshare завжди надсилає його — за замовчуванням
false для зворотної сумісності.Встановіть значення true, щоб дозволити Meta ділитися до ~20% бюджету набору оголошень з іншими наборами оголошень у тій самій кампанії для оптимізації загальної продуктивності. Див. довідник групи рекламних кампаній Meta для отримання докладнішої інформації.object
Додайте до просунутого допису кнопку заклику до дії, як-от Apply Now або Shop Now. Кнопка відкриває URL, який ви вказуєте в
link, або, з destination, натомість чат у Messenger, WhatsApp чи Instagram Direct (див. Відкриття розмови замість посилання).{
"callToAction": {
"type": "APPLY_NOW",
"link": "https://www.mysite.com/careers/social-media-manager",
"linkTitle": "Social Media Manager"
}
}
Показати child attributes
Показати child attributes
string
обов'язково
Напис на кнопці. Значення:
LEARN_MORE, APPLY_NOW, SIGN_UP, SHOP_NOW, BOOK_TRAVEL,
GET_QUOTE, CONTACT_US, DOWNLOAD та SUBSCRIBE.Регістр введення не має значення, тому apply_now, Apply_Now та APPLY_NOW приймаються однаково.
З destination натомість використовуйте кнопку для повідомлень: MESSAGE_PAGE, WHATSAPP_MESSAGE або
INSTAGRAM_MESSAGE.string
Місце призначення, яке відкриває кнопка. Має бути абсолютним
http або https URL. Відносні шляхи,
посилання mailto: та некоректні URL відхиляються. Обов’язковий, якщо не задано destination.string
Необов’язковий заголовок, що відображається разом із кнопкою.
string
Відкрити чат замість посилання:
messenger, whatsapp або instagramDm. Лише у вкладеній формі. Див.
Відкриття розмови замість посилання.callToAction, що відкриває посилання, підтримується лише з ціллю оголошення traffic. Кнопка з destination натомість використовує engagement або interactions, як описано в розділі Відкриття розмови замість посилання.
Якщо надіслати кнопку з посиланням з engagement, interactions, awareness_views або awareness_audience, повертається 400 з code: 101, де названо сумісні цілі.
Раніше це значення приймалося з будь-якою ціллю й потім мовчки ігнорувалося, у результаті чого створювалося оголошення без кнопки.callToAction.link задає URL призначення. Коли Meta відображає заклик до дії як кнопку на наявному дописі, urlTags додаються до посилання цієї кнопки. goal: "traffic" без callToAction дозволено — у такому разі створюється оголошення для трафіку без кнопки.Надісланий вами callToAction повертається у відповіді на просування з type у верхньому регістрі — див. приклад Post Boosted with a Call to Action — а також повертається на оголошенні пізніше через Просунуті оголошення.Щоб відкривати чат у Messenger, WhatsApp чи Instagram Direct замість посилання, див. Відкриття розмови замість посилання.object
Відстежуйте оголошення за допомогою Facebook Pixel.
Показати child attributes
Показати child attributes
number
обов'язково
ID Facebook Pixel для відстеження оголошення.
{
"pixelId": 1234567890
}
array
Додайте UTM-теги до URL оголошення.Наприклад, якщо посилання — це
{
"urlTags": ["utm_source=ayrshare", "utm_medium=social", "utm_campaign=ayrshare-social"]
}
https://www.mysite.com/my-post, а додані URL-теги:utm_source=ayrshare, utm_medium=social та utm_campaign=ayrshare-social.URL оголошення буде:
https://www.mysite.com/my-post?utm_source=ayrshare&utm_medium=social&utm_campaign=ayrshare-social.array
Meta вимагає, щоб рекламодавці у спеціальних категоріях реклами самостійно ідентифікували категорію своєї кампанії.Якщо ваш бізнес належить до однієї з цих категорій, ви маєте вибрати відповідну категорію під час просування допису.Підтримуються такі значення:
housing: Оголошення, що просувають або безпосередньо посилаються на можливість придбання житла або пов’язану послугу, включаючи, але не обмежуючись, оголошеннями про продаж або оренду будинку чи квартири, страхуванням домовласників, іпотечним страхуванням, іпотечними кредитами, ремонтом житла та послугами з оцінки або кредитування під заставу житла.financial_product_services: Оголошення, що просувають або безпосередньо посилаються на пропозицію фінансових продуктів і послуг, включаючи кредити.financial_products_servicesприймається як еквівалентне написання, аcreditприймається як колишня назва цієї категорії в Meta — усі три надходять до Meta як одна й та сама категорія, тому надсилайте те написання, яке у вас уже є.employment: Оголошення, що просувають або безпосередньо посилаються на можливість працевлаштування, включаючи, але не обмежуючись, роботами на неповний або повний робочий день, стажуванням або програмами професійної сертифікації. Пов’язані оголошення, які підпадають під цю категорію, включають промоакції для дошок оголошень про роботу або ярмарків, служб агрегації або оголошень, що детально описують переваги, які компанія може надати, незалежно від конкретної пропозиції роботи.none: Значення за замовчуванням. Заявляє, що кампанія не належить до жодної спеціальної категорії реклами. Явне надсилання цього значення еквівалентне повному пропускуspecialAdCategoriesі приймається для того, щоб клієнт, який завжди надсилає це поле, міг вказати «без категорії» без окремої обробки цього випадку.issues_elections_politics: Оголошення, створені кандидатом на публічну посаду, від його імені або про нього, політичним діячем, політичною партією або такі, що виступають за результат виборів на публічну посаду. Це також включає оголошення про будь-які вибори, референдум чи ініціативу голосування, включаючи виборчі кампанії «Йдіть та голосуйте». Оголошення, що регулюються як політична реклама або стосуються соціальних питань у будь-якому місці, де розміщується оголошення. Якщо вибираєте питання, вибори або політику, ви маєте вибрати країну, у якій хочете розміщувати ці оголошення. Ви повинні мати авторизацію на розміщення оголошень про соціальні питання, вибори або політику у вказаній країні.
400 та code: 101 з переліком прийнятних значень. Раніше нерозпізнане значення мовчки відкидалося, і кампанія створювалася без категорії, тож через одруківку регульоване оголошення могло працювати без заявленої категорії.Перелік прийнятних значень у цьому повідомленні про помилку подано у верхньому регістрі, як у Meta, і в ньому також названо альтернативні написання, наведені вище, тому він виглядає так: NONE, HOUSING, FINANCIAL_PRODUCTS_SERVICES, EMPLOYMENT, ISSUES_ELECTIONS_POLITICS, FINANCIAL_PRODUCT_SERVICES, CREDIT. Це ті самі п’ять категорій, що наведені тут — FINANCIAL_PRODUCT_SERVICES і CREDIT є еквівалентами financial_product_services, а не додатковими категоріями. Ідентичне повідомлення повертає ендпоінт інтересів.Повторення категорії або надсилання двох написань однієї й тієї самої категорії, як-от ["credit", "financial_product_services"], приймається і згортається до однієї категорії, перш ніж досягти Meta. Порожнє значення відхиляється з 400 та code: 101.Щоб знайти ID інтересів, які Meta дозволяє для однієї з цих категорій, передайте те саме значення до ендпоінту інтересів.Meta також потребує країн, у яких показується реклама спеціальної категорії. Ayrshare бере їх із locations: країни, які ви вказали, а також країну кожного регіону та міста. Тож просування housing, яке націлене на місто у Великій Британії, налаштовується для Великої Британії без жодних додаткових даних у вашому запиті. Без locations реклама показується в США, і кампанія налаштовується для США.Meta також встановлює мінімальний радіус навколо кожного міста для цих категорій. Місто у Великій Британії з радіусом 17 кілометрів було відхилено з помилкою #2909039, яка вимагає щонайменше 25 кілометрів (15 миль), тому використовуйте 25 кілометрів або більше.Meta вимагає, щоб рекламодавці самостійно ідентифікували категорію своєї кампанії.
Meta використовує людських рецензентів та машинне навчання для виявлення таких оголошень.
Якщо ви надішлете нам некоректну
specialAdCategory, існує ризик, що ваші оголошення буде призупинено до коригування кампанії.string
Дата й час завершення у форматі ISO 8601 (має бути щонайменше через 30 годин після початку), наприклад
2025-03-01T00:00:00Z.Якщо не задано, оголошення працюватиме нескінченно і матиме дату завершення ongoing.object
Виключіть локації за допомогою об’єкта з масивами
countries, regions та cities.Показати child attributes
Показати child attributes
array
Список кодів країн для виключення.
{
"countries": ["US", "CA"]
}
array
Регіони потребують значення
key регіону Facebook. Див. ендпоінт регіонів для отримання додаткової інформації.{
"regions": [{ "key": "3886" }]
}
array
Міста потребують:
key (з Facebook), radius та distance_unit.
radius — це відстань навколо міста: 10–50 миль або 17–80 кілометрів.
distance_unit — це mile або kilometer.
Див. ендпоінт міст для отримання додаткової інформації.{
"cities": [
{ "key": "2420605", "radius": 25, "distance_unit": "mile" }
]
}
string
за замовчуванням:"all"
Стать аудиторії. Значення:
all, male, female.array
Цільові інтереси оголошення у вигляді масиву ID інтересів
Facebook.
number
за замовчуванням:65
Максимальний вік для таргетингу оголошення (за замовчуванням: 65).
number
за замовчуванням:18
Мінімальний вік для таргетингу оголошення (за замовчуванням: 18).
string
Дата й час початку у форматі ISO 8601, наприклад
2025-03-01T00:00:00Z.Якщо не задано, оголошення розпочнеться негайно.string
Отримувач вигоди від оголошення для відповідності Закону про цифрові послуги (DSA) для країн ЄС. Має бути задано
разом із
dsaPayor, якщо надається одне з них. Зверніться до нашого посібника з
DSA для отримання додаткової інформації.string
Платник за оголошення для відповідності Закону про цифрові послуги (DSA) для країн ЄС. Має бути задано
разом із
dsaBeneficiary, якщо надається одне з них.Бюджети кампаній
Щоб тримати бюджет на рівні кампанії, а не набору оголошень, надішлітьbudget.level: "campaign" у вкладеній формі. Тоді набір оголошень не має власного бюджету. Це працює як зі щоденним бюджетом, так і з бюджетом на весь період.
{
"accountId": "123456789",
"postId": "Ut1fWU6XkqkMayHGnJZ",
"goal": "traffic",
"budget": { "amount": 50, "type": "lifetime", "level": "campaign" },
"schedule": { "start": "2026-11-01T00:00:00Z", "end": "2026-11-08T00:00:00Z" },
"platformOptions": { "facebook": { "adName": "November boost", "bidAmount": 2 } }
}
budget.level:adSet(за замовчуванням) абоcampaign. Бюджет кампанії не можна поєднувати зadSetBudgetSharingEnabled. Якщо надіслати обидва параметри, запит буде відхилено з400іcode: 101.- Для бюджету кампанії відповідь додатково містить
budgetLevel: "campaign". Для бюджету набору оголошеньbudgetLevelне повертається, тож вважайте відсутнє поле значеннямadSet. - В Історії для оголошення зі щоденним бюджетом кампанії
budgetDailyпоказує щоденний бюджет кампанії. Якщо кілька оголошень спільно використовують один бюджет кампанії, кожне показує весь бюджет кампанії, а не свою частку. Історія не показує бюджети на весь період ні для кампанії, ні для набору оголошень. Коли бюджет кампанії на весь період вичерпано, кожне оголошення в цій кампанії показуєdeliveryStatus: "COMPLETED"після наступного нічного оновлення, зокрема й оголошення, яке заплановане або перебуває на перевірці. Відхилене оголошення залишається в статусіREJECTED.
Просування в наявну кампанію або набір оголошень
За замовчуванням кожне просування створює власну кампанію, набір оголошень і оголошення. Щоб додати просування до кампанії або набору оголошень, які ви вже ведете в Meta, надішліть вкладену форму зattachTo.
attachTo.campaignId: просування створює новий набір оголошень і оголошення в цій кампанії. Надсилайтеbudget,targetingіbidAmountяк зазвичай: вони застосовуються до нового набору оголошень.attachTo.adSetId: просування створює лише оголошення в цьому наборі оголошень. Також надішлітьattachTo.campaignId, тобто кампанію, до якої належить набір оголошень. Не передавайтеbudget,targetingіplatformOptions.facebook.bidAmount: набір оголошень зберігає власні значення. Якщо надіслати будь-який із них, буде повернено400зcode: 101.
{
"accountId": "123456789",
"postId": "Ut1fWU6XkqkMayHGnJZ",
"goal": "engagement",
"attachTo": { "campaignId": "120210000000000001", "adSetId": "120210000000000002" },
"platformOptions": { "facebook": { "adName": "November boost" } }
}
- Кампанія або набір оголошень мають бути в рекламному акаунті, указаному в
accountId, і не повинні належати до просувань іншого користувача. Інакше запит повертає400. Крім того, просування Facebook не можна приєднати до кампанії, створеної просуванням Instagram, і навпаки. attachToне можна поєднувати зbudget.level: "campaign",specialAdCategoriesабоadSetBudgetSharingEnabled, які задаються для нової кампанії. Якщо надіслати їх, буде поверненоcode: 101.- Призупинення або активація просування змінює лише те, що створило просування: оголошення, а також набір оголошень, якщо його створило просування. Кампанія або набір оголошень, указані в
attachTo, зберігають власний статус. Оголошення показується лише тоді, коли кампанія та набір оголошень над ним активні. Це також стосується випадків, коли Ayrshare призупиняє ваші оголошення, наприклад під час видалення профілю. - Якщо просування не вдається, кампанія або набір оголошень, указані в
attachTo, ніколи не видаляються. - Якщо набір оголошень, до якого ви приєднуєтеся, міститься в кампанії, що має бюджет (бюджет кампанії), Історія відображає просування як будь-яке оголошення з бюджетом кампанії:
budgetDailyпоказує весь бюджет кампанії, а не частку просування, а коли бюджет кампанії на весь період вичерпано, кожне оголошення, яке Ayrshare відстежує в цій кампанії, показуєdeliveryStatus: "COMPLETED"після наступного нічного оновлення, зокрема й оголошення, яке заплановане або перебуває на перевірці. Відхилене оголошення залишається в статусіREJECTED.
Відкриття розмови замість посилання
Кнопка просування може відкривати чат із вашою компанією замість вебсторінки. Надішліть вкладену форму зcallToAction.destination і не передавайте callToAction.link.
destination | Відкриває | callToAction.type |
|---|---|---|
messenger | Messenger | MESSAGE_PAGE |
whatsapp | WHATSAPP_MESSAGE | |
instagramDm | Instagram Direct | INSTAGRAM_MESSAGE |
{
"accountId": "123456789",
"postId": "Ut1fWU6XkqkMayHGnJZ",
"goal": "engagement",
"budget": { "amount": 20 },
"callToAction": { "type": "WHATSAPP_MESSAGE", "destination": "whatsapp" },
"platformOptions": { "facebook": { "adName": "Chat with us", "bidAmount": 2 } }
}
- Використовуйте ціль оголошення
engagementабоinteractions. Тоді оголошення оптимізується для розмов: Meta показує його людям, які ймовірно почнуть чат. Інші цілі повертають400зcode: 101. callToAction.typeмає відповідати місцю призначення, як у таблиці. Регістр може бути будь-яким.callToAction.linkіcallToAction.linkTitleне можна надсилати разом ізdestination, оскільки кнопка відкриває чат, а не сторінку. Безdestinationпараметрlinkі надалі обов’язковий.- Люди надсилають повідомлення акаунту, пов’язаному з вашим профілем. Для
whatsappдо його Facebook Page у Meta має бути підключено номер WhatsApp Business. destinationне можна поєднувати зattachTo.adSetId: наявний набір оголошень зберігає своє поточне місце призначення. ЗattachTo.campaignIdкампанія повинна мати ціль MetaOUTCOME_ENGAGEMENT; інакше запит повертає400зcode: 101.- Відповідь, а також Просунуті оголошення, повертають
callToActionразом із йогоdestination.
curl -X POST https://api.ayrshare.com/api/ads/facebook/boost \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": { "countries": ["US"] },
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": [1234567890, 1234567891]
}'
curl -X POST https://api.ayrshare.com/api/ads/facebook/boost \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "Nurse Practitioner Hiring",
"status": "active",
"goal": "traffic",
"callToAction": {
"type": "APPLY_NOW",
"link": "https://example.com/careers/nurse-practitioner",
"linkTitle": "Apply today"
},
"specialAdCategories": ["employment"],
"minAge": 18,
"maxAge": 65,
"locations": { "countries": ["US"] },
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z"
}'
const API_KEY = "API_KEY";
fetch("https://api.ayrshare.com/api/ads/facebook/boost", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`
},
body: JSON.stringify({
postId: "1234567890",
accountId: "1234567890",
adName: "My Ad",
status: "active",
goal: "engagement",
minAge: 18,
maxAge: 65,
locations: { countries: ["US"] },
budget: 100,
bidAmount: 1,
startDate: "2025-03-01T00:00:00Z",
endDate: "2025-03-07T23:59:59Z",
interests: [1234567890, 1234567891]
})
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
API_KEY = "API_KEY"
url = "https://api.ayrshare.com/api/ads/facebook/boost"
payload = {
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": {"countries": ["US"]},
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": [1234567890, 1234567891]
}
response = requests.post(url, headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}, json=payload)
print(response.json())
<?php
$API_KEY = "API_KEY";
$payload = [
"postId" => "1234567890",
"accountId" => "1234567890",
"adName" => "My Ad",
"status" => "active",
"goal" => "engagement",
"minAge" => 18,
"maxAge" => 65,
"locations" => ["countries" => ["US"]],
"budget" => 100,
"bidAmount" => 1,
"startDate" => "2025-03-01T00:00:00Z",
"endDate" => "2025-03-07T23:59:59Z",
"interests" => [1234567890, 1234567891]
];
$ch = curl_init("https://api.ayrshare.com/api/ads/facebook/boost");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Authorization: Bearer " . $API_KEY
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
print_r($result);
curl_close($ch);
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string API_KEY = "API_KEY";
var payload = new
{
postId = "1234567890",
accountId = "1234567890",
adName = "My Ad",
status = "active",
goal = "engagement",
minAge = 18,
maxAge = 65,
locations = new { countries = new[] { "US" } },
budget = 100,
bidAmount = 1,
startDate = "2025-03-01T00:00:00Z",
endDate = "2025-03-07T23:59:59Z",
interests = new[] { 1234567890, 1234567891 }
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", API_KEY);
var content = new StringContent(
JsonSerializer.Serialize(payload),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://api.ayrshare.com/api/ads/facebook/boost", content);
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
apiKey := "API_KEY"
payload := map[string]interface{}{
"postId": "1234567890",
"accountId": "1234567890",
"adName": "My Ad",
"status": "active",
"goal": "engagement",
"minAge": 18,
"maxAge": 65,
"locations": map[string]interface{}{"countries": []string{"US"}},
"budget": 100,
"bidAmount": 1,
"startDate": "2025-03-01T00:00:00Z",
"endDate": "2025-03-07T23:59:59Z",
"interests": []int{1234567890, 1234567891},
}
jsonData, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error marshaling JSON:", err)
return
}
req, err := http.NewRequest("POST", "https://api.ayrshare.com/api/ads/facebook/boost", bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+apiKey)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
public class BoostPost {
public static void main(String[] args) {
String API_KEY = "API_KEY";
String url = "https://api.ayrshare.com/api/ads/facebook/boost";
Map<String, Object> payload = new HashMap<>();
payload.put("postId", "1234567890");
payload.put("accountId", "1234567890");
payload.put("adName", "My Ad");
payload.put("status", "active");
payload.put("goal", "engagement");
payload.put("minAge", 18);
payload.put("maxAge", 65);
Map<String, Object> locations = new HashMap<>();
locations.put("countries", Arrays.asList("US"));
payload.put("locations", locations);
payload.put("budget", 100);
payload.put("bidAmount", 1);
payload.put("startDate", "2025-03-01T00:00:00Z");
payload.put("endDate", "2025-03-07T23:59:59Z");
payload.put("interests", Arrays.asList(1234567890, 1234567891));
try {
ObjectMapper objectMapper = new ObjectMapper();
String requestBody = objectMapper.writeValueAsString(payload);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
require 'net/http'
require 'uri'
require 'json'
API_KEY = "API_KEY"
uri = URI.parse("https://api.ayrshare.com/api/ads/facebook/boost")
payload = {
postId: "1234567890",
accountId: "1234567890",
adName: "My Ad",
status: "active",
goal: "engagement",
minAge: 18,
maxAge: 65,
locations: { countries: ["US"] },
budget: 100,
bidAmount: 1,
startDate: "2025-03-01T00:00:00Z",
endDate: "2025-03-07T23:59:59Z",
interests: [1234567890, 1234567891]
}
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer #{API_KEY}"
request.body = payload.to_json
response = http.request(request)
puts response.body
{
"status": "success",
"adId": "120217670757750410",
"adName": "API Post - DE6gpw8kxlonHy2b7Lo - 2025-03-26T23:42:43",
"adStatus": "active",
"bidAmount": 10,
"budget": 100,
"endDate": "2026-03-28T22:30:00Z",
"goal": {
"title": "Get More Engagement",
"description": "This goal seeks to increase engagement...",
"type": "engagement"
},
"interests": [
"6003195554098"
],
"locations": { "countries": ["US"] },
"maxAge": 65,
"minAge": 18,
"postId": "DE6gpw8kxlonHy2b7Lo",
"startDate": "2026-03-26T22:30:00Z"
}
{
"status": "success",
"adId": "120217670757750411",
"adName": "Nurse Practitioner Hiring - DE6gpw8kxlonHy2b7Lo - 2025-03-26T23:42:43",
"adStatus": "active",
"bidAmount": 1,
"budget": 100,
"callToAction": {
"type": "APPLY_NOW",
"link": "https://example.com/careers/nurse-practitioner",
"linkTitle": "Apply today"
},
"endDate": "2025-03-07T23:59:59Z",
"goal": {
"title": "Drive Traffic",
"description": "Sends people from the boosted post to a destination off Facebook...",
"type": "traffic"
},
"locations": { "countries": ["US"] },
"maxAge": 65,
"minAge": 18,
"postId": "DE6gpw8kxlonHy2b7Lo",
"startDate": "2025-03-01T00:00:00Z"
}
{
"action": "boost post",
"status": "error",
"code": 369,
"message": "Unable to boost post. Please try again or contact us if the issue persists.",
"details": "The accountId likely does not exist. Please check the accountId and try again."
}
{
"action": "request",
"status": "error",
"code": 101,
"message": "Missing or incorrect parameters. Please verify with the docs. https://www.ayrshare.com/docs/apis",
"details": "Missing required fields: budget"
}