1. Links de pagamento
Bestfy API
  • Sobre a Bestfy
    • Comece aqui
  • Webhooks
    • O que é um Webhook?
  • Tokenização
    • O que é Tokenização?
    • Criar token de cartão
      POST
  • Status de transação
    • Status de Pagamento na Bestfy
  • Transações
    • Anotações
      • Criar anotações
      • Listar anotações
      • Buscar anotação
      • Editar anotação
      • Remover anotação
    • Criar transações
      POST
    • Estornar transação
      POST
    • Buscar transação
      GET
    • Listar transações
      GET
    • Atualizar status de rastreio
      PATCH
    • Obter Token 3DS
      GET
    • Obter configurações do 3DS
      GET
  • Links de pagamento
    • Listar links de pagamento
      GET
    • Criar link de pagamento
      POST
    • Buscar link de pagamento
      GET
    • Atualizar link de pagamento
      PUT
    • Ativar ou desativar link de pagamento
      PATCH
    • Excluir link de pagamento
      DELETE
  • Saldo
    • Buscar saldo
      GET
  • API Key
    • Validar API Key
      GET
  1. Links de pagamento

Criar link de pagamento

POST
https://api.bestfy.io/public-api/payment-link
Use este endpoint para criar um link de pagamento: uma URL que cobra um valor fixo do comprador. A empresa é identificada pelo header x-api-key — não existe campo companyId no payload.
O slug e a url são gerados pela Bestfy e devolvidos na resposta. Eles nunca mudam, mesmo que você edite o nome ou o valor depois, então é seguro compartilhar a URL assim que o link é criado.

Regras de uso#

Todos os campos do payload são obrigatórios. Não existe campo opcional aqui.
Além da validação de formato, o link precisa passar nas regras de negócio:
Ao menos um método de pagamento habilitado, entre pixEnabled, creditCardEnabled e bankSlipEnabled.
O método habilitado precisa estar permitido para a sua empresa. Os toggles do checkout não interferem: o link tem regras próprias.
maxInterestFreeInstallments não pode exceder maxInstallments.
Com cartão habilitado, amountInCents / maxInstallments precisa ser no mínimo 500, ou seja R$ 5,00 por parcela.

Campos do payload#

CampoRegra.
nameNome interno, no máximo 100 caracteres. Não é exibido ao comprador — serve para você localizar o link e aparece como nome do produto na venda. Único por empresa.
amountInCentsValor em centavos (R$ 150,00 = 15000), de 100 a 100000000. É o valor final: cupom e desconto por método não se aplicam a link.
pixEnabledSe o link aceita PIX.
bankSlipEnabledSe o link aceita boleto. Opcional: ausente = false
bankSlipDueDaysPrazo de vencimento do boleto. Opcional: ausente = 3
creditCardEnabledSe o link aceita cartão de crédito.
maxInstallmentsParcelamento máximo no cartão, de 1 a 12. Envie 1 quando o cartão estiver desabilitado.
maxInterestFreeInstallmentsParcelas sem juros para o comprador, de 1 a 12 — a taxa é absorvida por você. Acima disso vale a tabela de juros da sua empresa.
isActiveSe o link já nasce aceitando pagamento. Criado com false, o link existe e tem URL, mas a página não cobra até você ativá-lo.
Sobre o nome ser único: repetir um nome já usado responde 409 com PAYMENT_LINK_E002. Isso torna um retry seguro — se você não recebeu a resposta e repetiu a chamada, a segunda tentativa falha em vez de criar um link duplicado.

O que fazer com a resposta#

A resposta 201 devolve o link de pagamento inteiro, não apenas uma mensagem de confirmação. Você não precisa de um GET em seguida para descobrir a URL ou o id: tudo que o link tem no momento da criação já vem aqui.
{
  "id": "0198f3a1-5c2e-7b3a-9f4d-6e1c8a2b7d05",
  "name": "Consultoria 1h",
  "slug": "aB3dE9fGh1k",
  "url": "https://checkout.bestfy.io/pay/aB3dE9fGh1k",
  "amountInCents": 15000,
  "pixEnabled": true,
  "bankSlipEnabled": true,
  "bankSlipDueDays": 1
  "creditCardEnabled": true,
  "maxInstallments": 12,
  "maxInterestFreeInstallments": 3,
  "isActive": true,
  "companyId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "createdAt": "2026-09-14T12:00:00.000Z",
  "updatedAt": "2026-09-14T12:00:00.000Z"
}
CampoO que é.
idIdentificador do link. É ele que vai no path dos endpoints de buscar, atualizar, ativar/desativar e excluir. Guarde este campo.
urlA URL que você entrega ao comprador. Não muda nunca, mesmo depois de editar nome ou valor.
slugO trecho final da url, gerado pela Bestfy. Serve para identificar o link em logs e nos webhooks; para cobrar, use a url pronta.
nameO nome que você enviou, já com espaços das pontas removidos — é por isso que vale ler o valor de volta em vez de assumir o que você mandou.
amountInCents, pixEnabled, bankSlipEnabled, bankSlipDueDays, creditCardEnabled, maxInstallments, maxInterestFreeInstallments, isActiveA configuração efetiva do link, como ficou gravada.
companyIdA empresa dona do link, resolvida a partir da sua x-api-key. Útil para conferir a qual conta a chave pertence.
createdAt / updatedAtDatas em ISO 8601 UTC. Na criação vêm iguais.
Os dois campos que valem persistir do seu lado são o id e a url: com o id você opera o link depois, e com a url você cobra. O resto você pode sempre reler com o GET.

Erros comuns#

CódigoMotivo.
400Requisição inválida, por campo ausente ou valor fora dos limites.
400PAYMENT_LINK_E003 — método de pagamento não permitido para esta empresa.
400PAYMENT_LINK_E004 — habilite ao menos um método de pagamento no link.
400PAYMENT_LINK_E005 — parcelas sem juros acima do parcelamento máximo.
400PAYMENT_LINK_E006 — valor por parcela abaixo do mínimo de R$ 5,00.
401x-api-key ausente ou inválida.
403API_KEY_E001 — chave revogada.
403Links de pagamento não habilitados para a sua conta.
404COMPANY_E002 — empresa não encontrada para a chave informada.
409PAYMENT_LINK_E002 — já existe um link de pagamento com este nome.
429Acima de 60 requisições por minuto, contadas por empresa e não por IP.
500Erro interno — tente novamente após alguns segundos.
Atenção ao formato do corpo, porque ele muda conforme a origem do erro. O erro de validação traz message como lista e um campo error, sem code: { "message": ["..."], "error": "Bad Request", "statusCode": 400 }. O erro de regra de negócio traz code e não traz statusCode: { "message": "...", "code": "PAYMENT_LINK_E002" }. Um cliente que decide pelo code precisa tratar a ausência dele.

Request

Header Params

Body Params application/jsonRequired

Examples

Responses

🟢201Link de pagamento criado com sucesso
application/json
Bodyapplication/json

🟠401Chave ausente/inválida
🟠403Link de pagamento não habilitado para a conta dona da chave
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://api.bestfy.io/public-api/payment-link' \
--header 'x-api-key: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
  "name": "Consultoria 2h",
  "amountInCents": 15000,
  "pixEnabled": true,
  "bankSlipEnabled": true,
  "bankSlipDueDays": 1,
  "creditCardEnabled": true,
  "maxInstallments": 12,
  "maxInterestFreeInstallments": 3,
  "isActive": true
}'
Response Response Example
201 - Success
{
    "id": "0ce39c26-a96f-4755-b3aa-4a472c4f2aec",
    "name": "Consultoria 1h",
    "slug": "aB3dE9fGh1k",
    "amountInCents": 15000,
    "pixEnabled": true,
    "bankSlipEnabled": true,
    "bankSlipDueDays": 1,
    "creditCardEnabled": true,
    "maxInstallments": 12,
    "maxInterestFreeInstallments": 3,
    "isActive": true,
    "companyId": "56370718-7332-41e5-beef-8f122ff185df",
    "createdAt": "2025-10-13T21:15:08.805Z",
    "updatedAt": "2026-09-14T15:24:56.677Z",
    "url": "https://checkout.bestfy.io/pay/aB3dE9fGh1k"
}
Modified at 2026-09-16 14:52:50
Previous
Listar links de pagamento
Next
Buscar link de pagamento
Built with