curl https://api.morphllm.com/v1/systemone \A decision, not a paragraph
One POST, every answer typed
Three question types in one request: choice, score and noul (yes or no). No parsing, no retries on malformed output.
-H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "reflex", "state": "I have been trying to connect my Stripe account for 3 days and it keeps failing. I am losing sales. Please help ASAP.", "questions": { "department": { "type": "choice", "instructions": "Which team should handle this?", "criteria": { "billing": "Payment or subscription issues", "technical": "Bugs or integration problems", "sales": "Pricing or account questions" } }, "frustration": { "type": "score", "instructions": "How frustrated does the customer appear?", "criteria": ["Calm, just stating facts", "Frustrated but civil", "Very angry, strong language"] }, "is_urgent": { "type": "noul", "instructions": "The message conveys urgency or time sensitivity." } } }'Probabilities your code
can act on
Three question types
choice picks an option. score returns the expected level across 2 to 10 ordered descriptions. noul returns the probability of yes. Name as many questions as you need; they share one state.
"questions": { "department": { "type": "choice", "instructions": "Which team should handle this?", "criteria": { "billing": "Payment or subscription issues", "technical": "Bugs or integration problems", "sales": "Pricing or account questions" } }, "frustration": { "type": "score", "instructions": "How frustrated does the customer appear?", "criteria": [ "Calm, just stating facts", "Frustrated but civil", "Very angry, strong language" ] }, "is_urgent": { "type": "noul", "instructions": "The message conveys urgency." }}Probabilities, not prose
Every answer comes back as a distribution that sums to 1, plus a confidence measured against the model's full vocabulary. Output tokens: 0.
"answers": { "department": { "type": "choice", "choice": "technical", "probabilities": { "billing": 0.21, "technical": 0.78, "sales": 0.01 }, "confidence": 0.77 }, "is_urgent": { "type": "noul", "noul": 0.97, "confidence": 0.96 }},"usage": { "input_tokens": 312, "output_tokens": 0}Text, JSON or images
Put a ticket, a transcript or a JSON record in state. Add up to 16 PNG, JPEG or WebP images as base64 data URLs, 8 MB each. Same questions, same answer shape.
{ "model": "reflex", "state": "Satellite frame of an industrial building.", "images": ["data:image/jpeg;base64,/9j/4AAQ..."], "questions": { "equipment": { "type": "choice", "instructions": "Is outdoor mechanical equipment visible?", "criteria": { "visible": "Equipment is visible.", "not_visible": "No equipment is visible.", "unclear": "Too unclear to tell." } } }}Cached state
Caching is automatic. Repeat a state over about 1,000 tokens and most of its input is reused at $0.01/M. Five measured production calls on one satellite frame, not a latency guarantee.
request cached/input timesatellite image, first call 0 / 1328 890 mssame image again 1216 / 1328 220 msswitch to a blank image 0 / 1328 226 mssame blank image again 1216 / 1328 131 msback to the satellite image 1216 / 1328 208 ms repeat calls reused 91.6% of input tokens