GreatWait Greatwait API

The Greatwait API from GreatWait — 1 operation(s) for greatwait.

GitHub OpenAPI

Operations 1

GET /__greatwait/version Read the deployed version #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/greatwait-dev:greatwait-dev-greatwait-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

greatwait-dev-greatwait-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Generated from packages/contracts. Do not edit. This document describes the GreatWait API. NOTE: Zod refinements do not survive JSON Schema conversion, so a described schema is weaker than the one the service enforces — it accepts any string where the service requires a canonical IANA timezone or a real calendar date. Response schemas are described in output mode and request schemas in input mode. The contracts package is the validation authority in both directions.'
  title: V1 Greatwait API
  version: '2026-08-22'
tags:
- name: Greatwait
paths:
  /__greatwait/version:
    get:
      description: 'Reports the service, deployment and build the request reached. Unauthenticated: it carries no customer data and is used by canaries and deployment smoke checks.'
      operationId: meta.version
      parameters: []
      responses:
        '200':
          content:
            application/json:
              example:
                buildSha: 9f2c1ab
                environment: development
                service: '@greatwait/api'
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  buildSha:
                    type: string
                    minLength: 1
                  environment:
                    type: string
                    minLength: 1
                  service:
                    type: string
                    minLength: 1
                required:
                - buildSha
                - environment
                - service
          description: Read the deployed version
        '429':
          content:
            application/problem+json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    x-problem-codes:
                    - rate_limited
                  detail:
                    type: string
                    minLength: 1
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        pointer:
                          type: string
                          pattern: ^\/.*
                        reason:
                          type: string
                          minLength: 1
                      required:
                      - pointer
                      - reason
                  retryAfterSeconds:
                    type: integer
                    exclusiveMinimum: 0
                    maximum: 9007199254740991
                  status:
                    type: integer
                    minimum: 400
                    maximum: 599
                  title:
                    type: string
                    minLength: 1
                  traceId:
                    type: string
                    minLength: 1
                  type:
                    type: string
                    const: about:blank
                required:
                - code
                - status
                - title
                - type
          description: 'Problem document. Possible codes at this status: rate_limited.'
        '503':
          content:
            application/problem+json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    x-problem-codes:
                    - capability_not_configured
                    - service_unavailable
                  detail:
                    type: string
                    minLength: 1
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        pointer:
                          type: string
                          pattern: ^\/.*
                        reason:
                          type: string
                          minLength: 1
                      required:
                      - pointer
                      - reason
                  retryAfterSeconds:
                    type: integer
                    exclusiveMinimum: 0
                    maximum: 9007199254740991
                  status:
                    type: integer
                    minimum: 400
                    maximum: 599
                  title:
                    type: string
                    minLength: 1
                  traceId:
                    type: string
                    minLength: 1
                  type:
                    type: string
                    const: about:blank
                required:
                - code
                - status
                - title
                - type
          description: 'Problem document. Possible codes at this status: capability_not_configured, service_unavailable.'
      summary: Read the deployed version
      tags:
      - Greatwait
components:
  securitySchemes:
    apiCredential:
      description: Scoped API credential bound to one organization and project.
      scheme: bearer
      type: http
    memberSession:
      description: A signed-in member's session token. Unlike a credential or an access token it carries no project, so a request using it must also send the project header below.
      scheme: bearer
      type: http
    memberSessionProject:
      description: Which project in the member's organization the request acts in. Checked against that organization; a project belonging to another answers exactly as one that does not exist.
      in: header
      name: Greatwait-Project
      type: apiKey
x-greatwait-callback-delivery-signature:
  envelope:
    propertyOrder:
    - version
    - type
    - scheduleId
    - occurrenceId
    - plannedFor
    - attempt
    - completion
    - trigger
    - data
    completionPropertyOrder:
    - token
    - url
    - deadline
    propertyOrder_2026_08_08:
    - version
    - type
    - scheduleId
    - occurrenceId
    - plannedFor
    - attempt
    - completion
    - trigger
    - data
    propertyOrder_2026_07_01:
    - version
    - type
    - scheduleId
    - occurrenceId
    - plannedFor
    - attempt
    - data
    serialization: compact UTF-8 JSON with the stated top-level property order
    trigger:
      automatic: A first attempt or a retry the system chose. Nobody asked for it, it may repeat work already done, and a receiver must run the occurrence at most once.
      default: An envelope with no trigger field is automatic. Only 2026-07-01 can omit it.
      propertyOrder:
      - kind
      - sourceAttemptId
      ordinal: attempt. It only ever increases within an occurrence and every copy of one redelivery carries the same value, so a receiver recognises a repeat by keeping the highest it has run to completion rather than by keeping them all.
      redelivery: A person ordered this delivery under the occurrences:redeliver scope. sourceAttemptId names the retained attempt they chose to follow and is there to show them, not to decide whether the work runs — attempt is what decides that. It is a request for the work to happen again, and a receiver that suppresses it as a duplicate answers a deliberate instruction with silence.
      requirement: run the handler again for a redelivery whose attempt is above the highest this receiver has run to completion for the occurrence, keep suppressing every automatic delivery of a completed occurrence, and suppress every redelivery at or below that high-water mark
    version: '2026-08-23'
    versions:
    - '2026-07-01'
    - '2026-08-08'
    - '2026-08-23'
  headers:
    contentType: application/json
    required:
    - Content-Type
    - Callback-Delivery-Id
    - Callback-Occurrence-Id
    - Callback-Timestamp
    - Callback-Key-Id
    - Callback-Signature
  replay:
    identity: Callback-Delivery-Id
    requirement: atomically reject a previously accepted delivery id before parsing
  signature:
    algorithm: HMAC-SHA-256
    format: v1=<64 lowercase hexadecimal characters>
    input: ASCII <Callback-Timestamp>.<Callback-Delivery-Id>. followed by the exact raw request body bytes
    scheme: v1
    timestampToleranceSeconds: 300
  legacyTestVector:
    envelope:
      attempt: 1
      data: {}
      occurrenceId: occ_0123456789abcdefghjkmnpqrs
      plannedFor: '2026-07-28T15:00:00.000Z'
      scheduleId: sch_0123456789abcdefghjkmnpqrs
      type: schedule.occurrence
      version: '2026-07-01'
    exactBodyBase64: eyJ2ZXJzaW9uIjoiMjAyNi0wNy0wMSIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJkYXRhIjp7fX0=
    exactBodyUtf8: '{"version":"2026-07-01","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"data":{}}'
    headers:
      Callback-Delivery-Id: dlv_0123456789abcdefghjkmnpqrs
      Callback-Key-Id: csk_0123456789abcdefghjkmnpqrs
      Callback-Occurrence-Id: occ_0123456789abcdefghjkmnpqrs
      Callback-Signature: v1=11135fdfc0bc5d49ebcc9d3a0d8df1116179097cefe961c6eca281339e5cfab3
      Callback-Timestamp: '2026-07-28T15:00:00.000Z'
      Content-Type: application/json
    secret: greatwait-signature-vector-key-not-a-credential
    signingInputBase64: MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA3LTAxIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImRhdGEiOnt9fQ==
    signingInputUtf8: 2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{"version":"2026-07-01","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"data":{}}
  triggerTestVector:
    envelope:
      attempt: 1
      data: {}
      occurrenceId: occ_0123456789abcdefghjkmnpqrs
      plannedFor: '2026-07-28T15:00:00.000Z'
      scheduleId: sch_0123456789abcdefghjkmnpqrs
      trigger:
        kind: automatic
      type: schedule.occurrence
      version: '2026-08-08'
    exactBodyBase64: eyJ2ZXJzaW9uIjoiMjAyNi0wOC0wOCIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6e319
    exactBodyUtf8: '{"version":"2026-08-08","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"trigger":{"kind":"automatic"},"data":{}}'
    headers:
      Callback-Delivery-Id: dlv_0123456789abcdefghjkmnpqrs
      Callback-Key-Id: csk_0123456789abcdefghjkmnpqrs
      Callback-Occurrence-Id: occ_0123456789abcdefghjkmnpqrs
      Callback-Signature: v1=bd96c6d68a5c0521c18600d92913ce4dcf32036f2c930d0f9db9de55da9280e7
      Callback-Timestamp: '2026-07-28T15:00:00.000Z'
      Content-Type: application/json
    secret: greatwait-signature-vector-key-not-a-credential
    signingInputBase64: MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTA4IiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsInRyaWdnZXIiOnsia2luZCI6ImF1dG9tYXRpYyJ9LCJkYXRhIjp7fX0=
    signingInputUtf8: 2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{"version":"2026-08-08","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"trigger":{"kind":"automatic"},"data":{}}
  completionTestVector:
    envelope:
      attempt: 1
      completion:
        token: v1.example-claim-not-a-real-token.example-mac
        url: https://greatwait-scheduler.example/callbacks/completion
      data: {}
      occurrenceId: occ_0123456789abcdefghjkmnpqrs
      plannedFor: '2026-07-28T15:00:00.000Z'
      scheduleId: sch_0123456789abcdefghjkmnpqrs
      trigger:
        kind: automatic
      type: schedule.occurrence
      version: '2026-08-08'
    exactBodyBase64: eyJ2ZXJzaW9uIjoiMjAyNi0wOC0wOCIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjEuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24ifSwidHJpZ2dlciI6eyJraW5kIjoiYXV0b21hdGljIn0sImRhdGEiOnt9fQ==
    exactBodyUtf8: '{"version":"2026-08-08","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"completion":{"token":"v1.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion"},"trigger":{"kind":"automatic"},"data":{}}'
    headers:
      Callback-Delivery-Id: dlv_0123456789abcdefghjkmnpqrs
      Callback-Key-Id: csk_0123456789abcdefghjkmnpqrs
      Callback-Occurrence-Id: occ_0123456789abcdefghjkmnpqrs
      Callback-Signature: v1=38c6d854051087ed408a5f6252d90375859f305aeb0bca1c3f3a5bb63135e138
      Callback-Timestamp: '2026-07-28T15:00:00.000Z'
      Content-Type: application/json
    secret: greatwait-signature-vector-key-not-a-credential
    signingInputBase64: MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTA4IiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2MS5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6e319
    signingInputUtf8: 2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{"version":"2026-08-08","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"completion":{"token":"v1.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion"},"trigger":{"kind":"automatic"},"data":{}}
  redeliveryTestVector:
    envelope:
      attempt: 2
      completion:
        deadline: '2026-07-28T15:00:05.000Z'
        token: v2.example-claim-not-a-real-token.example-mac
        url: https://greatwait-scheduler.example/callbacks/completion
      data: {}
      occurrenceId: occ_0123456789abcdefghjkmnpqrs
      plannedFor: '2026-07-28T15:00:00.000Z'
      scheduleId: sch_0123456789abcdefghjkmnpqrs
      trigger:
        kind: redelivery
        sourceAttemptId: att_0123456789abcdefghjkmnpqrs
      type: schedule.occurrence
      version: '2026-08-23'
    exactBodyBase64: eyJ2ZXJzaW9uIjoiMjAyNi0wOC0yMyIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoyLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjIuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24iLCJkZWFkbGluZSI6IjIwMjYtMDctMjhUMTU6MDA6MDUuMDAwWiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJyZWRlbGl2ZXJ5Iiwic291cmNlQXR0ZW1wdElkIjoiYXR0XzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIn0sImRhdGEiOnt9fQ==
    exactBodyUtf8: '{"version":"2026-08-23","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":2,"completion":{"token":"v2.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion","deadline":"2026-07-28T15:00:05.000Z"},"trigger":{"kind":"redelivery","sourceAttemptId":"att_0123456789abcdefghjkmnpqrs"},"data":{}}'
    headers:
      Callback-Delivery-Id: dlv_0123456789abcdefghjkmnpqrs
      Callback-Key-Id: csk_0123456789abcdefghjkmnpqrs
      Callback-Occurrence-Id: occ_0123456789abcdefghjkmnpqrs
      Callback-Signature: v1=9d698aed6d05dcd964f00d6e6796aab238f4f50e6f5cfeb61751fd7850778a04
      Callback-Timestamp: '2026-07-28T15:00:00.000Z'
      Content-Type: application/json
    secret: greatwait-signature-vector-key-not-a-credential
    signingInputBase64: MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTIzIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjIsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2Mi5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiIsImRlYWRsaW5lIjoiMjAyNi0wNy0yOFQxNTowMDowNS4wMDBaIn0sInRyaWdnZXIiOnsia2luZCI6InJlZGVsaXZlcnkiLCJzb3VyY2VBdHRlbXB0SWQiOiJhdHRfMDEyMzQ1Njc4OWFiY2RlZmdoamttbnBxcnMifSwiZGF0YSI6e319
    signingInputUtf8: 2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{"version":"2026-08-23","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":2,"completion":{"token":"v2.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion","deadline":"2026-07-28T15:00:05.000Z"},"trigger":{"kind":"redelivery","sourceAttemptId":"att_0123456789abcdefghjkmnpqrs"},"data":{}}
  testVector:
    envelope:
      attempt: 1
      completion:
        deadline: '2026-07-28T15:00:05.000Z'
        token: v2.example-claim-not-a-real-token.example-mac
        url: https://greatwait-scheduler.example/callbacks/completion
      data: {}
      occurrenceId: occ_0123456789abcdefghjkmnpqrs
      plannedFor: '2026-07-28T15:00:00.000Z'
      scheduleId: sch_0123456789abcdefghjkmnpqrs
      trigger:
        kind: automatic
      type: schedule.occurrence
      version: '2026-08-23'
    exactBodyBase64: eyJ2ZXJzaW9uIjoiMjAyNi0wOC0yMyIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjIuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24iLCJkZWFkbGluZSI6IjIwMjYtMDctMjhUMTU6MDA6MDUuMDAwWiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6e319
    exactBodyUtf8: '{"version":"2026-08-23","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"completion":{"token":"v2.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion","deadline":"2026-07-28T15:00:05.000Z"},"trigger":{"kind":"automatic"},"data":{}}'
    headers:
      Callback-Delivery-Id: dlv_0123456789abcdefghjkmnpqrs
      Callback-Key-Id: csk_0123456789abcdefghjkmnpqrs
      Callback-Occurrence-Id: occ_0123456789abcdefghjkmnpqrs
      Callback-Signature: v1=5bf68b786fbac1afa7e3474ae5039ad27900b0185bca43a3e45185d56315a312
      Callback-Timestamp: '2026-07-28T15:00:00.000Z'
      Content-Type: application/json
    secret: greatwait-signature-vector-key-not-a-credential
    signingInputBase64: MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTIzIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2Mi5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiIsImRlYWRsaW5lIjoiMjAyNi0wNy0yOFQxNTowMDowNS4wMDBaIn0sInRyaWdnZXIiOnsia2luZCI6ImF1dG9tYXRpYyJ9LCJkYXRhIjp7fX0=
    signingInputUtf8: 2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{"version":"2026-08-23","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"completion":{"token":"v2.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion","deadline":"2026-07-28T15:00:05.000Z"},"trigger":{"kind":"automatic"},"data":{}}
  unicodeTestVector:
    envelope:
      attempt: 1
      completion:
        deadline: '2026-07-28T15:00:05.000Z'
        token: v2.example-claim-not-a-real-token.example-mac
        url: https://greatwait-scheduler.example/callbacks/completion
      data:
        note: café ☃
      occurrenceId: occ_0123456789abcdefghjkmnpqrs
      plannedFor: '2026-07-28T15:00:00.000Z'
      scheduleId: sch_0123456789abcdefghjkmnpqrs
      trigger:
        kind: automatic
      type: schedule.occurrence
      version: '2026-08-23'
    exactBodyBase64: eyJ2ZXJzaW9uIjoiMjAyNi0wOC0yMyIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjIuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24iLCJkZWFkbGluZSI6IjIwMjYtMDctMjhUMTU6MDA6MDUuMDAwWiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6eyJub3RlIjoiY2Fmw6kg4piDIn19
    exactBodyUtf8: '{"version":"2026-08-23","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"completion":{"token":"v2.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion","deadline":"2026-07-28T15:00:05.000Z"},"trigger":{"kind":"automatic"},"data":{"note":"café ☃"}}'
    headers:
      Callback-Delivery-Id: dlv_0123456789abcdefghjkmnpqrs
      Callback-Key-Id: csk_0123456789abcdefghjkmnpqrs
      Callback-Occurrence-Id: occ_0123456789abcdefghjkmnpqrs
      Callback-Signature: v1=18a8d1c50ea54bd0a5ec27abe80d1c98e44a7f358ecf8f06615c174075100e72
      Callback-Timestamp: '2026-07-28T15:00:00.000Z'
      Content-Type: application/json
    secret: greatwait-signature-vector-key-not-a-credential
    signingInputBase64: MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTIzIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2Mi5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiIsImRlYWRsaW5lIjoiMjAyNi0wNy0yOFQxNTowMDowNS4wMDBaIn0sInRyaWdnZXIiOnsia2luZCI6ImF1dG9tYXRpYyJ9LCJkYXRhIjp7Im5vdGUiOiJjYWbDqSDimIMifX0=
    signingInputUtf8: 2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{"version":"2026-08-23","type":"schedule.occurrence","scheduleId":"sch_0123456789abcdefghjkmnpqrs","occurrenceId":"occ_0123456789abcdefghjkmnpqrs","plannedFor":"2026-07-28T15:00:00.000Z","attempt":1,"completion":{"token":"v2.example-claim-not-a-real-token.example-mac","url":"https://greatwait-scheduler.example/callbacks/completion","deadline":"2026-07-28T15:00:05.000Z"},"trigger":{"kind":"automatic"},"data":{"note":"café ☃"}}
  version: '2026-08-23'
  envelopeSchema:
    $schema: https://json-schema.org/draft/2020-12/schema
    oneOf:
    - type: object
      properties:
        attempt:
          type: integer
          exclusiveMinimum: 0
          maximum: 9007199254740991
        data: {}
        occurrenceId:
          type: string
          pattern: ^occ_[0-9abcdefghjkmnpqrstvwxyz]{26}$
        plannedFor:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
        scheduleId:
          type: string
          pattern: ^sch_[0-9abcdefghjkmnpqrstvwxyz]{26}$
        type:
          type: string
          const: schedule.occurrence
        version:
          type: string
          const: '2026-07-01'
      required:
      - attempt
      - data
      - occurrenceId
      - plannedFor
      - scheduleId
      - type
      - version
    - type: object
      properties:
        attempt:
          type: integer
          exclusiveMinimum: 0
          maximum: 9007199254740991
        data: {}
        occurrenceId:
          type: string
          pattern: ^occ_[0-9abcdefghjkmnpqrstvwxyz]{26}$
        plannedFor:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
        scheduleId:
          type: string
          pattern: ^sch_[0-9abcdefghjkmnpqrstvwxyz]{26}$
        type:
          type: string
          const: schedule.occurrence
        completion:
          type: object
          properties:
            token:
              type: string
              minLength: 1
            url:
              type: string
              format: uri
          required:
          - token
          - url
        trigger:
          oneOf:
          - type: object
            properties:
              kind:
                type: string
                const: automatic
            required:
            - kind
          - type: object
            properties:
              kind:
                type: string
                const: redelivery
              sourceAttemptId:
                type: string
                pattern: ^att_[0-9abcdefghjkmnpqrstvwxyz]{26}$
            required:
            - kind
            - sourceAttemptId
        version:
          type: string
          const: '2026-08-08'
      required:
      - attempt
      - data
      - occurrenceId
      - plannedFor
      - scheduleId
      - type
      - trigger
      - version
    - type: object
      properties:
        attempt:
          type: integer
          exclusiveMinimum: 0
          maximum: 9007199254740991
        data: {}
        occurrenceId:
          type: string
          pattern: ^occ_[0-9abcdefghjkmnpqrstvwxyz]{26}$
        plannedFor:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
        scheduleId:
          type: string
          pattern: ^sch_[0-9abcdefghjkmnpqrstvwxyz]{26}$
        type:
          type: string
          const: schedule.occurrence
        completion:
          type: object
          properties:
            deadline:
              type: string
              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
            token:
              type: string
              minLength: 1
            url:
              type: string
              format: uri
          required:
          - deadline
          - token
          - url
        trigger:
          oneOf:
          - type: object
            properties:
              kind:
                type: string
                const: automatic
            required:
            - kind
          - type: object
            properties:
              kind:
                type: string
                const: redelivery
              sourceAttemptId:
                type: string
                pattern: ^att_[0-9abcdefghjkmnpqrstvwxyz]{26}$
            required:
            - kind
            - sourceAttemptId
        version:
          type: string
          const: '2026-08-23'
      required:
      - attempt
      - data
      - occurrenceId
      - plannedFor
      - scheduleId
      - type
      - completion
      - trigger
      - version
x-greatwait-callback-receiver:
  idempotency:
    occurrence:
      identity: Callback-Occurrence-Id
      note: Every automatic delivery of one occurrence — the first attempt and every retry the system chose — is at most one execution. A receiver claims the occurrence atomically and answers 200 for every later automatic delivery of it. This is what makes at-least-once delivery safe; a receiver that needs a second execution asks for a second occurrence, or a person orders a redelivery.
      requirement: claim the occurrence atomically before running the handler; release the claim if the handler fails so a later attempt can retry it
    redelivery:
      identity: Callback-Occurrence-Id together with the signed attempt number, which is the redelivery's ordinal
      note: A redelivery is a deliberate, authorized instruction to do the work again. Suppressing it as a duplicate answers a person with silence, which is what a customer pressing redeliver after fixing their endpoint experiences as the attempt succeeding while nothing happens.
      optOut: A receiver that genuinely requires strict once-only per occurrence chooses it explicitly and keeps answering duplicate. It is an opt-out, not the default, because a default of suppression makes the product lie to the person who pressed the button.
      ordering: attempt only ever increases within an occurrence and every copy of one redelivery carries the same value, so a receiver keeps the highest redelivery it has run to completion and refuses anything at or below it. That is what recognises a copy delayed in a proxy, a queue or an abandoned connection, however late it arrives and however many redeliveries have completed since. Remembering only the most recent instruction cannot do this and will run a customer's work twice; remembering every instruction can, at the cost of a store that grows without bound. sourceAttemptId names the attempt the person chose to follow and is there to show them, not to decide whether the work runs.
      requirement: run the handler again for a redelivery whose attempt is above the highest this receiver has run to completion for the occurrence, and suppress every redelivery at or below that high-water mark
      strictness: 'A receiver that chose strict once-only suppresses every delivery for an occurrence once anything has finished, whatever caused it. Reading strictness as a rule about redeliveries alone leaves a hole: a strict receiver that processed a redelivery first would then admit a delayed automatic delivery and run a payment twice.'
      warranty: Each accepted redelivery is one logical run. Repeats are suppressed once the receiver has durably completed that run — not from the moment it starts one. A handler that performs its external effect and then dies before its claim is settled will be run again when the lease expires, which is the honest limit of what any at-least-once receiver can promise. A customer whose effect must happen exactly once commits the occurrence and ordinal alongside their own state, or passes them downstream as an idempotency key.
    replay:
      identity: Callback-Delivery-Id
      requirement: reject a previously accepted delivery identity before parsing, and answer 200 — a duplicated request is not a failure
  claimRules:
  - another delivery holds an unexpired lease, whatever the run, so an ordered redelivery never runs alongside the attempt it follows -> in_flight


# --- truncated at 32 KB (33 KB total) ---
# Full source: https://artifacts.apis.io/greatwait-dev/openapi/greatwait-dev-greatwait-api-openapi.yml