curl --request POST \
--url https://api.wppfy.com/business/catalog/save \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"name": "<string>",
"id": "<string>",
"description": "<string>",
"currency": "BRL",
"price": "19990",
"sale_price": "<string>",
"url": "<string>",
"retailer_id": "<string>",
"is_hidden": false,
"image_urls": [
"<string>"
],
"video_urls": [
"<string>"
],
"image_data": "<string>",
"image_url": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"width": 512,
"height": 512
}
'import requests
url = "https://api.wppfy.com/business/catalog/save"
payload = {
"name": "<string>",
"id": "<string>",
"description": "<string>",
"currency": "BRL",
"price": "19990",
"sale_price": "<string>",
"url": "<string>",
"retailer_id": "<string>",
"is_hidden": False,
"image_urls": ["<string>"],
"video_urls": ["<string>"],
"image_data": "<string>",
"image_url": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"width": 512,
"height": 512
}
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
id: '<string>',
description: '<string>',
currency: 'BRL',
price: '19990',
sale_price: '<string>',
url: '<string>',
retailer_id: '<string>',
is_hidden: false,
image_urls: ['<string>'],
video_urls: ['<string>'],
image_data: '<string>',
image_url: '<string>',
compliance_category: '<string>',
compliance_info: {
country_code_origin: '<string>',
importer_name: '<string>',
importer_address: {
street1: '<string>',
street2: '<string>',
city: '<string>',
region: '<string>',
postal_code: '<string>',
country_code: '<string>'
}
},
width: 512,
height: 512
})
};
fetch('https://api.wppfy.com/business/catalog/save', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wppfy.com/business/catalog/save",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'id' => '<string>',
'description' => '<string>',
'currency' => 'BRL',
'price' => '19990',
'sale_price' => '<string>',
'url' => '<string>',
'retailer_id' => '<string>',
'is_hidden' => false,
'image_urls' => [
'<string>'
],
'video_urls' => [
'<string>'
],
'image_data' => '<string>',
'image_url' => '<string>',
'compliance_category' => '<string>',
'compliance_info' => [
'country_code_origin' => '<string>',
'importer_name' => '<string>',
'importer_address' => [
'street1' => '<string>',
'street2' => '<string>',
'city' => '<string>',
'region' => '<string>',
'postal_code' => '<string>',
'country_code' => '<string>'
]
],
'width' => 512,
'height' => 512
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wppfy.com/business/catalog/save"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"currency\": \"BRL\",\n \"price\": \"19990\",\n \"sale_price\": \"<string>\",\n \"url\": \"<string>\",\n \"retailer_id\": \"<string>\",\n \"is_hidden\": false,\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"image_data\": \"<string>\",\n \"image_url\": \"<string>\",\n \"compliance_category\": \"<string>\",\n \"compliance_info\": {\n \"country_code_origin\": \"<string>\",\n \"importer_name\": \"<string>\",\n \"importer_address\": {\n \"street1\": \"<string>\",\n \"street2\": \"<string>\",\n \"city\": \"<string>\",\n \"region\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country_code\": \"<string>\"\n }\n },\n \"width\": 512,\n \"height\": 512\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.wppfy.com/business/catalog/save")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"currency\": \"BRL\",\n \"price\": \"19990\",\n \"sale_price\": \"<string>\",\n \"url\": \"<string>\",\n \"retailer_id\": \"<string>\",\n \"is_hidden\": false,\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"image_data\": \"<string>\",\n \"image_url\": \"<string>\",\n \"compliance_category\": \"<string>\",\n \"compliance_info\": {\n \"country_code_origin\": \"<string>\",\n \"importer_name\": \"<string>\",\n \"importer_address\": {\n \"street1\": \"<string>\",\n \"street2\": \"<string>\",\n \"city\": \"<string>\",\n \"region\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country_code\": \"<string>\"\n }\n },\n \"width\": 512,\n \"height\": 512\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wppfy.com/business/catalog/save")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"currency\": \"BRL\",\n \"price\": \"19990\",\n \"sale_price\": \"<string>\",\n \"url\": \"<string>\",\n \"retailer_id\": \"<string>\",\n \"is_hidden\": false,\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"image_data\": \"<string>\",\n \"image_url\": \"<string>\",\n \"compliance_category\": \"<string>\",\n \"compliance_info\": {\n \"country_code_origin\": \"<string>\",\n \"importer_name\": \"<string>\",\n \"importer_address\": {\n \"street1\": \"<string>\",\n \"street2\": \"<string>\",\n \"city\": \"<string>\",\n \"region\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country_code\": \"<string>\"\n }\n },\n \"width\": 512,\n \"height\": 512\n}"
response = http.request(request)
puts response.read_body{
"response": {
"id": "<string>",
"name": "<string>",
"price": "<string>",
"currency": "<string>",
"is_hidden": true,
"is_sanctioned": true,
"media": {
"images": [
{
"id": "<string>",
"original_image_url": "<string>",
"request_image_url": "<string>"
}
],
"videos": [
{
"id": "<string>",
"original_video_url": "<string>",
"thumbnail_url": "<string>"
}
]
},
"status_info": {
"status": "<string>",
"can_appeal": true
},
"retailer_id": "<string>",
"belongs_to": "<string>",
"description": "<string>",
"url": "<string>",
"shimmed_url": "<string>",
"max_available": 123,
"product_availability": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"sale_price": {
"price": "<string>",
"start_date": "<string>",
"end_date": "<string>"
},
"variant_info": {
"listing_details": {
"description": "<string>",
"lowest_price": "<string>",
"multi_price": "<string>"
},
"availability": {},
"types": [
{}
],
"variant_properties": [
{
"name": "<string>",
"value": "<string>"
}
]
}
}
}{
"response": {
"id": "<string>",
"name": "<string>",
"price": "<string>",
"currency": "<string>",
"is_hidden": true,
"is_sanctioned": true,
"media": {
"images": [
{
"id": "<string>",
"original_image_url": "<string>",
"request_image_url": "<string>"
}
],
"videos": [
{
"id": "<string>",
"original_video_url": "<string>",
"thumbnail_url": "<string>"
}
]
},
"status_info": {
"status": "<string>",
"can_appeal": true
},
"retailer_id": "<string>",
"belongs_to": "<string>",
"description": "<string>",
"url": "<string>",
"shimmed_url": "<string>",
"max_available": 123,
"product_availability": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"sale_price": {
"price": "<string>",
"start_date": "<string>",
"end_date": "<string>"
},
"variant_info": {
"listing_details": {
"description": "<string>",
"lowest_price": "<string>",
"multi_price": "<string>"
},
"availability": {},
"types": [
{}
],
"variant_properties": [
{
"name": "<string>",
"value": "<string>"
}
]
}
}
}Criar ou editar um produto do catálogo
Cria um produto quando id não é informado ou atualiza o produto indicado.
Os preços são strings de inteiros em milésimos da moeda (por exemplo,
19990 = R$ 19,99). currency é obrigatória quando há price, e
currency ou sale_price sem price retornam 400. Envie image_data
em base64 ou Data URL, ou uma image_url pública HTTPS para uma imagem
nova. Para manter imagens já cadastradas, envie suas URLs em
image_urls. Uma dessas três fontes de imagem é obrigatória.
A edição substitui o produto inteiro: o que não for enviado fica vazio.
Para alterar só um campo, leia o produto em /business/catalog/info e
reenvie os demais: description, price, currency, sale_price,
url, retailer_id, image_urls, video_urls, compliance_category
e compliance_info. Na leitura, a promoção vem em sale_price.price;
no envio, sale_price é só a string do valor. Só is_hidden mantém o
valor atual quando omitido.
curl --request POST \
--url https://api.wppfy.com/business/catalog/save \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"name": "<string>",
"id": "<string>",
"description": "<string>",
"currency": "BRL",
"price": "19990",
"sale_price": "<string>",
"url": "<string>",
"retailer_id": "<string>",
"is_hidden": false,
"image_urls": [
"<string>"
],
"video_urls": [
"<string>"
],
"image_data": "<string>",
"image_url": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"width": 512,
"height": 512
}
'import requests
url = "https://api.wppfy.com/business/catalog/save"
payload = {
"name": "<string>",
"id": "<string>",
"description": "<string>",
"currency": "BRL",
"price": "19990",
"sale_price": "<string>",
"url": "<string>",
"retailer_id": "<string>",
"is_hidden": False,
"image_urls": ["<string>"],
"video_urls": ["<string>"],
"image_data": "<string>",
"image_url": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"width": 512,
"height": 512
}
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
id: '<string>',
description: '<string>',
currency: 'BRL',
price: '19990',
sale_price: '<string>',
url: '<string>',
retailer_id: '<string>',
is_hidden: false,
image_urls: ['<string>'],
video_urls: ['<string>'],
image_data: '<string>',
image_url: '<string>',
compliance_category: '<string>',
compliance_info: {
country_code_origin: '<string>',
importer_name: '<string>',
importer_address: {
street1: '<string>',
street2: '<string>',
city: '<string>',
region: '<string>',
postal_code: '<string>',
country_code: '<string>'
}
},
width: 512,
height: 512
})
};
fetch('https://api.wppfy.com/business/catalog/save', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wppfy.com/business/catalog/save",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'id' => '<string>',
'description' => '<string>',
'currency' => 'BRL',
'price' => '19990',
'sale_price' => '<string>',
'url' => '<string>',
'retailer_id' => '<string>',
'is_hidden' => false,
'image_urls' => [
'<string>'
],
'video_urls' => [
'<string>'
],
'image_data' => '<string>',
'image_url' => '<string>',
'compliance_category' => '<string>',
'compliance_info' => [
'country_code_origin' => '<string>',
'importer_name' => '<string>',
'importer_address' => [
'street1' => '<string>',
'street2' => '<string>',
'city' => '<string>',
'region' => '<string>',
'postal_code' => '<string>',
'country_code' => '<string>'
]
],
'width' => 512,
'height' => 512
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wppfy.com/business/catalog/save"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"currency\": \"BRL\",\n \"price\": \"19990\",\n \"sale_price\": \"<string>\",\n \"url\": \"<string>\",\n \"retailer_id\": \"<string>\",\n \"is_hidden\": false,\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"image_data\": \"<string>\",\n \"image_url\": \"<string>\",\n \"compliance_category\": \"<string>\",\n \"compliance_info\": {\n \"country_code_origin\": \"<string>\",\n \"importer_name\": \"<string>\",\n \"importer_address\": {\n \"street1\": \"<string>\",\n \"street2\": \"<string>\",\n \"city\": \"<string>\",\n \"region\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country_code\": \"<string>\"\n }\n },\n \"width\": 512,\n \"height\": 512\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.wppfy.com/business/catalog/save")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"currency\": \"BRL\",\n \"price\": \"19990\",\n \"sale_price\": \"<string>\",\n \"url\": \"<string>\",\n \"retailer_id\": \"<string>\",\n \"is_hidden\": false,\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"image_data\": \"<string>\",\n \"image_url\": \"<string>\",\n \"compliance_category\": \"<string>\",\n \"compliance_info\": {\n \"country_code_origin\": \"<string>\",\n \"importer_name\": \"<string>\",\n \"importer_address\": {\n \"street1\": \"<string>\",\n \"street2\": \"<string>\",\n \"city\": \"<string>\",\n \"region\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country_code\": \"<string>\"\n }\n },\n \"width\": 512,\n \"height\": 512\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wppfy.com/business/catalog/save")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"currency\": \"BRL\",\n \"price\": \"19990\",\n \"sale_price\": \"<string>\",\n \"url\": \"<string>\",\n \"retailer_id\": \"<string>\",\n \"is_hidden\": false,\n \"image_urls\": [\n \"<string>\"\n ],\n \"video_urls\": [\n \"<string>\"\n ],\n \"image_data\": \"<string>\",\n \"image_url\": \"<string>\",\n \"compliance_category\": \"<string>\",\n \"compliance_info\": {\n \"country_code_origin\": \"<string>\",\n \"importer_name\": \"<string>\",\n \"importer_address\": {\n \"street1\": \"<string>\",\n \"street2\": \"<string>\",\n \"city\": \"<string>\",\n \"region\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country_code\": \"<string>\"\n }\n },\n \"width\": 512,\n \"height\": 512\n}"
response = http.request(request)
puts response.read_body{
"response": {
"id": "<string>",
"name": "<string>",
"price": "<string>",
"currency": "<string>",
"is_hidden": true,
"is_sanctioned": true,
"media": {
"images": [
{
"id": "<string>",
"original_image_url": "<string>",
"request_image_url": "<string>"
}
],
"videos": [
{
"id": "<string>",
"original_video_url": "<string>",
"thumbnail_url": "<string>"
}
]
},
"status_info": {
"status": "<string>",
"can_appeal": true
},
"retailer_id": "<string>",
"belongs_to": "<string>",
"description": "<string>",
"url": "<string>",
"shimmed_url": "<string>",
"max_available": 123,
"product_availability": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"sale_price": {
"price": "<string>",
"start_date": "<string>",
"end_date": "<string>"
},
"variant_info": {
"listing_details": {
"description": "<string>",
"lowest_price": "<string>",
"multi_price": "<string>"
},
"availability": {},
"types": [
{}
],
"variant_properties": [
{
"name": "<string>",
"value": "<string>"
}
]
}
}
}{
"response": {
"id": "<string>",
"name": "<string>",
"price": "<string>",
"currency": "<string>",
"is_hidden": true,
"is_sanctioned": true,
"media": {
"images": [
{
"id": "<string>",
"original_image_url": "<string>",
"request_image_url": "<string>"
}
],
"videos": [
{
"id": "<string>",
"original_video_url": "<string>",
"thumbnail_url": "<string>"
}
]
},
"status_info": {
"status": "<string>",
"can_appeal": true
},
"retailer_id": "<string>",
"belongs_to": "<string>",
"description": "<string>",
"url": "<string>",
"shimmed_url": "<string>",
"max_available": 123,
"product_availability": "<string>",
"compliance_category": "<string>",
"compliance_info": {
"country_code_origin": "<string>",
"importer_name": "<string>",
"importer_address": {
"street1": "<string>",
"street2": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country_code": "<string>"
}
},
"sale_price": {
"price": "<string>",
"start_date": "<string>",
"end_date": "<string>"
},
"variant_info": {
"listing_details": {
"description": "<string>",
"lowest_price": "<string>",
"multi_price": "<string>"
},
"availability": {},
"types": [
{}
],
"variant_properties": [
{
"name": "<string>",
"value": "<string>"
}
]
}
}
}Autorizações
Corpo
256Omitir para criar; informar para editar
4096^[A-Z]{3}$"BRL"
Preço em milésimos da moeda
^\d{1,18}$"19990"
Preço promocional em milésimos da moeda
^\d{1,18}$2048256URLs HTTPS de mídia retornadas pelo WhatsApp/Meta; não aceita hosts arbitrários.
1 - 10 elementsURLs de vídeos já associados ao produto
10Imagem JPEG ou PNG em base64 ou Data URL, com até 16 MB.
URL pública HTTPS de uma imagem JPEG ou PNG, com até 16 MB
2048128Show child attributes
Show child attributes
1 <= x <= 10241 <= x <= 1024Resposta
Produto atualizado com sucesso
Show child attributes
Show child attributes
