Forecast

Simular o forecast

POST
/v1/forecast/simulate

Projeta os 12 meses a partir de baseline.windowStart sobre a mesma base (em cache) que GET /v1/forecast/baseline devolve: o funil atual mais os ajustes do simulador.

  • Toda % em 0 é o funil como está: cada mês fatura a receita real dos últimos 30 dias.
  • % de etapa (stagePct) escala a conversão atual daquele elo. Em RETENTION, escala os pedidos de recompra por mês (a taxa de recompra exibida na etapa se move na mesma %).
  • investmentPct escala o tráfego da primeira etapa e, com custo por unidade constante, o investimento. A recompra não se move com ele.
  • ticketPct escala o ticket de todo pedido, de aquisição e de recompra (o controle de "Faturamento").
  • Cada alavanca sai do valor atual (mês 1) e chega ao alvo no mês rampMonths + 1 em rampa linear, e depois se mantém.

O floor do setor de cada etapa nunca é aplicado. Toda variação % é limitada a [-50, 200]. Uma % numa etapa sem taxa mensurável (nula ou zero) não tem efeito. Sem investimento em mídia, o fator de tráfego escala o volume medido sem custo e o investimento fica 0. result é null sempre que data.status não for ready. Sem cache: a resposta é calculada a cada chamada. O Authorization de quem chama é repassado para ler o modelo de negócio.

Descontinuados. meta e inputs.extraLayer (a meta do Realista e a camada da Super meta da versão com cenários) ainda são aceitos, para não rejeitar clientes antigos, e ignorados.

Autorização

ClientIdAuthClientSecretAuth
headerx-client-id<token>

Client ID

headerx-client-secret<token>

Client secret

Corpo da requisição

application/json
  1. body
organizationId*string

Identificador da organização (obrigatório).

Tamanho1 <= length
inputs*

Ajustes sobre o funil atual. Cada alavanca é uma variação % sobre o valor atual (20 = +20%), alcançada em rampa linear ao longo de rampMonths e depois mantida. Toda % em 0 é o funil como está. Toda variação é limitada a [-50, 200].

meta?unknownDescontinuado

Descontinuado: a meta anual que o antigo Realista fechava. Aceito e ignorado.

Corpo da resposta

Projeção do forecast

application/json
  1. response
data*|

Discriminado por status. Só ready traz a base.

result*|

null sempre que data.status não for ready.

curl -X POST "https://example.com/v1/forecast/simulate" \  -H "Content-Type: application/json" \  -d '{    "organizationId": "c0ad4763-173e-4a05-9cff-5208c8ea5f6a",    "inputs": {      "investmentPct": 20,      "ticketPct": 5,      "stagePct": {        "INTEREST": 10,        "DECISION": 5,        "RETENTION": 15      },      "rampMonths": 4    }  }'
{  "data": {    "status": "ready",    "baseline": {      "windowStart": "2019-08-24",      "funnelKind": "ecommerce",      "businessModel": "online_sales",      "monthlyInvestment": 0,      "stages": [        {          "stageId": "EXPOSURE",          "scale": "media",          "role": "sessions",          "count": 0,          "rate": 0,          "sourceLabel": "string",          "floor": 0        }      ],      "averageTicket": 0,      "monthlyRevenue": 0,      "trailingRevenue": {        "value": 0,        "annualized": true      },      "revenueSource": "transactional"    }  },  "result": {    "projection": {      "months": [        {          "month": 1,          "revenue": 0,          "repurchaseRevenue": 0,          "investment": 0,          "orders": 0,          "repurchaseOrders": 0,          "cumulativeRevenue": 0        }      ],      "totals": {        "revenue": 0,        "repurchaseRevenue": 0,        "investment": 0,        "orders": 0,        "repurchaseOrders": 0,        "roas": 0      }    },    "calibrationFactor": 0,    "baselineMonthlyRevenue": 0  }}