Input
A decision call has one required field, input: the body of the capability you are calling. Everything else is optional.
{
"type": "statement",
"input": { "file_base64": "...", "file_name": "march.csv", "profile": { "monthly_income": 3200 } },
"subject_ref": "cust_1042",
"subject_consent": true,
"session_id": "review_771"
}
Type inference
Omit type and Ward infers it from the input:
| Input contains | Type |
|---|---|
applicant |
kyc |
disputed |
ato |
name with owners, mcc, merchant_id, observed… |
merchant |
files, or a .csv / .xlsx / .tsv file |
statement |
mrz, claimed, or an image file |
document |
session_id + intent_type |
intent |
amount |
payment |
name |
screen |
only agent_id / agent_did |
agent |
A PDF that could be either an ID or a statement needs an explicit type (otherwise 422). Send type in production: inference is a convenience for exploration.
Give context, not history
For real-time types (payment, intent, agent, screen) send the event plus a profile summary, not the full history: a cardholder's usual countries and average ticket, not two years of transactions. Real-time calls take up to 32,000 input tokens; file types take up to 1,000,000 per call. Larger inputs answer 413 call_too_large; split files across calls in the same session.
Files
Files go base64-encoded in file_base64 (with file_name), or as a files array for several statements of one account. Ward reads CSV, TSV, XLSX and PDFs with a text layer in any column layout; see Files in any format. Files are analysed in memory: for documents and KYC nothing is stored; statement analyses keep the result, not the file.
Your references
subject_ref: your customer id. Links decisions about the same customer (Subject memory).external_ref(inside most inputs): your transaction, applicant or case id, echoed back and written to the audit log.