MENU navbar-image

Introduction

Integre seu sistema aos bots de venda de acesso a grupos do Telegram.

API REST para integrar seu sistema ao IncrívelBot: crie bots, planos de acesso, gere cobranças Pix, conceda/estenda/remova acessos e receba eventos por webhook.

Permissões

Tokens têm permissões de leitura (tenant:read / platform:read) e escrita (tenant:write / platform:write). Requisições GET exigem leitura ou escrita; as demais exigem escrita.

Valores e datas

Valores monetários em centavos (R$ 29,90 = 2990). Datas em ISO 8601 (fuso America/Sao_Paulo).

Erros

401 token ausente/inválido · 402 assinatura da criadora suspensa · 403 sem permissão ou limite do plano · 404 não encontrado (inclui registros de outra conta) · 422 validação (errors por campo) · 429 limite de requisições (120/min por token; 30 cobranças/min).

Webhooks de saída

Configure a URL em PATCH /api/v1/me (integration_webhook_url) e gere o segredo em POST /api/v1/me/webhook-secret. Eventos: payment.paid, membership.activated, membership.granted, membership.expired.

Cada entrega é um POST JSON {"id","event","created_at","data"} com os cabeçalhos X-IncrivelBot-Event, X-IncrivelBot-Delivery, X-IncrivelBot-Timestamp e X-IncrivelBot-Signature. Valide: X-IncrivelBot-Signature == "sha256=" + HMAC_SHA256("{timestamp}.{corpo bruto}", segredo) e rejeite timestamps com mais de 5 minutos. Responda 2xx; falhas são reenviadas com backoff (até 6 tentativas). Use id para idempotência.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {SEU_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Gere o token no painel: criadora em Configurações → API e integrações; plataforma em Sistema → API da plataforma.

Conta

Dados da criadora dona do token, limites do plano e configurações de recebimento e integração.

Minha conta

requires authentication

Retorna a criadora, o plano da plataforma, o uso atual e as configurações. Funciona mesmo com a assinatura suspensa.

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/me" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/me"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/me';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/me'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "9f1c...",
        "name": "Ana VIP",
        "slug": "anavip",
        "status": "active",
        "can_operate": true,
        "payout_mode": "own",
        "usage": {
            "bots": 1,
            "active_groups": 1,
            "active_members": 42
        }
    }
}
 

Request   

GET api/v1/me

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Atualizar configurações

requires authentication

Modo de recebimento, gateway padrão, Wallet ID do Asaas, contato de suporte e URL de webhooks de integração.

Example request:
curl --request PATCH \
    "https://bot.incrivel.tech/api/v1/me" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"payout_mode\": \"own\",
    \"default_gateway\": \"asaas\",
    \"asaas_wallet_id\": \"0c4f1e8a-1f0b-4b8e-9c0e-2f3d4a5b6c7d\",
    \"support_contact\": \"@meusuporte\",
    \"integration_webhook_url\": \"https:\\/\\/meusistema.com.br\\/webhooks\\/incrivelbot\"
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/me"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "payout_mode": "own",
    "default_gateway": "asaas",
    "asaas_wallet_id": "0c4f1e8a-1f0b-4b8e-9c0e-2f3d4a5b6c7d",
    "support_contact": "@meusuporte",
    "integration_webhook_url": "https:\/\/meusistema.com.br\/webhooks\/incrivelbot"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/me';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'payout_mode' => 'own',
            'default_gateway' => 'asaas',
            'asaas_wallet_id' => '0c4f1e8a-1f0b-4b8e-9c0e-2f3d4a5b6c7d',
            'support_contact' => '@meusuporte',
            'integration_webhook_url' => 'https://meusistema.com.br/webhooks/incrivelbot',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/me'
payload = {
    "payout_mode": "own",
    "default_gateway": "asaas",
    "asaas_wallet_id": "0c4f1e8a-1f0b-4b8e-9c0e-2f3d4a5b6c7d",
    "support_contact": "@meusuporte",
    "integration_webhook_url": "https:\/\/meusistema.com.br\/webhooks\/incrivelbot"
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "payout_mode": "own",
        "default_gateway": "asaas",
        "integration_webhook_url": "https://meusistema.com.br/webhooks/incrivelbot"
    }
}
 

Request   

PATCH api/v1/me

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

payout_mode   string  optional    

"own" (sua conta de gateway) ou "platform" (conta da plataforma com split). Example: own

Must be one of:
  • own
  • platform
default_gateway   string  optional    

asaas, mercadopago ou infopago. Example: asaas

Must be one of:
  • asaas
  • mercadopago
  • infopago
asaas_wallet_id   string  optional    

Wallet ID do Asaas, obrigatório no modo platform com Asaas. Must match the regex /^[0-9a-fA-F-]{20,64}$/. Example: 0c4f1e8a-1f0b-4b8e-9c0e-2f3d4a5b6c7d

support_contact   string  optional    

Contato exibido aos assinantes. O campo value não pode ser superior a 120 caracteres. Example: @meusuporte

integration_webhook_url   string  optional    

URL HTTPS que recebe os eventos (payment.paid, membership.*). null desativa. O campo value não pode ser superior a 2048 caracteres. Example: https://meusistema.com.br/webhooks/incrivelbot

Gerar novo segredo de webhook

requires authentication

Gera (ou rotaciona) o segredo usado para assinar os webhooks de integração. O valor é exibido somente nesta resposta. Verifique cada evento com: sha256= + HMAC-SHA256({X-IncrivelBot-Timestamp}.{corpo}, segredo) == X-IncrivelBot-Signature.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/me/webhook-secret" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/me/webhook-secret"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/me/webhook-secret';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/me/webhook-secret'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "secret": "whsec_6Jx..."
}
 

Request   

POST api/v1/me/webhook-secret

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Bots

Bots do Telegram conectados à conta (token do @BotFather). O webhook é registrado automaticamente.

Listar bots

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/bots" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/bots"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/bots';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/bots'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": 1,
            "name": "Bot VIP",
            "username": "meu_vip_bot",
            "status": "active",
            "link": "https://t.me/meu_vip_bot"
        }
    ]
}
 

Request   

GET api/v1/bots

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Conectar bot

requires authentication

Valida o token no Telegram, registra o webhook com segredo próprio e os comandos do bot. Respeita o limite de bots do plano.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/bots" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"token\": \"123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsawQ\",
    \"name\": \"Bot VIP\",
    \"welcome_message\": \"Oi! Aqui você assina meu grupo VIP 💖\"
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/bots"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "token": "123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsawQ",
    "name": "Bot VIP",
    "welcome_message": "Oi! Aqui você assina meu grupo VIP 💖"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/bots';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'token' => '123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsawQ',
            'name' => 'Bot VIP',
            'welcome_message' => 'Oi! Aqui você assina meu grupo VIP 💖',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/bots'
payload = {
    "token": "123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsawQ",
    "name": "Bot VIP",
    "welcome_message": "Oi! Aqui você assina meu grupo VIP 💖"
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": {
        "id": 1,
        "name": "Bot VIP",
        "username": "meu_vip_bot",
        "status": "active"
    }
}
 

Example response (403):


{
    "message": "Seu plano atingiu o limite de bots."
}
 

Request   

POST api/v1/bots

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

token   string     

Token do bot gerado pelo @BotFather. Must match the regex /^\d{5,16}:[A-Za-z0-9_-]{30,}$/. O campo value não pode ser superior a 100 caracteres. Example: 123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsawQ

name   string  optional    

Nome interno. Se vazio, usa o nome do bot no Telegram. O campo value não pode ser superior a 80 caracteres. Example: Bot VIP

welcome_message   string  optional    

Mensagem enviada no /start. O campo value não pode ser superior a 1000 caracteres. Example: Oi! Aqui você assina meu grupo VIP 💖

Ver bot

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/bots/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/bots/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/bots/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/bots/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Bot VIP",
        "username": "meu_vip_bot",
        "status": "active",
        "groups_count": 2
    }
}
 

Request   

GET api/v1/bots/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the bot. Example: architecto

bot   integer     

ID do bot. Example: 1

Atualizar bot

requires authentication

Example request:
curl --request PATCH \
    "https://bot.incrivel.tech/api/v1/bots/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Bot VIP\",
    \"welcome_message\": \"Bem-vindo(a)!\"
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/bots/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Bot VIP",
    "welcome_message": "Bem-vindo(a)!"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/bots/architecto';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Bot VIP',
            'welcome_message' => 'Bem-vindo(a)!',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/bots/architecto'
payload = {
    "name": "Bot VIP",
    "welcome_message": "Bem-vindo(a)!"
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Bot VIP",
        "welcome_message": "Bem-vindo(a)!"
    }
}
 

Request   

PATCH api/v1/bots/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the bot. Example: architecto

bot   integer     

ID do bot. Example: 1

Body Parameters

name   string  optional    

Nome interno do bot. O campo value deve ter pelo menos 1 caracteres. O campo value não pode ser superior a 80 caracteres. Example: Bot VIP

welcome_message   string  optional    

Mensagem enviada no /start. O campo value não pode ser superior a 1000 caracteres. Example: Bem-vindo(a)!

Reconectar webhook

requires authentication

Registra novamente o webhook no Telegram (use após trocar de domínio ou se o status estiver "error").

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/bots/1/reconnect" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/bots/1/reconnect"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/bots/1/reconnect';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/bots/1/reconnect'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 1,
        "status": "active",
        "last_error": null
    }
}
 

Request   

POST api/v1/bots/{bot}/reconnect

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

bot   integer     

ID do bot. Example: 1

Remover bot

requires authentication

Remove o webhook no Telegram e apaga o bot com seus grupos, planos e assinantes.

Example request:
curl --request DELETE \
    "https://bot.incrivel.tech/api/v1/bots/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/bots/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/bots/architecto';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/bots/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (204):

Empty response
 

Request   

DELETE api/v1/bots/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the bot. Example: architecto

bot   integer     

ID do bot. Example: 1

Grupos e canais

Grupos são cadastrados automaticamente quando o bot vira administrador no Telegram. Pela API você ativa as vendas e ajusta as opções.

Listar grupos

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/groups?bot_id=1&is_active=1" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/groups"
);

const params = {
    "bot_id": "1",
    "is_active": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/groups';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'bot_id' => '1',
            'is_active' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/groups'
params = {
  'bot_id': '1',
  'is_active': '1',
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": 1,
            "bot_id": 1,
            "chat_id": -1001234567890,
            "title": "VIP da Ana",
            "is_active": true,
            "ready_to_sell": true,
            "sales_link": "https://t.me/meu_vip_bot?start=g1"
        }
    ]
}
 

Request   

GET api/v1/groups

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

bot_id   integer  optional    

Filtra por bot. Example: 1

is_active   boolean  optional    

Filtra por vendas ativas. Example: true

Ver grupo

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/groups/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/groups/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/groups/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/groups/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 1,
        "title": "VIP da Ana",
        "permissions": {
            "is_bot_admin": true,
            "can_invite_users": true,
            "can_restrict_members": true
        }
    }
}
 

Request   

GET api/v1/groups/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the group. Example: architecto

group   integer     

ID do grupo. Example: 1

Atualizar grupo

requires authentication

Para ativar as vendas (is_active: true) o bot precisa ser administrador com permissão de convidar e banir, e o plano da plataforma precisa ter vaga para mais um grupo ativo.

Example request:
curl --request PATCH \
    "https://bot.incrivel.tech/api/v1/groups/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"description\": \"Conteúdo exclusivo diário.\",
    \"adult_content\": true,
    \"is_active\": true
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/groups/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "description": "Conteúdo exclusivo diário.",
    "adult_content": true,
    "is_active": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/groups/architecto';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'description' => 'Conteúdo exclusivo diário.',
            'adult_content' => true,
            'is_active' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/groups/architecto'
payload = {
    "description": "Conteúdo exclusivo diário.",
    "adult_content": true,
    "is_active": true
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": 1,
        "is_active": true,
        "adult_content": true
    }
}
 

Request   

PATCH api/v1/groups/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the group. Example: architecto

group   integer     

ID do grupo. Example: 1

Body Parameters

description   string  optional    

Descrição exibida na vitrine. O campo value não pode ser superior a 1000 caracteres. Example: Conteúdo exclusivo diário.

adult_content   boolean  optional    

Exige confirmação de maioridade antes da compra. Example: true

is_active   boolean  optional    

Liga/desliga as vendas. Exige o bot como admin com permissão de convidar e banir. Example: true

Verificar permissões do bot

requires authentication

Consulta o Telegram e atualiza se o bot é administrador e quais permissões tem no grupo.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/groups/1/check-permissions" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/groups/1/check-permissions"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/groups/1/check-permissions';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/groups/1/check-permissions'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 1,
        "permissions": {
            "is_bot_admin": true,
            "can_invite_users": true,
            "can_restrict_members": true,
            "checked_at": "2026-10-18T12:00:00-03:00"
        }
    }
}
 

Request   

POST api/v1/groups/{group}/check-permissions

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group   integer     

ID do grupo. Example: 1

Planos de acesso

Planos vendidos pelo bot (preço, duração, lembretes de renovação e carência).

Listar planos

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/plans?telegram_group_id=1" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/plans"
);

const params = {
    "telegram_group_id": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/plans';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'telegram_group_id' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/plans'
params = {
  'telegram_group_id': '1',
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": 3,
            "telegram_group_id": 1,
            "name": "VIP Mensal",
            "price_cents": 2990,
            "price": "R$ 29,90",
            "duration_days": 30,
            "reminder_days": [
                3,
                1,
                0
            ],
            "grace_hours": 0,
            "is_active": true,
            "purchase_link": "https://t.me/meu_vip_bot?start=p3"
        }
    ]
}
 

Request   

GET api/v1/plans

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

telegram_group_id   integer  optional    

Filtra por grupo. Example: 1

Criar plano

requires authentication

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/plans" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"telegram_group_id\": 1,
    \"name\": \"VIP Mensal\",
    \"description\": \"Acesso por 30 dias\",
    \"price_cents\": 2990,
    \"duration_days\": 30,
    \"reminder_days\": [
        3
    ],
    \"grace_hours\": 12,
    \"is_active\": true,
    \"sort_order\": 0
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/plans"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "telegram_group_id": 1,
    "name": "VIP Mensal",
    "description": "Acesso por 30 dias",
    "price_cents": 2990,
    "duration_days": 30,
    "reminder_days": [
        3
    ],
    "grace_hours": 12,
    "is_active": true,
    "sort_order": 0
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/plans';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'telegram_group_id' => 1,
            'name' => 'VIP Mensal',
            'description' => 'Acesso por 30 dias',
            'price_cents' => 2990,
            'duration_days' => 30,
            'reminder_days' => [3],
            'grace_hours' => 12,
            'is_active' => true,
            'sort_order' => 0,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/plans'
payload = {
    "telegram_group_id": 1,
    "name": "VIP Mensal",
    "description": "Acesso por 30 dias",
    "price_cents": 2990,
    "duration_days": 30,
    "reminder_days": [
        3
    ],
    "grace_hours": 12,
    "is_active": true,
    "sort_order": 0
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": {
        "id": 3,
        "telegram_group_id": 1,
        "name": "VIP Mensal",
        "price_cents": 2990,
        "price": "R$ 29,90",
        "duration_days": 30,
        "reminder_days": [
            3,
            1,
            0
        ],
        "grace_hours": 0,
        "is_active": true,
        "purchase_link": "https://t.me/meu_vip_bot?start=p3"
    }
}
 

Request   

POST api/v1/plans

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

telegram_group_id   integer     

ID do grupo/canal (GET /groups). Must match an existing stored value. Example: 1

name   string     

Nome exibido no bot. O campo value deve ter pelo menos 2 caracteres. O campo value não pode ser superior a 60 caracteres. Example: VIP Mensal

description   string  optional    

Descrição opcional. O campo value não pode ser superior a 500 caracteres. Example: Acesso por 30 dias

price_cents   integer     

Preço em centavos (R$ 29,90 = 2990). Mínimo R$ 1,00. O campo value deve ser pelo menos 100. O campo value não pode ser superior a 100000000. Example: 2990

duration_days   integer     

Dias de acesso por pagamento. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 3650. Example: 30

reminder_days   integer[]  optional    

Dia de antecedência. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 30.

grace_hours   integer  optional    

Horas de tolerância após vencer antes de remover. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 168. Example: 12

is_active   boolean  optional    

Disponível para venda. Example: true

sort_order   integer  optional    

Ordem de exibição. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 65000. Example: 0

Ver plano

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/plans/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/plans/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/plans/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/plans/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 3,
        "telegram_group_id": 1,
        "name": "VIP Mensal",
        "price_cents": 2990,
        "price": "R$ 29,90",
        "duration_days": 30,
        "reminder_days": [
            3,
            1,
            0
        ],
        "grace_hours": 0,
        "is_active": true,
        "purchase_link": "https://t.me/meu_vip_bot?start=p3"
    }
}
 

Request   

GET api/v1/plans/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the plan. Example: architecto

plan   integer     

ID do plano. Example: 3

Atualizar plano

requires authentication

Envie apenas os campos que deseja alterar. Assinantes ativos mantêm o vencimento atual.

Example request:
curl --request PATCH \
    "https://bot.incrivel.tech/api/v1/plans/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"telegram_group_id\": 1,
    \"name\": \"VIP Mensal\",
    \"description\": \"Acesso por 30 dias\",
    \"price_cents\": 2990,
    \"duration_days\": 30,
    \"reminder_days\": [
        3
    ],
    \"grace_hours\": 12,
    \"is_active\": true,
    \"sort_order\": 0
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/plans/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "telegram_group_id": 1,
    "name": "VIP Mensal",
    "description": "Acesso por 30 dias",
    "price_cents": 2990,
    "duration_days": 30,
    "reminder_days": [
        3
    ],
    "grace_hours": 12,
    "is_active": true,
    "sort_order": 0
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/plans/architecto';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'telegram_group_id' => 1,
            'name' => 'VIP Mensal',
            'description' => 'Acesso por 30 dias',
            'price_cents' => 2990,
            'duration_days' => 30,
            'reminder_days' => [3],
            'grace_hours' => 12,
            'is_active' => true,
            'sort_order' => 0,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/plans/architecto'
payload = {
    "telegram_group_id": 1,
    "name": "VIP Mensal",
    "description": "Acesso por 30 dias",
    "price_cents": 2990,
    "duration_days": 30,
    "reminder_days": [
        3
    ],
    "grace_hours": 12,
    "is_active": true,
    "sort_order": 0
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": 3,
        "telegram_group_id": 1,
        "name": "VIP Mensal",
        "price_cents": 2990,
        "price": "R$ 29,90",
        "duration_days": 30,
        "reminder_days": [
            3,
            1,
            0
        ],
        "grace_hours": 0,
        "is_active": true,
        "purchase_link": "https://t.me/meu_vip_bot?start=p3"
    }
}
 

Request   

PATCH api/v1/plans/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the plan. Example: architecto

plan   integer     

ID do plano. Example: 3

Body Parameters

telegram_group_id   integer  optional    

ID do grupo/canal (GET /groups). Must match an existing stored value. Example: 1

name   string  optional    

Nome exibido no bot. O campo value deve ter pelo menos 2 caracteres. O campo value não pode ser superior a 60 caracteres. Example: VIP Mensal

description   string  optional    

Descrição opcional. O campo value não pode ser superior a 500 caracteres. Example: Acesso por 30 dias

price_cents   integer  optional    

Preço em centavos (R$ 29,90 = 2990). Mínimo R$ 1,00. O campo value deve ser pelo menos 100. O campo value não pode ser superior a 100000000. Example: 2990

duration_days   integer  optional    

Dias de acesso por pagamento. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 3650. Example: 30

reminder_days   integer[]  optional    

Dia de antecedência. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 30.

grace_hours   integer  optional    

Horas de tolerância após vencer antes de remover. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 168. Example: 12

is_active   boolean  optional    

Disponível para venda. Example: true

sort_order   integer  optional    

Ordem de exibição. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 65000. Example: 0

Remover plano

requires authentication

Exclusão lógica: o plano some do bot, mas o histórico de pagamentos é preservado.

Example request:
curl --request DELETE \
    "https://bot.incrivel.tech/api/v1/plans/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/plans/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/plans/architecto';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/plans/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (204):

Empty response
 

Request   

DELETE api/v1/plans/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the plan. Example: architecto

plan   integer     

ID do plano. Example: 3

Assinantes

Pessoas que iniciaram conversa com o bot. O CPF nunca é exposto completo.

Listar assinantes

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/subscribers?search=ana&telegram_user_id=123456789&per_page=25" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/subscribers"
);

const params = {
    "search": "ana",
    "telegram_user_id": "123456789",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/subscribers';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'search' => 'ana',
            'telegram_user_id' => '123456789',
            'per_page' => '25',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/subscribers'
params = {
  'search': 'ana',
  'telegram_user_id': '123456789',
  'per_page': '25',
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": 10,
            "telegram_user_id": 123456789,
            "username": "ana",
            "full_name": "Ana Maria Silva",
            "email": "ana@example.com",
            "document_masked": "***.982.***-25"
        }
    ],
    "links": [],
    "meta": {
        "current_page": 1,
        "per_page": 25,
        "total": 1
    }
}
 

Request   

GET api/v1/subscribers

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

search   string  optional    

Busca por nome, @usuário ou e-mail. Example: ana

telegram_user_id   integer  optional    

Busca exata pelo ID do Telegram. Example: 123456789

per_page   integer  optional    

Itens por página (máx. 100). Example: 25

Ver assinante

requires authentication

Inclui as permanências (acessos) do assinante em cada grupo.

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/subscribers/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/subscribers/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/subscribers/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/subscribers/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 10,
        "full_name": "Ana Maria Silva",
        "memberships": [
            {
                "id": 5,
                "telegram_group_id": 1,
                "status": "active",
                "expires_at": "2026-11-18T12:00:00-03:00"
            }
        ]
    }
}
 

Request   

GET api/v1/subscribers/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the subscriber. Example: architecto

subscriber   integer     

ID do assinante. Example: 10

Conceder acesso (cortesia)

requires authentication

Libera ou estende o acesso sem cobrança e envia o convite pelo bot.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/subscribers/10/grant" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"telegram_group_id\": 1,
    \"days\": 30
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/subscribers/10/grant"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "telegram_group_id": 1,
    "days": 30
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/subscribers/10/grant';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'telegram_group_id' => 1,
            'days' => 30,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/subscribers/10/grant'
payload = {
    "telegram_group_id": 1,
    "days": 30
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": 5,
        "subscriber_id": 10,
        "telegram_group_id": 1,
        "status": "active",
        "expires_at": "2026-11-18T12:00:00-03:00"
    }
}
 

Request   

POST api/v1/subscribers/{subscriber}/grant

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

subscriber   integer     

ID do assinante. Example: 10

Body Parameters

telegram_group_id   integer     

Grupo ao qual conceder acesso (obrigatório ao conceder pelo assinante). Must match an existing stored value. Example: 1

days   integer     

Dias de acesso a adicionar (somados ao vencimento atual se ainda ativo). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 3650. Example: 30

Membros

Permanências dos assinantes nos grupos: vencimentos, extensões, convites e remoções.

Listar membros

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/memberships?status=active&telegram_group_id=1&subscriber_id=10&expiring_in_days=7&per_page=25" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"cancelled\",
    \"expiring_in_days\": 1
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/memberships"
);

const params = {
    "status": "active",
    "telegram_group_id": "1",
    "subscriber_id": "10",
    "expiring_in_days": "7",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": "cancelled",
    "expiring_in_days": 1
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/memberships';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'status' => 'active',
            'telegram_group_id' => '1',
            'subscriber_id' => '10',
            'expiring_in_days' => '7',
            'per_page' => '25',
        ],
        'json' => [
            'status' => 'cancelled',
            'expiring_in_days' => 1,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/memberships'
payload = {
    "status": "cancelled",
    "expiring_in_days": 1
}
params = {
  'status': 'active',
  'telegram_group_id': '1',
  'subscriber_id': '10',
  'expiring_in_days': '7',
  'per_page': '25',
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": 5,
            "subscriber_id": 10,
            "telegram_group_id": 1,
            "access_plan_id": 3,
            "status": "active",
            "is_active": true,
            "expires_at": "2026-11-18T12:00:00-03:00",
            "joined_at": "2026-10-18T12:05:00-03:00"
        }
    ],
    "links": [],
    "meta": {
        "current_page": 1,
        "per_page": 25,
        "total": 1
    }
}
 

Request   

GET api/v1/memberships

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

pending, active, expired ou cancelled. Example: active

telegram_group_id   integer  optional    

Filtra por grupo. Example: 1

subscriber_id   integer  optional    

Filtra por assinante. Example: 10

expiring_in_days   integer  optional    

Somente ativos que vencem nos próximos N dias. Example: 7

per_page   integer  optional    

Itens por página (máx. 100). Example: 25

Body Parameters

status   string  optional    

Example: cancelled

Must be one of:
  • pending
  • active
  • expired
  • cancelled
expiring_in_days   integer  optional    

O campo value deve ser pelo menos 0. O campo value não pode ser superior a 365. Example: 1

Ver membro

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/memberships/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/memberships/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/memberships/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/memberships/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 5,
        "subscriber_id": 10,
        "telegram_group_id": 1,
        "access_plan_id": 3,
        "status": "active",
        "is_active": true,
        "expires_at": "2026-11-18T12:00:00-03:00",
        "joined_at": "2026-10-18T12:05:00-03:00"
    }
}
 

Request   

GET api/v1/memberships/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the membership. Example: architecto

membership   integer     

ID da permanência. Example: 5

Estender acesso (cortesia)

requires authentication

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/memberships/5/extend" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"telegram_group_id\": 1,
    \"days\": 30
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/memberships/5/extend"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "telegram_group_id": 1,
    "days": 30
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/memberships/5/extend';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'telegram_group_id' => 1,
            'days' => 30,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/memberships/5/extend'
payload = {
    "telegram_group_id": 1,
    "days": 30
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": 5,
        "subscriber_id": 10,
        "telegram_group_id": 1,
        "access_plan_id": 3,
        "status": "active",
        "is_active": true,
        "expires_at": "2026-11-18T12:00:00-03:00",
        "joined_at": "2026-10-18T12:05:00-03:00"
    }
}
 

Request   

POST api/v1/memberships/{membership}/extend

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

membership   integer     

ID da permanência. Example: 5

Body Parameters

telegram_group_id   integer     

Grupo ao qual conceder acesso (obrigatório ao conceder pelo assinante). Must match an existing stored value. Example: 1

days   integer     

Dias de acesso a adicionar (somados ao vencimento atual se ainda ativo). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 3650. Example: 30

Reenviar convite

requires authentication

Gera um novo link pessoal (com pedido de entrada) e envia ao assinante pelo bot.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/memberships/5/resend-invite" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/memberships/5/resend-invite"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/memberships/5/resend-invite';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/memberships/5/resend-invite'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 5,
        "subscriber_id": 10,
        "telegram_group_id": 1,
        "access_plan_id": 3,
        "status": "active",
        "is_active": true,
        "expires_at": "2026-11-18T12:00:00-03:00",
        "joined_at": "2026-10-18T12:05:00-03:00"
    }
}
 

Request   

POST api/v1/memberships/{membership}/resend-invite

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

membership   integer     

ID da permanência. Example: 5

Remover do grupo agora

requires authentication

Remove o assinante do grupo imediatamente e encerra a permanência (status "expired").

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/memberships/5/remove" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/memberships/5/remove"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/memberships/5/remove';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/memberships/5/remove'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 5,
        "status": "expired",
        "removed_at": "2026-10-18T13:00:00-03:00"
    }
}
 

Request   

POST api/v1/memberships/{membership}/remove

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

membership   integer     

ID da permanência. Example: 5

Pagamentos

Cobranças Pix de planos de acesso. A confirmação vem do gateway (webhook) e libera o acesso automaticamente.

Listar pagamentos

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/payments?status=paid&subscriber_id=10&from=2026-10-01&per_page=25" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"pending\",
    \"from\": \"2026-10-19\"
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/payments"
);

const params = {
    "status": "paid",
    "subscriber_id": "10",
    "from": "2026-10-01",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": "pending",
    "from": "2026-10-19"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/payments';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'status' => 'paid',
            'subscriber_id' => '10',
            'from' => '2026-10-01',
            'per_page' => '25',
        ],
        'json' => [
            'status' => 'pending',
            'from' => '2026-10-19',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/payments'
payload = {
    "status": "pending",
    "from": "2026-10-19"
}
params = {
  'status': 'paid',
  'subscriber_id': '10',
  'from': '2026-10-01',
  'per_page': '25',
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "0f8d6c3a-5b1e-4f7a-9a0b-1c2d3e4f5a6b",
            "purpose": "membership",
            "status": "pending",
            "provider": "asaas",
            "amount_cents": 2990,
            "platform_fee_cents": 0,
            "net_amount_cents": 2990,
            "subscriber_id": 10,
            "access_plan_id": 3,
            "pix": {
                "copy_paste": "00020126580014br.gov.bcb.pix...",
                "qr_code_base64": "iVBORw0KGgo...",
                "checkout_url": "https://www.asaas.com/i/abc123"
            },
            "expires_at": "2026-10-19T12:00:00-03:00",
            "paid_at": null
        }
    ],
    "links": [],
    "meta": {
        "current_page": 1,
        "per_page": 25,
        "total": 1
    }
}
 

Request   

GET api/v1/payments

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

pending, paid, failed, expired, refunded ou cancelled. Example: paid

subscriber_id   integer  optional    

Filtra por assinante. Example: 10

from   string  optional    

Criados a partir da data (YYYY-MM-DD). Example: 2026-10-01

per_page   integer  optional    

Itens por página (máx. 100). Example: 25

Body Parameters

status   string  optional    

Example: pending

Must be one of:
  • pending
  • paid
  • failed
  • expired
  • refunded
  • cancelled
from   string  optional    

Must be a valid date in the format Y-m-d. Example: 2026-10-19

Gerar cobrança Pix

requires authentication

Cria (ou reaproveita, se ainda válida) a cobrança Pix de um plano para um assinante. O pagador precisa ter nome, CPF e e-mail — envie-os aqui se ainda não foram coletados pelo bot.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/payments" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"subscriber_id\": 10,
    \"access_plan_id\": 3,
    \"full_name\": \"Ana Maria Silva\",
    \"document\": \"529.982.247-25\",
    \"email\": \"ana@example.com\",
    \"send_to_telegram\": true
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/payments"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "subscriber_id": 10,
    "access_plan_id": 3,
    "full_name": "Ana Maria Silva",
    "document": "529.982.247-25",
    "email": "ana@example.com",
    "send_to_telegram": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/payments';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'subscriber_id' => 10,
            'access_plan_id' => 3,
            'full_name' => 'Ana Maria Silva',
            'document' => '529.982.247-25',
            'email' => 'ana@example.com',
            'send_to_telegram' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/payments'
payload = {
    "subscriber_id": 10,
    "access_plan_id": 3,
    "full_name": "Ana Maria Silva",
    "document": "529.982.247-25",
    "email": "ana@example.com",
    "send_to_telegram": true
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": {
        "id": "0f8d6c3a-5b1e-4f7a-9a0b-1c2d3e4f5a6b",
        "purpose": "membership",
        "status": "pending",
        "provider": "asaas",
        "amount_cents": 2990,
        "platform_fee_cents": 0,
        "net_amount_cents": 2990,
        "subscriber_id": 10,
        "access_plan_id": 3,
        "pix": {
            "copy_paste": "00020126580014br.gov.bcb.pix...",
            "qr_code_base64": "iVBORw0KGgo...",
            "checkout_url": "https://www.asaas.com/i/abc123"
        },
        "expires_at": "2026-10-19T12:00:00-03:00",
        "paid_at": null
    }
}
 

Example response (422):


{
    "message": "Gateway da criadora não configurado."
}
 

Request   

POST api/v1/payments

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

subscriber_id   integer     

Assinante (precisa ter iniciado conversa com o bot). Must match an existing stored value. Example: 10

access_plan_id   integer     

Plano de acesso a cobrar. Must match an existing stored value. Example: 3

full_name   string  optional    

Atualiza o nome do pagador antes de cobrar. O campo value deve ter pelo menos 5 caracteres. O campo value não pode ser superior a 120 caracteres. Example: Ana Maria Silva

document   string  optional    

Atualiza o CPF/CNPJ do pagador. Example: 529.982.247-25

email   string  optional    

Atualiza o e-mail do pagador. O campo value deve ser um endereço de e-mail válido. O campo value não pode ser superior a 191 caracteres. Example: ana@example.com

send_to_telegram   boolean  optional    

Também envia o Pix ao assinante pelo bot. Example: true

Ver pagamento

requires authentication

Consulta o gateway quando a cobrança ainda está pendente, para refletir o status mais recente.

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/payments/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/payments/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/payments/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/payments/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "0f8d6c3a-5b1e-4f7a-9a0b-1c2d3e4f5a6b",
        "purpose": "membership",
        "status": "pending",
        "provider": "asaas",
        "amount_cents": 2990,
        "platform_fee_cents": 0,
        "net_amount_cents": 2990,
        "subscriber_id": 10,
        "access_plan_id": 3,
        "pix": {
            "copy_paste": "00020126580014br.gov.bcb.pix...",
            "qr_code_base64": "iVBORw0KGgo...",
            "checkout_url": "https://www.asaas.com/i/abc123"
        },
        "expires_at": "2026-10-19T12:00:00-03:00",
        "paid_at": null
    }
}
 

Request   

GET api/v1/payments/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the payment. Example: architecto

payment   string     

UUID do pagamento. Example: 0f8d6c3a-5b1e-4f7a-9a0b-1c2d3e4f5a6b

Gateways de pagamento

Chaves próprias de Asaas, Mercado Pago e Infopago (modo "own"). Os segredos são gravados criptografados e nunca são devolvidos.

Listar gateways

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/gateways" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/gateways"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/gateways';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/gateways'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "7b2f...",
            "provider": "asaas",
            "label": "Conta principal",
            "sandbox": true,
            "is_active": true,
            "configured_fields": {
                "api_key": true
            },
            "webhook": {
                "url": "https://bot.incrivel.tech/webhooks/asaas/7b2f...",
                "token": "cole-este-token-no-asaas"
            }
        }
    ]
}
 

Request   

GET api/v1/gateways

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Cadastrar gateway

requires authentication

Depois de cadastrar, configure no painel do gateway a URL de webhook retornada (e, no Asaas, o token).

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/gateways" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"provider\": \"asaas\",
    \"label\": \"Conta principal\",
    \"sandbox\": true,
    \"is_active\": true,
    \"credentials\": {
        \"api_key\": \"$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA\",
        \"access_token\": \"APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000\",
        \"webhook_secret\": \"segredo-do-webhook\",
        \"base_url\": \"https:\\/\\/api.infopago.com.br\"
    }
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/gateways"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "provider": "asaas",
    "label": "Conta principal",
    "sandbox": true,
    "is_active": true,
    "credentials": {
        "api_key": "$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA",
        "access_token": "APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000",
        "webhook_secret": "segredo-do-webhook",
        "base_url": "https:\/\/api.infopago.com.br"
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/gateways';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'provider' => 'asaas',
            'label' => 'Conta principal',
            'sandbox' => true,
            'is_active' => true,
            'credentials' => ['api_key' => '$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA', 'access_token' => 'APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000', 'webhook_secret' => 'segredo-do-webhook', 'base_url' => 'https://api.infopago.com.br'],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/gateways'
payload = {
    "provider": "asaas",
    "label": "Conta principal",
    "sandbox": true,
    "is_active": true,
    "credentials": {
        "api_key": "$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA",
        "access_token": "APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000",
        "webhook_secret": "segredo-do-webhook",
        "base_url": "https:\/\/api.infopago.com.br"
    }
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": {
        "id": "7b2f...",
        "provider": "asaas",
        "label": "Conta principal",
        "sandbox": true,
        "is_active": true,
        "configured_fields": {
            "api_key": true
        },
        "webhook": {
            "url": "https://bot.incrivel.tech/webhooks/asaas/7b2f...",
            "token": "cole-este-token-no-asaas"
        }
    }
}
 

Request   

POST api/v1/gateways

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

provider   string     

asaas, mercadopago ou infopago. Não pode ser alterado depois. Example: asaas

Must be one of:
  • asaas
  • mercadopago
  • infopago
label   string  optional    

Apelido. O campo value não pode ser superior a 80 caracteres. Example: Conta principal

sandbox   boolean  optional    

Usa o ambiente de testes do gateway. Example: true

is_active   boolean  optional    

Ativo para novas cobranças. Example: true

credentials   object     

Segredos do gateway. Campos omitidos ou vazios mantêm o valor atual. Nunca são devolvidos.

api_key   string  optional    

Asaas/Infopago: chave de API. O campo value não pode ser superior a 500 caracteres. Example: $aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA

access_token   string  optional    

Mercado Pago: Access Token. O campo value não pode ser superior a 500 caracteres. Example: APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000

webhook_secret   string  optional    

Mercado Pago/Infopago: segredo de assinatura dos webhooks. O campo value não pode ser superior a 500 caracteres. Example: segredo-do-webhook

base_url   string  optional    

Infopago: URL base da API (HTTPS). Must be a valid URL. Must start with one of https:// O campo value não pode ser superior a 255 caracteres. Example: https://api.infopago.com.br

Ver gateway

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "7b2f...",
        "provider": "asaas",
        "label": "Conta principal",
        "sandbox": true,
        "is_active": true,
        "configured_fields": {
            "api_key": true
        },
        "webhook": {
            "url": "https://bot.incrivel.tech/webhooks/asaas/7b2f...",
            "token": "cole-este-token-no-asaas"
        }
    }
}
 

Request   

GET api/v1/gateways/{credential}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

credential   string     

ID (UUID) do gateway. Example: 7b2f0000-0000-0000-0000-000000000000

Atualizar gateway

requires authentication

Campos de credentials omitidos ou vazios mantêm o valor atual.

Example request:
curl --request PATCH \
    "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"provider\": \"asaas\",
    \"label\": \"Conta principal\",
    \"sandbox\": true,
    \"is_active\": true,
    \"credentials\": {
        \"api_key\": \"$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA\",
        \"access_token\": \"APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000\",
        \"webhook_secret\": \"segredo-do-webhook\",
        \"base_url\": \"https:\\/\\/api.infopago.com.br\"
    }
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "provider": "asaas",
    "label": "Conta principal",
    "sandbox": true,
    "is_active": true,
    "credentials": {
        "api_key": "$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA",
        "access_token": "APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000",
        "webhook_secret": "segredo-do-webhook",
        "base_url": "https:\/\/api.infopago.com.br"
    }
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'provider' => 'asaas',
            'label' => 'Conta principal',
            'sandbox' => true,
            'is_active' => true,
            'credentials' => ['api_key' => '$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA', 'access_token' => 'APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000', 'webhook_secret' => 'segredo-do-webhook', 'base_url' => 'https://api.infopago.com.br'],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000'
payload = {
    "provider": "asaas",
    "label": "Conta principal",
    "sandbox": true,
    "is_active": true,
    "credentials": {
        "api_key": "$aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA",
        "access_token": "APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000",
        "webhook_secret": "segredo-do-webhook",
        "base_url": "https:\/\/api.infopago.com.br"
    }
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "7b2f...",
        "provider": "asaas",
        "label": "Conta principal",
        "sandbox": true,
        "is_active": true,
        "configured_fields": {
            "api_key": true
        },
        "webhook": {
            "url": "https://bot.incrivel.tech/webhooks/asaas/7b2f...",
            "token": "cole-este-token-no-asaas"
        }
    }
}
 

Request   

PATCH api/v1/gateways/{credential}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

credential   string     

ID (UUID) do gateway. Example: 7b2f0000-0000-0000-0000-000000000000

Body Parameters

provider   string  optional    

asaas, mercadopago ou infopago. Não pode ser alterado depois. Example: asaas

Must be one of:
  • asaas
  • mercadopago
  • infopago
label   string  optional    

Apelido. O campo value não pode ser superior a 80 caracteres. Example: Conta principal

sandbox   boolean  optional    

Usa o ambiente de testes do gateway. Example: true

is_active   boolean  optional    

Ativo para novas cobranças. Example: true

credentials   object  optional    

Segredos do gateway. Campos omitidos ou vazios mantêm o valor atual. Nunca são devolvidos.

api_key   string  optional    

Asaas/Infopago: chave de API. O campo value não pode ser superior a 500 caracteres. Example: $aact_YTU5YTE0M2M2N2I4MTliNzk0YTI5N2U5MzdjNWZmNDQ6OjAwMDAwMDAwMDAwMDA

access_token   string  optional    

Mercado Pago: Access Token. O campo value não pode ser superior a 500 caracteres. Example: APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000

webhook_secret   string  optional    

Mercado Pago/Infopago: segredo de assinatura dos webhooks. O campo value não pode ser superior a 500 caracteres. Example: segredo-do-webhook

base_url   string  optional    

Infopago: URL base da API (HTTPS). Must be a valid URL. Must start with one of https:// O campo value não pode ser superior a 255 caracteres. Example: https://api.infopago.com.br

Testar conexão

requires authentication

Autentica no gateway com as chaves salvas.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000/test" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000/test"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000/test';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000/test'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (200):


{
    "ok": true
}
 

Request   

POST api/v1/gateways/{credential}/test

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

credential   string     

ID (UUID) do gateway. Example: 7b2f0000-0000-0000-0000-000000000000

Remover gateway

requires authentication

Example request:
curl --request DELETE \
    "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/gateways/7b2f0000-0000-0000-0000-000000000000'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (204):

Empty response
 

Request   

DELETE api/v1/gateways/{credential}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

credential   string     

ID (UUID) do gateway. Example: 7b2f0000-0000-0000-0000-000000000000

Plataforma: criadoras

Exige token da plataforma (criado no painel master). Provisione contas de criadoras a partir do seu sistema.

Listar criadoras

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/platform/tenants?status=active&search=ana&per_page=25" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"past_due\"
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/tenants"
);

const params = {
    "status": "active",
    "search": "ana",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": "past_due"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/tenants';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'status' => 'active',
            'search' => 'ana',
            'per_page' => '25',
        ],
        'json' => [
            'status' => 'past_due',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/tenants'
payload = {
    "status": "past_due"
}
params = {
  'status': 'active',
  'search': 'ana',
  'per_page': '25',
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "9f1c2d3e-0000-0000-0000-000000000000",
            "name": "Ana VIP",
            "slug": "anavip",
            "url": "https://anavip.bot.incrivel.tech/",
            "panel_url": "https://anavip.bot.incrivel.tech/app",
            "status": "trial",
            "can_operate": true,
            "payout_mode": "own",
            "plan": {
                "id": 2,
                "name": "Pro"
            }
        }
    ],
    "links": [],
    "meta": {
        "current_page": 1,
        "per_page": 25,
        "total": 1
    }
}
 

Request   

GET api/v1/platform/tenants

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

Filtra por status. Example: active

search   string  optional    

Busca por nome ou endereço. Example: ana

per_page   integer  optional    

Itens por página (máx. 100). Example: 25

Body Parameters

status   string  optional    

Example: past_due

Must be one of:
  • pending
  • trial
  • active
  • past_due
  • suspended
  • cancelled

Provisionar criadora

requires authentication

Cria a conta (com subdomínio e usuária dona). Com issue_api_token: true, devolve um token de API da criadora, exibido somente nesta resposta, para seu sistema criar bots, planos etc. em nome dela.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/platform/tenants" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"saas_plan_id\": 2,
    \"name\": \"Ana VIP\",
    \"slug\": \"anavip\",
    \"owner_name\": \"Ana Souza\",
    \"email\": \"ana@example.com\",
    \"password\": \"SenhaForte#2026\",
    \"document\": \"529.982.247-25\",
    \"phone\": \"(11) 98888-7777\",
    \"adult_content\": false,
    \"issue_api_token\": true
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/tenants"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "saas_plan_id": 2,
    "name": "Ana VIP",
    "slug": "anavip",
    "owner_name": "Ana Souza",
    "email": "ana@example.com",
    "password": "SenhaForte#2026",
    "document": "529.982.247-25",
    "phone": "(11) 98888-7777",
    "adult_content": false,
    "issue_api_token": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/tenants';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'saas_plan_id' => 2,
            'name' => 'Ana VIP',
            'slug' => 'anavip',
            'owner_name' => 'Ana Souza',
            'email' => 'ana@example.com',
            'password' => 'SenhaForte#2026',
            'document' => '529.982.247-25',
            'phone' => '(11) 98888-7777',
            'adult_content' => false,
            'issue_api_token' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/tenants'
payload = {
    "saas_plan_id": 2,
    "name": "Ana VIP",
    "slug": "anavip",
    "owner_name": "Ana Souza",
    "email": "ana@example.com",
    "password": "SenhaForte#2026",
    "document": "529.982.247-25",
    "phone": "(11) 98888-7777",
    "adult_content": false,
    "issue_api_token": true
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": {
        "id": "9f1c2d3e-0000-0000-0000-000000000000",
        "name": "Ana VIP",
        "slug": "anavip",
        "url": "https://anavip.bot.incrivel.tech/",
        "panel_url": "https://anavip.bot.incrivel.tech/app",
        "status": "trial",
        "can_operate": true,
        "payout_mode": "own",
        "plan": {
            "id": 2,
            "name": "Pro"
        }
    },
    "api_token": "ibot_12|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
 

Request   

POST api/v1/platform/tenants

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

saas_plan_id   integer     

Plano da plataforma (GET /platform/saas-plans). Must match an existing stored value. Example: 2

name   string     

Nome/marca da criadora. O campo value deve ter pelo menos 2 caracteres. O campo value não pode ser superior a 80 caracteres. Example: Ana VIP

slug   string     

Subdomínio da vitrine (letras minúsculas, números e hífen). Must match the regex /^a-z0-9?$/. O campo value deve ter pelo menos 3 caracteres. O campo value não pode ser superior a 30 caracteres. Example: anavip

owner_name   string     

Nome da responsável. O campo value deve ter pelo menos 3 caracteres. O campo value não pode ser superior a 120 caracteres. Example: Ana Souza

email   string     

E-mail de login no painel. O campo value deve ser um endereço de e-mail válido. O campo value não pode ser superior a 191 caracteres. Example: ana@example.com

password   string  optional    

Senha do painel. Se omitida, é gerada uma aleatória e a criadora usa "Esqueci minha senha". Example: SenhaForte#2026

document   string     

CPF ou CNPJ. Example: 529.982.247-25

phone   string     

Telefone/WhatsApp. Must match the regex /^[\d\s()+-]{10,20}$/. Example: (11) 98888-7777

adult_content   boolean  optional    

Vende conteúdo +18. Example: false

issue_api_token   boolean  optional    

Retorna também um token de API (leitura e escrita) da criadora para seu sistema operar a conta. Example: true

Ver criadora

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/platform/tenants/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/tenants/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/tenants/architecto';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/tenants/architecto'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "9f1c2d3e-0000-0000-0000-000000000000",
        "name": "Ana VIP",
        "slug": "anavip",
        "url": "https://anavip.bot.incrivel.tech/",
        "panel_url": "https://anavip.bot.incrivel.tech/app",
        "status": "trial",
        "can_operate": true,
        "payout_mode": "own",
        "plan": {
            "id": 2,
            "name": "Pro"
        }
    }
}
 

Request   

GET api/v1/platform/tenants/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the tenant. Example: architecto

tenant   string     

ID da criadora. Example: 9f1c2d3e-0000-0000-0000-000000000000

Atualizar criadora

requires authentication

Altere status (ex.: suspender), plano e validade da assinatura.

Example request:
curl --request PATCH \
    "https://bot.incrivel.tech/api/v1/platform/tenants/architecto" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Ana VIP\",
    \"status\": \"active\",
    \"saas_plan_id\": 2,
    \"plan_expires_at\": \"2026-12-31T23:59:59-03:00\",
    \"adult_content\": true
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/tenants/architecto"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Ana VIP",
    "status": "active",
    "saas_plan_id": 2,
    "plan_expires_at": "2026-12-31T23:59:59-03:00",
    "adult_content": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/tenants/architecto';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Ana VIP',
            'status' => 'active',
            'saas_plan_id' => 2,
            'plan_expires_at' => '2026-12-31T23:59:59-03:00',
            'adult_content' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/tenants/architecto'
payload = {
    "name": "Ana VIP",
    "status": "active",
    "saas_plan_id": 2,
    "plan_expires_at": "2026-12-31T23:59:59-03:00",
    "adult_content": true
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "9f1c2d3e-0000-0000-0000-000000000000",
        "name": "Ana VIP",
        "slug": "anavip",
        "url": "https://anavip.bot.incrivel.tech/",
        "panel_url": "https://anavip.bot.incrivel.tech/app",
        "status": "trial",
        "can_operate": true,
        "payout_mode": "own",
        "plan": {
            "id": 2,
            "name": "Pro"
        }
    }
}
 

Request   

PATCH api/v1/platform/tenants/{id}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the tenant. Example: architecto

tenant   string     

ID da criadora. Example: 9f1c2d3e-0000-0000-0000-000000000000

Body Parameters

name   string  optional    

Nome/marca. O campo value deve ter pelo menos 2 caracteres. O campo value não pode ser superior a 80 caracteres. Example: Ana VIP

status   string  optional    

pending, trial, active, past_due, suspended ou cancelled. Example: active

Must be one of:
  • pending
  • trial
  • active
  • past_due
  • suspended
  • cancelled
saas_plan_id   integer  optional    

Troca de plano. Must match an existing stored value. Example: 2

plan_expires_at   string  optional    

Validade da assinatura (ISO 8601). O campo value deve ser uma data válida. Example: 2026-12-31T23:59:59-03:00

adult_content   boolean  optional    

Vende conteúdo +18. Example: true

Gerar token de API da criadora

requires authentication

Emite um novo token (leitura e escrita) para a dona da conta. Exibido somente nesta resposta.

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/platform/tenants/9f1c2d3e-0000-0000-0000-000000000000/tokens" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/tenants/9f1c2d3e-0000-0000-0000-000000000000/tokens"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/tenants/9f1c2d3e-0000-0000-0000-000000000000/tokens';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/tenants/9f1c2d3e-0000-0000-0000-000000000000/tokens'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()

Example response (201):


{
    "api_token": "ibot_13|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
 

Request   

POST api/v1/platform/tenants/{tenant}/tokens

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

tenant   string     

ID da criadora. Example: 9f1c2d3e-0000-0000-0000-000000000000

Plataforma: planos

Planos que as criadoras assinam na plataforma. Exige token da plataforma.

Listar planos da plataforma

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/platform/saas-plans" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/saas-plans"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": 2,
            "name": "Pro",
            "slug": "pro",
            "price_cents": 9990,
            "interval_months": 1,
            "trial_days": 7,
            "limits": {
                "max_bots": 3,
                "max_groups": 5,
                "max_active_members": 2000
            },
            "platform_fee_percent": 3,
            "is_active": true
        }
    ]
}
 

Request   

GET api/v1/platform/saas-plans

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Criar plano da plataforma

requires authentication

Example request:
curl --request POST \
    "https://bot.incrivel.tech/api/v1/platform/saas-plans" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Pro\",
    \"slug\": \"pro\",
    \"description\": \"Para criadoras com vários grupos.\",
    \"price_cents\": 9990,
    \"interval_months\": 1,
    \"trial_days\": 7,
    \"max_bots\": 3,
    \"max_groups\": 5,
    \"max_active_members\": 2000,
    \"platform_fee_percent\": 3,
    \"allows_custom_domain\": true,
    \"features\": [
        \"Domínio próprio\"
    ],
    \"is_featured\": true,
    \"is_active\": true,
    \"sort_order\": 2
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/saas-plans"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Pro",
    "slug": "pro",
    "description": "Para criadoras com vários grupos.",
    "price_cents": 9990,
    "interval_months": 1,
    "trial_days": 7,
    "max_bots": 3,
    "max_groups": 5,
    "max_active_members": 2000,
    "platform_fee_percent": 3,
    "allows_custom_domain": true,
    "features": [
        "Domínio próprio"
    ],
    "is_featured": true,
    "is_active": true,
    "sort_order": 2
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Pro',
            'slug' => 'pro',
            'description' => 'Para criadoras com vários grupos.',
            'price_cents' => 9990,
            'interval_months' => 1,
            'trial_days' => 7,
            'max_bots' => 3,
            'max_groups' => 5,
            'max_active_members' => 2000,
            'platform_fee_percent' => 3.0,
            'allows_custom_domain' => true,
            'features' => ['Domínio próprio'],
            'is_featured' => true,
            'is_active' => true,
            'sort_order' => 2,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans'
payload = {
    "name": "Pro",
    "slug": "pro",
    "description": "Para criadoras com vários grupos.",
    "price_cents": 9990,
    "interval_months": 1,
    "trial_days": 7,
    "max_bots": 3,
    "max_groups": 5,
    "max_active_members": 2000,
    "platform_fee_percent": 3,
    "allows_custom_domain": true,
    "features": [
        "Domínio próprio"
    ],
    "is_featured": true,
    "is_active": true,
    "sort_order": 2
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": {
        "id": 2,
        "name": "Pro",
        "slug": "pro",
        "price_cents": 9990,
        "interval_months": 1,
        "trial_days": 7,
        "limits": {
            "max_bots": 3,
            "max_groups": 5,
            "max_active_members": 2000
        },
        "platform_fee_percent": 3,
        "is_active": true
    }
}
 

Request   

POST api/v1/platform/saas-plans

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Nome do plano. O campo value deve ter pelo menos 2 caracteres. O campo value não pode ser superior a 80 caracteres. Example: Pro

slug   string     

Identificador único. Must contain only letters, numbers, dashes and underscores. O campo value não pode ser superior a 80 caracteres. Example: pro

description   string  optional    

Descrição. O campo value não pode ser superior a 500 caracteres. Example: Para criadoras com vários grupos.

price_cents   integer     

Preço em centavos. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 100000000. Example: 9990

interval_months   integer  optional    

Periodicidade: 1, 3, 6 ou 12 meses. Example: 1

Must be one of:
  • 1
  • 3
  • 6
  • 12
trial_days   integer  optional    

Dias de teste grátis. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 90. Example: 7

max_bots   integer     

Limite de bots. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 1000. Example: 3

max_groups   integer     

Limite de grupos ativos. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 1000. Example: 5

max_active_members   integer  optional    

Limite de membros ativos (null = ilimitado). O campo value deve ser pelo menos 1. Example: 2000

platform_fee_percent   number  optional    

Taxa (%) sobre vendas no modo split. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 50. Example: 3

allows_custom_domain   boolean  optional    

Permite domínio próprio. Example: true

features   string[]  optional    

Benefício. O campo value não pode ser superior a 120 caracteres.

is_featured   boolean  optional    

Destaque no site. Example: true

is_active   boolean  optional    

Disponível para novas assinaturas. Example: true

sort_order   integer  optional    

Ordem. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 65000. Example: 2

Ver plano da plataforma

requires authentication

Example request:
curl --request GET \
    --get "https://bot.incrivel.tech/api/v1/platform/saas-plans/2" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/saas-plans/2"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans/2';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans/2'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": 2,
        "name": "Pro",
        "slug": "pro",
        "price_cents": 9990,
        "interval_months": 1,
        "trial_days": 7,
        "limits": {
            "max_bots": 3,
            "max_groups": 5,
            "max_active_members": 2000
        },
        "platform_fee_percent": 3,
        "is_active": true
    }
}
 

Request   

GET api/v1/platform/saas-plans/{saasPlan}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

saasPlan   integer     

ID do plano. Example: 2

Atualizar plano da plataforma

requires authentication

Example request:
curl --request PATCH \
    "https://bot.incrivel.tech/api/v1/platform/saas-plans/2" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Pro\",
    \"slug\": \"pro\",
    \"description\": \"Para criadoras com vários grupos.\",
    \"price_cents\": 9990,
    \"interval_months\": 1,
    \"trial_days\": 7,
    \"max_bots\": 3,
    \"max_groups\": 5,
    \"max_active_members\": 2000,
    \"platform_fee_percent\": 3,
    \"allows_custom_domain\": true,
    \"features\": [
        \"Domínio próprio\"
    ],
    \"is_featured\": true,
    \"is_active\": true,
    \"sort_order\": 2
}"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/saas-plans/2"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Pro",
    "slug": "pro",
    "description": "Para criadoras com vários grupos.",
    "price_cents": 9990,
    "interval_months": 1,
    "trial_days": 7,
    "max_bots": 3,
    "max_groups": 5,
    "max_active_members": 2000,
    "platform_fee_percent": 3,
    "allows_custom_domain": true,
    "features": [
        "Domínio próprio"
    ],
    "is_featured": true,
    "is_active": true,
    "sort_order": 2
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans/2';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Pro',
            'slug' => 'pro',
            'description' => 'Para criadoras com vários grupos.',
            'price_cents' => 9990,
            'interval_months' => 1,
            'trial_days' => 7,
            'max_bots' => 3,
            'max_groups' => 5,
            'max_active_members' => 2000,
            'platform_fee_percent' => 3.0,
            'allows_custom_domain' => true,
            'features' => ['Domínio próprio'],
            'is_featured' => true,
            'is_active' => true,
            'sort_order' => 2,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans/2'
payload = {
    "name": "Pro",
    "slug": "pro",
    "description": "Para criadoras com vários grupos.",
    "price_cents": 9990,
    "interval_months": 1,
    "trial_days": 7,
    "max_bots": 3,
    "max_groups": 5,
    "max_active_members": 2000,
    "platform_fee_percent": 3,
    "allows_custom_domain": true,
    "features": [
        "Domínio próprio"
    ],
    "is_featured": true,
    "is_active": true,
    "sort_order": 2
}
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": 2,
        "name": "Pro",
        "slug": "pro",
        "price_cents": 9990,
        "interval_months": 1,
        "trial_days": 7,
        "limits": {
            "max_bots": 3,
            "max_groups": 5,
            "max_active_members": 2000
        },
        "platform_fee_percent": 3,
        "is_active": true
    }
}
 

Request   

PATCH api/v1/platform/saas-plans/{saasPlan}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

saasPlan   integer     

ID do plano. Example: 2

Body Parameters

name   string  optional    

Nome do plano. O campo value deve ter pelo menos 2 caracteres. O campo value não pode ser superior a 80 caracteres. Example: Pro

slug   string  optional    

Identificador único. Must contain only letters, numbers, dashes and underscores. O campo value não pode ser superior a 80 caracteres. Example: pro

description   string  optional    

Descrição. O campo value não pode ser superior a 500 caracteres. Example: Para criadoras com vários grupos.

price_cents   integer  optional    

Preço em centavos. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 100000000. Example: 9990

interval_months   integer  optional    

Periodicidade: 1, 3, 6 ou 12 meses. Example: 1

Must be one of:
  • 1
  • 3
  • 6
  • 12
trial_days   integer  optional    

Dias de teste grátis. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 90. Example: 7

max_bots   integer  optional    

Limite de bots. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 1000. Example: 3

max_groups   integer  optional    

Limite de grupos ativos. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 1000. Example: 5

max_active_members   integer  optional    

Limite de membros ativos (null = ilimitado). O campo value deve ser pelo menos 1. Example: 2000

platform_fee_percent   number  optional    

Taxa (%) sobre vendas no modo split. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 50. Example: 3

allows_custom_domain   boolean  optional    

Permite domínio próprio. Example: true

features   string[]  optional    

Benefício. O campo value não pode ser superior a 120 caracteres.

is_featured   boolean  optional    

Destaque no site. Example: true

is_active   boolean  optional    

Disponível para novas assinaturas. Example: true

sort_order   integer  optional    

Ordem. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 65000. Example: 2

Arquivar plano da plataforma

requires authentication

Exclusão lógica: criadoras que já assinam continuam no plano.

Example request:
curl --request DELETE \
    "https://bot.incrivel.tech/api/v1/platform/saas-plans/2" \
    --header "Authorization: Bearer {SEU_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bot.incrivel.tech/api/v1/platform/saas-plans/2"
);

const headers = {
    "Authorization": "Bearer {SEU_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans/2';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {SEU_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://bot.incrivel.tech/api/v1/platform/saas-plans/2'
headers = {
  'Authorization': 'Bearer {SEU_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (204):

Empty response
 

Request   

DELETE api/v1/platform/saas-plans/{saasPlan}

Headers

Authorization        

Example: Bearer {SEU_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

saasPlan   integer     

ID do plano. Example: 2