Ads · Product Catalogs
Adds a product to a catalog. Works with Meta Ads.
https://api.pozy.ai/v1/ads/catalogs/{catalogId}/productsRequest
Send your API key as Authorization: Bearer pz_live_.... Read-only keys cannot call it. Keys with the ads resource group disabled get 403 resource_group_disabled. Authentication
Path parameters
| Name | Type | Notes |
|---|---|---|
catalogIdrequired | string |
Request body
application/json, required
accountIdstringrequiredcatalogAccountIdstringproductobjectrequired31 child fields
retailerIdstringrequiredUp to 100 characters.
namestringrequiredUp to 200 characters.
descriptionstringUp to 9999 characters.
urlstring (URL)requiredimageUrlstring (URL)requiredadditionalImageUrlsarray of string (URL)Up to 20 items.
pricenumberrequiredcurrencystringrequiredsalePricenumbersalePriceStartDatestringsalePriceEndDatestringavailabilitystringOne of
in stock,out of stock,preorder,available for order,discontinued,pending.conditionstringOne of
new,refurbished,used.brandstringUp to 100 characters.
categorystringUp to 250 characters.
googleProductCategorystringUp to 250 characters.
productTypestringUp to 750 characters.
gtinstringUp to 50 characters.
mpnstringUp to 100 characters.
inventoryintegerAt least 0.
visibilitystringOne of
published,staging.colorstringUp to 200 characters.
sizestringUp to 200 characters.
genderstringOne of
female,male,unisex.materialstringUp to 200 characters.
patternstringUp to 100 characters.
customLabel0stringUp to 100 characters.
customLabel1stringUp to 100 characters.
customLabel2stringUp to 100 characters.
customLabel3stringUp to 100 characters.
customLabel4stringUp to 100 characters.
Example
curl -X POST "https://api.pozy.ai/v1/ads/catalogs/6f2f2ffcf4ace3659342c4c2/products" \
-H "Authorization: Bearer $POZY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "696e0b682d0a31188e7a2ba9",
"product": {
"retailerId": "62ed28b157a658d89f9173aa",
"name": "Acme",
"url": "https://pozy.ai/media/example-1.jpg",
"imageUrl": "https://pozy.ai/media/example-1.jpg",
"price": 12.5,
"currency": "USD"
}
}'const res = await fetch("https://api.pozy.ai/v1/ads/catalogs/6f2f2ffcf4ace3659342c4c2/products", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.POZY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
accountId: "696e0b682d0a31188e7a2ba9",
product: {
retailerId: "62ed28b157a658d89f9173aa",
name: "Acme",
url: "https://pozy.ai/media/example-1.jpg",
imageUrl: "https://pozy.ai/media/example-1.jpg",
price: 12.5,
currency: "USD"
}
}),
});
const data = await res.json();
if (!res.ok) throw new Error(data?.error ?? `Request failed with status ${res.status}`);
console.log(data);import os
import requests
resp = requests.post(
"https://api.pozy.ai/v1/ads/catalogs/6f2f2ffcf4ace3659342c4c2/products",
headers={"Authorization": f"Bearer {os.environ['POZY_API_KEY']}"},
json={
"accountId": "696e0b682d0a31188e7a2ba9",
"product": {
"retailerId": "62ed28b157a658d89f9173aa",
"name": "Acme",
"url": "https://pozy.ai/media/example-1.jpg",
"imageUrl": "https://pozy.ai/media/example-1.jpg",
"price": 12.5,
"currency": "USD",
},
},
timeout=30,
)
resp.raise_for_status()
print(resp.json())Response
201 on success
productobject26 child fields
idstringretailerIdstringCan be null.
namestringdescriptionstringCan be null.
urlstringCan be null.
imageUrlstringCan be null.
additionalImageUrlsarray of stringpricestringCan be null.
salePricestringCan be null.
currencystringCan be null.
availabilitystringCan be null.
conditionstringCan be null.
brandstringCan be null.
categorystringCan be null.
productTypestringCan be null.
gtinstringCan be null.
inventoryintegerCan be null.
visibilitystringCan be null.
colorstringCan be null.
sizestringCan be null.
genderstringCan be null.
materialstringCan be null.
patternstringCan be null.
customLabelsarray of stringEach item: can be null.
reviewStatusstringCan be null.
reviewRejectionReasonsarray of string
{
"product": {
"id": "6bfebd43ddc270f6d2c56fc5",
"retailerId": "62ed28b157a658d89f9173aa",
"name": "Acme",
"description": "A short description",
"url": "https://pozy.ai/media/example-1.jpg",
"imageUrl": "https://pozy.ai/media/example-1.jpg",
"additionalImageUrls": [
"https://pozy.ai/media/example-1.jpg"
],
"price": "string",
"salePrice": "string",
"currency": "USD",
"availability": "string",
"condition": "string",
"brand": "string",
"category": "string",
"productType": "string",
"gtin": "string",
"inventory": 1,
"visibility": "string",
"color": "string",
"size": "string",
"gender": "string",
"material": "string",
"pattern": "string",
"customLabels": [
"string"
],
"reviewStatus": "active",
"reviewRejectionReasons": [
"string"
]
}
}Errors
Errors use one shape: { error, type, code, param?, details? }. The ones you are most likely to see here:
| 400 | invalid_request_error | A parameter or body field is missing or invalid. param names it. |
| 401 | authentication_error | The API key is missing, revoked or expired. |
| 403 | permission_error | The key is read-only, scoped to other profiles, or has this resource group disabled. |
| 404 | not_found | Nothing with that id exists in your workspace. |
| 429 | rate_limit_error | Too many requests this minute. Wait for Retry-After seconds. |
Every code is listed in Errors.