Apps

Submit the decision and resume the run

outcome is validated against the task's output contract, every evidence locator must exist in the frozen input package, and a decision rationale is mandatory. Rejections journal a rejected event. Submit is idempotent per claimant + epoch.

post/v1/decision-tasks/{id}/submit

Request

  • Base URL: https://api.talonic.com
  • URL: https://api.talonic.com/v1/decision-tasks/{id}/submit
  • Auth: HTTP bearer

Path parameters

idstring uuid required

Request body

execution_epochinteger required
outcomeobject required

single: validated against the task's output contract. verdict_matrix: { subjects: [{ subject_key, rule_outcomes: { <rule id>: passed | failed | indeterminate }, auto?, detail? }] } over the version's declared logic.rules; rolled_outcome, substantive_passes and auto are recomputed by the platform (a disagreeing advisory auto is journaled decision_rejected and overridden). record_set: { fields: [{ key, label?, data_type }], records: [{ source_record_id?, values }] } (key must match ^[a-z][a-z0-9_]{0,63}$ and data_type one of string, number, date, boolean, object, array; a submission violating either is rejected as decision_rejected), where each entry of values is either a bare value or { value, confidence?, status? } (status one of filled, empty, flagged, pending_approval). Under the version's record_set_output.mode = derive the platform materializes a NEW app_run record set and ignores confidence/status; under mode = promote it appends cell versions into record_set_output.target (an app_run set the app holds a write grant on), matching rows by source_record_id against the target's record ids and columns against the target's fields, under the version's autonomy contract (observe rejects any value output, propose lands cells pending_approval, a value below confidence_floor is flagged and not written). Whole body ≤ apps.submit_max_bytes (413).

confidencenumber
evidencestring[] required

Provenance locators the decision relied on. Each must exist in the frozen input package, or parse as db:{connectionId}:{table}:{rowKey}:{column} / ref:{referenceDataId}:{rowKey}:{column} against a resource the app holds a read grant on: such locators are accepted as attestations (recorded { locator, external: true }, journaled evidence_attested, never resolved). Anything else is 422 evidence_outside_grants; api: is reserved. An empty block is accepted only when the app allows unevidenced decisions.

rationalestring required

Decision rationale — never private chain-of-thought.

service_versionstring

Build identifier of the deciding service; recorded in decided_by.label.

Response

Submitted task metadata.

idstring uuid required
customer_idstring uuid required
run_idstring uuid required
app_idstring uuid required
status'available' | 'claimed' | 'submitted' | 'released' | 'failed' | 'timed_out' | 'cancelled' required
execution_epochinteger required
input_package_refstring

Where the frozen package lives; run in v1.

lease_secondsinteger
claimed_bystring nullable

The claimant: an API key id, or oauth:<client_id>:<user_id> for an OAuth session.

claimed_atstring date-time nullable
lease_expires_atstring date-time nullable
heartbeat_atstring date-time nullable
sla_deadline_atstring date-time required

Hard decision deadline; heartbeats never extend the lease past it.

submitted_atstring date-time nullable
created_atstring date-time required
updated_atstring date-time required

Changes

No recorded changes to this operation across all 1 revision of this API.