cURL
curl --request POST \
--url https://api.cakto.com.br/public_api/products/{id}/duplicate/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cakto.com.br/public_api/products/{id}/duplicate/"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cakto.com.br/public_api/products/{id}/duplicate/', 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.cakto.com.br/public_api/products/{id}/duplicate/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.cakto.com.br/public_api/products/{id}/duplicate/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.post("https://api.cakto.com.br/public_api/products/{id}/duplicate/")
.header("Authorization", "Bearer <token>")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.cakto.com.br/public_api/products/{id}/duplicate/");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"id": "cd287b31-d4b7-4e94-858a-66e05ce2f4a2",
"member_area_copy": {
"status": "copying",
"member_area_id": "5f0c2d1e-8a7b-4c3d-9e2f-1a2b3c4d5e6f"
},
"name": "Product Name Example",
"image": "https://example-image-url.com/image.png",
"description": "Description example",
"price": 15,
"type": "unique",
"contentDeliveries": [
"cakto_v3",
"telegram",
"discord"
],
"emailAccessLink": null,
"salesPage": "https://example-sales-page.com.br/product-page",
"status": "active",
"paymentMethods": [
"applepay",
"boleto",
"credit_card",
"googlepay",
"pix"
],
"category": {
"id": "0673d296-1802-45e0-bc93-112f7514dddb",
"name": "Animais e Plantas"
}
}{
"detail": "As credenciais de autenticação não foram fornecidas."
}{
"detail": "A área de membros ainda está sendo copiada.",
"code": "member_area_copying"
}Produtos
Duplicar Produto
Cria uma cópia de um produto existente
POST
/
public_api
/
products
/
{id}
/
duplicate
/
cURL
curl --request POST \
--url https://api.cakto.com.br/public_api/products/{id}/duplicate/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cakto.com.br/public_api/products/{id}/duplicate/"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cakto.com.br/public_api/products/{id}/duplicate/', 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.cakto.com.br/public_api/products/{id}/duplicate/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.cakto.com.br/public_api/products/{id}/duplicate/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.post("https://api.cakto.com.br/public_api/products/{id}/duplicate/")
.header("Authorization", "Bearer <token>")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.cakto.com.br/public_api/products/{id}/duplicate/");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
{
"id": "cd287b31-d4b7-4e94-858a-66e05ce2f4a2",
"member_area_copy": {
"status": "copying",
"member_area_id": "5f0c2d1e-8a7b-4c3d-9e2f-1a2b3c4d5e6f"
},
"name": "Product Name Example",
"image": "https://example-image-url.com/image.png",
"description": "Description example",
"price": 15,
"type": "unique",
"contentDeliveries": [
"cakto_v3",
"telegram",
"discord"
],
"emailAccessLink": null,
"salesPage": "https://example-sales-page.com.br/product-page",
"status": "active",
"paymentMethods": [
"applepay",
"boleto",
"credit_card",
"googlepay",
"pix"
],
"category": {
"id": "0673d296-1802-45e0-bc93-112f7514dddb",
"name": "Animais e Plantas"
}
}{
"detail": "As credenciais de autenticação não foram fornecidas."
}{
"detail": "A área de membros ainda está sendo copiada.",
"code": "member_area_copying"
}Escopo
write products
Notas
- O produto duplicado recebe um novo Id único
- As relações são duplicadas com novos IDs: ofertas, checkouts, links, order bumps, entregas de conteúdo, métodos de pagamento e pixels de rastreamento
- Pixels vinculados a afiliados não são copiados
- O nome recebe o sufixo
- Cópia(ex.:Curso de Fotografia - Cópia) - O produto duplicado herda o
statusdo produto original — se o original estiver inativo, a cópia também estará - As métricas de vendas da cópia começam zeradas
- A cópia nasce na moeda do original. Duplicar produto em moeda diferente de
BRLsegue a mesma regra da criação: sem a venda em moeda estrangeira habilitada na conta, a resposta é400no campocurrency - Você pode modificar qualquer aspecto do produto duplicado após a criação
- Se o produto tiver área de membros, ela também é copiada: configurações, imagens, cursos, módulos, aulas, materiais, certificados e planos de acesso. Alunos, matrículas e progresso não são copiados, e o endereço (
slug) da área nasce vazio - O campo
member_area_copydiz como ficou a área:{"status": "done", "member_area_id": "..."}quando ela já está completa na resposta,{"status": "copying", ...}quando a área é grande e o conteúdo é copiado em segundo plano (o dono do produto recebe e-mail e notificação no painel quando terminar), enullquando o produto não tem área de membros - Enquanto a área de membros do produto de origem ainda está sendo copiada de outra duplicação, a resposta é
409com{"detail": "A área de membros ainda está sendo copiada.", "code": "member_area_copying"}e nada é criado. Tente de novo depois que a cópia terminar
Fluxo recomendado:
- Duplique o produto usando este endpoint
- Imediatamente atualize o nome e outros detalhes específicos
- Verifique e ajuste ofertas, preços e configurações conforme necessário
- Teste o checkout antes de promover o produto
Authorizations
Token de autenticação do tipo Bearer {access_token}, onde {access_token} é o token obtido no fluxo de autenticação.
Path Parameters
Response
Corpo da resposta status 200
Nome do produto
Maximum string length:
255Imagem do produto
Descrição do produto
Preço do produto
Id dos métodos de entrega de conteúdo disponíveis
Id dos métodos de pagamento disponíveis
Categoria do produto
Show child attributes
Show child attributes
Como ficou a cópia da área de membros; null quando o produto não tem área de membros
Show child attributes
Show child attributes
Identificador único do produto
Maximum string length:
255Moeda do produto
BRL- RealEUR- EuroMXN- Peso MexicanoPEN- Sol PeruanoUSD- DólarCLP- Peso ChilenoCOP- Peso ColombianoARS- Peso ArgentinoBOB- BolivianoUYU- Peso Uruguayo
Available options:
BRL, EUR, MXN, PEN, USD, CLP, COP, ARS, BOB, UYU Tipo de venda do produto, ex.: venda única, assinatura...
unique- Pagamento únicosubscription- Assinatura recorrente
Available options:
unique, subscription Link a ser enviado por e-mail para acesso ao conteúdo após a compra
Maximum string length:
2048Link da página de vendas do produto
Maximum string length:
2048Status atual do produto
active- Ativowaiting_config- Aguardando Configuraçãoblocked- Bloqueadodeleted- Deletado
Available options:
active, waiting_config, blocked, deleted Was this page helpful?