Saltar para o conteúdo
Explorar a referência
Voltar à referência da API
Guia

Agregados

O agregado é a unidade de isolamento dos dados, o tenant do sistema: contas, movimentos, orçamentos, categorias, regras e chaves pertencem todos a exatamente um. A sua chave também pertence a um, eis o que isso lhe permite fazer, e o que não permite.

Um agregado, um espaço isolado

Todos os recursos financeiros da API vivem dentro de um agregado e são endereçados em /households/:householdId/…. Uma pessoa pode pertencer a vários agregados com uma função diferente em cada um (proprietário, editor ou leitor), e é assim que uma casa partilhada, uma casa de família e um negócio paralelo se mantêm separados na mesma conta.

Os agregados nunca partilham dados. Não há leituras entre agregados, não há lista de categorias comum e não existe qualquer operação para copiar de um agregado para outro. A única coisa que atravessa a fronteira é a pessoa.

A sua chave está ligada a um único agregado

Uma chave é criada dentro de um agregado e só pode agir sobre esse; um pedido dirigido a outro agregado é rejeitado com 403, mesmo que a pessoa que criou a chave tenha acesso a esse outro agregado na aplicação. Não precisa de saber o id: o segmento literal current resolve sempre para o agregado da própria chave.

Em que agregado está esta chave?
bash
curl -H "Authorization: Bearer vokse_sk_…" \     https://api.vokse.ai/households/current
bash
# every scoped route takes the alias in place of the idcurl -H "Authorization: Bearer vokse_sk_…" \     "https://api.vokse.ai/households/current/transactions?limit=50"

O que uma chave não pode fazer

O ciclo de vida do agregado e a gestão de membros são exclusivos de sessão: uma pessoa com sessão iniciada na aplicação, nunca uma chave de API. Estas devolvem 403 API_KEY_NOT_ALLOWED:

  • POST /households: criar um agregado
  • GET /households: listar os agregados a que pertence
  • DELETE /households/{householdId}: eliminar um agregado
  • Convites: enviar, aceitar e revogar
  • Membros: listar, mudar a função, remover, sair
  • Transferir a propriedade e repor o agregado no início

A razão é o raio de impacto: uma chave comprometida já é preocupação suficiente dentro de um agregado; pior seria se ainda pudesse criar agregados novos ou enumerar todos aqueles a que pertence quem a criou. GET /households/current é a exceção e exige read:households, é assim que uma integração descobre onde está.

json
{  "error": {    "code": "API_KEY_NOT_ALLOWED",    "message": "This endpoint is not available to API keys."  }}

Limites de propriedade

Pode pertencer a um número ilimitado de agregados, mas só pode TER A PROPRIEDADE de um número limitado: 2 no plano gratuito e 10 no Pro. Criar acima do limite (a partir da aplicação, já que a criação é exclusiva de sessão) devolve 409. Precisa de um limite maior? Fale connosco e aumentamo-lo no seu plano.

json
{  "error": {    "code": "HOUSEHOLD_LIMIT_REACHED",    "message": "You already own 2 households, the maximum for your plan.",    "details": { "limit": 2, "owned": 2 }  }}

Arrancar com um agregado

Um agregado novo é criado vazio, com um idioma de dados (`locale`, por omissão o idioma da interface de quem o cria). GET /meta/category-packs?locale=&dataLocale= lista os pacotes iniciais, com os grupos e as categorias que cada um cria (as designações em `locale`, os nomes em `dataLocale`) e POST /households/:householdId/starter-pack aplica um deles com write:categories, no idioma de dados do agregado. Aplicar um pacote é idempotente por nome, por isso repetir o pedido nunca duplica a estrutura.