Saltar al contenido

Cria ou executa calculate price

POST/api/checkout/calculate-price

Auth
Pública
X-CommunityId
X-CommunityId Envía el X-CommunityId de la comunidad en la que ocurre la operación.
Las descripciones de los endpoints vienen de la especificación de la API y, por ahora, están en portugués. La interfaz alrededor está traducida.

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

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

Cuerpo de la solicitud application/json

NombreTipoDescripción
productIdobligatoriostring (uuid)
paymentMethodobligatorioCREDIT_CARD | DEBIT_CARD | PIX | BOLETO | BANK_TRANSFER
installmentsopcionalinteger≥ 1, ≤ 12
couponCodeopcionalstringmin 3, max 50
addOnProductIdsopcionalstring (uuid)[]

Respuestas

CódigoDescripción
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.

Ejemplo con curl

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"}'