GreatWait Greatwait API
The Greatwait API from GreatWait — 1 operation(s) for greatwait.
The Greatwait API from GreatWait — 1 operation(s) for greatwait.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/greatwait-dev:greatwait-dev-greatwait-api"
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.
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: 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