Skip to content

Cria ou executa calculate price

POST/api/checkout/calculate-price

Auth
Public
X-CommunityId
X-CommunityId Send the X-CommunityId of the community the operation happens in.
Endpoint descriptions come straight from the API specification and are in Portuguese for now. The interface around them is translated.

Endpoint público — não exige autenticação. FIN-54: cota só produto da comunidade do `X-CommunityId`; sem comunidade, 400 com `param = X-CommunityId`; produto de outra comunidade, 404. Com token de quem já assina o plano, a resposta traz o campo opcional `alreadySubscribed: { subscriptionId, status, productId }`. `allowedPaymentMethods` do produto é lido tanto como array quanto como string JSON; método fora da lista ou parcelas acima de `maxInstallments` respondem 400 com `errors[].param`. Parcelas só valem no cartão de crédito (PIX e boleto respondem `installments = 1`). F-43, juros de parcelamento da Memberfy (% total por número de parcelas, da tabela de taxas da plataforma ou da comunidade), depois dos descontos e da taxa da plataforma, que não muda: com `installmentInterestPayer = BUYER` somam ao preço; com `ORGANIZATION` o comprador paga o preço e a comunidade recebe menos. Campos novos e opcionais: `installmentInterestPayer`, `installmentInterestPercent`, `installmentInterest` (juros pagos pelo comprador; `0.00` quando a comunidade absorve), `totalWithInterest` (o que o cartão cobra), `installmentAmount` e, no cartão, `installmentOptions` (`[{ installments, percent, totalAmount, installmentAmount }]`, de 1 até `maxInstallments`). `totalAmount` segue sendo o valor antes dos juros. Com adicionais, os mesmos campos em cada item. F-37: `addOnProductIds` (array de UUID, opcional) cota a opção de plano com adicionais, como `POST /checkout` cobraria num pedido só. A resposta ganha `items` (`productId`, `title`, `basePrice`, `feePayer`, `fees` quando o comprador paga a taxa, `totalAmount`), e `totalAmount` e `breakdown.total` passam a ser o total do pedido; os demais campos continuam descrevendo a opção do plano. A taxa fixa entra uma vez, no plano. Recusas com 400 e `param = addOnProductIds`: adicional fora da lista do plano, que não é `SUBSCRIPTION` `MONTHLY` à venda, repetido, ou opção que não aceita adicional (intervalo sem fator, ou com teste). FIN-7: `couponCode` (string, opcional) aplica o cupom da comunidade do produto antes da taxa, como `POST /checkout` cobraria: a taxa da plataforma é calculada sobre o valor com desconto. Com cupom, a resposta ganha `coupon` (`code`, `type`, `discountValue`, `duration`, `durationInMonths`), `discountAmount` (o desconto do pedido), `breakdown.discount` (o da opção) e `items` mesmo sem adicionais, cada item com `discountAmount`; `basePrice` e `breakdown.product` continuam sendo o preço cheio, e `totalAmount`/`breakdown.total` já vêm com o desconto. `PERCENTAGE` (limitado por `maxDiscount`) e `FIXED` valem uma vez para o pedido, divididos entre os itens a que o cupom se aplica. Recusas com `param = couponCode`: 404 cupom inexistente; 400 inativo, fora da validade, sem usos (`maxUses`, contando pedidos ainda em aberto), pedido abaixo do mínimo, produto fora da lista, cupom `FREE_TRIAL`, ou desconto que zera um item. Com login (opcional), também o limite por pessoa e a restrição de primeira compra. Depois de 10 códigos recusados em 15 minutos, 429 por quem chama (conta ou IP).

Headers

NameTypeDescription
X-CommunityIdoptionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Request body application/json

NameTypeDescription
productIdrequiredstring (uuid)
paymentMethodrequiredCREDIT_CARD | DEBIT_CARD | PIX | BOLETO | BANK_TRANSFER
installmentsoptionalinteger≥ 1, ≤ 12
couponCodeoptionalstringmin 3, max 50
addOnProductIdsoptionalstring (uuid)[]

Responses

StatusDescription
201Operação realizada com sucesso.
400Requisição inválida — falha de validação.
404Recurso não encontrado.
429Códigos de cupom recusados demais em pouco tempo.
500Erro interno do servidor.

curl example

curl -X POST "https://api.memberfy.net/api/checkout/calculate-price" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{"productId":"d4f7a2b9-6c1e-4a3d-9b8f-2e5c7a1d3f60","paymentMethod":"CREDIT_CARD"}'