schedule-bit Cloud · Developer beta

A scheduling engine as an API.

Any resource — a room, a machine, a person’s hours — is a World whose time is stored as bits. Every claim is judged at the door: you get a receipt or a reason, never silence.

Read the API Get a keyComing soon

Keys are issued by request during the developer beta.

GET /v1/health checking the dev API…
json
{
  "wrote": "0x600",
  "slots": [
    9,
    10
  ],
  "displaced": [
    {
      "occupier": "bob",
      "slots": [
        9
      ],
      "offered": {
        "parametric": 2026,
        "coordinates": [
          9,
          1
        ],
        "slots": [
          11
        ]
      }
    }
  ],
  "commitSeq": 4,
  "head": "20fc4842bffb6b9b0341187cd5c99583"
}

Three layers, one engine.

  1. 01 BITS

    schedule-bit

    Binary planes: every slot is a bit.

    API: presets, offered, positions

  2. 02 PLANES

    planes

    Occupiers, the door, the record, the watch.

    API: occupiers, claims, journal

  3. 03 RELAYS

    relay

    One job through many Worlds.

    API: hands, relays, asks

A receipt or a reason. Never both, never silence.

  1. Stopped series? 409 stopped
  2. Held by others? 409 held (by whom) Outranks them? Displace, and offer the loser a slot.
  3. Capacity left? 409 capacity
  4. Own rules pass? 409 rule / rest / horizon
  5. 201 receipt One sealed commit in the journal.

201 receipt

json
{
  "wrote": "0x600",
  "slots": [
    9,
    10
  ],
  "displaced": [
    {
      "occupier": "bob",
      "slots": [
        9
      ],
      "offered": {
        "parametric": 2026,
        "coordinates": [
          9,
          1
        ],
        "slots": [
          11
        ]
      }
    }
  ],
  "commitSeq": 4,
  "head": "20fc4842bffb6b9b0341187cd5c99583"
}

409 refused

json
{
  "type": "https://schedule-bit.dev/problems/refused/held",
  "title": "Refused",
  "status": 409,
  "detail": "slots 10 are held by alice",
  "refusal": {
    "by": "held",
    "conflictsWith": [
      "alice"
    ],
    "slots": "0x400",
    "outranked": true,
    "pinned": false
  }
}

Every refusal names why: held, capacity, rule, rest, horizon, foreign, stopped, stale…

claims:explain judges a claim without writing it.

One job, many hands.

A relay carries one job through several resources, in order, with gaps. Each leg is asked, never taken; each hand answers on its own record.

windows → starts 9, 10, 11, 12 — one AND over every hand’s free bits

See the relay → Across organisations Coming soon

Told as it lands.

Watch (WebSocket) Live

Every commit, as it lands.

Server-side only for now: browser WebSocket authentication Coming soon

Webhooks Live

Signed with HMAC-SHA256, retried with backoff: 10 tries, then a dead-letter queue.

  • commit (WebSocket only)
  • claim.made
  • claim.released
  • ask.received
  • ask.withdrawn
  • ask.answered
  • relay.acted

What holds on every call.

  • One writer per World

    Each World handles one request at a time, so two claims can never both win the same slot.

  • Tamper-evident journal

    Every hash seals the previous one; nothing is overwritten.

  • Refuses to serve an altered past

    A World rebuilds by replaying its log. If the head doesn’t match, it answers 503.

  • Idempotent writes

    Send Idempotency-Key: the same key and body return the first answer for 24 h.

  • Workspace walls

    A key sees only its own workspace’s Worlds.

  • Asks survive outages

    Asks to an unreachable hand wait, in order, and are retried every 30 s.

Start with the reference.

Read the API

dev https://schedule-bit-api-dev.khaled-mailhub.workers.dev