post /v1/budgets/{budget_id}/recurring/{id}/enter
Enter a bill: write it, file it, move to its next date
scope budget:write · enterRecurring
Parameters
budget_id path · string · required
id path · string · required
Body · JSON
date string · YYYY-MM-DD
amount_cents integer · ≥ -9007199254740991
Returns · 200
{ recurring, transaction_id, filed }. Creates the transaction in the bill's account_id, files it into its envelope_id when it has one, links it as the payment on its loan_id when it has one, and advances next_due: one call for what was three. The bill's note is copied onto the transaction, and survives when a bank row later absorbs it (match or auto-adopt). Income with no envelope (a paycheque, a benefit) is ready to assign on arrival, so filed is true and there is nothing to record_income; only an outflow with no envelope waits in the inbox. date and amount_cents override this occurrence without changing the standing bill, which is what a variable bill like a power invoice needs. Returns 400 validation_failed when the bill has no account, because Mintro does not guess where money comes from. Still not a scheduler: nothing reads these rows on a timer and a bill past its date sits there looking overdue until somebody calls this.
Example
Errors · besides 401, 429, 500
- 400
validation_failed: The request body or query is malformed. The message names the offending field; fix it and retry. - 403
forbidden: The key is valid but lacks the scope this call needs. Ask the human to mint a key with the scope named in the message. - 404
not_found: No such record on this budget. Re-read GET /v1/budgets/{id} (or the relevant list) for current ids rather than reusing a remembered one. - 409
idempotency_conflict: This Idempotency-Key was used for a different request, or the first request is still in flight. Retry the in-flight case after a second; use a fresh key for a genuinely different request.