{"uid":"cap_BCrFC4rOl3wrGXqeKZgIm","slug":"constraint-schedule-solver-93277e6f","name":"Constraint Schedule Solver","description":"Find meeting slots that satisfy hard scheduling constraints across participants in different timezones. With the slots comes a per-constraint satisfaction certificate. Checking it costs one pass over the constraint rows, so the check is linear in the number of constraints. You never re-solve. INPUTS: each participant's availability windows, in their own IANA timezone. Plus duration, working hours, working days, blackout periods, a recurrence rule as an RFC 5545 RRULE or a cron expression, a minimum gap between slots, and a quorum. OUTPUTS: the slots in UTC, and in every participant's local time. Plus a table with one row per constraint per slot. Each row gives the required value, the observed value, and a satisfied or violated verdict with its witness. DST-correct: availability is wall-clock in each participant's zone. A window that crosses a spring-forward or fall-back transition is handled and flagged, not silently shifted. When no slot exists you get an infeasibility diagnosis. It attributes every rejected candidate to the constraint that eliminated it. Every response carries an Ed25519-signed reproducibility receipt. The receipt covers the input hash, the output hash, the engine and tzdata versions, and a timestamp. Hard wall-clock, CPU and memory caps apply per solve. They are published in every response. Free preview at /v1/preview: same response shape, same certificate, same signed receipt, 3 participants. WHAT THIS DOES NOT GUARANTEE, stated up front. 1. Slots are searched on a discrete grid you choose. The grid is granularity_minutes, or the recurrence instants. A satisfying slot lying strictly between two grid points is not found. So 'infeasible' means infeasible ON THAT GRID, not in continuous time. 2. Selection is greedy, not optimal. We return a satisfying set, never a provably maximal or best-attended one. 3. Availability is taken as declared. We consult no calendar. We cannot know about a conflict a participant did not tell us about. 4. The certificate proves the returned slots satisfy the constraints you stated. It does not prove those constraints express your intent. 5. The signature proves origin and integrity, not correctness. 6. Timezone answers are only as current as the tzdata version reported in every response. 7. If a solve hits a resource cap the status is 'capped'. NO claim of exhaustiveness is made at all.\n\nOperated by Oddments. Paid per call in USDC on Base via x402.","url":"https://s2.oddments.ai/v1/solve?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input","output"],"properties":{"input":{"type":"object","required":["type","method","bodyType","body"],"properties":{"body":{"type":"object"},"type":{"const":"http"},"method":{"const":"POST"},"bodyType":{"const":"json"}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"const":"json"},"example":{"type":"object"}}},"schemaReference":{"type":"object","required":["url","input","output"],"properties":{"url":{"type":"string"},"input":{"type":"string"},"output":{"type":"string"}},"additionalProperties":false}}},"responseSchema":{"type":"json","example":{"slots":[{"index":0,"absent":[],"end_utc":"2026-03-30T13:00:00Z","attendees":["ana","bo","cai"],"start_utc":"2026-03-30T12:00:00Z","attendance":"3/3","local_times":{"bo":{"tz":"America/New_York","end":"2026-03-30T09:00:00","start":"2026-03-30T08:00:00","utc_offset":"-04:00"},"ana":{"tz":"Europe/London","end":"2026-03-30T14:00:00","start":"2026-03-30T13:00:00","utc_offset":"+01:00"},"cai":{"tz":"Asia/Tokyo","end":"2026-03-30T22:00:00","start":"2026-03-30T21:00:00","utc_offset":"+09:00"}},"duration_minutes":60},{"index":1,"absent":[],"end_utc":"2026-03-31T13:00:00Z","attendees":["ana","bo","cai"],"start_utc":"2026-03-31T12:00:00Z","attendance":"3/3","local_times":{"bo":{"tz":"America/New_York","end":"2026-03-31T09:00:00","start":"2026-03-31T08:00:00","utc_offset":"-04:00"},"ana":{"tz":"Europe/London","end":"2026-03-31T14:00:00","start":"2026-03-31T13:00:00","utc_offset":"+01:00"},"cai":{"tz":"Asia/Tokyo","end":"2026-03-31T22:00:00","start":"2026-03-31T21:00:00","utc_offset":"+09:00"}},"duration_minutes":60}],"engine":{"python":"3.12.3","tzdata":"2026.3","service":"Oddments Constraint Schedule Solver","croniter":"6.0.0","dateutil":"2.9.0.post0","semantics":"availability and working hours are wall-clock in each participant's IANA zone, localized to UTC per occurrence; slots are half-open [start, end)","engine_version":"1.0.0"},"search":{"grid":"every 15 minutes from window.start","dst_flags_seen":[],"selection_rule":"earliest","candidates_feasible":10,"exhaustive_over_the_grid":true,"candidate_start_times_examined":189},"status":"solved","receipt":{"key_id":"992f41c6f2fb6375","algorithm":"Ed25519","input_sha256":"sha256 of your canonicalized request","output_sha256":"sha256 of this response with 'receipt' removed","signature_b64":"Ed25519 signature over the canonical signed_fields","signed_fields":["endpoint","engine","input_sha256","issued_at","key_id","output_sha256","price","receipt_version","service"],"receipt_version":"oddments-receipt/1"},"certificate":{"global":[{"id":"count","status":"satisfied","observed":"2 slot(s) returned","required":"2 slot(s) requested","constraint":"count"},{"id":"min_gap","status":"satisfied","observed":"smallest observed gap 1380 minutes","required":">= 60 minutes between consecutive slots","constraint":"min_gap"}],"summary":{"unmet":0,"violated":0,"satisfied":26,"checks_total":26,"slots_certified":2,"request_fully_satisfied":true,"returned_slots_all_valid":true},"per_slot":[{"absent":[],"checks":[{"id":"duration","status":"satisfied","observed":"60 minutes","required":"exactly 60 minutes","constraint":"duration"},{"id":"availability:cai","status":"satisfied","witness":{"tz":"Asia/Tokyo","slot_local":"2026-03-30T21:00:00 / 2026-03-30T22:00:00","participant":"cai","utc_offset_at_end":"+09:00","utc_offset_at_start":"+09:00"},"observed":"contained in declared window [2026-03-30T09:00:00Z, 2026-03-30T18:00:00Z) = 2026-03-30T18:00:00 / 2026-03-31T03:00:00 local","required":"cai free for the whole slot","attending":true,"constraint":"availability"},{"id":"working_hours:cai","status":"satisfied","observed":"cai local 21:00:00 to 22:00:00 on 2026-03-30 (ISO weekday 1); that day's working window is 2026-03-30T08:00:00 to 2026-03-30T23:00:00 local = [2026-03-29T23:00:00Z, 2026-03-30T14:00:00Z) UTC","required":"08:00-23:00 local on ISO weekday(s) 1,2,3,4,5","attending":true,"constraint":"working_hours"},{"id":"quorum","status":"satisfied","observed":"3 free: ana, bo, cai","required":"at least 3 of 3 participants free","constraint":"quorum"},{"…":"18 further rows, one per constraint per participant"}],"end_utc":"2026-03-30T13:00:00Z","attendees":["ana","bo","cai"],"start_utc":"2026-03-30T12:00:00Z","slot_index":0,"all_satisfied":true}],"how_to_verify":"Every row is checkable on its own in constant time: compare 'required' against 'observed'. You never have to re-run the search."},"status_meaning":"every requested slot was found and every constraint check passed"}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.05","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"down","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.05/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_hzwfFbol2VCpWACB9zyFC","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.05","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Finds meeting time slots satisfying hard scheduling constraints across participants in multiple timezones, returning slots in UTC and local times with a per-constraint satisfaction certificate","exampleAgentPrompt":"Find 2 one-hour meeting slots for Ana (available weekdays 9am–6pm London time), Bo (available weekdays 8am–5pm New York time), and Cai (available weekdays 8am–10pm Tokyo time) between March 30 and April 15 2026, with at least 60 minutes between slots, all three must attend, and give me a constraint certificate showing each rule was satisfied.","exampleUseCases":[{"title":"Global engineering standup scheduling","prompt":"I need to find 3 recurring weekly standup slots for our engineering team: Priya is available Mon–Fri 9am–6pm in Asia/Kolkata, Lars is available Mon–Fri 8am–5pm in Europe/Berlin, and Maria is available Mon–Fri 9am–5pm in America/Chicago. Meetings should be 30 minutes, at least 10080 minutes apart, all 3 must attend, and I want the first occurrence between May 5 and May 30 2026. Show me a constraint certificate so I can verify every rule was met."},{"title":"Cross-timezone board meeting with blackouts","prompt":"Schedule a 90-minute board meeting for 4 executives: Hana (Asia/Tokyo, available Mon–Fri 10am–7pm), Derek (America/Los_Angeles, available Mon–Fri 8am–5pm), Sophie (Europe/Paris, available Mon–Fri 9am–6pm), and James (Australia/Sydney, available Mon–Fri 9am–6pm). Blackout the week of April 14–18 2026. Find the first available slot between April 7 and April 30 2026, quorum is all 4, and tell me if there's no valid slot and why."},{"title":"Recruiting interview block with minimum gaps","prompt":"Find 5 interview slots for a candidate who is free weekdays 10am–4pm in America/New_York and our interviewer panel who are free Mon–Fri 9am–5pm in Europe/Amsterdam, each interview is 45 minutes, leave at least 120 minutes between interviews, searching from June 2 to June 20 2026, and give me a full per-constraint satisfaction table."}],"resultDescription":"A JSON object containing: (1) an array of solved meeting slots each with start/end in UTC, local start/end times and UTC offsets for every participant, duration, and attendee list; (2) a certificate object with a global constraints section, a per-slot per-constraint table (each row showing required value, observed value, and satisfied/violated verdict with a witness), and a summary of total checks, satisfied count, and whether the request was fully satisfied; (3) search metadata including grid resolution, DST flags encountered, number of candidate start times examined, and selection rule used; (4) a cryptographic receipt with an Ed25519 signature over the canonical input and output hashes; (5) an infeasibility diagnosis when no slot exists.","failureModes":["No feasible slot exists — returns infeasibility diagnosis identifying which constraints could not be simultaneously satisfied","DST transition crossing a participant window — flagged in dst_flags_seen and handled correctly but may reduce available slots","Invalid IANA timezone identifier — likely returns a validation error","Malformed RRULE or cron expression — returns a parse error","Quorum cannot be met because too few participants have overlapping availability — infeasibility diagnosis specifies the bottleneck","Blackout periods cover the entire search range — infeasibility returned with diagnosis"],"whenToPreferThis":"Choose this endpoint when you need verifiable, certified scheduling — not just a list of open slots, but cryptographic proof that every hard constraint (working hours, timezones, blackouts, recurrence, quorum, minimum gaps) was checked and satisfied. Prefer it over generic calendar APIs when participants span multiple timezones with DST-sensitive windows, when you need an audit trail or compliance certificate for each constraint row, or when you need an infeasibility diagnosis rather than a silent empty result. It is especially suited for automated agent workflows that must prove correctness rather than just report availability.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-13T09:26:45.187Z","isFirstParty":false,"canonicalSlug":"constraint-schedule-solver-93277e6f"}