Skip to content

Make

Call Curva from a Make scenario and route bundles on the typed answer with a Router.

Mapped text can hold quotes and newlines, so build the body with JSON → Create JSON rather than typing JSON around mapped values. Create a data structure with the request fields (or paste the example below into the structure generator), then map your trigger’s fields into state:

{
"project": "support",
"state": {"subject": "…", "body": "…"},
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this",
"options": {"billing": "Payments, refunds", "technical": "Bugs", "sales": "Pricing"},
"min_confidence": 0.8
},
"refund": {"type": "noul", "instructions": "The customer explicitly asks for a refund"}
}
}

Add HTTP → Make a request:

Field Value
URL https://curva.example.com/v1/decide
Method POST
Headers Authorization = Bearer curva_…
Body type Raw, content type JSON (application/json)
Request content the JSON string output of step 1
Parse response Yes

Run it once so Make learns the response shape. The answers are then mappable as Data → answers → department → choice, … → confidence, … → abstain, Data → answers → refund → noul, and the decision id as Data → id.

Add a Router after the HTTP module, with a filter on each route:

Route Filter
Human review answers.department.abstain — Boolean operators: Equal to — true
Billing answers.department.choice — Text operators: Equal to — billing
Technical answers.department.choice — Text operators: Equal to — technical

Make runs every route whose filter passes, so give the choice routes a second condition, abstain not equal to true, and an unsure answer only reaches the human route. abstain is set because the question has min_confidence; on that route, create a task for a person. A Noul is a probability: filter on answers.refund.noul with Numeric operators: Greater than 0.9.

Store Data → id (the decision id) with whatever the scenario creates.

When the true answer is known, send it with another HTTP → Make a request, POST to https://curva.example.com/v1/feedback, same header, raw JSON body:

{"decision_id": "dec_…", "question": "department", "label": "billing"}

From 30 labels for a question, its answers are calibrated whenever that makes them more accurate. See Calibrate with feedback.

Curva errors are JSON with a 4xx or 5xx status, which makes the HTTP module fail. Add an error handler (Break with retries) for 429 (it carries Retry-After) and 502. See the error list.

© 2026 Tarkova Private Limited.