View as Markdown

Human judgements

Some decisions in the books need a person. The books refuse them from an API key, an OAuth client or an AI assistant, whatever the permissions of the caller:

  • an exemption, and a change or removal of one;
  • a classification of money received, and a change or removal of one;
  • a manual exchange rate, a manual VAT code;
  • a default of a party, a dimension rule;
  • the reopening of a period.

A person answers for these in the books. So the books record a person as the author of each one, never a program.

What your integration gets

A call that makes such a decision gets 403 human_actor_required:

{
  "type": "https://oscaraccountant.com/errors/human_actor_required",
  "title": "A person must make this decision",
  "status": 403,
  "code": "human_actor_required",
  "detail": "..."
}

Do not retry it. Most calls of the public API never need a judgement. When one does, for example an invoice line with a manual VAT code, send the call without the judgement (use a VAT code of the company, from GET /api/companies/{company_id}/vat-codes/), or leave the decision to a person in the Oscar app.

Proposals

Oscar can record a proposal: the decision as the program proposes it, which a person then confirms or rejects in the app. The command then runs with that person as its author. An AI assistant connected over MCP does this with the tool propose_judgement. The proposal operations are not yet part of the public API.