Matching
Domain-agnostic constrained assignment primitives for solving caller-defined matching problems. Provide your own nodes, capacities, edges, costs, and scores, then let SaaSignal return a deterministic assignment result or async operation.
Create Matching Operation
Solve one constrained assignment problem, either synchronously or as a persisted async operation.
curl -X POST https://api.saasignal.saastemly.com/infra/decisioning/matching/operations \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"problem":{}}'
{ "status": "ok" }
const result = await ss.infra.decisioning.matching.createOperation({ problem: { objective: 'min_cost', left_nodes: [{ id: 'driver_1' }], right_nodes: [{ id: 'order_1' }], edges: [{ left_id: 'driver_1', right_id: 'order_1', cost: 2.4 }] } })
- Open Dashboard → Decisioning and select your project
- Go to the Matching workspace
- Paste the solve payload into the matching solver card, run it synchronously or asynchronously, and inspect the returned assignment or operation record.
problem requiredasyncfalseidempotency_keyCreate Batch Matching Operation
Solve multiple matching problems in one request, either synchronously or as a persisted async batch operation.
curl -X POST https://api.saasignal.saastemly.com/infra/decisioning/matching/operations/batch \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"problems":[]}'
{ "status": "ok" }
const result = await ss.infra.decisioning.matching.createBatchOperation({ problems: [{ left_nodes: [{ id: 'a' }], right_nodes: [{ id: 'b' }], edges: [{ left_id: 'a', right_id: 'b', cost: 1 }] }] })
- Open Dashboard → API Console and select your project
- Choose POST /infra/decisioning/matching/operations/batch from the route list
- Fill in the JSON body or Storage references, then send the request and inspect the response directly in the console
problems requiredasyncfalseidempotency_keyGet Matching Operation
Get the status and result of an async matching operation.
curl https://api.saasignal.saastemly.com/infra/decisioning/matching/operations/{operation_id} \
-H "Authorization: Bearer sk_live_..."
{ "status": "ok" }
const operation = await ss.infra.decisioning.matching.getOperation('mop_123')
- Open Dashboard → Decisioning and select your project
- Go to the Matching workspace
- Enter the `mop_...` identifier in the operator rail to inspect the async solve status, result payload, or error details.
operation_id requiredCancel Matching Operation
Cancel an in-flight matching operation if it has not completed yet.
curl -X POST https://api.saasignal.saastemly.com/infra/decisioning/matching/operations/{operation_id}/cancel \
-H "Authorization: Bearer sk_live_..."
{ "status": "ok" }
const operation = await ss.infra.decisioning.matching.cancelOperation('mop_123')
- Open Dashboard → Decisioning and select your project
- Go to the Matching workspace
- Load the async operation in the operator rail, then use the cancel action to stop queued or in-flight solve work.
operation_id requiredCreate Matching Template
Persist a reusable matching problem template for later operation creation.
curl -X POST https://api.saasignal.saastemly.com/infra/decisioning/matching/templates \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"name":"example","problem":{}}'
{ "status": "ok" }
const template = await ss.infra.decisioning.matching.createTemplate({ name: 'dispatch-default', problem: { objective: 'min_cost', left_nodes: [{ id: 'left_seed' }], right_nodes: [{ id: 'right_seed' }], edges: [{ left_id: 'left_seed', right_id: 'right_seed', cost: 1 }] } })
- Open Dashboard → API Console and select your project
- Choose POST /infra/decisioning/matching/templates from the route list
- Fill in the JSON body or Storage references, then send the request and inspect the response directly in the console
name requireddescriptionproblem requireddefault_optionsList Matching Templates
List saved matching templates for the active project.
curl https://api.saasignal.saastemly.com/infra/decisioning/matching/templates \
-H "Authorization: Bearer sk_live_..."
{ "status": "ok" }
const { templates } = await ss.infra.decisioning.matching.listTemplates()
- Open Dashboard → API Console and select your project
- Choose GET /infra/decisioning/matching/templates from the route list
- Fill in the JSON body or Storage references, then send the request and inspect the response directly in the console
Get Matching Template
Get one saved matching template.
curl https://api.saasignal.saastemly.com/infra/decisioning/matching/templates/{template_id} \
-H "Authorization: Bearer sk_live_..."
{ "status": "ok" }
const template = await ss.infra.decisioning.matching.getTemplate('mtpl_123')
- Open Dashboard → API Console and select your project
- Choose GET /infra/decisioning/matching/templates/{template_id} from the route list
- Fill in the JSON body or Storage references, then send the request and inspect the response directly in the console
template_id requiredUpdate Matching Template
Update mutable matching template fields.
curl -X PATCH https://api.saasignal.saastemly.com/infra/decisioning/matching/templates/{template_id} \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{}'
{ "status": "ok" }
const template = await ss.infra.decisioning.matching.updateTemplate('mtpl_123', { description: 'Default driver assignment constraints' })
- Open Dashboard → API Console and select your project
- Choose PATCH /infra/decisioning/matching/templates/{template_id} from the route list
- Fill in the JSON body or Storage references, then send the request and inspect the response directly in the console
template_id requirednamedescriptionproblemdefault_optionsDelete Matching Template
Delete a saved matching template.
curl -X DELETE https://api.saasignal.saastemly.com/infra/decisioning/matching/templates/{template_id} \
-H "Authorization: Bearer sk_live_..."
await ss.infra.decisioning.matching.deleteTemplate('mtpl_123')
- Open Dashboard → API Console and select your project
- Choose DELETE /infra/decisioning/matching/templates/{template_id} from the route list
- Fill in the JSON body or Storage references, then send the request and inspect the response directly in the console
template_id requiredCreate Template Matching Operation
Solve a saved matching template with optional overrides, either synchronously or as a persisted async operation.
curl -X POST https://api.saasignal.saastemly.com/infra/decisioning/matching/templates/{template_id}/operations \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{}'
{ "status": "ok" }
const result = await ss.infra.decisioning.matching.createTemplateOperation('mtpl_123', { override: { left_nodes: [{ id: 'driver_1' }], right_nodes: [{ id: 'order_1' }], edges: [{ left_id: 'driver_1', right_id: 'order_1', cost: 1.2 }] } })
- Open Dashboard → API Console and select your project
- Choose POST /infra/decisioning/matching/templates/{template_id}/operations from the route list
- Fill in the JSON body or Storage references, then send the request and inspect the response directly in the console
template_id requiredoverrideasyncfalseidempotency_key