{"id":"temporal-constraints","title":"Are these timing constraints satisfiable? Earliest/latest time per event, or the conflicting constraints","description":"Solves a simple temporal network: up to 40 named time points, up to 200 difference constraints 'b is between min and max minutes after a' and optional fixed instants, relative to a caller origin instant. When consistent it returns each point's earliest and latest feasible instant (where bounded); when not, it returns the cycle of constraints that contradict each other, with the total impossible slack in minutes. Built for an agent checking an itinerary, project plan or SLA chain ('review within 2 days of draft, filing at least 3 days after review, filing fixed on a date'). Integer minutes only; no calendars or business days (compute those with business-deadline first), and disjunctions ('A before B or B before A') are not expressible.","roi":"Contradictory deadline chains are found in one call instead of by a failed plan.","audience":"business","package":"calendar-deadline-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/temporal-constraints","path":"/api/v1/temporal-constraints","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["origin","points","constraints"],"properties":{"origin":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[Tt ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|z|[+-]\\d{2}:?\\d{2})$","maxLength":36,"description":"Instant that point 'origin' (an implicit extra point) is at; all minutes are relative to it."},"points":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,40}$","maxLength":40}},"constraints":{"type":"array","maxItems":200,"items":{"type":"object","required":["a","b"],"properties":{"id":{"type":"string","maxLength":40},"a":{"type":"string","maxLength":40},"b":{"type":"string","maxLength":40},"minMinutes":{"type":"integer","minimum":-10000000,"maximum":10000000,"description":"b - a >= min"},"maxMinutes":{"type":"integer","minimum":-10000000,"maximum":10000000,"description":"b - a <= max"}}}},"fixed":{"type":"array","maxItems":40,"items":{"type":"object","required":["point","at"],"properties":{"point":{"type":"string","maxLength":40},"at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[Tt ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|z|[+-]\\d{2}:?\\d{2})$","maxLength":36}}}}}},"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."},"consistent":{"type":"boolean"},"windows":{"type":"array","items":{"type":"object","properties":{"point":{"type":"string"},"earliestUtc":{"type":"string"},"latestUtc":{"type":"string"},"earliestMinutes":{"type":"integer"},"latestMinutes":{"type":"integer"},"slackMinutes":{"type":"integer"}}}},"unbounded":{"type":"array","items":{"type":"string"},"description":"Points with no finite earliest or latest time relative to the origin."},"conflict":{"type":"array","items":{"type":"object","properties":{"constraint":{"type":"string"},"text":{"type":"string"}}},"description":"Constraints forming a contradictory cycle."},"impossibleByMinutes":{"type":"integer"},"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."},"consistent":{"type":"boolean"},"windows":{"type":"array","items":{"type":"object","properties":{"point":{"type":"string"},"earliestUtc":{"type":"string"},"latestUtc":{"type":"string"},"earliestMinutes":{"type":"integer"},"latestMinutes":{"type":"integer"},"slackMinutes":{"type":"integer"}}}},"unbounded":{"type":"array","items":{"type":"string"},"description":"Points with no finite earliest or latest time relative to the origin."},"conflict":{"type":"array","items":{"type":"object","properties":{"constraint":{"type":"string"},"text":{"type":"string"}}},"description":"Constraints forming a contradictory cycle."},"impossibleByMinutes":{"type":"integer"},"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":{"origin":"2026-11-02T09:00:00Z","points":["draft","review","filing"],"constraints":[{"id":"c1","a":"draft","b":"review","minMinutes":0,"maxMinutes":2880},{"id":"c2","a":"review","b":"filing","minMinutes":4320}],"fixed":[{"point":"draft","at":"2026-11-02T09:00:00Z"},{"point":"filing","at":"2026-11-09T09:00:00Z"}]},"openapiOperation":{"operationId":"temporal_constraints","summary":"Are these timing constraints satisfiable? Earliest/latest time per event, or the conflicting constraints","description":"Solves a simple temporal network: up to 40 named time points, up to 200 difference constraints 'b is between min and max minutes after a' and optional fixed instants, relative to a caller origin instant. When consistent it returns each point's earliest and latest feasible instant (where bounded); when not, it returns the cycle of constraints that contradict each other, with the total impossible slack in minutes. Built for an agent checking an itinerary, project plan or SLA chain ('review within 2 days of draft, filing at least 3 days after review, filing fixed on a date'). Integer minutes only; no calendars or business days (compute those with business-deadline first), and disjunctions ('A before B or B before A') are not expressible.\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":"business","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/temporal-constraints","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["origin","points","constraints"],"properties":{"origin":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[Tt ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|z|[+-]\\d{2}:?\\d{2})$","maxLength":36,"description":"Instant that point 'origin' (an implicit extra point) is at; all minutes are relative to it."},"points":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,40}$","maxLength":40}},"constraints":{"type":"array","maxItems":200,"items":{"type":"object","required":["a","b"],"properties":{"id":{"type":"string","maxLength":40},"a":{"type":"string","maxLength":40},"b":{"type":"string","maxLength":40},"minMinutes":{"type":"integer","minimum":-10000000,"maximum":10000000,"description":"b - a >= min"},"maxMinutes":{"type":"integer","minimum":-10000000,"maximum":10000000,"description":"b - a <= max"}}}},"fixed":{"type":"array","maxItems":40,"items":{"type":"object","required":["point","at"],"properties":{"point":{"type":"string","maxLength":40},"at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[Tt ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|z|[+-]\\d{2}:?\\d{2})$","maxLength":36}}}}}},"example":{"origin":"2026-11-02T09:00:00Z","points":["draft","review","filing"],"constraints":[{"id":"c1","a":"draft","b":"review","minMinutes":0,"maxMinutes":2880},{"id":"c2","a":"review","b":"filing","minMinutes":4320}],"fixed":[{"point":"draft","at":"2026-11-02T09:00:00Z"},{"point":"filing","at":"2026-11-09T09:00:00Z"}]}}}},"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."},"consistent":{"type":"boolean"},"windows":{"type":"array","items":{"type":"object","properties":{"point":{"type":"string"},"earliestUtc":{"type":"string"},"latestUtc":{"type":"string"},"earliestMinutes":{"type":"integer"},"latestMinutes":{"type":"integer"},"slackMinutes":{"type":"integer"}}}},"unbounded":{"type":"array","items":{"type":"string"},"description":"Points with no finite earliest or latest time relative to the origin."},"conflict":{"type":"array","items":{"type":"object","properties":{"constraint":{"type":"string"},"text":{"type":"string"}}},"description":"Constraints forming a contradictory cycle."},"impossibleByMinutes":{"type":"integer"},"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/temporal-constraints/","docsJson":"https://agents.writerslogic.com/docs/temporal-constraints.json","sample":"https://agents.writerslogic.com/api/v1/samples/temporal-constraints","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"}}