{"id":"workflow-transition","title":"Is this state transition allowed by the caller's workflow definition, and what is allowed instead?","description":"Given a caller-supplied state machine (transitions with optional event names and required facts), the current state and a requested event or target state, says whether the transition is allowed, which required facts are false or unknown, and which transitions are available from the current state. For an agent about to move an order, ticket, deployment or approval to its next state. Terminal states allow nothing. Ambiguous requests (one event leading to several states) are reported, not guessed. Does not know any workflow by itself and does not persist state.","roi":"Rejects an illegal state change before it is written, with the legal alternatives.","audience":"agent-infra","package":"execution-safety-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/workflow-transition","path":"/api/v1/workflow-transition","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["transitions","current","request"],"properties":{"transitions":{"type":"array","minItems":1,"maxItems":300,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":200},"to":{"type":"string","minLength":1,"maxLength":200},"event":{"type":"string","minLength":1,"maxLength":200},"requires":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":200},"description":"Names of facts that must be true."}}}},"terminal":{"type":"array","maxItems":100,"items":{"type":"string","minLength":1,"maxLength":200},"description":"States with no outgoing transitions allowed even if listed."},"current":{"type":"string","minLength":1,"maxLength":200},"request":{"type":"object","additionalProperties":false,"description":"Give event, to, or both.","properties":{"event":{"type":"string","minLength":1,"maxLength":200},"to":{"type":"string","minLength":1,"maxLength":200}}},"facts":{"type":"array","maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200},"value":{"type":"boolean"}}}}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"allowed":{"type":"boolean"},"target":{"type":"string","description":"The resolved target state, when the request resolves to one transition."},"missingFacts":{"type":"array","items":{"type":"string"},"description":"Required facts that are false."},"unknownFacts":{"type":"array","items":{"type":"string"},"description":"Required facts not supplied."},"available":{"type":"array","items":{"type":"object","properties":{"event":{"type":"string"},"to":{"type":"string"},"ready":{"type":"boolean"}}}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"allowed":{"type":"boolean"},"target":{"type":"string","description":"The resolved target state, when the request resolves to one transition."},"missingFacts":{"type":"array","items":{"type":"string"},"description":"Required facts that are false."},"unknownFacts":{"type":"array","items":{"type":"string"},"description":"Required facts not supplied."},"available":{"type":"array","items":{"type":"object","properties":{"event":{"type":"string"},"to":{"type":"string"},"ready":{"type":"boolean"}}}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"transitions":[{"from":"draft","to":"review","event":"submit","requires":["has_title"]},{"from":"review","to":"published","event":"approve","requires":["approved_by_editor"]}],"current":"draft","request":{"event":"submit"},"facts":[{"name":"has_title","value":true}]},"openapiOperation":{"operationId":"workflow_transition","summary":"Is this state transition allowed by the caller's workflow definition, and what is allowed instead?","description":"Given a caller-supplied state machine (transitions with optional event names and required facts), the current state and a requested event or target state, says whether the transition is allowed, which required facts are false or unknown, and which transitions are available from the current state. For an agent about to move an order, ticket, deployment or approval to its next state. Terminal states allow nothing. Ambiguous requests (one event leading to several states) are reported, not guessed. Does not know any workflow by itself and does not persist state.\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"agent-infra","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/workflow-transition","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["transitions","current","request"],"properties":{"transitions":{"type":"array","minItems":1,"maxItems":300,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":200},"to":{"type":"string","minLength":1,"maxLength":200},"event":{"type":"string","minLength":1,"maxLength":200},"requires":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":200},"description":"Names of facts that must be true."}}}},"terminal":{"type":"array","maxItems":100,"items":{"type":"string","minLength":1,"maxLength":200},"description":"States with no outgoing transitions allowed even if listed."},"current":{"type":"string","minLength":1,"maxLength":200},"request":{"type":"object","additionalProperties":false,"description":"Give event, to, or both.","properties":{"event":{"type":"string","minLength":1,"maxLength":200},"to":{"type":"string","minLength":1,"maxLength":200}}},"facts":{"type":"array","maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200},"value":{"type":"boolean"}}}}}},"example":{"transitions":[{"from":"draft","to":"review","event":"submit","requires":["has_title"]},{"from":"review","to":"published","event":"approve","requires":["approved_by_editor"]}],"current":"draft","request":{"event":"submit"},"facts":[{"name":"has_title","value":true}]}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"allowed":{"type":"boolean"},"target":{"type":"string","description":"The resolved target state, when the request resolves to one transition."},"missingFacts":{"type":"array","items":{"type":"string"},"description":"Required facts that are false."},"unknownFacts":{"type":"array","items":{"type":"string"},"description":"Required facts not supplied."},"available":{"type":"array","items":{"type":"object","properties":{"event":{"type":"string"},"to":{"type":"string"},"ready":{"type":"boolean"}}}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/workflow-transition/","docsJson":"https://agents.writerslogic.com/docs/workflow-transition.json","sample":"https://agents.writerslogic.com/api/v1/samples/workflow-transition","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}