{
    "openapi": "3.1.0",
    "info": {
        "title": "All My Ducks API",
        "version": "v1",
        "description": "The All My Ducks REST API. The web app, the MCP server and the phones use these same routes, with the same permissions and the same privacy rules.\n\nRequests and responses are JSON, and resources come wrapped in data. Dates are YYYY-MM-DD in the promiser’s time zone; timestamps are UTC ISO 8601.\n\nErrors use standard codes: 401 a missing, wrong or revoked key; 403 not allowed, or outside a workspace key’s workspace; 404 not yours to see; 422 a field missing or wrong, with a message and per-field errors; 409 an action the state of a commitment no longer allows; 402 a plan has no room, with the words to show, the code plan_limit and which limit it was. Each operation lists the refusals the reference shows for it."
    },
    "servers": [
        {
            "url": "https://allmyducks.app/api/v1"
        }
    ],
    "externalDocs": {
        "url": "https://allmyducks.app/docs/api"
    },
    "tags": [
        {
            "name": "You and your workspaces"
        },
        {
            "name": "Commitment endpoints"
        },
        {
            "name": "Acting on a commitment"
        },
        {
            "name": "Things that repeat"
        },
        {
            "name": "Projects"
        },
        {
            "name": "Webhooks"
        },
        {
            "name": "Before anyone is signed in"
        }
    ],
    "paths": {
        "/commitments/{commitment}": {
            "delete": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "Delete a task for yourself: shared promises are wrapped up, never erased",
                "operationId": "deleteCommitmentsByCommitment",
                "description": "restorable says whether POST /commitments/{commitment}/restore would succeed now, which is what to offer an undo on. It is false only for an open item of a series that has opened its next one: a series has one open at a time. Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The task to delete.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "restorable": true
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "get": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "One commitment, with its history",
                "operationId": "getCommitmentsByCommitment",
                "description": "details is the description as stored, or null, and goes to everyone who can see the item. details_changed is who last changed it and when, or null, and is on every answer about one item and the export, never in a list: it is null for the person who made the change, for somebody who is only shown the item, and while it is an ask, waiting or said no to. Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to show.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "examples": {
                                    "answer": {
                                        "value": {
                                            "data": {
                                                "id": "0199a000-0000-7000-8000-000000000020",
                                                "workspace": {
                                                    "id": "0199a000-0000-7000-8000-000000000014",
                                                    "name": "Acme",
                                                    "type": "team",
                                                    "colour": null
                                                },
                                                "project": {
                                                    "id": "0199a000-0000-7000-8000-000000000058",
                                                    "name": "Launch",
                                                    "tag": "launch"
                                                },
                                                "description": "Send the launch copy",
                                                "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                                "details_changed": null,
                                                "state": "active",
                                                "source": "manual",
                                                "due_date": "2026-10-15",
                                                "end_date": null,
                                                "due_timezone": "Europe/London",
                                                "due_time": null,
                                                "due_at": null,
                                                "is_private": false,
                                                "visibility": "owner",
                                                "seen_by": [],
                                                "fyi": false,
                                                "steps": [
                                                    {
                                                        "id": "0199a000-0000-7000-8000-000000000053",
                                                        "text": "Draft the hero line",
                                                        "done": true
                                                    },
                                                    {
                                                        "id": "0199a000-0000-7000-8000-000000000054",
                                                        "text": "Check it with Priya",
                                                        "done": false
                                                    },
                                                    {
                                                        "id": "0199a000-0000-7000-8000-000000000055",
                                                        "text": "Send it to design",
                                                        "done": false
                                                    }
                                                ],
                                                "release_requested": false,
                                                "request_expires_at": null,
                                                "is_slipped": false,
                                                "in_grace_window": false,
                                                "grace_closed": false,
                                                "at_risk": false,
                                                "dormant": false,
                                                "quiet_days": 0,
                                                "placement": {
                                                    "list": "yours_to_do",
                                                    "group": "coming_up"
                                                },
                                                "viewer": {
                                                    "is_promiser": true,
                                                    "is_promisee": false,
                                                    "can_reword": true,
                                                    "can_change_steps": true,
                                                    "can_add_step": true,
                                                    "step_limit_reason": null,
                                                    "can_change_project": true,
                                                    "can_change_details": true
                                                },
                                                "parties": {
                                                    "promiser": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera",
                                                        "email": "alex@example.com",
                                                        "avatar_url": null,
                                                        "active": true
                                                    },
                                                    "promisee": {
                                                        "type": "user",
                                                        "id": "0199a000-0000-7000-8000-000000000003",
                                                        "name": "Sam Okafor",
                                                        "email": "sam@example.com",
                                                        "avatar_url": null,
                                                        "active": true
                                                    },
                                                    "asked_team": null
                                                },
                                                "events": [
                                                    {
                                                        "type": "details_changed",
                                                        "actor": {
                                                            "id": "0199a000-0000-7000-8000-000000000001",
                                                            "name": "Alex Rivera"
                                                        },
                                                        "message": null,
                                                        "reason": null,
                                                        "team": null,
                                                        "from": null,
                                                        "to": null,
                                                        "source": null,
                                                        "from_workspace": null,
                                                        "to_workspace": null,
                                                        "created_at": "2026-10-01T09:00:00+00:00"
                                                    },
                                                    {
                                                        "type": "noted",
                                                        "actor": {
                                                            "id": "0199a000-0000-7000-8000-000000000003",
                                                            "name": "Sam Okafor"
                                                        },
                                                        "message": "Whenever suits, no rush.",
                                                        "reason": null,
                                                        "team": null,
                                                        "from": null,
                                                        "to": null,
                                                        "source": null,
                                                        "from_workspace": null,
                                                        "to_workspace": null,
                                                        "created_at": "2026-10-01T09:00:00+00:00"
                                                    },
                                                    {
                                                        "type": "created",
                                                        "actor": {
                                                            "id": "0199a000-0000-7000-8000-000000000001",
                                                            "name": "Alex Rivera"
                                                        },
                                                        "message": null,
                                                        "reason": null,
                                                        "team": null,
                                                        "from": null,
                                                        "to": null,
                                                        "source": null,
                                                        "from_workspace": null,
                                                        "to_workspace": null,
                                                        "created_at": "2026-10-01T09:00:00+00:00"
                                                    }
                                                ],
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        }
                                    },
                                    "promisee": {
                                        "summary": "As the promisee",
                                        "value": {
                                            "data": {
                                                "id": "0199a000-0000-7000-8000-000000000020",
                                                "workspace": {
                                                    "id": "0199a000-0000-7000-8000-000000000014",
                                                    "name": "Acme",
                                                    "type": "team",
                                                    "colour": null
                                                },
                                                "project": {
                                                    "id": "0199a000-0000-7000-8000-000000000058",
                                                    "name": "Launch",
                                                    "tag": "launch"
                                                },
                                                "description": "Send the launch copy",
                                                "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                                "details_changed": {
                                                    "by": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "at": "2026-10-01T09:00:00+00:00"
                                                },
                                                "state": "active",
                                                "source": "manual",
                                                "due_date": "2026-10-15",
                                                "end_date": null,
                                                "due_timezone": "Europe/London",
                                                "due_time": null,
                                                "due_at": null,
                                                "is_private": false,
                                                "visibility": "owner",
                                                "seen_by": [],
                                                "fyi": false,
                                                "steps": [
                                                    {
                                                        "id": "0199a000-0000-7000-8000-000000000053",
                                                        "text": "Draft the hero line",
                                                        "done": true
                                                    },
                                                    {
                                                        "id": "0199a000-0000-7000-8000-000000000054",
                                                        "text": "Check it with Priya",
                                                        "done": false
                                                    },
                                                    {
                                                        "id": "0199a000-0000-7000-8000-000000000055",
                                                        "text": "Send it to design",
                                                        "done": false
                                                    }
                                                ],
                                                "release_requested": false,
                                                "request_expires_at": null,
                                                "is_slipped": false,
                                                "in_grace_window": false,
                                                "grace_closed": false,
                                                "placement": {
                                                    "list": "waiting_on_others",
                                                    "group": "coming_up"
                                                },
                                                "viewer": {
                                                    "is_promiser": false,
                                                    "is_promisee": true,
                                                    "can_reword": false,
                                                    "can_change_steps": false,
                                                    "can_change_project": true,
                                                    "can_change_details": false
                                                },
                                                "parties": {
                                                    "promiser": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera",
                                                        "email": "alex@example.com",
                                                        "avatar_url": null,
                                                        "active": true
                                                    },
                                                    "promisee": {
                                                        "type": "user",
                                                        "id": "0199a000-0000-7000-8000-000000000003",
                                                        "name": "Sam Okafor",
                                                        "email": "sam@example.com",
                                                        "avatar_url": null,
                                                        "active": true
                                                    },
                                                    "asked_team": null
                                                },
                                                "events": [
                                                    {
                                                        "type": "details_changed",
                                                        "actor": {
                                                            "id": "0199a000-0000-7000-8000-000000000001",
                                                            "name": "Alex Rivera"
                                                        },
                                                        "message": null,
                                                        "reason": null,
                                                        "team": null,
                                                        "from": null,
                                                        "to": null,
                                                        "source": null,
                                                        "from_workspace": null,
                                                        "to_workspace": null,
                                                        "created_at": "2026-10-01T09:00:00+00:00"
                                                    },
                                                    {
                                                        "type": "noted",
                                                        "actor": {
                                                            "id": "0199a000-0000-7000-8000-000000000003",
                                                            "name": "Sam Okafor"
                                                        },
                                                        "message": "Whenever suits, no rush.",
                                                        "reason": null,
                                                        "team": null,
                                                        "from": null,
                                                        "to": null,
                                                        "source": null,
                                                        "from_workspace": null,
                                                        "to_workspace": null,
                                                        "created_at": "2026-10-01T09:00:00+00:00"
                                                    },
                                                    {
                                                        "type": "created",
                                                        "actor": {
                                                            "id": "0199a000-0000-7000-8000-000000000001",
                                                            "name": "Alex Rivera"
                                                        },
                                                        "message": null,
                                                        "reason": null,
                                                        "team": null,
                                                        "from": null,
                                                        "to": null,
                                                        "source": null,
                                                        "from_workspace": null,
                                                        "to_workspace": null,
                                                        "created_at": "2026-10-01T09:00:00+00:00"
                                                    }
                                                ],
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "Change the wording (the promiser, or whoever asked while it is still an ask), its description, or who can see a task for yourself, or whether it is something to know",
                "operationId": "patchCommitmentsByCommitment",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to update.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "description": {
                                        "type": "string",
                                        "description": "The new wording, up to 10,000 characters. Needed unless visibility, seen_by, fyi, project_id or details is sent instead."
                                    },
                                    "visibility": {
                                        "type": "string",
                                        "enum": [
                                            "owner",
                                            "workspace",
                                            "chosen"
                                        ],
                                        "description": "Who can see a task for yourself: kept to you (owner), shared with the workspace (workspace), or shown to the people and teams in seen_by (chosen). Moving to owner or workspace clears the list."
                                    },
                                    "seen_by": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "With visibility chosen, who can see it: a list of {\"type\": \"user\" or \"team\", \"id\": the person’s or team’s id}, each one in this workspace. Sent alone, on something already chosen, it replaces the list. Nobody is told, nothing goes on the timeline, and visibility_changed goes to you and whoever can see it now."
                                    },
                                    "fyi": {
                                        "type": "boolean",
                                        "description": "Switch a task for yourself to something to know, or back to a task. Only the person whose task it is, only while it is active; switching on needs a due_date of today or later, and switching off makes it one day, its first. It never changes who can see it, and sent with visibility the two are written together or not at all."
                                    },
                                    "project_id": {
                                        "type": "string",
                                        "description": "A project in its workspace to put it in, or null to take it out. Anyone on either side of it can, unless it is deleted. On an item of a series it puts the series in too. Taking it out works on any plan; putting it in comes with Plus, and without it the call is refused, 402, with limit projects."
                                    },
                                    "details": {
                                        "type": "string",
                                        "description": "The whole description, in Markdown, up to 10,000 characters as stored. Null or an empty string removes it; left out, it stays as it is. Only the asker while it is still an ask, the person doing it while it is active, and nobody once it has ended. Taking it away works on any plan; writing or changing one comes with Plus, and without it the call is refused, 402, with limit details. Nobody is told, and its history says that it changed."
                                    }
                                }
                            },
                            "example": {
                                "description": "Send the launch copy, with the screenshots"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy, with the screenshots",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "reworded",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": "Send the launch copy",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/steps/{step}": {
            "delete": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Remove a step",
                "operationId": "deleteCommitmentsByCommitmentStepsByStep",
                "description": "Only the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The item the step is on.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "step",
                        "in": "path",
                        "required": true,
                        "description": "The step, from the item’s steps.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Tick a step, untick it, or reword it",
                "operationId": "patchCommitmentsByCommitmentStepsByStep",
                "description": "Only the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The item the step is on.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "step",
                        "in": "path",
                        "required": true,
                        "description": "The step, from the item’s steps.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "text": {
                                        "type": "string",
                                        "description": "The step, one line of up to 200 characters. Blank, longer or with a line break is refused."
                                    },
                                    "done": {
                                        "type": "boolean",
                                        "description": "True ticks it, false unticks it."
                                    }
                                }
                            },
                            "example": {
                                "done": true
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Delete your account (your password, or for an account with no password a code from POST /me/deletion-code)",
                "operationId": "deleteMe",
                "description": "It answers 5 calls a minute.",
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "password": {
                                        "type": "string",
                                        "description": "Your account password, because this one matters. Needed when the account has one (has_password on GET /me)."
                                    },
                                    "code": {
                                        "type": "string",
                                        "description": "For an account with no password: the 6-digit code POST /me/deletion-code emailed to your primary address."
                                    }
                                }
                            },
                            "example": {
                                "password": "your account password"
                            }
                        }
                    }
                },
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Who you are, your workspaces and roles",
                "operationId": "getMe",
                "description": "A workspace key sees only its own workspace, and its email is the address that workspace knows you by: null once you have left it. On each workspace, capture_enabled is whether the app reads what people say in its Slack channels for suggestions: the workspace’s decision, made by its admins. plan says what you have and how (own, gift, team or trial), the most it holds and what it includes, and can_buy, whether buying is possible on this install: false until billing is set up, and a client that buys leaves its buttons out while it is false; for an own Plus it also says how it is paid (interval) and, once cancelled, its last day (ends_at), and currency is the one prices are shown in; adding says whether a task of your own goes in now, with the words when it does not. On a team workspace, plan is the team’s (with the last day of one that has been cancelled, and, for admins, whether a move down a band fits, and its own can_buy, true when the bands, or its arranged plan’s own Price, can be bought), and invites and slack say beforehand whether inviting and Slack are open there, each with the words when not; invites is for admins. On a home, invites also says whether Plus would give it more room (more_room_with_plus): false once an admin’s plan already gives the most. No field says how much of a limit is used: never how many.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera",
                                        "email": "alex@example.com",
                                        "avatar_url": null,
                                        "timezone": "Europe/London",
                                        "country": "GB",
                                        "timezone_country": "GB",
                                        "joined_on": "2026-10-01",
                                        "email_verified": true,
                                        "notify_email": true,
                                        "notify_slack": true,
                                        "email_updates": "instant",
                                        "digest_hour": 8,
                                        "ai_enabled": true,
                                        "rewrite": "ask",
                                        "needs_start": false,
                                        "two_factor_enabled": false,
                                        "has_password": true,
                                        "apple_connected": false,
                                        "current_workspace_id": "0199a000-0000-7000-8000-000000000014",
                                        "plan": {
                                            "name": "plus",
                                            "through": "team",
                                            "team_covers": false,
                                            "trial_ends_at": null,
                                            "interval": null,
                                            "ends_at": null,
                                            "limits": {
                                                "open_tasks": 500,
                                                "steps": 100,
                                                "home_people": 6
                                            },
                                            "features": {
                                                "year_view": true,
                                                "calendar_feed": true,
                                                "integrations": true,
                                                "projects": true,
                                                "details": true
                                            },
                                            "can_buy": false,
                                            "currency": "gbp",
                                            "adding": {
                                                "allowed": true,
                                                "reason": null
                                            }
                                        },
                                        "workspaces": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 1,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": null,
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null,
                                                    "more_room_with_plus": false
                                                },
                                                "slack": {
                                                    "allowed": false,
                                                    "reason": null
                                                }
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 3,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": {
                                                    "active": true,
                                                    "through": "gift",
                                                    "seats": 10,
                                                    "interval": null,
                                                    "past_due": false,
                                                    "ends_at": null,
                                                    "smaller_band_fits": false,
                                                    "custom_offer": null,
                                                    "can_buy": false
                                                },
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null
                                                },
                                                "slack": {
                                                    "allowed": true,
                                                    "reason": null
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Update name, timezone, country, notification settings, your own AI switch, what the add box does with your wording (rewrite: ask, always, never), current workspace",
                "operationId": "patchMe",
                "description": "ai_enabled (and, on a workspace, capture_enabled) is accepted only from the app itself, on the web or on the phones; any other credential is refused with 403.",
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "What people see, up to 255 characters."
                                    },
                                    "timezone": {
                                        "type": "string",
                                        "description": "An IANA name, like Europe/London. Your dates end at the end of the day here."
                                    },
                                    "country": {
                                        "type": "string",
                                        "description": "Where you live, as a two-letter code (ISO 3166-1) from GET /countries, in any case. It decides which templates and calendars apply."
                                    },
                                    "notify_email": {
                                        "type": "boolean",
                                        "description": "Whether messages reach you by email as well as Slack."
                                    },
                                    "notify_slack": {
                                        "type": "boolean",
                                        "description": "Whether messages reach you as Slack DMs, where Slack is connected."
                                    },
                                    "email_updates": {
                                        "type": "string",
                                        "enum": [
                                            "instant",
                                            "digest",
                                            "off"
                                        ],
                                        "description": "How news about promises and asks reaches you."
                                    },
                                    "digest_hour": {
                                        "type": "integer",
                                        "description": "The local hour the morning email is sent, 0 to 23."
                                    },
                                    "ai_enabled": {
                                        "type": "boolean",
                                        "description": "Your own AI switch. Off, and nothing is sent to a model for you."
                                    },
                                    "rewrite": {
                                        "type": "string",
                                        "enum": [
                                            "ask",
                                            "always",
                                            "never"
                                        ],
                                        "description": "What the add box does with your wording."
                                    },
                                    "current_workspace_id": {
                                        "type": "string",
                                        "description": "The workspace you are looking at."
                                    }
                                }
                            },
                            "example": {
                                "name": "Alex Rivera",
                                "timezone": "Europe/London",
                                "digest_hour": 8,
                                "rewrite": "ask"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera",
                                        "email": "alex@example.com",
                                        "avatar_url": null,
                                        "timezone": "Europe/London",
                                        "country": "GB",
                                        "timezone_country": "GB",
                                        "joined_on": "2026-10-01",
                                        "email_verified": true,
                                        "notify_email": true,
                                        "notify_slack": true,
                                        "email_updates": "instant",
                                        "digest_hour": 8,
                                        "ai_enabled": true,
                                        "rewrite": "ask",
                                        "needs_start": false,
                                        "two_factor_enabled": false,
                                        "has_password": true,
                                        "apple_connected": false,
                                        "current_workspace_id": "0199a000-0000-7000-8000-000000000014",
                                        "plan": {
                                            "name": "plus",
                                            "through": "team",
                                            "team_covers": false,
                                            "trial_ends_at": null,
                                            "interval": null,
                                            "ends_at": null,
                                            "limits": {
                                                "open_tasks": 500,
                                                "steps": 100,
                                                "home_people": 6
                                            },
                                            "features": {
                                                "year_view": true,
                                                "calendar_feed": true,
                                                "integrations": true,
                                                "projects": true,
                                                "details": true
                                            },
                                            "can_buy": false,
                                            "currency": "gbp",
                                            "adding": {
                                                "allowed": true,
                                                "reason": null
                                            }
                                        },
                                        "workspaces": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 1,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": null,
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null,
                                                    "more_room_with_plus": false
                                                },
                                                "slack": {
                                                    "allowed": false,
                                                    "reason": null
                                                }
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 3,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": {
                                                    "active": true,
                                                    "through": "gift",
                                                    "seats": 10,
                                                    "interval": null,
                                                    "past_due": false,
                                                    "ends_at": null,
                                                    "smaller_band_fits": false,
                                                    "custom_offer": null,
                                                    "can_buy": false
                                                },
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null
                                                },
                                                "slack": {
                                                    "allowed": true,
                                                    "reason": null
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/avatar": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Remove your photo and go back to initials",
                "operationId": "deleteMeAvatar",
                "description": "It answers 10 calls a minute.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera",
                                        "email": "alex@example.com",
                                        "avatar_url": null,
                                        "timezone": "Europe/London",
                                        "country": "GB",
                                        "timezone_country": "GB",
                                        "joined_on": "2026-10-01",
                                        "email_verified": true,
                                        "notify_email": true,
                                        "notify_slack": true,
                                        "email_updates": "instant",
                                        "digest_hour": 8,
                                        "ai_enabled": true,
                                        "rewrite": "ask",
                                        "needs_start": false,
                                        "two_factor_enabled": false,
                                        "has_password": true,
                                        "apple_connected": false,
                                        "current_workspace_id": "0199a000-0000-7000-8000-000000000014",
                                        "plan": {
                                            "name": "plus",
                                            "through": "team",
                                            "team_covers": false,
                                            "trial_ends_at": null,
                                            "interval": null,
                                            "ends_at": null,
                                            "limits": {
                                                "open_tasks": 500,
                                                "steps": 100,
                                                "home_people": 6
                                            },
                                            "features": {
                                                "year_view": true,
                                                "calendar_feed": true,
                                                "integrations": true,
                                                "projects": true,
                                                "details": true
                                            },
                                            "can_buy": false,
                                            "currency": "gbp",
                                            "adding": {
                                                "allowed": true,
                                                "reason": null
                                            }
                                        },
                                        "workspaces": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 1,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": null,
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null,
                                                    "more_room_with_plus": false
                                                },
                                                "slack": {
                                                    "allowed": false,
                                                    "reason": null
                                                }
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 3,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": {
                                                    "active": true,
                                                    "through": "gift",
                                                    "seats": 10,
                                                    "interval": null,
                                                    "past_due": false,
                                                    "ends_at": null,
                                                    "smaller_band_fits": false,
                                                    "custom_offer": null,
                                                    "can_buy": false
                                                },
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null
                                                },
                                                "slack": {
                                                    "allowed": true,
                                                    "reason": null
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Set your photo (an image up to 5 MB, squared and resized here)",
                "operationId": "postMeAvatar",
                "description": "It answers 10 calls a minute.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "avatar": {
                                        "type": "string",
                                        "format": "binary",
                                        "description": "The picture. It is centre-cropped to a square and resized here, so the name and format on disk are ours. JPEG, PNG or WebP, up to 5 MB."
                                    }
                                },
                                "required": [
                                    "avatar"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera",
                                        "email": "alex@example.com",
                                        "avatar_url": "https://allmyducks.app/storage/avatars/example.webp",
                                        "timezone": "Europe/London",
                                        "country": "GB",
                                        "timezone_country": "GB",
                                        "joined_on": "2026-10-01",
                                        "email_verified": true,
                                        "notify_email": true,
                                        "notify_slack": true,
                                        "email_updates": "instant",
                                        "digest_hour": 8,
                                        "ai_enabled": true,
                                        "rewrite": "ask",
                                        "needs_start": false,
                                        "two_factor_enabled": false,
                                        "has_password": true,
                                        "apple_connected": false,
                                        "current_workspace_id": "0199a000-0000-7000-8000-000000000014",
                                        "plan": {
                                            "name": "plus",
                                            "through": "team",
                                            "team_covers": false,
                                            "trial_ends_at": null,
                                            "interval": null,
                                            "ends_at": null,
                                            "limits": {
                                                "open_tasks": 500,
                                                "steps": 100,
                                                "home_people": 6
                                            },
                                            "features": {
                                                "year_view": true,
                                                "calendar_feed": true,
                                                "integrations": true,
                                                "projects": true,
                                                "details": true
                                            },
                                            "can_buy": false,
                                            "currency": "gbp",
                                            "adding": {
                                                "allowed": true,
                                                "reason": null
                                            }
                                        },
                                        "workspaces": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 1,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": null,
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null,
                                                    "more_room_with_plus": false
                                                },
                                                "slack": {
                                                    "allowed": false,
                                                    "reason": null
                                                }
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 3,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": {
                                                    "active": true,
                                                    "through": "gift",
                                                    "seats": 10,
                                                    "interval": null,
                                                    "past_due": false,
                                                    "ends_at": null,
                                                    "smaller_band_fits": false,
                                                    "custom_offer": null,
                                                    "can_buy": false
                                                },
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null
                                                },
                                                "slack": {
                                                    "allowed": true,
                                                    "reason": null
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "Choose a photo to upload.",
                                    "errors": {
                                        "avatar": [
                                            "Choose a photo to upload."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/devices/{device}": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Stop sending notices to a phone",
                "operationId": "deleteMeDevicesByDevice",
                "description": "It answers 20 calls a minute.",
                "parameters": [
                    {
                        "name": "device",
                        "in": "path",
                        "required": true,
                        "description": "The phone’s id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/emails/{id}": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Remove an address: a workspace that used it moves to your primary",
                "operationId": "deleteMeEmailsById",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 10 calls a minute.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "The email’s id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/token": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Sign out: the app’s own token, and the refresh token behind it, stop working, and only the app whose token it is can call it",
                "operationId": "deleteMeToken",
                "description": "It answers 20 calls a minute.",
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/trusted-devices": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Forget every one of them: each asks for a code next time",
                "operationId": "deleteMeTrustedDevices",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 10 calls a minute.",
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            },
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "The browsers that skip your two-factor code, most recently used first",
                "operationId": "getMeTrustedDevices",
                "description": "In the app only. A key gets 403 here.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000011",
                                            "name": "Chrome on macOS",
                                            "current": false,
                                            "last_used_at": "2026-10-01T09:00:00.000000Z",
                                            "expires_at": "2026-10-31T09:00:00.000000Z"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/trusted-devices/{id}": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Forget one of them",
                "operationId": "deleteMeTrustedDevicesById",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 10 calls a minute.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "The device’s id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/projects/{project}": {
            "delete": {
                "tags": [
                    "Projects"
                ],
                "summary": "Delete a project (anyone in the workspace): everything in it stays, just out of the project",
                "operationId": "deleteProjectsByProject",
                "description": "Works on any plan. No item or series is deleted, changed or told; there is no undo.",
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "description": "The project to delete.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {}
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "get": {
                "tags": [
                    "Projects"
                ],
                "summary": "A project, with whether it is done and what comes next for you",
                "operationId": "getProjectsByProject",
                "description": "empty is true when nothing in it is visible to you.",
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "description": "The project to read.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000058",
                                        "name": "Launch",
                                        "tag": "launch",
                                        "description": "Everything for the launch in October.",
                                        "done": false,
                                        "empty": false,
                                        "next": {
                                            "id": "0199a000-0000-7000-8000-000000000020",
                                            "description": "Send the launch copy",
                                            "due_date": "2026-10-15",
                                            "end_date": null,
                                            "due_time": null,
                                            "fyi": false
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Projects"
                ],
                "summary": "Rename a project or change its description (anyone in the workspace)",
                "operationId": "patchProjectsByProject",
                "description": "Works on any plan. A name already taken here is refused with 422, as are a name or a description that break the rules for making one.",
                "parameters": [
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "description": "The project to change.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "Its new name, by the same rules as making one. Left out, it stays as it is."
                                    },
                                    "description": {
                                        "type": "string",
                                        "description": "Its new description, up to 500 characters. Null or an empty string clears it; left out, it stays as it is."
                                    }
                                }
                            },
                            "example": {
                                "name": "October launch"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000058",
                                        "name": "October launch",
                                        "tag": "octoberlaunch",
                                        "description": "Everything for the launch in October.",
                                        "done": false,
                                        "empty": false,
                                        "next": {
                                            "id": "0199a000-0000-7000-8000-000000000020",
                                            "description": "Send the launch copy",
                                            "due_date": "2026-10-15",
                                            "end_date": null,
                                            "due_time": null,
                                            "fyi": false
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}": {
            "delete": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Delete a private series: its open occurrence goes with it, restorable for thirty days",
                "operationId": "deleteSchedulesBySchedule",
                "description": "The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series to delete.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "get": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "One series, with its recent occurrences",
                "operationId": "getSchedulesBySchedule",
                "description": "upcoming is what is coming up, the same for everyone who can see the series: the item on the list now first, with its id, then the dates after it, each with its label when the series takes turns. There are at least four, and every label appears once. It is empty once the series has ended. Each entry in completions carries description, the done item’s words, when you may read that item, and null when you may not. The dates are there either way. details_changed is who last changed the description and when, on the same terms as an item’s, and details_by is the person whose it is to change now, or null once the series has ended.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series to show.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 30,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-20",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                            },
                                            {
                                                "date": "2027-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2028-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2029-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000056",
                                                "text": "Check the renewal price"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            }
                                        ],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": true,
                                            "trouble_line": "Can't reach the registry at the moment."
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Change the name, the description, the rule, how far ahead it is raised, who can see it, or whether it is something to know",
                "operationId": "patchSchedulesBySchedule",
                "description": "The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404. A body of project_id alone, or of details alone, is the exception: either party may send it, and then only somebody who is merely shown the series is refused.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series to update.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "What to call it, up to 500 characters."
                                    },
                                    "rule": {
                                        "type": "object",
                                        "description": "How it repeats, in the same words the response answers with as rule_words. A cycle sent without cycle_anchor starts with its first label on the next date."
                                    },
                                    "lead_days": {
                                        "type": "integer",
                                        "description": "How many days before the due date the occurrence is raised, from 0 to 730."
                                    },
                                    "visibility": {
                                        "type": "string",
                                        "enum": [
                                            "owner",
                                            "workspace",
                                            "chosen"
                                        ],
                                        "description": "Who can see a todo series: kept to you (owner), shared with the workspace (workspace), or shown to the people and teams in seen_by (chosen). The open item changes with it, and closed ones keep what they had."
                                    },
                                    "seen_by": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "With visibility chosen, who can see it: a list of {\"type\": \"user\" or \"team\", \"id\": the person’s or team’s id}, each one in this workspace. Sent alone, on a series already chosen, it replaces the list, on the series and on its open item."
                                    },
                                    "fyi": {
                                        "type": "boolean",
                                        "description": "Switch a todo series to something to know, or back to a task. The open item changes at once and closed ones keep what they had. It never changes who can see it."
                                    },
                                    "project_id": {
                                        "type": "string",
                                        "description": "A project in its workspace to put the series in, or null to take it out. The open item goes with it and closed ones keep what they had. Sent alone, anyone on either side of the series can; every other field stays the owner’s. Taking it out works on any plan; putting it in comes with Plus, and without it the call is refused, 402, with limit projects."
                                    },
                                    "details": {
                                        "type": "string",
                                        "description": "The series’ description, in Markdown, up to 10,000 characters as stored. Null or an empty string removes it; left out, it stays as it is. Items the series opens from now on start with a copy, and one already open keeps its own. Sent alone, either party to the series can send it, and the series’ rule decides: the owner, or on a series of asks someone has said yes to, the person who said yes while they are still in the team (or the workspace); otherwise the asker. Sent with any other field it stays the owner’s, and a refusal writes nothing. Taking it away works on any plan; writing or changing one comes with Plus, and without it the call is refused, 402, with limit details. Refused on a series that has ended."
                                    }
                                }
                            },
                            "example": {
                                "name": "Renew example.com",
                                "lead_days": 21
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 21,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-20",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                            },
                                            {
                                                "date": "2027-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2028-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2029-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000056",
                                                "text": "Check the renewal price"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            }
                                        ],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": true,
                                            "trouble_line": "Can't reach the registry at the moment."
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}/steps/{step}": {
            "delete": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Remove a step for every time",
                "operationId": "deleteSchedulesByScheduleStepsByStep",
                "description": "The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series the step is for.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "step",
                        "in": "path",
                        "required": true,
                        "description": "The step, from the series’ steps.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 30,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-20",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                            },
                                            {
                                                "date": "2027-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2028-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2029-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            }
                                        ],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": true,
                                            "trouble_line": "Can't reach the registry at the moment."
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Reword a step for every time",
                "operationId": "patchSchedulesByScheduleStepsByStep",
                "description": "The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series the step is for.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "step",
                        "in": "path",
                        "required": true,
                        "description": "The step, from the series’ steps.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "text": {
                                        "type": "string",
                                        "description": "The step, one line of up to 200 characters. Blank, longer or with a line break is refused."
                                    }
                                },
                                "required": [
                                    "text"
                                ]
                            },
                            "example": {
                                "text": "Check the renewal price against last year"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 30,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-20",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                            },
                                            {
                                                "date": "2027-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2028-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2029-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000056",
                                                "text": "Check the renewal price against last year"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            }
                                        ],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": true,
                                            "trouble_line": "Can't reach the registry at the moment."
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "Say what the step is.",
                                    "errors": {
                                        "text": [
                                            "Say what the step is."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/teams/{team}": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Remove a team: open asks to it end, promises taken on stay with the person",
                "operationId": "deleteTeamsByTeam",
                "description": "A member who is neither one of its owners nor a workspace admin is refused, 403, with “Only a team owner or a workspace admin can remove it.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "team",
                        "in": "path",
                        "required": true,
                        "description": "The team to remove.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Rename a team (an admin or one of its owners)",
                "operationId": "patchTeamsByTeam",
                "description": "A member who is neither one of its owners nor a workspace admin is refused, 403, with “Only a team owner or a workspace admin can rename it.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "team",
                        "in": "path",
                        "required": true,
                        "description": "The team to rename.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "What people will call it, up to 255 characters. It must be unique in the workspace."
                                    }
                                },
                                "required": [
                                    "name"
                                ]
                            },
                            "example": {
                                "name": "Launch team"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000015",
                                        "name": "Launch team",
                                        "members": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "role": "owner"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "role": "member"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The name field is required.",
                                    "errors": {
                                        "name": [
                                            "The name field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/teams/{team}/members/{user}": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Take someone off a team (one of its owners or a workspace admin): a team is never left without an owner",
                "operationId": "deleteTeamsByTeamMembersByUser",
                "description": "Stepping off is anyone’s own to do. A member who is neither one of its owners nor a workspace admin, taking someone else off, is refused, 403, with “Only a team owner or a workspace admin can take someone else off it.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "team",
                        "in": "path",
                        "required": true,
                        "description": "The team to remove them from.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "user",
                        "in": "path",
                        "required": true,
                        "description": "The person to remove; the signed-in person may remove themselves.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Make someone one of a team’s owners, or a member again (one of its owners or a workspace admin)",
                "operationId": "patchTeamsByTeamMembersByUser",
                "description": "A member who is neither one of its owners nor a workspace admin is refused, 403, with “Only a team owner or a workspace admin can change roles on it.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "team",
                        "in": "path",
                        "required": true,
                        "description": "The team the person belongs to.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "user",
                        "in": "path",
                        "required": true,
                        "description": "The person to change.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "role": {
                                        "type": "string",
                                        "enum": [
                                            "owner",
                                            "member"
                                        ],
                                        "description": "Owner or member. A team always keeps at least one owner."
                                    }
                                },
                                "required": [
                                    "role"
                                ]
                            },
                            "example": {
                                "role": "owner"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000003",
                                        "name": "Sam Okafor",
                                        "email": "sam@example.com",
                                        "avatar_url": null,
                                        "role": "owner"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The role field is required.",
                                    "errors": {
                                        "role": [
                                            "The role field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/webhooks/{webhook}": {
            "delete": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "Stop a subscription and remove its log",
                "operationId": "deleteWebhooksByWebhook",
                "parameters": [
                    {
                        "name": "webhook",
                        "in": "path",
                        "required": true,
                        "description": "The subscription to stop.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "get": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "One subscription, without its secret",
                "operationId": "getWebhooksByWebhook",
                "parameters": [
                    {
                        "name": "webhook",
                        "in": "path",
                        "required": true,
                        "description": "The subscription to show.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000044",
                                        "url": "https://hooks.example.com/duck",
                                        "events": [
                                            "*"
                                        ],
                                        "workspace": null,
                                        "paused": false,
                                        "paused_for_plan": false,
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "Change the address or what it sends, or pause and resume it",
                "operationId": "patchWebhooksByWebhook",
                "description": "Without Plus the call is refused, 402, with limit integrations.",
                "parameters": [
                    {
                        "name": "webhook",
                        "in": "path",
                        "required": true,
                        "description": "The subscription to change.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "url": {
                                        "type": "string",
                                        "description": "Where events are delivered."
                                    },
                                    "events": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "Which event names to send, or * for every one."
                                    },
                                    "paused": {
                                        "type": "boolean",
                                        "description": "Pause it, or turn it back on. Turning it back on is a fresh start: it forgets the failures that paused it."
                                    }
                                }
                            },
                            "example": {
                                "url": "https://hooks.example.com/incoming",
                                "events": [
                                    "commitment.done",
                                    "commitment.released"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000044",
                                        "url": "https://hooks.example.com/incoming",
                                        "events": [
                                            "commitment.done",
                                            "commitment.released"
                                        ],
                                        "workspace": null,
                                        "paused": false,
                                        "paused_for_plan": false,
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/calendar-feed": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Turn your ICS feed off",
                "operationId": "deleteWorkspacesByWorkspaceCalendarFeed",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to turn it off for.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Whether your ICS feed link exists",
                "operationId": "getWorkspacesByWorkspaceCalendarFeed",
                "description": "served is whether the link is answered: a link is kept while its owner is without Plus, but its address answers 404, as any address that was never made does, until Plus is back.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to check.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "active": false,
                                        "served": true
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Make (or rotate) your secret ICS feed link",
                "operationId": "postWorkspacesByWorkspaceCalendarFeed",
                "description": "Making a link comes with Plus; without it the call is refused, 402, with limit calendar_feed. Turning one off always works.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to make a link for. The url the response answers with is the secret: keep it to yourself, and mint a fresh one if it is ever shared.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "url": "https://allmyducks.app/feeds/calendar/f6af2ee68354281bbc8c634e23980cbde284a8565dedcf1065ebc47f23c1042b.ics"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/invites/{invite}": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Take an invite back before it is accepted (admin)",
                "operationId": "deleteWorkspacesByWorkspaceInvitesByInvite",
                "description": "A member who is not an admin is refused, 403, with “Only a workspace admin can do that.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace the invite belongs to.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "invite",
                        "in": "path",
                        "required": true,
                        "description": "The invite to take back.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/members/{user}": {
            "delete": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Remove a member (admin) or leave",
                "operationId": "deleteWorkspacesByWorkspaceMembersByUser",
                "description": "Leaving is anyone’s own to do. A member who is not an admin, removing someone else, is refused, 403, with “Only a workspace admin can remove people.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to remove them from.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "user",
                        "in": "path",
                        "required": true,
                        "description": "The member to remove; the signed-in person may remove themselves.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Change a role (admin)",
                "operationId": "patchWorkspacesByWorkspaceMembersByUser",
                "description": "A member who is not an admin is refused, 403, with “Only a workspace admin can change roles.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace the member belongs to.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "user",
                        "in": "path",
                        "required": true,
                        "description": "The member to change.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "role": {
                                        "type": "string",
                                        "enum": [
                                            "admin",
                                            "member"
                                        ],
                                        "description": "The role to give them."
                                    }
                                },
                                "required": [
                                    "role"
                                ]
                            },
                            "example": {
                                "role": "admin"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000003",
                                        "name": "Sam Okafor",
                                        "email": "sam@example.com",
                                        "avatar_url": null,
                                        "role": "admin"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The role field is required.",
                                    "errors": {
                                        "role": [
                                            "The role field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/calendar": {
            "get": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Projected dates across every workspace you are in",
                "operationId": "getCalendar",
                "description": "Each row carries label, the rotation’s name for that date, or null for a series that does not take turns. A row is a date, so it never carries the item’s words. Past six weeks without the year view the window is refused, 402, with limit year_view; every month grid is within it.",
                "parameters": [
                    {
                        "name": "scope",
                        "in": "query",
                        "required": true,
                        "description": "Ask for the union on purpose, rather than by leaving a workspace out.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "workspaces",
                        "in": "query",
                        "required": false,
                        "description": "A comma-separated list of workspace ids to narrow the union to, or leave it out for every one you are in.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": true,
                        "description": "The window’s start date.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": true,
                        "description": "The window’s end date, at most a year after from, and at most six weeks after it without the year view (Plus).",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000047",
                                            "name": "Bins",
                                            "icon": "bin",
                                            "date": "2026-10-13",
                                            "label": "General waste",
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000047",
                                            "name": "Bins",
                                            "icon": "bin",
                                            "date": "2026-10-20",
                                            "label": "Recycling",
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000047",
                                            "name": "Bins",
                                            "icon": "bin",
                                            "date": "2026-10-27",
                                            "label": "General waste",
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-07",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-14",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-21",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-28",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-02",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-09",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-16",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-23",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-30",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments": {
            "get": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "The same feed across every workspace you are in: add workspaces={ids} to narrow it",
                "operationId": "getCommitments",
                "description": "Only the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "scope",
                        "in": "query",
                        "required": true,
                        "description": "Ask for the union on purpose, rather than by leaving a workspace out.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "workspaces",
                        "in": "query",
                        "required": false,
                        "description": "A comma-separated list of workspace ids to narrow the union to, or leave it out for every one you are in.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "closed",
                        "in": "query",
                        "required": false,
                        "description": "Which closed rows to include: a recent window, or every one there has ever been.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "recent",
                                "all"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000048",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Bins: Recycling",
                                            "details": null,
                                            "state": "active",
                                            "source": "schedule",
                                            "due_date": "2026-10-06",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "schedule": {
                                                "id": "0199a000-0000-7000-8000-000000000047",
                                                "template": "bins",
                                                "icon": "bin",
                                                "rule_words": "Every week on Tuesday",
                                                "next_due_date": "2026-10-06",
                                                "next_label": "Recycling",
                                                "following": {
                                                    "date": "2026-10-13",
                                                    "label": "General waste"
                                                },
                                                "occurrence_no": 1,
                                                "ended": false
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000049",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Call the printers about the proofs",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-08",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": "15:00",
                                            "due_at": "2026-10-08T14:00:00+00:00",
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000050",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Sam is on holiday",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-12",
                                            "end_date": "2026-10-18",
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": true,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "shared",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000028",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch metrics",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-13",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": true,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "needs_your_answer"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000031",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch slides",
                                            "details": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-14",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "needs_your_attention"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000020",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": {
                                                "id": "0199a000-0000-7000-8000-000000000058",
                                                "name": "Launch",
                                                "tag": "launch"
                                            },
                                            "description": "Send the launch copy",
                                            "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-15",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000053",
                                                    "text": "Draft the hero line",
                                                    "done": true
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000054",
                                                    "text": "Check it with Priya",
                                                    "done": false
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000055",
                                                    "text": "Send it to design",
                                                    "done": false
                                                }
                                            ],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000033",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch numbers",
                                            "details": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-17",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000038",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Renew example.com",
                                            "details": null,
                                            "state": "active",
                                            "source": "schedule",
                                            "due_date": "2026-10-20",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "module_trouble": "Can't reach the registry at the moment.",
                                            "schedule": {
                                                "id": "0199a000-0000-7000-8000-000000000037",
                                                "template": "domain",
                                                "icon": "globe",
                                                "rule_words": "Every year on 20 October",
                                                "next_due_date": "2026-10-20",
                                                "next_label": null,
                                                "following": {
                                                    "date": "2027-10-20",
                                                    "label": null
                                                },
                                                "occurrence_no": 1,
                                                "ended": false
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000051",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Book the team lunch",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-23",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "chosen",
                                            "seen_by": [
                                                {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000005",
                                                    "name": "Jo Marsh"
                                                },
                                                {
                                                    "type": "team",
                                                    "id": "0199a000-0000-7000-8000-000000000015",
                                                    "name": "Launch crew"
                                                }
                                            ],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000041",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Order the launch stickers",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000035",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Tidy the launch folder",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000040",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Water the plants",
                                            "details": null,
                                            "state": "released",
                                            "source": "schedule",
                                            "due_date": "2026-10-03",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "schedule": {
                                                "id": "0199a000-0000-7000-8000-000000000039",
                                                "template": "custom",
                                                "icon": "repeat",
                                                "rule_words": "Every week on Saturday",
                                                "next_due_date": "2026-10-03",
                                                "next_label": null,
                                                "following": null,
                                                "occurrence_no": 1,
                                                "ended": true
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000025",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Draft the launch FAQ",
                                            "details": null,
                                            "state": "released",
                                            "source": "manual",
                                            "due_date": "2026-09-24",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000022",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Book the launch review",
                                            "details": null,
                                            "state": "done",
                                            "source": "manual",
                                            "due_date": "2026-09-29",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "links": {
                                        "first": "https://allmyducks.app/api/v1/commitments?scope=all&page=1",
                                        "last": "https://allmyducks.app/api/v1/commitments?scope=all&page=1",
                                        "prev": null,
                                        "next": null
                                    },
                                    "meta": {
                                        "current_page": 1,
                                        "from": 1,
                                        "last_page": 1,
                                        "links": [
                                            {
                                                "url": null,
                                                "label": "&laquo; Previous",
                                                "page": null,
                                                "active": false
                                            },
                                            {
                                                "url": "https://allmyducks.app/api/v1/commitments?scope=all&page=1",
                                                "label": "1",
                                                "page": 1,
                                                "active": true
                                            },
                                            {
                                                "url": null,
                                                "label": "Next &raquo;",
                                                "page": null,
                                                "active": false
                                            }
                                        ],
                                        "path": "https://allmyducks.app/api/v1/commitments",
                                        "per_page": 100,
                                        "to": 14,
                                        "total": 14,
                                        "older_closed": true
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/draft": {
            "get": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "A message about this one, drafted for a person to edit and send: a convenience for human UIs",
                "operationId": "getCommitmentsByCommitmentDraft",
                "description": "It answers 30 calls a minute.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to draft a message about.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "type",
                        "in": "query",
                        "required": true,
                        "description": "Which kind of message: renegotiating, releasing, or declining.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "renegotiate",
                                "release",
                                "decline"
                            ]
                        }
                    },
                    {
                        "name": "due_date",
                        "in": "query",
                        "required": false,
                        "description": "The date to mention, needed only when the type is renegotiate.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "message": "I am moving the launch copy to the 22nd so the review has it in good time. Does that work for you?",
                                        "source": "ai"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/countries": {
            "get": {
                "tags": [
                    "Before anyone is signed in"
                ],
                "summary": "Every country a person can say they live in: its two-letter code, its name in English, and other names it goes by",
                "operationId": "getCountries",
                "description": "No key needed. A key is accepted too.\n\nIt answers 60 calls a minute.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "code": "AF",
                                            "name": "Afghanistan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AX",
                                            "name": "Åland Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AL",
                                            "name": "Albania",
                                            "aliases": []
                                        },
                                        {
                                            "code": "DZ",
                                            "name": "Algeria",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AS",
                                            "name": "American Samoa",
                                            "aliases": [
                                                "Samoa (American)"
                                            ]
                                        },
                                        {
                                            "code": "AD",
                                            "name": "Andorra",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AO",
                                            "name": "Angola",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AI",
                                            "name": "Anguilla",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AQ",
                                            "name": "Antarctica",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AG",
                                            "name": "Antigua & Barbuda",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AR",
                                            "name": "Argentina",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AM",
                                            "name": "Armenia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AW",
                                            "name": "Aruba",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AU",
                                            "name": "Australia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AT",
                                            "name": "Austria",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AZ",
                                            "name": "Azerbaijan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BS",
                                            "name": "Bahamas",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BH",
                                            "name": "Bahrain",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BD",
                                            "name": "Bangladesh",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BB",
                                            "name": "Barbados",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BY",
                                            "name": "Belarus",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BE",
                                            "name": "Belgium",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BZ",
                                            "name": "Belize",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BJ",
                                            "name": "Benin",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BM",
                                            "name": "Bermuda",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BT",
                                            "name": "Bhutan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BO",
                                            "name": "Bolivia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BA",
                                            "name": "Bosnia & Herzegovina",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BW",
                                            "name": "Botswana",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BV",
                                            "name": "Bouvet Island",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BR",
                                            "name": "Brazil",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IO",
                                            "name": "British Indian Ocean Territory",
                                            "aliases": []
                                        },
                                        {
                                            "code": "VG",
                                            "name": "British Virgin Islands",
                                            "aliases": [
                                                "Virgin Islands (UK)"
                                            ]
                                        },
                                        {
                                            "code": "BN",
                                            "name": "Brunei",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BG",
                                            "name": "Bulgaria",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BF",
                                            "name": "Burkina Faso",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BI",
                                            "name": "Burundi",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KH",
                                            "name": "Cambodia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CM",
                                            "name": "Cameroon",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CA",
                                            "name": "Canada",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CV",
                                            "name": "Cape Verde",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BQ",
                                            "name": "Caribbean Netherlands",
                                            "aliases": [
                                                "Caribbean NL"
                                            ]
                                        },
                                        {
                                            "code": "KY",
                                            "name": "Cayman Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CF",
                                            "name": "Central African Republic",
                                            "aliases": [
                                                "Central African Rep."
                                            ]
                                        },
                                        {
                                            "code": "TD",
                                            "name": "Chad",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CL",
                                            "name": "Chile",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CN",
                                            "name": "China",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CX",
                                            "name": "Christmas Island",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CC",
                                            "name": "Cocos (Keeling) Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CO",
                                            "name": "Colombia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KM",
                                            "name": "Comoros",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CG",
                                            "name": "Congo - Brazzaville",
                                            "aliases": [
                                                "Congo (Rep.)"
                                            ]
                                        },
                                        {
                                            "code": "CD",
                                            "name": "Congo - Kinshasa",
                                            "aliases": [
                                                "Congo (Dem. Rep.)"
                                            ]
                                        },
                                        {
                                            "code": "CK",
                                            "name": "Cook Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CR",
                                            "name": "Costa Rica",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CI",
                                            "name": "Côte d’Ivoire",
                                            "aliases": []
                                        },
                                        {
                                            "code": "HR",
                                            "name": "Croatia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CU",
                                            "name": "Cuba",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CW",
                                            "name": "Curaçao",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CY",
                                            "name": "Cyprus",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CZ",
                                            "name": "Czechia",
                                            "aliases": [
                                                "Czech Republic"
                                            ]
                                        },
                                        {
                                            "code": "DK",
                                            "name": "Denmark",
                                            "aliases": []
                                        },
                                        {
                                            "code": "DJ",
                                            "name": "Djibouti",
                                            "aliases": []
                                        },
                                        {
                                            "code": "DM",
                                            "name": "Dominica",
                                            "aliases": []
                                        },
                                        {
                                            "code": "DO",
                                            "name": "Dominican Republic",
                                            "aliases": []
                                        },
                                        {
                                            "code": "EC",
                                            "name": "Ecuador",
                                            "aliases": []
                                        },
                                        {
                                            "code": "EG",
                                            "name": "Egypt",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SV",
                                            "name": "El Salvador",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GQ",
                                            "name": "Equatorial Guinea",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ER",
                                            "name": "Eritrea",
                                            "aliases": []
                                        },
                                        {
                                            "code": "EE",
                                            "name": "Estonia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SZ",
                                            "name": "Eswatini",
                                            "aliases": [
                                                "Swaziland"
                                            ]
                                        },
                                        {
                                            "code": "ET",
                                            "name": "Ethiopia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "FK",
                                            "name": "Falkland Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "FO",
                                            "name": "Faroe Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "FJ",
                                            "name": "Fiji",
                                            "aliases": []
                                        },
                                        {
                                            "code": "FI",
                                            "name": "Finland",
                                            "aliases": []
                                        },
                                        {
                                            "code": "FR",
                                            "name": "France",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GF",
                                            "name": "French Guiana",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PF",
                                            "name": "French Polynesia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TF",
                                            "name": "French Southern Territories",
                                            "aliases": [
                                                "French S. Terr."
                                            ]
                                        },
                                        {
                                            "code": "GA",
                                            "name": "Gabon",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GM",
                                            "name": "Gambia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GE",
                                            "name": "Georgia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "DE",
                                            "name": "Germany",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GH",
                                            "name": "Ghana",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GI",
                                            "name": "Gibraltar",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GR",
                                            "name": "Greece",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GL",
                                            "name": "Greenland",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GD",
                                            "name": "Grenada",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GP",
                                            "name": "Guadeloupe",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GU",
                                            "name": "Guam",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GT",
                                            "name": "Guatemala",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GG",
                                            "name": "Guernsey",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GN",
                                            "name": "Guinea",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GW",
                                            "name": "Guinea-Bissau",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GY",
                                            "name": "Guyana",
                                            "aliases": []
                                        },
                                        {
                                            "code": "HT",
                                            "name": "Haiti",
                                            "aliases": []
                                        },
                                        {
                                            "code": "HM",
                                            "name": "Heard & McDonald Islands",
                                            "aliases": [
                                                "Heard Island & McDonald Islands"
                                            ]
                                        },
                                        {
                                            "code": "HN",
                                            "name": "Honduras",
                                            "aliases": []
                                        },
                                        {
                                            "code": "HK",
                                            "name": "Hong Kong SAR China",
                                            "aliases": [
                                                "Hong Kong"
                                            ]
                                        },
                                        {
                                            "code": "HU",
                                            "name": "Hungary",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IS",
                                            "name": "Iceland",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IN",
                                            "name": "India",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ID",
                                            "name": "Indonesia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IR",
                                            "name": "Iran",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IQ",
                                            "name": "Iraq",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IE",
                                            "name": "Ireland",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IM",
                                            "name": "Isle of Man",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IL",
                                            "name": "Israel",
                                            "aliases": []
                                        },
                                        {
                                            "code": "IT",
                                            "name": "Italy",
                                            "aliases": []
                                        },
                                        {
                                            "code": "JM",
                                            "name": "Jamaica",
                                            "aliases": []
                                        },
                                        {
                                            "code": "JP",
                                            "name": "Japan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "JE",
                                            "name": "Jersey",
                                            "aliases": []
                                        },
                                        {
                                            "code": "JO",
                                            "name": "Jordan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KZ",
                                            "name": "Kazakhstan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KE",
                                            "name": "Kenya",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KI",
                                            "name": "Kiribati",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KW",
                                            "name": "Kuwait",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KG",
                                            "name": "Kyrgyzstan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LA",
                                            "name": "Laos",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LV",
                                            "name": "Latvia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LB",
                                            "name": "Lebanon",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LS",
                                            "name": "Lesotho",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LR",
                                            "name": "Liberia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LY",
                                            "name": "Libya",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LI",
                                            "name": "Liechtenstein",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LT",
                                            "name": "Lithuania",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LU",
                                            "name": "Luxembourg",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MO",
                                            "name": "Macao SAR China",
                                            "aliases": [
                                                "Macau"
                                            ]
                                        },
                                        {
                                            "code": "MG",
                                            "name": "Madagascar",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MW",
                                            "name": "Malawi",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MY",
                                            "name": "Malaysia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MV",
                                            "name": "Maldives",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ML",
                                            "name": "Mali",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MT",
                                            "name": "Malta",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MH",
                                            "name": "Marshall Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MQ",
                                            "name": "Martinique",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MR",
                                            "name": "Mauritania",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MU",
                                            "name": "Mauritius",
                                            "aliases": []
                                        },
                                        {
                                            "code": "YT",
                                            "name": "Mayotte",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MX",
                                            "name": "Mexico",
                                            "aliases": []
                                        },
                                        {
                                            "code": "FM",
                                            "name": "Micronesia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MD",
                                            "name": "Moldova",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MC",
                                            "name": "Monaco",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MN",
                                            "name": "Mongolia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ME",
                                            "name": "Montenegro",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MS",
                                            "name": "Montserrat",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MA",
                                            "name": "Morocco",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MZ",
                                            "name": "Mozambique",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MM",
                                            "name": "Myanmar (Burma)",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NA",
                                            "name": "Namibia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NR",
                                            "name": "Nauru",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NP",
                                            "name": "Nepal",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NL",
                                            "name": "Netherlands",
                                            "aliases": [
                                                "Holland"
                                            ]
                                        },
                                        {
                                            "code": "NC",
                                            "name": "New Caledonia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NZ",
                                            "name": "New Zealand",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NI",
                                            "name": "Nicaragua",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NE",
                                            "name": "Niger",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NG",
                                            "name": "Nigeria",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NU",
                                            "name": "Niue",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NF",
                                            "name": "Norfolk Island",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KP",
                                            "name": "North Korea",
                                            "aliases": [
                                                "Korea (North)"
                                            ]
                                        },
                                        {
                                            "code": "MK",
                                            "name": "North Macedonia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MP",
                                            "name": "Northern Mariana Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "NO",
                                            "name": "Norway",
                                            "aliases": []
                                        },
                                        {
                                            "code": "OM",
                                            "name": "Oman",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PK",
                                            "name": "Pakistan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PW",
                                            "name": "Palau",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PS",
                                            "name": "Palestinian Territories",
                                            "aliases": [
                                                "Palestine"
                                            ]
                                        },
                                        {
                                            "code": "PA",
                                            "name": "Panama",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PG",
                                            "name": "Papua New Guinea",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PY",
                                            "name": "Paraguay",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PE",
                                            "name": "Peru",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PH",
                                            "name": "Philippines",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PN",
                                            "name": "Pitcairn Islands",
                                            "aliases": [
                                                "Pitcairn"
                                            ]
                                        },
                                        {
                                            "code": "PL",
                                            "name": "Poland",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PT",
                                            "name": "Portugal",
                                            "aliases": []
                                        },
                                        {
                                            "code": "PR",
                                            "name": "Puerto Rico",
                                            "aliases": []
                                        },
                                        {
                                            "code": "QA",
                                            "name": "Qatar",
                                            "aliases": []
                                        },
                                        {
                                            "code": "RE",
                                            "name": "Réunion",
                                            "aliases": []
                                        },
                                        {
                                            "code": "RO",
                                            "name": "Romania",
                                            "aliases": []
                                        },
                                        {
                                            "code": "RU",
                                            "name": "Russia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "RW",
                                            "name": "Rwanda",
                                            "aliases": []
                                        },
                                        {
                                            "code": "WS",
                                            "name": "Samoa",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SM",
                                            "name": "San Marino",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ST",
                                            "name": "São Tomé & Príncipe",
                                            "aliases": [
                                                "Sao Tome & Principe"
                                            ]
                                        },
                                        {
                                            "code": "SA",
                                            "name": "Saudi Arabia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SN",
                                            "name": "Senegal",
                                            "aliases": []
                                        },
                                        {
                                            "code": "RS",
                                            "name": "Serbia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SC",
                                            "name": "Seychelles",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SL",
                                            "name": "Sierra Leone",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SG",
                                            "name": "Singapore",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SX",
                                            "name": "Sint Maarten",
                                            "aliases": [
                                                "St Maarten (Dutch)"
                                            ]
                                        },
                                        {
                                            "code": "SK",
                                            "name": "Slovakia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SI",
                                            "name": "Slovenia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SB",
                                            "name": "Solomon Islands",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SO",
                                            "name": "Somalia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ZA",
                                            "name": "South Africa",
                                            "aliases": []
                                        },
                                        {
                                            "code": "GS",
                                            "name": "South Georgia & South Sandwich Islands",
                                            "aliases": [
                                                "South Georgia & the South Sandwich Islands"
                                            ]
                                        },
                                        {
                                            "code": "KR",
                                            "name": "South Korea",
                                            "aliases": [
                                                "Korea (South)"
                                            ]
                                        },
                                        {
                                            "code": "SS",
                                            "name": "South Sudan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ES",
                                            "name": "Spain",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LK",
                                            "name": "Sri Lanka",
                                            "aliases": []
                                        },
                                        {
                                            "code": "BL",
                                            "name": "St. Barthélemy",
                                            "aliases": [
                                                "St Barthelemy"
                                            ]
                                        },
                                        {
                                            "code": "SH",
                                            "name": "St. Helena",
                                            "aliases": []
                                        },
                                        {
                                            "code": "KN",
                                            "name": "St. Kitts & Nevis",
                                            "aliases": []
                                        },
                                        {
                                            "code": "LC",
                                            "name": "St. Lucia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "MF",
                                            "name": "St. Martin",
                                            "aliases": [
                                                "St Martin (French)"
                                            ]
                                        },
                                        {
                                            "code": "PM",
                                            "name": "St. Pierre & Miquelon",
                                            "aliases": []
                                        },
                                        {
                                            "code": "VC",
                                            "name": "St. Vincent & Grenadines",
                                            "aliases": [
                                                "St Vincent"
                                            ]
                                        },
                                        {
                                            "code": "SD",
                                            "name": "Sudan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SR",
                                            "name": "Suriname",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SJ",
                                            "name": "Svalbard & Jan Mayen",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SE",
                                            "name": "Sweden",
                                            "aliases": []
                                        },
                                        {
                                            "code": "CH",
                                            "name": "Switzerland",
                                            "aliases": []
                                        },
                                        {
                                            "code": "SY",
                                            "name": "Syria",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TW",
                                            "name": "Taiwan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TJ",
                                            "name": "Tajikistan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TZ",
                                            "name": "Tanzania",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TH",
                                            "name": "Thailand",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TL",
                                            "name": "Timor-Leste",
                                            "aliases": [
                                                "East Timor"
                                            ]
                                        },
                                        {
                                            "code": "TG",
                                            "name": "Togo",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TK",
                                            "name": "Tokelau",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TO",
                                            "name": "Tonga",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TT",
                                            "name": "Trinidad & Tobago",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TN",
                                            "name": "Tunisia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TR",
                                            "name": "Türkiye",
                                            "aliases": [
                                                "Turkey"
                                            ]
                                        },
                                        {
                                            "code": "TM",
                                            "name": "Turkmenistan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "TC",
                                            "name": "Turks & Caicos Islands",
                                            "aliases": [
                                                "Turks & Caicos Is"
                                            ]
                                        },
                                        {
                                            "code": "TV",
                                            "name": "Tuvalu",
                                            "aliases": []
                                        },
                                        {
                                            "code": "UM",
                                            "name": "U.S. Outlying Islands",
                                            "aliases": [
                                                "US minor outlying islands"
                                            ]
                                        },
                                        {
                                            "code": "VI",
                                            "name": "U.S. Virgin Islands",
                                            "aliases": [
                                                "Virgin Islands (US)"
                                            ]
                                        },
                                        {
                                            "code": "UG",
                                            "name": "Uganda",
                                            "aliases": []
                                        },
                                        {
                                            "code": "UA",
                                            "name": "Ukraine",
                                            "aliases": []
                                        },
                                        {
                                            "code": "AE",
                                            "name": "United Arab Emirates",
                                            "aliases": [
                                                "UAE"
                                            ]
                                        },
                                        {
                                            "code": "GB",
                                            "name": "United Kingdom",
                                            "aliases": [
                                                "UK",
                                                "Great Britain",
                                                "Britain",
                                                "England",
                                                "Scotland",
                                                "Wales",
                                                "Northern Ireland"
                                            ]
                                        },
                                        {
                                            "code": "US",
                                            "name": "United States",
                                            "aliases": [
                                                "USA",
                                                "America",
                                                "United States of America"
                                            ]
                                        },
                                        {
                                            "code": "UY",
                                            "name": "Uruguay",
                                            "aliases": []
                                        },
                                        {
                                            "code": "UZ",
                                            "name": "Uzbekistan",
                                            "aliases": []
                                        },
                                        {
                                            "code": "VU",
                                            "name": "Vanuatu",
                                            "aliases": []
                                        },
                                        {
                                            "code": "VA",
                                            "name": "Vatican City",
                                            "aliases": []
                                        },
                                        {
                                            "code": "VE",
                                            "name": "Venezuela",
                                            "aliases": []
                                        },
                                        {
                                            "code": "VN",
                                            "name": "Vietnam",
                                            "aliases": []
                                        },
                                        {
                                            "code": "WF",
                                            "name": "Wallis & Futuna",
                                            "aliases": []
                                        },
                                        {
                                            "code": "EH",
                                            "name": "Western Sahara",
                                            "aliases": []
                                        },
                                        {
                                            "code": "YE",
                                            "name": "Yemen",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ZM",
                                            "name": "Zambia",
                                            "aliases": []
                                        },
                                        {
                                            "code": "ZW",
                                            "name": "Zimbabwe",
                                            "aliases": []
                                        }
                                    ]
                                }
                            }
                        }
                    }
                },
                "security": [
                    {},
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/emails": {
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Any of your addresses signs you in: this lists them, primary first",
                "operationId": "getMeEmails",
                "description": "In the app only. A key gets 403 here.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000002",
                                            "email": "alex@example.com",
                                            "primary": true,
                                            "verified": true,
                                            "added_on": "2026-10-01"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000009",
                                            "email": "alex@rivera.example",
                                            "primary": false,
                                            "verified": true,
                                            "added_on": "2026-10-01"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000010",
                                            "email": "alex@laptop.example",
                                            "primary": false,
                                            "verified": false,
                                            "added_on": "2026-10-01"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Add an address and send a 6-digit code to it (account password required)",
                "operationId": "postMeEmails",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 5 calls every 60 minutes.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "The address to add and send a code to."
                                    },
                                    "password": {
                                        "type": "string",
                                        "description": "Your account password, because this one matters."
                                    }
                                },
                                "required": [
                                    "email",
                                    "password"
                                ]
                            },
                            "example": {
                                "email": "alex@work.example",
                                "password": "your account password"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "email": "alex@work.example",
                                        "primary": false,
                                        "verified": false,
                                        "added_on": "2026-10-01"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The email field is required.",
                                    "errors": {
                                        "email": [
                                            "The email field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/plans": {
            "get": {
                "tags": [
                    "Before anyone is signed in"
                ],
                "summary": "Every plan’s limits and features, and every price in every currency",
                "operationId": "getPlans",
                "description": "No key needed. A key is accepted too.\n\nIt answers 60 calls a minute.\n\nAmounts are in each currency’s smallest unit and include tax: 399 in usd is $3.99.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "free": {
                                            "limits": {
                                                "open_tasks": 30,
                                                "steps": 5,
                                                "home_people": 2
                                            },
                                            "features": {
                                                "year_view": false,
                                                "calendar_feed": false,
                                                "integrations": false,
                                                "projects": false,
                                                "details": false
                                            }
                                        },
                                        "plus": {
                                            "limits": {
                                                "open_tasks": 500,
                                                "steps": 100,
                                                "home_people": 6
                                            },
                                            "features": {
                                                "year_view": true,
                                                "calendar_feed": true,
                                                "integrations": true,
                                                "projects": true,
                                                "details": true
                                            },
                                            "prices": {
                                                "month": {
                                                    "usd": 399,
                                                    "gbp": 299,
                                                    "eur": 349
                                                },
                                                "year": {
                                                    "usd": 3999,
                                                    "gbp": 2999,
                                                    "eur": 3499
                                                }
                                            }
                                        },
                                        "team": {
                                            "bands": [
                                                {
                                                    "seats": 10,
                                                    "prices": {
                                                        "month": {
                                                            "usd": 3999,
                                                            "gbp": 2999,
                                                            "eur": 3499
                                                        },
                                                        "year": {
                                                            "usd": 39999,
                                                            "gbp": 29999,
                                                            "eur": 34999
                                                        }
                                                    }
                                                },
                                                {
                                                    "seats": 25,
                                                    "prices": {
                                                        "month": {
                                                            "usd": 7999,
                                                            "gbp": 5999,
                                                            "eur": 6999
                                                        },
                                                        "year": {
                                                            "usd": 79999,
                                                            "gbp": 59999,
                                                            "eur": 69999
                                                        }
                                                    }
                                                }
                                            ]
                                        },
                                        "currencies": [
                                            "usd",
                                            "gbp",
                                            "eur"
                                        ],
                                        "contact": "hello@example.com"
                                    }
                                },
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "free": {
                                                    "type": "object",
                                                    "description": "Free’s limits (open_tasks, steps, home_people) and features (year_view, calendar_feed, integrations, each true or false)."
                                                },
                                                "plus": {
                                                    "type": "object",
                                                    "description": "Plus’s limits and features, as Free’s, and its prices: month and year, each an amount in every currency."
                                                },
                                                "team": {
                                                    "type": "object",
                                                    "description": "The bands a team plan comes in: each band’s seats, the most people it has room for, and its prices, as Plus’s."
                                                },
                                                "currencies": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "description": "The currencies every price is given in, the one shown by default first."
                                                },
                                                "contact": {
                                                    "type": "string",
                                                    "description": "The address a team of more than the largest band writes to for a plan of its own."
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {},
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules": {
            "get": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "The series across every workspace you are in",
                "operationId": "getSchedules",
                "description": "Only the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "scope",
                        "in": "query",
                        "required": true,
                        "description": "Ask for the union on purpose, rather than by leaving a workspace out.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "workspaces",
                        "in": "query",
                        "required": false,
                        "description": "A comma-separated list of workspace ids to narrow the union to, or leave it out for every one you are in.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000037",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "domain",
                                            "icon": "globe",
                                            "name": "Renew example.com",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "rule": {
                                                "every": "year",
                                                "day": 20,
                                                "month": 10,
                                                "interval": 1
                                            },
                                            "rule_words": "Every year on 20 October",
                                            "lead_days": 30,
                                            "next_due_date": "2026-10-20",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [
                                                {
                                                    "date": "2026-10-20",
                                                    "label": null,
                                                    "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                                },
                                                {
                                                    "date": "2027-10-20",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2028-10-20",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2029-10-20",
                                                    "label": null,
                                                    "occurrence_id": null
                                                }
                                            ],
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000056",
                                                    "text": "Check the renewal price"
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000057",
                                                    "text": "Update the card on file"
                                                }
                                            ],
                                            "ended_at": null,
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                            "completions": [],
                                            "module": {
                                                "key": "domain",
                                                "input": "example.com",
                                                "label": "example.com",
                                                "icon": "globe",
                                                "refreshed_at": "2026-10-01T09:00:00+00:00",
                                                "dates": [
                                                    {
                                                        "key": "expiry",
                                                        "label": "Renewal due",
                                                        "date": "2026-10-20"
                                                    }
                                                ],
                                                "trouble": true,
                                                "trouble_line": "Can't reach the registry at the moment."
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000042",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "custom",
                                            "icon": "repeat",
                                            "name": "Order the printer paper",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "rule": {
                                                "every": "week",
                                                "weekday": 3,
                                                "interval": 1
                                            },
                                            "rule_words": "Every week on Wednesday",
                                            "lead_days": 0,
                                            "next_due_date": "2026-10-07",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [
                                                {
                                                    "date": "2026-10-07",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-14",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-21",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-28",
                                                    "label": null,
                                                    "occurrence_id": null
                                                }
                                            ],
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "ended_at": null,
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": null,
                                            "completions": [],
                                            "module": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000046",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "custom",
                                            "icon": "repeat",
                                            "name": "Water the office plants",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "rule": {
                                                "every": "week",
                                                "weekday": 5,
                                                "interval": 1
                                            },
                                            "rule_words": "Every week on Friday",
                                            "lead_days": 0,
                                            "next_due_date": "2026-10-02",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [
                                                {
                                                    "date": "2026-10-02",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-09",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-16",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-23",
                                                    "label": null,
                                                    "occurrence_id": null
                                                }
                                            ],
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "ended_at": null,
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": null,
                                            "completions": [],
                                            "module": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000047",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "bins",
                                            "icon": "bin",
                                            "name": "Bins",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "rule": {
                                                "every": "week",
                                                "weekday": 2,
                                                "interval": 1,
                                                "cycle": [
                                                    "Recycling",
                                                    "General waste"
                                                ],
                                                "cycle_anchor": "2026-10-05"
                                            },
                                            "rule_words": "Every week on Tuesday",
                                            "lead_days": 7,
                                            "next_due_date": "2026-10-06",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [
                                                {
                                                    "date": "2026-10-06",
                                                    "label": "Recycling",
                                                    "occurrence_id": "0199a000-0000-7000-8000-000000000048"
                                                },
                                                {
                                                    "date": "2026-10-13",
                                                    "label": "General waste",
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-20",
                                                    "label": "Recycling",
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-27",
                                                    "label": "General waste",
                                                    "occurrence_id": null
                                                }
                                            ],
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "ended_at": null,
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": "0199a000-0000-7000-8000-000000000048",
                                            "completions": [],
                                            "module": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000039",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "custom",
                                            "icon": "repeat",
                                            "name": "Water the plants",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": null,
                                            "rule": {
                                                "every": "week",
                                                "weekday": 6,
                                                "interval": 1
                                            },
                                            "rule_words": "Every week on Saturday",
                                            "lead_days": 7,
                                            "next_due_date": "2026-10-03",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [],
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "ended_at": "2026-10-01T09:00:00+00:00",
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": null,
                                            "completions": [],
                                            "module": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "links": {
                                        "next": null,
                                        "prev": null
                                    },
                                    "meta": {
                                        "current_page": 1,
                                        "last_page": 1,
                                        "total": 5
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/search": {
            "get": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "Find one by its words, across every workspace you are in",
                "operationId": "getSearch",
                "description": "It answers 60 calls a minute.\n\nA workspace key searches its own workspace and no further: naming another workspace is refused, 403, with “This key only works inside its workspace.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": true,
                        "description": "The words to look for. Leading and trailing whitespace is trimmed and does not count, so at least two letters must be left.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "state",
                        "in": "query",
                        "required": false,
                        "description": "Which ones to search: open, closed, or all of them.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "open",
                                "closed",
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "workspace",
                        "in": "query",
                        "required": false,
                        "description": "One workspace to search, or leave it out to search every one you are in.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "How many rows to answer with at a time. The ceiling is 100.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000028",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch metrics",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-13",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": true,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "needs_your_answer"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000031",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch slides",
                                            "details": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-14",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "needs_your_attention"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000020",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": {
                                                "id": "0199a000-0000-7000-8000-000000000058",
                                                "name": "Launch",
                                                "tag": "launch"
                                            },
                                            "description": "Send the launch copy",
                                            "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-15",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000053",
                                                    "text": "Draft the hero line",
                                                    "done": true
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000054",
                                                    "text": "Check it with Priya",
                                                    "done": false
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000055",
                                                    "text": "Send it to design",
                                                    "done": false
                                                }
                                            ],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000033",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch numbers",
                                            "details": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-17",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000041",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Order the launch stickers",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000035",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Tidy the launch folder",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "links": {
                                        "first": "https://allmyducks.app/api/v1/search?q=launch&state=open&page=1",
                                        "last": "https://allmyducks.app/api/v1/search?q=launch&state=open&page=1",
                                        "prev": null,
                                        "next": null
                                    },
                                    "meta": {
                                        "current_page": 1,
                                        "from": 1,
                                        "last_page": 1,
                                        "links": [
                                            {
                                                "url": null,
                                                "label": "&laquo; Previous",
                                                "page": null,
                                                "active": false
                                            },
                                            {
                                                "url": "https://allmyducks.app/api/v1/search?q=launch&state=open&page=1",
                                                "label": "1",
                                                "page": 1,
                                                "active": true
                                            },
                                            {
                                                "url": null,
                                                "label": "Next &raquo;",
                                                "page": null,
                                                "active": false
                                            }
                                        ],
                                        "path": "https://allmyducks.app/api/v1/search",
                                        "per_page": 25,
                                        "to": 6,
                                        "total": 6
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/sign-in-options": {
            "get": {
                "tags": [
                    "Before anyone is signed in"
                ],
                "summary": "Which ways to sign in are switched on besides an email address: Google and Apple",
                "operationId": "getSignInOptions",
                "description": "No key needed. A key is accepted too.\n\nIt answers 60 calls a minute.\n\nA sign-in page shows a button only for a way that is on, and names Apple nowhere while apple is false.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "google": true,
                                        "apple": true
                                    }
                                },
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "google": {
                                                    "type": "boolean",
                                                    "description": "Whether Continue with Google is on."
                                                },
                                                "apple": {
                                                    "type": "boolean",
                                                    "description": "Whether Sign in with Apple is on."
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {},
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/special-days": {
            "get": {
                "tags": [
                    "Before anyone is signed in"
                ],
                "summary": "The special days from one date to another, each date with the theme it wears",
                "operationId": "getSpecialDays",
                "description": "No key needed. A key is accepted too. With a personal key, an app’s token or the app’s own session, the answer follows your profile: its time zone, and its country when that country has national days. A workspace key is answered as no key is.\n\nIt answers 60 calls a minute.\n\nOnly dates with a special day are listed, so a date or range with none answers {\"data\": []}.",
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "The first date, as YYYY-MM-DD. Leave it out for today: in your profile’s time zone when a person is asking, otherwise in timezone, otherwise in UTC.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "The last date, on or after from and at most 400 days from it. Leave it out for from alone.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "timezone",
                        "in": "query",
                        "required": false,
                        "description": "A time zone name such as Europe/London, used only when no person is asking: a person’s own profile time zone always governs. A name it does not know is ignored.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "country",
                        "in": "query",
                        "required": false,
                        "description": "A two-letter country code (ISO 3166-1) from GET /countries, in any case, whose national days to include. A country with no national days, or anything else, is ignored, and without it the answer uses your profile’s country when it has national days, then your time zone’s.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "joined_on",
                        "in": "query",
                        "required": false,
                        "description": "A date, as YYYY-MM-DD, to stand in for the joining date whose anniversary the answer shows.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "date": "2026-12-21",
                                            "theme": "wintersolstice",
                                            "days": [
                                                {
                                                    "name": "December solstice",
                                                    "about": "The shortest day of the year in the northern hemisphere and the longest in the south. At Newgrange in Ireland, built five thousand years ago, the rising sun lights the inner chamber for a few minutes on this morning alone."
                                                }
                                            ]
                                        },
                                        {
                                            "date": "2026-12-24",
                                            "theme": "christmas",
                                            "days": [
                                                {
                                                    "name": "Christmas Eve",
                                                    "about": "The evening before Christmas, and in much of Europe and Latin America the main event: the big meal and the presents come tonight, not tomorrow. The carol Silent Night was first sung on this evening in 1818, in a village church near Salzburg, to a guitar because the organ was out of action."
                                                }
                                            ]
                                        },
                                        {
                                            "date": "2026-12-25",
                                            "theme": "christmas",
                                            "days": [
                                                {
                                                    "name": "Christmas Day",
                                                    "about": "The Christian festival of the birth of Jesus, and a public holiday in much of the world. The earliest record of it being kept on 25 December is in Rome in the year 336. Christmas cards date from 1843, the same year as A Christmas Carol."
                                                }
                                            ]
                                        },
                                        {
                                            "date": "2026-12-26",
                                            "theme": "boxingday",
                                            "days": [
                                                {
                                                    "name": "Boxing Day",
                                                    "about": "The day after Christmas, and St Stephen’s Day in the church calendar. The name comes from the Christmas box: the gift of money or leftovers given to servants, tradespeople and the poor on their day off after serving on the day itself. Today it is a holiday across Britain, Ireland, Australia, Canada and New Zealand, known for its sales and for the Boxing Day cricket Test in Melbourne."
                                                }
                                            ]
                                        },
                                        {
                                            "date": "2026-12-31",
                                            "theme": "newyear",
                                            "days": [
                                                {
                                                    "name": "New Year’s Eve",
                                                    "about": "The last day of the year, seen out with fireworks and a countdown to midnight. The Times Square ball has dropped every year since 1907, except for two wartime blackouts. Auld Lang Syne is a Scots song written down by Robert Burns in 1788."
                                                }
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    }
                },
                "security": [
                    {},
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/templates": {
            "get": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "The catalogue for your country and this workspace, with what is available",
                "operationId": "getTemplates",
                "description": "Each entry carries words, the other words that find it, and common, its place among the six shown first for this workspace and your country (1 to 6), or null. A workspace key reads it for its own workspace only: any other id, or none, is refused, 403, with “This key only works inside its workspace.”",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "query",
                        "required": true,
                        "description": "The workspace to check availability against.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "key": "domain",
                                            "name": "Domain renewal",
                                            "group": "internet",
                                            "icon": "globe",
                                            "rule": {
                                                "every": "year"
                                            },
                                            "asks": [
                                                "month",
                                                "day"
                                            ],
                                            "lead_days": 30,
                                            "module": "domain",
                                            "module_date": "expiry",
                                            "available": true,
                                            "lookup": true,
                                            "input_label": "Domain name",
                                            "input_hint": "example.com",
                                            "about": "The expiry date, looked up from the domain.",
                                            "words": [
                                                "domain"
                                            ],
                                            "common": 4
                                        },
                                        {
                                            "key": "ssl",
                                            "name": "SSL certificate",
                                            "group": "internet",
                                            "icon": "padlock",
                                            "rule": {
                                                "every": "month",
                                                "interval": 3,
                                                "day": 1
                                            },
                                            "asks": [
                                                "from"
                                            ],
                                            "lead_days": 14,
                                            "module": "ssl",
                                            "module_date": "not_after",
                                            "available": true,
                                            "lookup": true,
                                            "input_label": "Hostname",
                                            "input_hint": "www.example.com",
                                            "about": "The certificate on a hostname, checked for you.",
                                            "words": [
                                                "ssl",
                                                "tls"
                                            ],
                                            "common": null
                                        },
                                        {
                                            "key": "subscription",
                                            "name": "Subscription",
                                            "group": "internet",
                                            "icon": "coin",
                                            "rule": {
                                                "every": "month",
                                                "day": 1
                                            },
                                            "asks": [
                                                "day"
                                            ],
                                            "lead_days": 3,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "Anything that bills you on a day of the month.",
                                            "words": [
                                                "subscriptions"
                                            ],
                                            "common": null
                                        },
                                        {
                                            "key": "backups_check",
                                            "name": "Check the backups",
                                            "group": "internet",
                                            "icon": "server",
                                            "rule": {
                                                "every": "month",
                                                "day": 1
                                            },
                                            "asks": [
                                                "day"
                                            ],
                                            "lead_days": 3,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "Open one and make sure it restores.",
                                            "words": [
                                                "test the backups",
                                                "restore test"
                                            ],
                                            "common": null
                                        },
                                        {
                                            "key": "password_rotation",
                                            "name": "Rotate passwords",
                                            "group": "internet",
                                            "icon": "key",
                                            "rule": {
                                                "every": "month",
                                                "interval": 3,
                                                "day": 1
                                            },
                                            "asks": [
                                                "from"
                                            ],
                                            "lead_days": 7,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "The shared ones, every quarter.",
                                            "words": [
                                                "passwords",
                                                "password"
                                            ],
                                            "common": null
                                        },
                                        {
                                            "key": "vat_quarter_uk",
                                            "name": "VAT return",
                                            "group": "money",
                                            "icon": "coin",
                                            "rule": {
                                                "every": "month",
                                                "interval": 3,
                                                "day": 7
                                            },
                                            "asks": [
                                                "from"
                                            ],
                                            "lead_days": 21,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "Due a month and seven days after the quarter ends. Set the first one.",
                                            "words": [
                                                "vat"
                                            ],
                                            "common": 6
                                        },
                                        {
                                            "key": "company_filings_uk",
                                            "name": "Confirmation statement",
                                            "group": "money",
                                            "icon": "building",
                                            "rule": {
                                                "every": "year"
                                            },
                                            "asks": [
                                                "month",
                                                "day"
                                            ],
                                            "lead_days": 30,
                                            "module": "uk_company",
                                            "module_date": "confirmation_statement",
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": "8 characters, on Companies House",
                                            "about": "Confirmation statement, from the company number.",
                                            "words": [],
                                            "common": null
                                        },
                                        {
                                            "key": "company_accounts_uk",
                                            "name": "Annual accounts",
                                            "group": "money",
                                            "icon": "building",
                                            "rule": {
                                                "every": "year"
                                            },
                                            "asks": [
                                                "month",
                                                "day"
                                            ],
                                            "lead_days": 30,
                                            "module": "uk_company",
                                            "module_date": "accounts",
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": "8 characters, on Companies House",
                                            "about": "Annual accounts, from the company number.",
                                            "words": [
                                                "company accounts"
                                            ],
                                            "common": null
                                        },
                                        {
                                            "key": "public_holiday",
                                            "name": "Public holiday",
                                            "group": "people",
                                            "icon": "gift",
                                            "rule": {
                                                "every": "year"
                                            },
                                            "asks": [
                                                "month",
                                                "day"
                                            ],
                                            "lead_days": 7,
                                            "module": "calendars",
                                            "module_date": "next_holiday",
                                            "available": true,
                                            "lookup": true,
                                            "input_label": "Where",
                                            "input_hint": null,
                                            "about": "The next one on your calendar, so plans are made in time.",
                                            "words": [
                                                "bank holiday"
                                            ],
                                            "common": null
                                        },
                                        {
                                            "key": "timesheet",
                                            "name": "Timesheet",
                                            "group": "rhythm",
                                            "icon": "repeat",
                                            "rule": {
                                                "every": "week",
                                                "weekday": 5
                                            },
                                            "asks": [
                                                "weekday"
                                            ],
                                            "lead_days": 7,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "In by the end of the week.",
                                            "words": [
                                                "timesheets",
                                                "time sheet"
                                            ],
                                            "common": 2
                                        },
                                        {
                                            "key": "expenses",
                                            "name": "Expenses",
                                            "group": "rhythm",
                                            "icon": "coin",
                                            "rule": {
                                                "every": "month",
                                                "day": "last"
                                            },
                                            "asks": [
                                                "day"
                                            ],
                                            "lead_days": 7,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "Claimed before the month closes.",
                                            "words": [
                                                "expense claim"
                                            ],
                                            "common": 3
                                        },
                                        {
                                            "key": "one_to_one",
                                            "name": "One to one",
                                            "group": "rhythm",
                                            "icon": "repeat",
                                            "rule": {
                                                "every": "week"
                                            },
                                            "asks": [
                                                "weekday"
                                            ],
                                            "lead_days": 7,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "Prepared, not just attended.",
                                            "words": [
                                                "1:1",
                                                "one on one"
                                            ],
                                            "common": 1
                                        },
                                        {
                                            "key": "backups",
                                            "name": "Backups",
                                            "group": "rhythm",
                                            "icon": "server",
                                            "rule": {
                                                "every": "week",
                                                "weekday": 5
                                            },
                                            "asks": [
                                                "weekday"
                                            ],
                                            "lead_days": 7,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "Taken, and somewhere else.",
                                            "words": [
                                                "backup",
                                                "back up"
                                            ],
                                            "common": 5
                                        },
                                        {
                                            "key": "custom",
                                            "name": "Something else",
                                            "group": "custom",
                                            "icon": "repeat",
                                            "rule": {
                                                "every": "week"
                                            },
                                            "asks": [
                                                "every",
                                                "weekday"
                                            ],
                                            "lead_days": 7,
                                            "module": null,
                                            "module_date": null,
                                            "available": true,
                                            "lookup": false,
                                            "input_label": null,
                                            "input_hint": null,
                                            "about": "Any name, any rhythm.",
                                            "words": [],
                                            "common": null
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/webhooks": {
            "get": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "Your subscriptions, newest first",
                "operationId": "getWebhooks",
                "description": "Subscriptions come with Plus. Without it they are kept and sent nothing, and each says so in paused_for_plan until Plus is back.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000044",
                                            "url": "https://hooks.example.com/duck",
                                            "events": [
                                                "*"
                                            ],
                                            "workspace": null,
                                            "paused": false,
                                            "paused_for_plan": false,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "Make a subscription: a URL, which events, and which workspace or every one you are in. The response carries the signing secret once",
                "operationId": "postWebhooks",
                "description": "Without Plus the call is refused, 402, with limit integrations.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "url": {
                                        "type": "string",
                                        "description": "Where events are delivered, by POST as JSON with a signature header. The response’s secret is shown once here and cannot be fetched again."
                                    },
                                    "events": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "Which event names to send, from GET /webhooks/events, or * for every one."
                                    },
                                    "workspace_id": {
                                        "type": "string",
                                        "description": "One workspace to scope it to, or leave it out to cover every workspace you are in."
                                    }
                                },
                                "required": [
                                    "url",
                                    "events"
                                ]
                            },
                            "example": {
                                "url": "https://hooks.example.com/duck",
                                "events": [
                                    "commitment.created",
                                    "commitment.done"
                                ],
                                "workspace_id": "0199a000-0000-7000-8000-000000000014"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "url": "https://hooks.example.com/duck",
                                        "events": [
                                            "commitment.created",
                                            "commitment.done"
                                        ],
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "paused": false,
                                        "paused_for_plan": false,
                                        "created_at": "2026-10-01T09:00:00+00:00",
                                        "secret": "55ffc4996d5cc1b8a4e5dc4c7ff4fbe29b8e08e14dda79f625f70ca707d34820"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The url field is required. (and 1 more error)",
                                    "errors": {
                                        "url": [
                                            "The url field is required."
                                        ],
                                        "events": [
                                            "Pick at least one thing to send."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/webhooks/events": {
            "get": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "The catalogue: every event name, what it belongs to, and a line about it",
                "operationId": "getWebhooksEvents",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "name": "commitment.created",
                                            "object": "commitment",
                                            "about": "Something was written down: a promise, a todo or an ask."
                                        },
                                        {
                                            "name": "commitment.accepted",
                                            "object": "commitment",
                                            "about": "An ask was taken on."
                                        },
                                        {
                                            "name": "commitment.countered",
                                            "object": "commitment",
                                            "about": "An ask was taken on with a different date."
                                        },
                                        {
                                            "name": "commitment.declined",
                                            "object": "commitment",
                                            "about": "Somebody said no to an ask."
                                        },
                                        {
                                            "name": "commitment.withdrawn",
                                            "object": "commitment",
                                            "about": "An ask was taken back."
                                        },
                                        {
                                            "name": "commitment.expired",
                                            "object": "commitment",
                                            "about": "An ask ran out before it was answered, or the day of something to know went by."
                                        },
                                        {
                                            "name": "commitment.done",
                                            "object": "commitment",
                                            "about": "Something was finished."
                                        },
                                        {
                                            "name": "commitment.reopened",
                                            "object": "commitment",
                                            "about": "Something finished was opened again."
                                        },
                                        {
                                            "name": "commitment.renegotiated",
                                            "object": "commitment",
                                            "about": "A new date was picked."
                                        },
                                        {
                                            "name": "commitment.redated",
                                            "object": "commitment",
                                            "about": "A lookup moved a date."
                                        },
                                        {
                                            "name": "commitment.release_asked",
                                            "object": "commitment",
                                            "about": "Somebody asked to drop a promise."
                                        },
                                        {
                                            "name": "commitment.released",
                                            "object": "commitment",
                                            "about": "A promise was dropped."
                                        },
                                        {
                                            "name": "commitment.kept",
                                            "object": "commitment",
                                            "about": "A promise stands as it is after a release ask."
                                        },
                                        {
                                            "name": "commitment.picked_up",
                                            "object": "commitment",
                                            "about": "A dropped promise was picked back up."
                                        },
                                        {
                                            "name": "commitment.reworded",
                                            "object": "commitment",
                                            "about": "The wording changed."
                                        },
                                        {
                                            "name": "commitment.noted",
                                            "object": "commitment",
                                            "about": "A note was added."
                                        },
                                        {
                                            "name": "commitment.deleted",
                                            "object": "commitment",
                                            "about": "A todo was deleted."
                                        },
                                        {
                                            "name": "commitment.restored",
                                            "object": "commitment",
                                            "about": "A deleted todo came back."
                                        },
                                        {
                                            "name": "commitment.visibility_changed",
                                            "object": "commitment",
                                            "about": "Who can see a todo changed, or it became something to know, or a task again."
                                        },
                                        {
                                            "name": "commitment.moved",
                                            "object": "commitment",
                                            "about": "A todo moved to another workspace."
                                        },
                                        {
                                            "name": "commitment.details_changed",
                                            "object": "commitment",
                                            "about": "The description changed."
                                        },
                                        {
                                            "name": "schedule.started",
                                            "object": "schedule",
                                            "about": "A series started."
                                        },
                                        {
                                            "name": "schedule.changed",
                                            "object": "schedule",
                                            "about": "A series changed: its name, its rhythm, its dates or its description."
                                        },
                                        {
                                            "name": "schedule.ended",
                                            "object": "schedule",
                                            "about": "A series ended."
                                        },
                                        {
                                            "name": "schedule.restarted",
                                            "object": "schedule",
                                            "about": "A series started again."
                                        },
                                        {
                                            "name": "schedule.deleted",
                                            "object": "schedule",
                                            "about": "A series was deleted."
                                        },
                                        {
                                            "name": "schedule.occurrence_opened",
                                            "object": "schedule",
                                            "about": "The next one in a series is here."
                                        },
                                        {
                                            "name": "schedule.occurrence_skipped",
                                            "object": "schedule",
                                            "about": "One in a series was skipped."
                                        },
                                        {
                                            "name": "schedule.moved",
                                            "object": "schedule",
                                            "about": "A series moved to another workspace."
                                        },
                                        {
                                            "name": "member.joined",
                                            "object": "member",
                                            "about": "Somebody joined a workspace."
                                        },
                                        {
                                            "name": "member.left",
                                            "object": "member",
                                            "about": "Somebody left a workspace."
                                        },
                                        {
                                            "name": "member.role_changed",
                                            "object": "member",
                                            "about": "Somebody’s role changed."
                                        },
                                        {
                                            "name": "workspace.renamed",
                                            "object": "workspace",
                                            "about": "A workspace was renamed."
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/webhooks/{webhook}/deliveries": {
            "get": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "The last fifty attempts, newest first: never what was sent",
                "operationId": "getWebhooksByWebhookDeliveries",
                "parameters": [
                    {
                        "name": "webhook",
                        "in": "path",
                        "required": true,
                        "description": "The subscription to show the log for.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000045",
                                            "event": "commitment.done",
                                            "status": "delivered",
                                            "attempts": 1,
                                            "response_code": 200,
                                            "occurred_at": "2026-10-01T08:55:00+00:00",
                                            "last_attempt_at": "2026-10-01T08:55:00+00:00",
                                            "delivered_at": "2026-10-01T08:55:00+00:00"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces": {
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Your workspaces",
                "operationId": "getWorkspaces",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000013",
                                            "name": "Home",
                                            "type": "home",
                                            "colour": null,
                                            "role": "admin",
                                            "email": "alex@example.com",
                                            "slack_connected": false,
                                            "ai_enabled": true,
                                            "capture_enabled": false
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null,
                                            "role": "admin",
                                            "email": "alex@example.com",
                                            "slack_connected": false,
                                            "ai_enabled": true,
                                            "capture_enabled": false
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Create a workspace",
                "operationId": "postWorkspaces",
                "description": "A person is in one home at a time, made or joined; a second is refused, 402, with limit second_home.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "What people will call it, up to 255 characters."
                                    },
                                    "type": {
                                        "type": "string",
                                        "enum": [
                                            "home",
                                            "team"
                                        ],
                                        "description": "Home or team; leaving it out makes a team."
                                    }
                                },
                                "required": [
                                    "name"
                                ]
                            },
                            "example": {
                                "name": "Acme marketing",
                                "type": "team"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "name": "Acme marketing",
                                        "type": "team",
                                        "colour": null,
                                        "role": "admin",
                                        "email": "alex@example.com",
                                        "slack_connected": false,
                                        "ai_enabled": true,
                                        "capture_enabled": false
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The name field is required.",
                                    "errors": {
                                        "name": [
                                            "The name field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/calendar": {
            "get": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Projected dates for the month view: series and dates, never commitment rows",
                "operationId": "getWorkspacesByWorkspaceCalendar",
                "description": "Each row carries label, the rotation’s name for that date, or null for a series that does not take turns. A row is a date, so it never carries the item’s words. Past six weeks without the year view the window is refused, 402, with limit year_view; every month grid is within it.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to project.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": true,
                        "description": "The window’s start date.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": true,
                        "description": "The window’s end date, at most a year after from, and at most six weeks after it without the year view (Plus).",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "project",
                        "in": "query",
                        "required": false,
                        "description": "A project in this workspace: only the dates of series in it. One from anywhere else is refused with 422, and GET /calendar takes none.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-07",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-14",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-21",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000042",
                                            "name": "Order the printer paper",
                                            "icon": "repeat",
                                            "date": "2026-10-28",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-02",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-09",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-16",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-23",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        },
                                        {
                                            "schedule_id": "0199a000-0000-7000-8000-000000000046",
                                            "name": "Water the office plants",
                                            "icon": "repeat",
                                            "date": "2026-10-30",
                                            "label": null,
                                            "project_id": null,
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/commitments": {
            "get": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "Everything written down that involves you",
                "operationId": "getWorkspacesByWorkspaceCommitments",
                "description": "Only the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to list.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "closed",
                        "in": "query",
                        "required": false,
                        "description": "Which closed rows to include: a recent window, or every one there has ever been.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "recent",
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "project",
                        "in": "query",
                        "required": false,
                        "description": "A project in this workspace: only what is in it. One from anywhere else is refused with 422, and GET /commitments takes none.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000049",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Call the printers about the proofs",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-08",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": "15:00",
                                            "due_at": "2026-10-08T14:00:00+00:00",
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000050",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Sam is on holiday",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-12",
                                            "end_date": "2026-10-18",
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": true,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "shared",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000028",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch metrics",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-13",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": true,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "needs_your_answer"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000031",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch slides",
                                            "details": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-14",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "needs_your_attention"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000020",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": {
                                                "id": "0199a000-0000-7000-8000-000000000058",
                                                "name": "Launch",
                                                "tag": "launch"
                                            },
                                            "description": "Send the launch copy",
                                            "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-15",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000053",
                                                    "text": "Draft the hero line",
                                                    "done": true
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000054",
                                                    "text": "Check it with Priya",
                                                    "done": false
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000055",
                                                    "text": "Send it to design",
                                                    "done": false
                                                }
                                            ],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000033",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch numbers",
                                            "details": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-17",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000038",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Renew example.com",
                                            "details": null,
                                            "state": "active",
                                            "source": "schedule",
                                            "due_date": "2026-10-20",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "module_trouble": "Can't reach the registry at the moment.",
                                            "schedule": {
                                                "id": "0199a000-0000-7000-8000-000000000037",
                                                "template": "domain",
                                                "icon": "globe",
                                                "rule_words": "Every year on 20 October",
                                                "next_due_date": "2026-10-20",
                                                "next_label": null,
                                                "following": {
                                                    "date": "2027-10-20",
                                                    "label": null
                                                },
                                                "occurrence_no": 1,
                                                "ended": false
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000051",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Book the team lunch",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-23",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "chosen",
                                            "seen_by": [
                                                {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000005",
                                                    "name": "Jo Marsh"
                                                },
                                                {
                                                    "type": "team",
                                                    "id": "0199a000-0000-7000-8000-000000000015",
                                                    "name": "Launch crew"
                                                }
                                            ],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000041",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Order the launch stickers",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000035",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Tidy the launch folder",
                                            "details": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000025",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Draft the launch FAQ",
                                            "details": null,
                                            "state": "released",
                                            "source": "manual",
                                            "due_date": "2026-09-24",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000022",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Book the launch review",
                                            "details": null,
                                            "state": "done",
                                            "source": "manual",
                                            "due_date": "2026-09-29",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "links": {
                                        "first": "https://allmyducks.app/api/v1/workspaces/0199a000-0000-7000-8000-000000000014/commitments?closed=recent&page=1",
                                        "last": "https://allmyducks.app/api/v1/workspaces/0199a000-0000-7000-8000-000000000014/commitments?closed=recent&page=1",
                                        "prev": null,
                                        "next": null
                                    },
                                    "meta": {
                                        "current_page": 1,
                                        "from": 1,
                                        "last_page": 1,
                                        "links": [
                                            {
                                                "url": null,
                                                "label": "&laquo; Previous",
                                                "page": null,
                                                "active": false
                                            },
                                            {
                                                "url": "https://allmyducks.app/api/v1/workspaces/0199a000-0000-7000-8000-000000000014/commitments?closed=recent&page=1",
                                                "label": "1",
                                                "page": 1,
                                                "active": true
                                            },
                                            {
                                                "url": null,
                                                "label": "Next &raquo;",
                                                "page": null,
                                                "active": false
                                            }
                                        ],
                                        "path": "https://allmyducks.app/api/v1/workspaces/0199a000-0000-7000-8000-000000000014/commitments",
                                        "per_page": 100,
                                        "to": 12,
                                        "total": 12,
                                        "older_closed": true
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "Make a promise or ask for one; a task for yourself takes visibility and fyi",
                "operationId": "postWorkspacesByWorkspaceCommitments",
                "description": "Only the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace it belongs to.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "kind": {
                                        "type": "string",
                                        "enum": [
                                            "promise",
                                            "request"
                                        ],
                                        "description": "Whether this is a promise you make or an ask you send."
                                    },
                                    "party": {
                                        "type": "object",
                                        "properties": {
                                            "type": {
                                                "type": "string",
                                                "enum": [
                                                    "user",
                                                    "team"
                                                ],
                                                "description": "Whether the other party is a person or a team."
                                            },
                                            "id": {
                                                "type": "string",
                                                "description": "The person or team it is for."
                                            }
                                        },
                                        "required": [
                                            "type",
                                            "id"
                                        ]
                                    },
                                    "description": {
                                        "type": "string",
                                        "description": "What it is, up to 10,000 characters."
                                    },
                                    "due_date": {
                                        "type": "string",
                                        "format": "date",
                                        "description": "The date it is due, or leave it out for none."
                                    },
                                    "due_time": {
                                        "type": "string",
                                        "description": "HH:MM, 24-hour, on the promiser’s clock. Needs due_date."
                                    },
                                    "visibility": {
                                        "type": "string",
                                        "enum": [
                                            "owner",
                                            "workspace",
                                            "chosen"
                                        ],
                                        "description": "Who can see a task for yourself: kept to you (owner), shared with the workspace (workspace), or shown to the people and teams in seen_by (chosen). Refused once there are two parties."
                                    },
                                    "seen_by": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "With visibility chosen, who can see it: a list of {\"type\": \"user\" or \"team\", \"id\": the person’s or team’s id}, each one in this workspace, at least one besides you. You are left off, since you always see your own. Refused with any other visibility."
                                    },
                                    "fyi": {
                                        "type": "boolean",
                                        "description": "Something to know: a task for yourself with nothing to tick off, on a day. Needs party to be you and a due_date of today or later in your time zone. Visibility works as for any task."
                                    },
                                    "end_date": {
                                        "type": "string",
                                        "format": "date",
                                        "description": "The last day of something to know that lasts several days, like a holiday: due_date is the first. Only with fyi, at most a year after due_date, and with no due_time. The same day as due_date, null or left out is one day. It can have started already, as long as the last day is today or later in your time zone."
                                    },
                                    "project_id": {
                                        "type": "string",
                                        "description": "A project in this workspace to put it in, or leave it out for none. Putting something in a project comes with Plus; without it nothing is made and the call is refused, 402, with limit projects."
                                    },
                                    "details": {
                                        "type": "string",
                                        "description": "What it involves, in Markdown: bold, italic, a heading, lists and links, up to 10,000 characters as stored. Writing one comes with Plus; without it nothing is made and the call is refused, 402, with limit details."
                                    }
                                },
                                "required": [
                                    "kind",
                                    "party",
                                    "description"
                                ]
                            },
                            "example": {
                                "kind": "promise",
                                "party": {
                                    "type": "user",
                                    "id": "0199a000-0000-7000-8000-000000000003"
                                },
                                "description": "Send the pricing page copy",
                                "due_date": "2026-10-09"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Send the pricing page copy",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-09",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The kind field is required. (and 3 more errors)",
                                    "errors": {
                                        "kind": [
                                            "The kind field is required."
                                        ],
                                        "party.type": [
                                            "The party.type field is required."
                                        ],
                                        "party.id": [
                                            "The party.id field is required."
                                        ],
                                        "description": [
                                            "The description field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/invites": {
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Invites sent here and not yet accepted, with when each one runs out (admin)",
                "operationId": "getWorkspacesByWorkspaceInvites",
                "description": "A member who is not an admin is refused, 403, with “Only a workspace admin can do that.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to list.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000043",
                                            "email": "kit@example.com",
                                            "role": "member",
                                            "accepted": false,
                                            "expires_at": "2026-10-15T09:00:00+00:00",
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Invite by email (admin)",
                "operationId": "postWorkspacesByWorkspaceInvites",
                "description": "A home has room for as many people as its admins’ plans give, counting invites still out. Past that the invite is refused, 402, with limit home_people. The workspace’s invites field in GET /me says so beforehand. A member who is not an admin is refused, 403, with “Only a workspace admin can invite people.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to invite them into.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "The address to send the invite to."
                                    }
                                },
                                "required": [
                                    "email"
                                ]
                            },
                            "example": {
                                "email": "newcomer@example.com"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "email": "newcomer@example.com",
                                        "role": null,
                                        "accepted": false,
                                        "expires_at": "2026-10-08T09:00:00+00:00",
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The email field is required.",
                                    "errors": {
                                        "email": [
                                            "The email field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/members": {
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Members and roles",
                "operationId": "getWorkspacesByWorkspaceMembers",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to list.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "role": "admin"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000005",
                                            "name": "Jo Marsh",
                                            "email": "jo@example.com",
                                            "avatar_url": null,
                                            "role": "admin"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000003",
                                            "name": "Sam Okafor",
                                            "email": "sam@example.com",
                                            "avatar_url": null,
                                            "role": "member"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/projects": {
            "get": {
                "tags": [
                    "Projects"
                ],
                "summary": "Projects, in name order, each with whether it is done and what comes next for you",
                "operationId": "getWorkspacesByWorkspaceProjects",
                "description": "Not paginated: a workspace holds at most 100. done, empty and next are worked out from the items you can see, and nothing says how many items a project holds. empty is true when nothing in it is visible to you.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to list.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch",
                                            "description": "Everything for the launch in October.",
                                            "done": false,
                                            "empty": false,
                                            "next": {
                                                "id": "0199a000-0000-7000-8000-000000000020",
                                                "description": "Send the launch copy",
                                                "due_date": "2026-10-15",
                                                "end_date": null,
                                                "due_time": null,
                                                "fyi": false
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Projects"
                ],
                "summary": "Make a project (anyone in the workspace)",
                "operationId": "postWorkspacesByWorkspaceProjects",
                "description": "Making a project comes with Plus; without it the call is refused, 402, with limit projects. A name already taken here, or a workspace that already holds 100, is refused with 422.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace the project belongs to.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "What people will call it, up to 60 characters, with a letter or a number in it. Its tag is the name lowercased with everything but letters and numbers taken out, and no two projects in a workspace share a tag."
                                    },
                                    "description": {
                                        "type": "string",
                                        "description": "What it is for, up to 500 characters, line breaks kept."
                                    }
                                },
                                "required": [
                                    "name"
                                ]
                            },
                            "example": {
                                "name": "Press kit",
                                "description": "Logos, photos and the founders’ bios."
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "name": "Press kit",
                                        "tag": "presskit",
                                        "description": "Logos, photos and the founders’ bios.",
                                        "done": false,
                                        "empty": true,
                                        "next": null
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "Give the project a name.",
                                    "errors": {
                                        "name": [
                                            "Give the project a name."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/schedules": {
            "get": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "The series in a workspace",
                "operationId": "getWorkspacesByWorkspaceSchedules",
                "description": "Only the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to list.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000037",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "domain",
                                            "icon": "globe",
                                            "name": "Renew example.com",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "rule": {
                                                "every": "year",
                                                "day": 20,
                                                "month": 10,
                                                "interval": 1
                                            },
                                            "rule_words": "Every year on 20 October",
                                            "lead_days": 30,
                                            "next_due_date": "2026-10-20",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [
                                                {
                                                    "date": "2026-10-20",
                                                    "label": null,
                                                    "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                                },
                                                {
                                                    "date": "2027-10-20",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2028-10-20",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2029-10-20",
                                                    "label": null,
                                                    "occurrence_id": null
                                                }
                                            ],
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000056",
                                                    "text": "Check the renewal price"
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000057",
                                                    "text": "Update the card on file"
                                                }
                                            ],
                                            "ended_at": null,
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                            "completions": [],
                                            "module": {
                                                "key": "domain",
                                                "input": "example.com",
                                                "label": "example.com",
                                                "icon": "globe",
                                                "refreshed_at": "2026-10-01T09:00:00+00:00",
                                                "dates": [
                                                    {
                                                        "key": "expiry",
                                                        "label": "Renewal due",
                                                        "date": "2026-10-20"
                                                    }
                                                ],
                                                "trouble": true,
                                                "trouble_line": "Can't reach the registry at the moment."
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000042",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "custom",
                                            "icon": "repeat",
                                            "name": "Order the printer paper",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "rule": {
                                                "every": "week",
                                                "weekday": 3,
                                                "interval": 1
                                            },
                                            "rule_words": "Every week on Wednesday",
                                            "lead_days": 0,
                                            "next_due_date": "2026-10-07",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [
                                                {
                                                    "date": "2026-10-07",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-14",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-21",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-28",
                                                    "label": null,
                                                    "occurrence_id": null
                                                }
                                            ],
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "ended_at": null,
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": null,
                                            "completions": [],
                                            "module": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000046",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "kind": "todo",
                                            "template": "custom",
                                            "icon": "repeat",
                                            "name": "Water the office plants",
                                            "details": null,
                                            "details_changed": null,
                                            "details_by": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "rule": {
                                                "every": "week",
                                                "weekday": 5,
                                                "interval": 1
                                            },
                                            "rule_words": "Every week on Friday",
                                            "lead_days": 0,
                                            "next_due_date": "2026-10-02",
                                            "next_due_timezone": "Europe/London",
                                            "upcoming": [
                                                {
                                                    "date": "2026-10-02",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-09",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-16",
                                                    "label": null,
                                                    "occurrence_id": null
                                                },
                                                {
                                                    "date": "2026-10-23",
                                                    "label": null,
                                                    "occurrence_id": null
                                                }
                                            ],
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "ended_at": null,
                                            "viewer": {
                                                "is_owner": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "owner": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "avatar_url": null
                                                }
                                            },
                                            "open_occurrence_id": null,
                                            "completions": [],
                                            "module": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "links": {
                                        "next": null,
                                        "prev": null
                                    },
                                    "meta": {
                                        "current_page": 1,
                                        "last_page": 1,
                                        "total": 3
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Start a series: what repeats, how often, who it is with",
                "operationId": "postWorkspacesByWorkspaceSchedules",
                "description": "Only the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace it belongs to.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "kind": {
                                        "type": "string",
                                        "enum": [
                                            "todo",
                                            "promise",
                                            "request"
                                        ],
                                        "description": "Whether this series makes a private todo, a promise or an ask, each occurrence repeating."
                                    },
                                    "party": {
                                        "type": "object",
                                        "properties": {
                                            "type": {
                                                "type": "string",
                                                "enum": [
                                                    "user",
                                                    "team"
                                                ],
                                                "description": "Whether the other party is a person or a team. Required unless kind is todo."
                                            },
                                            "id": {
                                                "type": "string",
                                                "description": "The person or team it is for. Required unless kind is todo."
                                            }
                                        }
                                    },
                                    "template": {
                                        "type": "string",
                                        "description": "Which entry from the catalogue this series starts from, as GET /templates lists it."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "What to call it, up to 500 characters."
                                    },
                                    "rule": {
                                        "type": "object",
                                        "description": "How it repeats: weekly, monthly, yearly, every so many days, or a cycle of labelled weeks. The response says the same rule in words, as rule_words. A cycle sent without cycle_anchor starts with its first label on the next date."
                                    },
                                    "lead_days": {
                                        "type": "integer",
                                        "description": "How many days before the due date the occurrence is raised, from 0 to 730. Leave it out for the template’s own default."
                                    },
                                    "module_input": {
                                        "type": "string",
                                        "description": "What to look up, for a template whose source needs one: a plate, a domain, a hostname, a company number. The same value POST /modules/{module}/identify takes."
                                    },
                                    "both": {
                                        "type": "boolean",
                                        "description": "Also start the paired series from the same lookup, for a template that has one (car tax and MOT on one plate)."
                                    },
                                    "visibility": {
                                        "type": "string",
                                        "enum": [
                                            "owner",
                                            "workspace",
                                            "chosen"
                                        ],
                                        "description": "Who can see a todo series: kept to you (owner), shared with the workspace (workspace), or shown to the people and teams in seen_by (chosen). Refused once there are two parties."
                                    },
                                    "seen_by": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "With visibility chosen, who can see it: a list of {\"type\": \"user\" or \"team\", \"id\": the person’s or team’s id}, each one in this workspace, at least one besides you. Every item the series opens is seen by the same list. Refused with any other visibility."
                                    },
                                    "fyi": {
                                        "type": "boolean",
                                        "description": "Something to know: every item the series opens has nothing to tick off, and goes by itself after its day. Only for kind todo. Who can see it is visibility, as for any todo series."
                                    },
                                    "project_id": {
                                        "type": "string",
                                        "description": "A project in this workspace to put the series in, or leave it out for none. Every item it opens goes in too. Putting something in a project comes with Plus; without it nothing is made and the call is refused, 402, with limit projects."
                                    },
                                    "details": {
                                        "type": "string",
                                        "description": "What each one involves, in Markdown, up to 10,000 characters as stored. Every item the series opens starts with a copy. Writing one comes with Plus; without it nothing is made and the call is refused, 402, with limit details. With both, only the series you named gets it."
                                    }
                                },
                                "required": [
                                    "kind",
                                    "template",
                                    "name",
                                    "rule"
                                ]
                            },
                            "example": {
                                "kind": "todo",
                                "template": "custom",
                                "name": "Water the plants",
                                "rule": {
                                    "every": "week",
                                    "weekday": 6
                                },
                                "lead_days": 7,
                                "visibility": "owner"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "custom",
                                        "icon": "repeat",
                                        "name": "Water the plants",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "week",
                                            "weekday": 6,
                                            "interval": 1
                                        },
                                        "rule_words": "Every week on Saturday",
                                        "lead_days": 7,
                                        "next_due_date": "2026-10-03",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-03",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000900004"
                                            },
                                            {
                                                "date": "2026-10-10",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2026-10-17",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2026-10-24",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000900004",
                                        "completions": [],
                                        "module": null,
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The kind field is required. (and 4 more errors)",
                                    "errors": {
                                        "kind": [
                                            "The kind field is required."
                                        ],
                                        "party": [
                                            "Say who it is for."
                                        ],
                                        "template": [
                                            "The template field is required."
                                        ],
                                        "name": [
                                            "The name field is required."
                                        ],
                                        "rule": [
                                            "Say how often it repeats."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/teams": {
            "get": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Teams",
                "operationId": "getWorkspacesByWorkspaceTeams",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to list.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000015",
                                            "name": "Launch crew",
                                            "members": [
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "role": "owner"
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "role": "member"
                                                }
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Create a team",
                "operationId": "postWorkspacesByWorkspaceTeams",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace the team belongs to: a team workspace. A personal workspace or a home refuses one with a 422.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "What people will call it, up to 255 characters. It must be unique in the workspace."
                                    }
                                },
                                "required": [
                                    "name"
                                ]
                            },
                            "example": {
                                "name": "Support"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "name": "Support",
                                        "members": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "role": "owner"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The name field is required.",
                                    "errors": {
                                        "name": [
                                            "The name field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}": {
            "patch": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Rename it, turn the workspace AI (ai_enabled) and Slack suggestions (capture_enabled) switches on and off, or change its colour to sky, emerald, lime, violet, fuchsia or stone, or to null for the one chosen for it (admin, not the personal workspace)",
                "operationId": "patchWorkspacesByWorkspace",
                "description": "ai_enabled (and, on a workspace, capture_enabled) is accepted only from the app itself, on the web or on the phones; any other credential is refused with 403. A member who is not an admin is refused, 403, with “Only a workspace admin can change it.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to update.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "description": "What people will call it, up to 255 characters. The personal workspace keeps its own."
                                    },
                                    "ai_enabled": {
                                        "type": "boolean",
                                        "description": "The workspace AI switch, alongside anyone’s own."
                                    },
                                    "capture_enabled": {
                                        "type": "boolean",
                                        "description": "Whether the app reads what people say in this workspace's Slack channels for suggestions. Off until its admins turn it on."
                                    },
                                    "colour": {
                                        "type": "string",
                                        "enum": [
                                            "sky",
                                            "emerald",
                                            "lime",
                                            "violet",
                                            "fuchsia",
                                            "stone"
                                        ],
                                        "description": "The mark it wears, or null for the one chosen for it."
                                    }
                                }
                            },
                            "example": {
                                "name": "Acme",
                                "colour": "emerald"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": "emerald",
                                        "role": "admin",
                                        "email": "alex@example.com",
                                        "slack_connected": false,
                                        "ai_enabled": true,
                                        "capture_enabled": false
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/billing": {
            "patch": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Change a plan’s interval, or a team’s band (admin)",
                "operationId": "patchWorkspacesByWorkspaceBilling",
                "description": "In the app only. A key gets 403 here.\n\nThe change is made at once and prorated onto the next invoice. Moving down a band waits, 422, while more people and invites are here than it has room for. An arranged plan changes by getting in touch, 422. With no plan, or one that won’t renew, 409. When the payment for a change needs one more step, 402, with no limit: the change is made and billing finishes it. A personal workspace answers your plan, as GET /me shows it. This route is for the web: the phones never call it.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace whose plan this changes: your personal workspace for Plus, or a team.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "interval": {
                                        "type": "string",
                                        "enum": [
                                            "month",
                                            "year"
                                        ],
                                        "description": "Monthly or yearly. Left out, it stays as it is."
                                    },
                                    "seats": {
                                        "type": "integer",
                                        "description": "A team’s band: 10 or 25. Left out, it stays as it is."
                                    }
                                }
                            },
                            "example": {
                                "interval": "month",
                                "seats": 10
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "active": true,
                                        "through": "paid",
                                        "seats": 10,
                                        "interval": "month",
                                        "past_due": false,
                                        "ends_at": null,
                                        "smaller_band_fits": false,
                                        "custom_offer": null,
                                        "can_buy": false
                                    }
                                },
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "active": {
                                                    "type": "boolean",
                                                    "description": "Whether the team has a plan now."
                                                },
                                                "through": {
                                                    "type": "string",
                                                    "description": "How: paid, gift, or custom for an arranged plan."
                                                },
                                                "seats": {
                                                    "type": "integer",
                                                    "description": "The most people the plan has room for, counting invites still out."
                                                },
                                                "interval": {
                                                    "type": "string",
                                                    "description": "month or year; null for a gift or an arranged plan."
                                                },
                                                "past_due": {
                                                    "type": "boolean",
                                                    "description": "Whether Stripe is retrying a payment."
                                                },
                                                "ends_at": {
                                                    "type": "string",
                                                    "description": "The last day of a plan that has been cancelled and still runs; null otherwise."
                                                },
                                                "smaller_band_fits": {
                                                    "type": "boolean",
                                                    "description": "Whether the band below fits everyone here and every invite still out, so a move down can be offered; false for a member, a gift, an arranged plan and the smallest band."
                                                },
                                                "custom_offer": {
                                                    "type": "object",
                                                    "description": "An arranged plan ready to buy, with its seats; null otherwise."
                                                },
                                                "can_buy": {
                                                    "type": "boolean",
                                                    "description": "Whether buying is possible for this team on this install: false until billing is set up; an arranged plan counts by its own Price. A client leaves its buy buttons out while it is false."
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/accept": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Commit to an ask",
                "operationId": "postCommitmentsByCommitmentAccept",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The ask to accept.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000031",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Send the launch slides",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-14",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "accepted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "requested",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/counter": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Accept with a different date",
                "operationId": "postCommitmentsByCommitmentCounter",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The ask to accept.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "due_date": {
                                        "type": "string",
                                        "format": "date",
                                        "description": "The date to accept it for instead."
                                    },
                                    "due_time": {
                                        "type": "string",
                                        "description": "HH:MM to set the time, null to drop it, left out to keep the time it has."
                                    },
                                    "message": {
                                        "type": "string",
                                        "description": "A note about why, if you want to leave one."
                                    }
                                },
                                "required": [
                                    "due_date"
                                ]
                            },
                            "example": {
                                "due_date": "2026-10-16",
                                "message": "The Friday after works better for me."
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000031",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Send the launch slides",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-16",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "countered",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": "The Friday after works better for me.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "requested",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The due date field is required.",
                                    "errors": {
                                        "due_date": [
                                            "The due date field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/decline": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Say no, with an optional note: a clear no beats a quiet miss",
                "operationId": "postCommitmentsByCommitmentDecline",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The ask to decline.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "message": {
                                        "type": "string",
                                        "description": "A note about why, if you want to leave one."
                                    }
                                }
                            },
                            "example": {
                                "message": "I am on the launch this week, so not this one."
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000031",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Send the launch slides",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "declined",
                                        "source": "manual",
                                        "due_date": "2026-10-14",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "closed",
                                            "group": null
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": false,
                                            "can_change_steps": false,
                                            "can_change_project": true,
                                            "can_change_details": false
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "declined",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": "I am on the launch this week, so not this one.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "requested",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/done": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "It’s done",
                "operationId": "postCommitmentsByCommitmentDone",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to mark done.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "done",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "closed",
                                            "group": null
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": false,
                                            "can_change_steps": false,
                                            "can_change_project": true,
                                            "can_change_details": false
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "done",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/keep": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Keep a promise as it stands after a release ask",
                "operationId": "postCommitmentsByCommitmentKeep",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to keep.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000028",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Send the launch metrics",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-13",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "placement": {
                                            "list": "waiting_on_others",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": false,
                                            "is_promisee": true,
                                            "can_reword": false,
                                            "can_change_steps": false,
                                            "can_change_project": true,
                                            "can_change_details": false
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "release_declined",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "release_requested",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "The launch took my week. Can this go?",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/move": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Move a todo to another of your workspaces",
                "operationId": "postCommitmentsByCommitmentMove",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The todo to move: one with just you in it.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "workspace_id": {
                                        "type": "string",
                                        "description": "Where it goes: one of your workspaces, the personal one included."
                                    }
                                },
                                "required": [
                                    "workspace_id"
                                ]
                            },
                            "example": {
                                "workspace_id": "0199a000-0000-7000-8000-000000000013"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000041",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000013",
                                            "name": "Home",
                                            "type": "home",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Order the launch stickers",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": null,
                                        "end_date": null,
                                        "due_timezone": null,
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": true,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "no_date_yet"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": true,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "moved",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": {
                                                    "name": "Acme",
                                                    "type": "team"
                                                },
                                                "to_workspace": {
                                                    "name": "Home",
                                                    "type": "home"
                                                },
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "Say where it goes.",
                                    "errors": {
                                        "workspace_id": [
                                            "Say where it goes."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/notes": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Leave a note on the timeline: every party sees it",
                "operationId": "postCommitmentsByCommitmentNotes",
                "description": "Only the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to leave a note on.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "message": {
                                        "type": "string",
                                        "description": "What to say on the timeline."
                                    }
                                },
                                "required": [
                                    "message"
                                ]
                            },
                            "example": {
                                "message": "First draft is with the designers."
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": "First draft is with the designers.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The message field is required.",
                                    "errors": {
                                        "message": [
                                            "The message field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/pick-up": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Pick a released promise back up (promiser only)",
                "operationId": "postCommitmentsByCommitmentPickUp",
                "description": "An item of a series is refused with 409 and series_moved_on while the series has another one open, and the message names it: a series has one open at a time. Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to pick back up.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000025",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Draft the launch FAQ",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-09-24",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": true,
                                        "in_grace_window": false,
                                        "grace_closed": true,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "needs_your_attention"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "picked_up",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "released",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/release": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Let them off the hook",
                "operationId": "postCommitmentsByCommitmentRelease",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to release.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000028",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Send the launch metrics",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "released",
                                        "source": "manual",
                                        "due_date": "2026-10-13",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": true,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "placement": {
                                            "list": "closed",
                                            "group": null
                                        },
                                        "viewer": {
                                            "is_promiser": false,
                                            "is_promisee": true,
                                            "can_reword": false,
                                            "can_change_steps": false,
                                            "can_change_project": true,
                                            "can_change_details": false
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "released",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "release_requested",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "The launch took my week. Can this go?",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/renegotiate": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Pick a new date, with a note",
                "operationId": "postCommitmentsByCommitmentRenegotiate",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to move.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "due_date": {
                                        "type": "string",
                                        "format": "date",
                                        "description": "The new date."
                                    },
                                    "due_time": {
                                        "type": "string",
                                        "description": "HH:MM to set the time, null to drop it, left out to keep the time it has."
                                    },
                                    "end_date": {
                                        "type": "string",
                                        "format": "date",
                                        "description": "The last day of something to know that lasts several days: due_date is the first. A date sets it, null makes it one day, and left out keeps the last day it has. The same rules as when it was added; a time it had goes when it gets a last day, and one sent with it is refused."
                                    },
                                    "message": {
                                        "type": "string",
                                        "description": "A note about why, if you want to leave one."
                                    }
                                },
                                "required": [
                                    "due_date"
                                ]
                            },
                            "example": {
                                "due_date": "2026-10-22",
                                "due_time": "15:00",
                                "message": "The review moved, so this moves with it."
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-22",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": "15:00",
                                        "due_at": "2026-10-22T14:00:00+00:00",
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "renegotiated",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": "The review moved, so this moves with it.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The due date field is required.",
                                    "errors": {
                                        "due_date": [
                                            "The due date field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/reopen": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Reopen a done commitment (promiser only)",
                "operationId": "postCommitmentsByCommitmentReopen",
                "description": "On an item of a series, the next one goes if nothing has happened to it. Otherwise this is refused with 409 and series_moved_on, and while another one of the series is open the message names it. Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to reopen.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000022",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Book the launch review",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-09-29",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": true,
                                        "in_grace_window": false,
                                        "grace_closed": true,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "needs_your_attention"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "reopened",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "done",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/request-release": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Ask to be let off the hook",
                "operationId": "postCommitmentsByCommitmentRequestRelease",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The commitment to ask off.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "message": {
                                        "type": "string",
                                        "description": "A note about why, if you want to leave one."
                                    }
                                }
                            },
                            "example": {
                                "message": "The launch took the week. Can this go?"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": true,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "release_requested",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": "The launch took the week. Can this go?",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/restore": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Restore a deleted todo within 30 days",
                "operationId": "postCommitmentsByCommitmentRestore",
                "description": "An open item of a series is refused with 409 and series_moved_on while the series has another one open, and the message names it. The delete’s restorable says so ahead of time. Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The todo to restore.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000036",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Cancel the old launch invite",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-06",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": true,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": true,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/skip": {
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Skip this occurrence and bring the next one on",
                "operationId": "postCommitmentsByCommitmentSkip",
                "description": "On an occurrence, schedule.next_label is the label for the series’ next date, null for a series that does not take turns and once it has ended. schedule.following is the one after this occurrence, with its label. Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The occurrence to skip.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000038",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "released",
                                        "source": "schedule",
                                        "due_date": "2026-10-20",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "closed",
                                            "group": null
                                        },
                                        "module_trouble": "Can't reach the registry at the moment.",
                                        "schedule": {
                                            "id": "0199a000-0000-7000-8000-000000000037",
                                            "template": "domain",
                                            "icon": "globe",
                                            "rule_words": "Every year on 20 October",
                                            "next_due_date": "2027-10-20",
                                            "next_label": null,
                                            "following": {
                                                "date": "2027-10-20",
                                                "label": null
                                            },
                                            "occurrence_no": 1,
                                            "ended": false
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": true,
                                            "can_reword": false,
                                            "can_change_steps": false,
                                            "can_change_project": true,
                                            "can_change_details": false
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "skipped",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/steps": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Add a step to something you are doing: one line",
                "operationId": "postCommitmentsByCommitmentSteps",
                "description": "Only the person doing it, while it is active and not something to know. Past what the person’s plan holds it is refused, 402, in the words steps have always had. Nothing is sent to anyone and nothing goes on the timeline: steps are in the item’s body, wherever it is sent.\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The item the step is on.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "text": {
                                        "type": "string",
                                        "description": "The step, one line of up to 200 characters. Blank, longer or with a line break is refused."
                                    },
                                    "position": {
                                        "type": "integer",
                                        "description": "Where the step goes, counting the first as 0. Left out, or past the last, it goes last. For putting back a step that was removed."
                                    },
                                    "done": {
                                        "type": "boolean",
                                        "description": "True adds it ticked. Left out, it is added unticked."
                                    }
                                },
                                "required": [
                                    "text"
                                ]
                            },
                            "example": {
                                "text": "Attach the screenshots"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000900002",
                                                "text": "Attach the screenshots",
                                                "done": false
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "402": {
                        "$ref": "#/components/responses/PlanLimit"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "Say what the step is.",
                                    "errors": {
                                        "text": [
                                            "Say what the step is."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/withdraw": {
            "post": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Take back an ask you made",
                "operationId": "postCommitmentsByCommitmentWithdraw",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.”\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The ask to withdraw.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000033",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "description": "Send the launch numbers",
                                        "details": null,
                                        "details_changed": null,
                                        "state": "withdrawn",
                                        "source": "manual",
                                        "due_date": "2026-10-17",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "placement": {
                                            "list": "closed",
                                            "group": null
                                        },
                                        "viewer": {
                                            "is_promiser": false,
                                            "is_promisee": true,
                                            "can_reword": false,
                                            "can_change_steps": false,
                                            "can_change_project": true,
                                            "can_change_details": false
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "withdrawn",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "requested",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/deletion-code": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Email a 6-digit code to delete an account that has no password; it lasts fifteen minutes, and a new one replaces the last",
                "operationId": "postMeDeletionCode",
                "description": "It answers 3 calls every 10 minutes.",
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "content": {
                            "application/json": {
                                "example": {
                                    "message": "A code is on its way."
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/devices": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Register a phone so notices can reach it",
                "operationId": "postMeDevices",
                "description": "It answers 20 calls a minute.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "platform": {
                                        "type": "string",
                                        "enum": [
                                            "android",
                                            "ios"
                                        ],
                                        "description": "Which kind of phone it is."
                                    },
                                    "token": {
                                        "type": "string",
                                        "description": "The push token the phone was given. Posting the same one again keeps one registration rather than making a second."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "What you’d recognise the phone by."
                                    }
                                },
                                "required": [
                                    "platform",
                                    "token",
                                    "name"
                                ]
                            },
                            "example": {
                                "platform": "android",
                                "token": "docs-push-token-for-the-example-phone-000000000000000",
                                "name": "Pixel 8"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000012",
                                        "platform": "android",
                                        "name": "Pixel 8",
                                        "last_seen_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The platform field is required. (and 2 more errors)",
                                    "errors": {
                                        "platform": [
                                            "The platform field is required."
                                        ],
                                        "token": [
                                            "The token field is required."
                                        ],
                                        "name": [
                                            "The name field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/email/verify": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Prove the address you signed up with: the 6-digit code from the email",
                "operationId": "postMeEmailVerify",
                "description": "It answers 10 calls a minute.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "code": {
                                        "type": "string",
                                        "description": "The 6-digit code sent to the address."
                                    }
                                },
                                "required": [
                                    "code"
                                ]
                            },
                            "example": {
                                "code": "123456"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera",
                                        "email": "alex@example.com",
                                        "avatar_url": null,
                                        "timezone": "Europe/London",
                                        "country": "GB",
                                        "timezone_country": "GB",
                                        "joined_on": "2026-10-01",
                                        "email_verified": true,
                                        "notify_email": true,
                                        "notify_slack": true,
                                        "email_updates": "instant",
                                        "digest_hour": 8,
                                        "ai_enabled": true,
                                        "rewrite": "ask",
                                        "needs_start": false,
                                        "two_factor_enabled": false,
                                        "has_password": true,
                                        "apple_connected": false,
                                        "current_workspace_id": "0199a000-0000-7000-8000-000000000014",
                                        "plan": {
                                            "name": "plus",
                                            "through": "team",
                                            "team_covers": false,
                                            "trial_ends_at": null,
                                            "interval": null,
                                            "ends_at": null,
                                            "limits": {
                                                "open_tasks": 500,
                                                "steps": 100,
                                                "home_people": 6
                                            },
                                            "features": {
                                                "year_view": true,
                                                "calendar_feed": true,
                                                "integrations": true,
                                                "projects": true,
                                                "details": true
                                            },
                                            "can_buy": false,
                                            "currency": "gbp",
                                            "adding": {
                                                "allowed": true,
                                                "reason": null
                                            }
                                        },
                                        "workspaces": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 1,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": null,
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null,
                                                    "more_room_with_plus": false
                                                },
                                                "slack": {
                                                    "allowed": false,
                                                    "reason": null
                                                }
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 3,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": {
                                                    "active": true,
                                                    "through": "gift",
                                                    "seats": 10,
                                                    "interval": null,
                                                    "past_due": false,
                                                    "ends_at": null,
                                                    "smaller_band_fits": false,
                                                    "custom_offer": null,
                                                    "can_buy": false
                                                },
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null
                                                },
                                                "slack": {
                                                    "allowed": true,
                                                    "reason": null
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The code field is required.",
                                    "errors": {
                                        "code": [
                                            "The code field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/email/verify/send": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Send that code again",
                "operationId": "postMeEmailVerifySend",
                "description": "It answers 3 calls every 10 minutes.",
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "content": {
                            "application/json": {
                                "example": {
                                    "message": "A new code is on its way."
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/emails/{id}/make-primary": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Make another proved address your primary: account email goes there, and workspaces you make from now on start on it",
                "operationId": "postMeEmailsByIdMakePrimary",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 10 calls a minute.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "The email’s id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000009",
                                            "email": "alex@rivera.example",
                                            "primary": true,
                                            "verified": true,
                                            "added_on": "2026-10-01"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000002",
                                            "email": "alex@example.com",
                                            "primary": false,
                                            "verified": true,
                                            "added_on": "2026-10-01"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000010",
                                            "email": "alex@laptop.example",
                                            "primary": false,
                                            "verified": false,
                                            "added_on": "2026-10-01"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/emails/{id}/verify": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Type the code to prove the address",
                "operationId": "postMeEmailsByIdVerify",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 10 calls a minute.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "The email’s id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "code": {
                                        "type": "string",
                                        "description": "The 6-digit code sent to the address."
                                    }
                                },
                                "required": [
                                    "code"
                                ]
                            },
                            "example": {
                                "code": "123456"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000009",
                                        "email": "alex@rivera.example",
                                        "primary": false,
                                        "verified": true,
                                        "added_on": "2026-10-01"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The code field is required.",
                                    "errors": {
                                        "code": [
                                            "The code field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/emails/{id}/verify/send": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Send a fresh code",
                "operationId": "postMeEmailsByIdVerifySend",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 3 calls every 10 minutes.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "The email’s id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "content": {
                            "application/json": {
                                "example": {
                                    "message": "A new code is on its way."
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/export": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Take a copy of your data (account password required)",
                "operationId": "postMeExport",
                "description": "It answers 5 calls a minute.\n\nOnly the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "password": {
                                        "type": "string",
                                        "description": "Your account password, because this one matters."
                                    }
                                },
                                "required": [
                                    "password"
                                ]
                            },
                            "example": {
                                "password": "your account password"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "exported_at": "2026-10-01T09:00:00+00:00",
                                    "profile": {
                                        "name": "Alex Rivera",
                                        "email": "alex@example.com",
                                        "emails": [
                                            {
                                                "email": "alex@example.com",
                                                "primary": true,
                                                "verified": true,
                                                "added_on": "2026-10-01"
                                            },
                                            {
                                                "email": "alex@rivera.example",
                                                "primary": false,
                                                "verified": true,
                                                "added_on": "2026-10-01"
                                            },
                                            {
                                                "email": "alex@laptop.example",
                                                "primary": false,
                                                "verified": false,
                                                "added_on": "2026-10-01"
                                            }
                                        ],
                                        "avatar_url": null,
                                        "timezone": "Europe/London",
                                        "notify_email": true,
                                        "notify_slack": true,
                                        "email_updates": "instant",
                                        "digest_hour": 8,
                                        "ai_enabled": true,
                                        "rewrite": "ask"
                                    },
                                    "workspaces": [
                                        {
                                            "name": "Home",
                                            "role": "admin",
                                            "type": "home",
                                            "email": "alex@example.com",
                                            "capture_enabled": false,
                                            "projects": []
                                        },
                                        {
                                            "name": "Acme",
                                            "role": "admin",
                                            "type": "team",
                                            "email": "alex@example.com",
                                            "capture_enabled": false,
                                            "projects": [
                                                {
                                                    "name": "Launch",
                                                    "description": "Everything for the launch in October."
                                                }
                                            ]
                                        }
                                    ],
                                    "teams": [
                                        {
                                            "name": "Launch crew"
                                        }
                                    ],
                                    "commitments": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000020",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": {
                                                "id": "0199a000-0000-7000-8000-000000000058",
                                                "name": "Launch",
                                                "tag": "launch"
                                            },
                                            "description": "Send the launch copy",
                                            "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-15",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000053",
                                                    "text": "Draft the hero line",
                                                    "done": true
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000054",
                                                    "text": "Check it with Priya",
                                                    "done": false
                                                },
                                                {
                                                    "id": "0199a000-0000-7000-8000-000000000055",
                                                    "text": "Send it to design",
                                                    "done": false
                                                }
                                            ],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "details_changed",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                },
                                                {
                                                    "type": "noted",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000003",
                                                        "name": "Sam Okafor"
                                                    },
                                                    "message": "Whenever suits, no rush.",
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                },
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000022",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Book the launch review",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "done",
                                            "source": "manual",
                                            "due_date": "2026-09-29",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "done",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                },
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000025",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Draft the launch FAQ",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "released",
                                            "source": "manual",
                                            "due_date": "2026-09-24",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "released",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000003",
                                                        "name": "Sam Okafor"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                },
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000028",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch metrics",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-13",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": true,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "needs_your_answer"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "release_requested",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000003",
                                                        "name": "Sam Okafor"
                                                    },
                                                    "message": "The launch took my week. Can this go?",
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                },
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000003",
                                                        "name": "Sam Okafor"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000031",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch slides",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-14",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "needs_your_attention"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": false,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "requested",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000003",
                                                        "name": "Sam Okafor"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000033",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Send the launch numbers",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "requested",
                                            "source": "manual",
                                            "due_date": "2026-10-17",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": false,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": "2026-10-08T09:00:00+00:00",
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "placement": {
                                                "list": "waiting_on_others",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": false,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor",
                                                    "email": "sam@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "requested",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000035",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Tidy the launch folder",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000038",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Renew example.com",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "schedule",
                                            "due_date": "2026-10-20",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "module_trouble": "Can't reach the registry at the moment.",
                                            "schedule": {
                                                "id": "0199a000-0000-7000-8000-000000000037",
                                                "template": "domain",
                                                "icon": "globe",
                                                "rule_words": "Every year on 20 October",
                                                "next_due_date": "2026-10-20",
                                                "next_label": null,
                                                "following": {
                                                    "date": "2027-10-20",
                                                    "label": null
                                                },
                                                "occurrence_no": 1,
                                                "ended": false
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000040",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Water the plants",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "released",
                                            "source": "schedule",
                                            "due_date": "2026-10-03",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "schedule": {
                                                "id": "0199a000-0000-7000-8000-000000000039",
                                                "template": "custom",
                                                "icon": "repeat",
                                                "rule_words": "Every week on Saturday",
                                                "next_due_date": "2026-10-03",
                                                "next_label": null,
                                                "following": null,
                                                "occurrence_no": 1,
                                                "ended": true
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "released",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                },
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000041",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Order the launch stickers",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": null,
                                            "end_date": null,
                                            "due_timezone": null,
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "no_date_yet"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000048",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Bins: Recycling",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "schedule",
                                            "due_date": "2026-10-06",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "schedule": {
                                                "id": "0199a000-0000-7000-8000-000000000047",
                                                "template": "bins",
                                                "icon": "bin",
                                                "rule_words": "Every week on Tuesday",
                                                "next_due_date": "2026-10-06",
                                                "next_label": "Recycling",
                                                "following": {
                                                    "date": "2026-10-13",
                                                    "label": "General waste"
                                                },
                                                "occurrence_no": 1,
                                                "ended": false
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000049",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Call the printers about the proofs",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-08",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": "15:00",
                                            "due_at": "2026-10-08T14:00:00+00:00",
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000050",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Sam is on holiday",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-12",
                                            "end_date": "2026-10-18",
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "workspace",
                                            "seen_by": [],
                                            "fyi": true,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "shared",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000051",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Book the team lunch",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "active",
                                            "source": "manual",
                                            "due_date": "2026-10-23",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "chosen",
                                            "seen_by": [
                                                {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000005",
                                                    "name": "Jo Marsh"
                                                },
                                                {
                                                    "type": "team",
                                                    "id": "0199a000-0000-7000-8000-000000000015",
                                                    "name": "Launch crew"
                                                }
                                            ],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 0,
                                            "placement": {
                                                "list": "yours_to_do",
                                                "group": "coming_up"
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": true,
                                                "can_change_steps": true,
                                                "can_add_step": true,
                                                "step_limit_reason": null,
                                                "can_change_project": true,
                                                "can_change_details": true
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-10-01T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000052",
                                            "workspace": {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null
                                            },
                                            "project": null,
                                            "description": "Renew the parking permit",
                                            "details": null,
                                            "details_changed": null,
                                            "state": "done",
                                            "source": "manual",
                                            "due_date": "2026-09-10",
                                            "end_date": null,
                                            "due_timezone": "Europe/London",
                                            "due_time": null,
                                            "due_at": null,
                                            "is_private": true,
                                            "visibility": "owner",
                                            "seen_by": [],
                                            "fyi": false,
                                            "steps": [],
                                            "release_requested": false,
                                            "request_expires_at": null,
                                            "is_slipped": false,
                                            "in_grace_window": false,
                                            "grace_closed": false,
                                            "at_risk": false,
                                            "dormant": false,
                                            "quiet_days": 21,
                                            "placement": {
                                                "list": "closed",
                                                "group": null
                                            },
                                            "viewer": {
                                                "is_promiser": true,
                                                "is_promisee": true,
                                                "can_reword": false,
                                                "can_change_steps": false,
                                                "can_change_project": true,
                                                "can_change_details": false
                                            },
                                            "parties": {
                                                "promiser": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "promisee": {
                                                    "type": "user",
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera",
                                                    "email": "alex@example.com",
                                                    "avatar_url": null,
                                                    "active": true
                                                },
                                                "asked_team": null
                                            },
                                            "events": [
                                                {
                                                    "type": "done",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-09-10T09:00:00+00:00"
                                                },
                                                {
                                                    "type": "created",
                                                    "actor": {
                                                        "id": "0199a000-0000-7000-8000-000000000001",
                                                        "name": "Alex Rivera"
                                                    },
                                                    "message": null,
                                                    "reason": null,
                                                    "team": null,
                                                    "from": null,
                                                    "to": null,
                                                    "source": null,
                                                    "from_workspace": null,
                                                    "to_workspace": null,
                                                    "created_at": "2026-09-10T09:00:00+00:00"
                                                }
                                            ],
                                            "created_at": "2026-09-10T09:00:00+00:00"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The password field is required.",
                                    "errors": {
                                        "password": [
                                            "The password field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/start": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Answer the first-run question: whether this account starts at home or at work",
                "operationId": "postMeStart",
                "description": "It answers 10 calls a minute.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "choice": {
                                        "type": "string",
                                        "enum": [
                                            "just_me",
                                            "home",
                                            "team"
                                        ],
                                        "description": "Which kind of workspace this account starts with."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "The team’s name, needed only when choice is team."
                                    }
                                },
                                "required": [
                                    "choice"
                                ]
                            },
                            "example": {
                                "choice": "team",
                                "name": "Acme"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera",
                                        "email": "alex@example.com",
                                        "avatar_url": null,
                                        "timezone": "Europe/London",
                                        "country": "GB",
                                        "timezone_country": "GB",
                                        "joined_on": "2026-10-01",
                                        "email_verified": true,
                                        "notify_email": true,
                                        "notify_slack": true,
                                        "email_updates": "instant",
                                        "digest_hour": 8,
                                        "ai_enabled": true,
                                        "rewrite": "ask",
                                        "needs_start": false,
                                        "two_factor_enabled": false,
                                        "has_password": true,
                                        "apple_connected": false,
                                        "current_workspace_id": "0199a000-0000-7000-8000-000000000014",
                                        "plan": {
                                            "name": "plus",
                                            "through": "team",
                                            "team_covers": false,
                                            "trial_ends_at": null,
                                            "interval": null,
                                            "ends_at": null,
                                            "limits": {
                                                "open_tasks": 500,
                                                "steps": 100,
                                                "home_people": 6
                                            },
                                            "features": {
                                                "year_view": true,
                                                "calendar_feed": true,
                                                "integrations": true,
                                                "projects": true,
                                                "details": true
                                            },
                                            "can_buy": false,
                                            "currency": "gbp",
                                            "adding": {
                                                "allowed": true,
                                                "reason": null
                                            }
                                        },
                                        "workspaces": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000013",
                                                "name": "Home",
                                                "type": "home",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 1,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": null,
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null,
                                                    "more_room_with_plus": false
                                                },
                                                "slack": {
                                                    "allowed": false,
                                                    "reason": null
                                                }
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000014",
                                                "name": "Acme",
                                                "type": "team",
                                                "colour": null,
                                                "role": "admin",
                                                "email": "alex@example.com",
                                                "member_count": 3,
                                                "slack_connected": false,
                                                "slack_linked": false,
                                                "slack_needs_reconnect": false,
                                                "ai_enabled": true,
                                                "capture_enabled": false,
                                                "plan": {
                                                    "active": true,
                                                    "through": "gift",
                                                    "seats": 10,
                                                    "interval": null,
                                                    "past_due": false,
                                                    "ends_at": null,
                                                    "smaller_band_fits": false,
                                                    "custom_offer": null,
                                                    "can_buy": false
                                                },
                                                "invites": {
                                                    "allowed": true,
                                                    "reason": null
                                                },
                                                "slack": {
                                                    "allowed": true,
                                                    "reason": null
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The choice field is required.",
                                    "errors": {
                                        "choice": [
                                            "The choice field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/modules/{module}/identify": {
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Look something up the way the form does: a plate, a domain, a hostname, a company number",
                "operationId": "postModulesByModuleIdentify",
                "description": "It answers 20 calls a minute.",
                "parameters": [
                    {
                        "name": "module",
                        "in": "path",
                        "required": true,
                        "description": "Which module to ask.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "input": {
                                        "type": "string",
                                        "description": "The thing to look up: a plate, a domain, a hostname, a company number, whatever this module reads."
                                    }
                                },
                                "required": [
                                    "input"
                                ]
                            },
                            "example": {
                                "input": "example.com"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "input": "example.com",
                                        "label": "example.com",
                                        "icon": "globe",
                                        "dates": [
                                            {
                                                "key": "expiry",
                                                "label": "Renewal due",
                                                "date": "2026-10-20"
                                            }
                                        ],
                                        "data": {
                                            "registrar": "Example Registrar"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The input field is required.",
                                    "errors": {
                                        "input": [
                                            "The input field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}/end": {
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "End a series: the open one is let go and no more are made",
                "operationId": "postSchedulesByScheduleEnd",
                "description": "Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Either party to a promise may end it.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series to end.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": null,
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 30,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000056",
                                                "text": "Check the renewal price"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            }
                                        ],
                                        "ended_at": "2026-10-01T09:00:00+00:00",
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": false,
                                            "can_change_project": true,
                                            "can_change_details": false
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": null,
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": true,
                                            "trouble_line": "Can't reach the registry at the moment."
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}/move": {
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Move a series, and every item it made, to another of your workspaces",
                "operationId": "postSchedulesByScheduleMove",
                "description": "The items it made, open, closed and deleted, go with it, and the next one opens there. Who could see it before is no longer shown it: it arrives for you alone, whatever it was. If an item is open, the move is written on that item’s history; with none, nothing is written. The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series to move: one with just you in it.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "workspace_id": {
                                        "type": "string",
                                        "description": "Where it goes: one of your workspaces, the personal one included."
                                    }
                                },
                                "required": [
                                    "workspace_id"
                                ]
                            },
                            "example": {
                                "workspace_id": "0199a000-0000-7000-8000-000000000013"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000042",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000013",
                                            "name": "Home",
                                            "type": "home",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "custom",
                                        "icon": "repeat",
                                        "name": "Order the printer paper",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "week",
                                            "weekday": 3,
                                            "interval": 1
                                        },
                                        "rule_words": "Every week on Wednesday",
                                        "lead_days": 0,
                                        "next_due_date": "2026-10-07",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-07",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2026-10-14",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2026-10-21",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2026-10-28",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": null,
                                        "completions": [],
                                        "module": null,
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "Say where it goes.",
                                    "errors": {
                                        "workspace_id": [
                                            "Say where it goes."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}/refresh": {
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Check the source again now, once an hour",
                "operationId": "postSchedulesByScheduleRefresh",
                "description": "The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series to check again.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 30,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-20",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                            },
                                            {
                                                "date": "2027-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2028-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2029-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000056",
                                                "text": "Check the renewal price"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            }
                                        ],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": false,
                                            "trouble_line": null
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}/restart": {
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Start raising them again from an ended series",
                "operationId": "postSchedulesByScheduleRestart",
                "description": "The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series to restart.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000039",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000013",
                                            "name": "Home",
                                            "type": "home",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "custom",
                                        "icon": "repeat",
                                        "name": "Water the plants",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "week",
                                            "weekday": 6,
                                            "interval": 1
                                        },
                                        "rule_words": "Every week on Saturday",
                                        "lead_days": 7,
                                        "next_due_date": "2026-10-03",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-03",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000900003"
                                            },
                                            {
                                                "date": "2026-10-10",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2026-10-17",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2026-10-24",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000900003",
                                        "completions": [],
                                        "module": null,
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}/steps": {
            "post": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Add a step for every time: each item the series opens starts with it, unticked",
                "operationId": "postSchedulesByScheduleSteps",
                "description": "Each item the series opens from now on starts with these, unticked. An item already open keeps its own. Not on a series of asks or of something to know. The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series the step is for.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "text": {
                                        "type": "string",
                                        "description": "The step, one line of up to 200 characters. Blank, longer or with a line break is refused."
                                    },
                                    "position": {
                                        "type": "integer",
                                        "description": "Where the step goes, counting the first as 0. Left out, or past the last, it goes last. For putting back a step that was removed."
                                    }
                                },
                                "required": [
                                    "text"
                                ]
                            },
                            "example": {
                                "text": "Note the new expiry date"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 30,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-20",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                            },
                                            {
                                                "date": "2027-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2028-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2029-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000056",
                                                "text": "Check the renewal price"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000900002",
                                                "text": "Note the new expiry date"
                                            }
                                        ],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": true,
                                            "trouble_line": "Can't reach the registry at the moment."
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "Say what the step is.",
                                    "errors": {
                                        "text": [
                                            "Say what the step is."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/teams/{team}/members": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Put a workspace member on a team (one of its owners or a workspace admin)",
                "operationId": "postTeamsByTeamMembers",
                "description": "A member who is neither one of its owners nor a workspace admin is refused, 403, with “Only a team owner or a workspace admin can add people to it.” Somebody outside the workspace is answered 404.",
                "parameters": [
                    {
                        "name": "team",
                        "in": "path",
                        "required": true,
                        "description": "The team to add them to.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "The address of an existing workspace member. They join as a plain member; make them an owner afterwards with PATCH."
                                    }
                                },
                                "required": [
                                    "email"
                                ]
                            },
                            "example": {
                                "email": "jo@example.com"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000005",
                                        "name": "Jo Marsh",
                                        "email": "jo@example.com",
                                        "avatar_url": null,
                                        "role": "member"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The email field is required.",
                                    "errors": {
                                        "email": [
                                            "The email field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/webhooks/{webhook}/ping": {
            "post": {
                "tags": [
                    "Webhooks"
                ],
                "summary": "Send one test event, so you can see it arrive",
                "operationId": "postWebhooksByWebhookPing",
                "description": "Without Plus the call is refused, 402, with limit integrations.",
                "parameters": [
                    {
                        "name": "webhook",
                        "in": "path",
                        "required": true,
                        "description": "The subscription to test.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000900002",
                                        "event": "ping",
                                        "status": "pending",
                                        "attempts": 0,
                                        "response_code": null,
                                        "occurred_at": "2026-10-01T09:00:00+00:00",
                                        "last_attempt_at": null,
                                        "delivered_at": null
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "workspaceKey": {
                                        "summary": "A workspace key.",
                                        "value": {
                                            "message": "This key only works inside its workspace."
                                        }
                                    },
                                    "unscopedApp": {
                                        "summary": "An app that was never given the webhooks permission.",
                                        "value": {
                                            "message": "This app can’t manage webhooks: ask for that permission when you connect."
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "oauth": [
                            "webhooks"
                        ]
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/billing/checkout": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "A Stripe link to start paying for this workspace (admin)",
                "operationId": "postWorkspacesByWorkspaceBillingCheckout",
                "description": "In the app only. A key gets 403 here.\n\nA home has no plan of its own: 422. A workspace already paying: 409. This route is for the web: the phones never call it.\n\nThis response is written by hand: the link is made through Stripe’s own SDK, so the generator that plays every other example has nothing to record.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace being paid for: your personal workspace for Plus, or a team.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "interval": {
                                        "type": "string",
                                        "enum": [
                                            "month",
                                            "year"
                                        ],
                                        "description": "Monthly or yearly."
                                    },
                                    "seats": {
                                        "type": "integer",
                                        "description": "A team’s band, the most people its plan has room for: 10 or 25. Not asked of Plus, nor of a team with an arranged plan, which is sold at its own price."
                                    }
                                },
                                "required": [
                                    "interval"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "url": "https://checkout.stripe.com/c/pay/cs_test_a1B2c3D4e5F6g7H8i9J0"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/billing/portal": {
            "post": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "A Stripe link to the card, the invoices and cancelling (admin)",
                "operationId": "postWorkspacesByWorkspaceBillingPortal",
                "description": "In the app only. A key gets 403 here.\n\nThis route is for the web: the phones never call it.\n\nThis response is written by hand: the link is made through Stripe’s own SDK, so the generator that plays every other example has nothing to record.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace whose billing this manages.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "url": "https://billing.stripe.com/p/session/test_YWNjdF8xMjM0NTY3ODkw"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/workspaces/{workspace}/quick-add/parse": {
            "post": {
                "tags": [
                    "Commitment endpoints"
                ],
                "summary": "Read a typed line into the parts of a commitment without saving it: a convenience for human UIs",
                "operationId": "postWorkspacesByWorkspaceQuickAddParse",
                "description": "It answers 30 calls a minute.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace to parse it for.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "text": {
                                        "type": "string",
                                        "description": "The line to read, up to 2,000 characters."
                                    }
                                },
                                "required": [
                                    "text"
                                ]
                            },
                            "example": {
                                "text": "Send Sam the launch copy on Thursday"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "available": true,
                                        "member": {
                                            "id": "0199a000-0000-7000-8000-000000000003",
                                            "name": "Sam Okafor"
                                        },
                                        "due_date": "2026-10-08",
                                        "end_date": null,
                                        "due_time": null,
                                        "date_words": "on Thursday",
                                        "title": "Send the launch copy"
                                    }
                                },
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "available": {
                                                    "type": "boolean",
                                                    "description": "Whether the line was read. False when AI is switched off for you or in this workspace, or no reading came back, and then every other field is null."
                                                },
                                                "member": {
                                                    "type": "object",
                                                    "description": "The person in this workspace the line names, as {\"id\", \"name\"}, or null when it names nobody here. Never you."
                                                },
                                                "due_date": {
                                                    "type": "string",
                                                    "format": "date",
                                                    "description": "The date the line gives, in your time zone, or null. For a stretch of days, its first day."
                                                },
                                                "end_date": {
                                                    "type": "string",
                                                    "format": "date",
                                                    "description": "The last day of a stretch of days the line states, like a holiday, or null for one day. Only a line that reads as something to know has one, and never more than a year after due_date."
                                                },
                                                "due_time": {
                                                    "type": "string",
                                                    "description": "The time the line gives, HH:MM, 24-hour, or null."
                                                },
                                                "date_words": {
                                                    "type": "string",
                                                    "description": "The words of the line that due_date was read from, exactly as typed, so a UI can mark them. Null when due_date is, or when the words are not the line’s own."
                                                },
                                                "title": {
                                                    "type": "string",
                                                    "description": "The line as it reads on its card, with the date and the person taken out, or null when nothing would be left."
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The text field is required.",
                                    "errors": {
                                        "text": [
                                            "The text field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/commitments/{commitment}/steps/order": {
            "put": {
                "tags": [
                    "Acting on a commitment"
                ],
                "summary": "Put the steps in a new order",
                "operationId": "putCommitmentsByCommitmentStepsOrder",
                "description": "Only the promiser receives: at_risk, dormant, quiet_days, module_trouble.",
                "parameters": [
                    {
                        "name": "commitment",
                        "in": "path",
                        "required": true,
                        "description": "The item the step is on.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "steps": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "Every step’s id, each once, in the new order. A list that is not the item’s steps as they are now is refused with 409."
                                    }
                                },
                                "required": [
                                    "steps"
                                ]
                            },
                            "example": {
                                "steps": [
                                    "0199a000-0000-7000-8000-000000000055",
                                    "0199a000-0000-7000-8000-000000000054",
                                    "0199a000-0000-7000-8000-000000000053"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000020",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": {
                                            "id": "0199a000-0000-7000-8000-000000000058",
                                            "name": "Launch",
                                            "tag": "launch"
                                        },
                                        "description": "Send the launch copy",
                                        "details": "Two things to settle first:\n\n- the **opening line**\n- the *final* image\n\nThe brief is at <https://example.com/brief>.",
                                        "details_changed": null,
                                        "state": "active",
                                        "source": "manual",
                                        "due_date": "2026-10-15",
                                        "end_date": null,
                                        "due_timezone": "Europe/London",
                                        "due_time": null,
                                        "due_at": null,
                                        "is_private": false,
                                        "visibility": "owner",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000055",
                                                "text": "Send it to design",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000054",
                                                "text": "Check it with Priya",
                                                "done": false
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000053",
                                                "text": "Draft the hero line",
                                                "done": true
                                            }
                                        ],
                                        "release_requested": false,
                                        "request_expires_at": null,
                                        "is_slipped": false,
                                        "in_grace_window": false,
                                        "grace_closed": false,
                                        "at_risk": false,
                                        "dormant": false,
                                        "quiet_days": 0,
                                        "placement": {
                                            "list": "yours_to_do",
                                            "group": "coming_up"
                                        },
                                        "viewer": {
                                            "is_promiser": true,
                                            "is_promisee": false,
                                            "can_reword": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "promiser": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "email": "alex@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000003",
                                                "name": "Sam Okafor",
                                                "email": "sam@example.com",
                                                "avatar_url": null,
                                                "active": true
                                            },
                                            "asked_team": null
                                        },
                                        "events": [
                                            {
                                                "type": "details_changed",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "noted",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000003",
                                                    "name": "Sam Okafor"
                                                },
                                                "message": "Whenever suits, no rush.",
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            },
                                            {
                                                "type": "created",
                                                "actor": {
                                                    "id": "0199a000-0000-7000-8000-000000000001",
                                                    "name": "Alex Rivera"
                                                },
                                                "message": null,
                                                "reason": null,
                                                "team": null,
                                                "from": null,
                                                "to": null,
                                                "source": null,
                                                "from_workspace": null,
                                                "to_workspace": null,
                                                "created_at": "2026-10-01T09:00:00+00:00"
                                            }
                                        ],
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The steps field is required.",
                                    "errors": {
                                        "steps": [
                                            "The steps field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/me/workspaces/{workspace}/email": {
            "put": {
                "tags": [
                    "You and your workspaces"
                ],
                "summary": "Choose which of your verified addresses this workspace emails and shows to its members",
                "operationId": "putMeWorkspacesByWorkspaceEmail",
                "description": "In the app only. A key gets 403 here.\n\nIt answers 10 calls a minute.",
                "parameters": [
                    {
                        "name": "workspace",
                        "in": "path",
                        "required": true,
                        "description": "The workspace’s id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "One of your verified addresses."
                                    }
                                },
                                "required": [
                                    "email"
                                ]
                            },
                            "example": {
                                "email": "alex@rivera.example"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null,
                                        "role": "admin",
                                        "email": "alex@rivera.example",
                                        "slack_connected": false,
                                        "ai_enabled": true,
                                        "capture_enabled": false
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "description": "Not allowed with this credential.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "examples": {
                                    "key": {
                                        "summary": "Any key: this route is the app’s own.",
                                        "value": {
                                            "message": ""
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The email field is required.",
                                    "errors": {
                                        "email": [
                                            "The email field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "appSession": []
                    }
                ]
            }
        },
        "/schedules/{schedule}/steps/order": {
            "put": {
                "tags": [
                    "Things that repeat"
                ],
                "summary": "Put the steps for every time in a new order",
                "operationId": "putSchedulesByScheduleStepsOrder",
                "description": "The other party to a promise is refused, 403, with “Only the person this repeats for can change it.” Somebody who is only shown it is refused, 403, with “That’s Sam’s to change.” Somebody who cannot see the series at all is answered 404.\n\nOnly the owner has a value for: module.input, module.trouble, module.trouble_line.",
                "parameters": [
                    {
                        "name": "schedule",
                        "in": "path",
                        "required": true,
                        "description": "The series the step is for.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "steps": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "Every step’s id, each once, in the new order. A list that is not the series’ steps as they are now is refused with 409."
                                    }
                                },
                                "required": [
                                    "steps"
                                ]
                            },
                            "example": {
                                "steps": [
                                    "0199a000-0000-7000-8000-000000000057",
                                    "0199a000-0000-7000-8000-000000000056"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "example": {
                                    "data": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "workspace": {
                                            "id": "0199a000-0000-7000-8000-000000000014",
                                            "name": "Acme",
                                            "type": "team",
                                            "colour": null
                                        },
                                        "project": null,
                                        "kind": "todo",
                                        "template": "domain",
                                        "icon": "globe",
                                        "name": "Renew example.com",
                                        "details": null,
                                        "details_changed": null,
                                        "details_by": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera"
                                        },
                                        "rule": {
                                            "every": "year",
                                            "day": 20,
                                            "month": 10,
                                            "interval": 1
                                        },
                                        "rule_words": "Every year on 20 October",
                                        "lead_days": 30,
                                        "next_due_date": "2026-10-20",
                                        "next_due_timezone": "Europe/London",
                                        "upcoming": [
                                            {
                                                "date": "2026-10-20",
                                                "label": null,
                                                "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                            },
                                            {
                                                "date": "2027-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2028-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            },
                                            {
                                                "date": "2029-10-20",
                                                "label": null,
                                                "occurrence_id": null
                                            }
                                        ],
                                        "is_private": true,
                                        "visibility": "workspace",
                                        "seen_by": [],
                                        "fyi": false,
                                        "steps": [
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000057",
                                                "text": "Update the card on file"
                                            },
                                            {
                                                "id": "0199a000-0000-7000-8000-000000000056",
                                                "text": "Check the renewal price"
                                            }
                                        ],
                                        "ended_at": null,
                                        "viewer": {
                                            "is_owner": true,
                                            "can_change_steps": true,
                                            "can_add_step": true,
                                            "step_limit_reason": null,
                                            "can_change_project": true,
                                            "can_change_details": true
                                        },
                                        "parties": {
                                            "owner": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            },
                                            "promisee": {
                                                "type": "user",
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera",
                                                "avatar_url": null
                                            }
                                        },
                                        "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                        "completions": [],
                                        "module": {
                                            "key": "domain",
                                            "input": "example.com",
                                            "label": "example.com",
                                            "icon": "globe",
                                            "refreshed_at": "2026-10-01T09:00:00+00:00",
                                            "dates": [
                                                {
                                                    "key": "expiry",
                                                    "label": "Renewal due",
                                                    "date": "2026-10-20"
                                                }
                                            ],
                                            "trouble": true,
                                            "trouble_line": "Can't reach the registry at the moment."
                                        },
                                        "created_at": "2026-10-01T09:00:00+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "422": {
                        "description": "A field missing or wrong.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                },
                                "example": {
                                    "message": "The steps field is required.",
                                    "errors": {
                                        "steps": [
                                            "The steps field is required."
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "personalKey": []
                    },
                    {
                        "workspaceKey": []
                    },
                    {
                        "oauth": []
                    },
                    {
                        "appSession": []
                    }
                ]
            }
        }
    },
    "webhooks": {
        "commitment.created": {
            "post": {
                "summary": "Something was written down: a promise, a todo or an ask.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.created"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=fe5abf57ea64afea27a88c857d811542dbddfa0efc87d6a6bbfef81ae345485a"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.created",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.accepted": {
            "post": {
                "summary": "An ask was taken on.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.accepted"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=f58ffc4b927cbb246b210f5643d54355a6302aaedd584d5014eb47e6967acca4"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.accepted",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.countered": {
            "post": {
                "summary": "An ask was taken on with a different date.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.countered"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=d7e14f607a94aff49aebb3aa18f08475abb73fce41c1e7641ae2f66fa1273cf1"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.countered",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.declined": {
            "post": {
                "summary": "Somebody said no to an ask.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.declined"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=e66bf38389d9e7f050d57a974599fa1881e6b7d6148116374190e6c811d1f65e"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.declined",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.withdrawn": {
            "post": {
                "summary": "An ask was taken back.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.withdrawn"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=7e016b89dabcd771ecb65b3f5c37879adcb87ea961b800781d8e40de4cc01bbc"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.withdrawn",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.expired": {
            "post": {
                "summary": "An ask ran out before it was answered, or the day of something to know went by.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.expired"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=47e808cf70318e7f44646260694b0675d04611b15b58446a84ae4f7742ec4644"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.expired",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.done": {
            "post": {
                "summary": "Something was finished.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.done"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=bc58ee33920a8097f84f399f8ad6de63e3fc3a591ac9b312377ab09d6c3eb97c"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.done",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.reopened": {
            "post": {
                "summary": "Something finished was opened again.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.reopened"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=5014351a16f48110335dbc3d57acd8e6fa48cf79078f182a1a997e6a765c6853"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.reopened",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.renegotiated": {
            "post": {
                "summary": "A new date was picked.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.renegotiated"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=90fc246fb8847b131f46d0441affbb190065e606078d9ffe2d805e0e87a39574"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.renegotiated",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.redated": {
            "post": {
                "summary": "A lookup moved a date.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.redated"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=8e0a1d88fd15e55d3654b73ba6b1208d44e61aa60381f63b15085631bfd038ea"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.redated",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.release_asked": {
            "post": {
                "summary": "Somebody asked to drop a promise.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.release_asked"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=a0fbbb875c1f1bf339ecaefcd306647b4a0d39d18fa276271597ab2ae3c8ed9c"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.release_asked",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.released": {
            "post": {
                "summary": "A promise was dropped.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.released"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=a123bd52ca39c6bdb6b4b2be303fad2c12b2c7670e1c999f36a7baffbe796e64"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.released",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.kept": {
            "post": {
                "summary": "A promise stands as it is after a release ask.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.kept"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=f8aef0673ce8ab01bba6bfa06b4c4cc1237e4da9b849931353976aa95444752f"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.kept",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.picked_up": {
            "post": {
                "summary": "A dropped promise was picked back up.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.picked_up"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=6dfce433759afbf70ba45e0bf1c07a91f765d81f80e284d5ac60ad749b1cc95d"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.picked_up",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.reworded": {
            "post": {
                "summary": "The wording changed.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.reworded"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=f9566bbdbe98641529680f4b56a1a3607b4bfbc075a320626e4d76c46afd74c8"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.reworded",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.noted": {
            "post": {
                "summary": "A note was added.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.noted"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=762f83210410c10f22c2e8705ad2fd8c81f63a00a54135aa131abb3086349523"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.noted",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.deleted": {
            "post": {
                "summary": "A todo was deleted.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.deleted"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=a90ba4cd749d6b62033d022ff0206162bd43ffd43f685e4ac946a2497a13e610"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.deleted",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000036",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Cancel the old launch invite",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "manual",
                                    "due_date": "2026-10-06",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "owner",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": false,
                                        "can_change_project": false,
                                        "can_change_details": false
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.restored": {
            "post": {
                "summary": "A deleted todo came back.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.restored"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=9aabdd54cb6761cc0c2636d1304ca3923814b762c3dc6da0d016f9c0f535db16"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.restored",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.visibility_changed": {
            "post": {
                "summary": "Who can see a todo changed, or it became something to know, or a task again.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.visibility_changed"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=751f43753bd750790902084128de1fc594385ed1327dbabd65e8563739d971b3"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.visibility_changed",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "chosen",
                                    "seen_by": [
                                        {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000003",
                                            "name": "Sam Okafor"
                                        },
                                        {
                                            "type": "team",
                                            "id": "0199a000-0000-7000-8000-000000000015",
                                            "name": "Launch crew"
                                        }
                                    ],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.moved": {
            "post": {
                "summary": "A todo moved to another workspace.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.moved"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900002"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900002"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=26b2027bf8b07620093368cb804d1ac9fd668bbc8be86301b6f8430c0878df0e"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900002",
                                "event": "commitment.moved",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000013",
                                    "name": "Home",
                                    "type": "home",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000041",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000013",
                                        "name": "Home",
                                        "type": "home",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Order the launch stickers",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "manual",
                                    "due_date": null,
                                    "end_date": null,
                                    "due_timezone": null,
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "owner",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "no_date_yet"
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        },
                                        {
                                            "type": "moved",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": {
                                                "name": "Acme",
                                                "type": "team"
                                            },
                                            "to_workspace": {
                                                "name": "Home",
                                                "type": "home"
                                            },
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "commitment.details_changed": {
            "post": {
                "summary": "The description changed.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "commitment.details_changed"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=4c628271be7d46c8550dff34252397bfa135e5d89ec78d644a87118a9d48a0c6"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "commitment.details_changed",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.started": {
            "post": {
                "summary": "A series started.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.started"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=3076e592e6df1f8c19df8adf5368d692504aad0e676be646029f7ca3f1324876"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "schedule.started",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000037",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "kind": "todo",
                                    "template": "domain",
                                    "icon": "globe",
                                    "name": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "details_by": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera"
                                    },
                                    "rule": {
                                        "every": "year",
                                        "day": 20,
                                        "month": 10,
                                        "interval": 1
                                    },
                                    "rule_words": "Every year on 20 October",
                                    "lead_days": 30,
                                    "next_due_date": "2026-10-20",
                                    "next_due_timezone": "Europe/London",
                                    "upcoming": [
                                        {
                                            "date": "2026-10-20",
                                            "label": null,
                                            "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                        },
                                        {
                                            "date": "2027-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2028-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2029-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        }
                                    ],
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000056",
                                            "text": "Check the renewal price"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000057",
                                            "text": "Update the card on file"
                                        }
                                    ],
                                    "ended_at": null,
                                    "viewer": {
                                        "is_owner": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "owner": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        }
                                    },
                                    "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                    "completions": [],
                                    "module": {
                                        "key": "domain",
                                        "input": "example.com",
                                        "label": "example.com",
                                        "icon": "globe",
                                        "refreshed_at": "2026-10-01T09:00:00+00:00",
                                        "dates": [
                                            {
                                                "key": "expiry",
                                                "label": "Renewal due",
                                                "date": "2026-10-20"
                                            }
                                        ],
                                        "trouble": true,
                                        "trouble_line": "Can't reach the registry at the moment."
                                    },
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.changed": {
            "post": {
                "summary": "A series changed: its name, its rhythm, its dates or its description.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.changed"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=327a5b4c4a8491e24fec0d1e512c82359d795d19acb53019bf12c3e9594331c5"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "schedule.changed",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000037",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "kind": "todo",
                                    "template": "domain",
                                    "icon": "globe",
                                    "name": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "details_by": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera"
                                    },
                                    "rule": {
                                        "every": "year",
                                        "day": 20,
                                        "month": 10,
                                        "interval": 1
                                    },
                                    "rule_words": "Every year on 20 October",
                                    "lead_days": 30,
                                    "next_due_date": "2026-10-20",
                                    "next_due_timezone": "Europe/London",
                                    "upcoming": [
                                        {
                                            "date": "2026-10-20",
                                            "label": null,
                                            "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                        },
                                        {
                                            "date": "2027-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2028-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2029-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        }
                                    ],
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000056",
                                            "text": "Check the renewal price"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000057",
                                            "text": "Update the card on file"
                                        }
                                    ],
                                    "ended_at": null,
                                    "viewer": {
                                        "is_owner": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "owner": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        }
                                    },
                                    "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                    "completions": [],
                                    "module": {
                                        "key": "domain",
                                        "input": "example.com",
                                        "label": "example.com",
                                        "icon": "globe",
                                        "refreshed_at": "2026-10-01T09:00:00+00:00",
                                        "dates": [
                                            {
                                                "key": "expiry",
                                                "label": "Renewal due",
                                                "date": "2026-10-20"
                                            }
                                        ],
                                        "trouble": true,
                                        "trouble_line": "Can't reach the registry at the moment."
                                    },
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.ended": {
            "post": {
                "summary": "A series ended.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.ended"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=79c12479e5b1edd96f36ebb108b357141719e8884fa8ef481a605874cfdcb1a1"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "schedule.ended",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000037",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "kind": "todo",
                                    "template": "domain",
                                    "icon": "globe",
                                    "name": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "details_by": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera"
                                    },
                                    "rule": {
                                        "every": "year",
                                        "day": 20,
                                        "month": 10,
                                        "interval": 1
                                    },
                                    "rule_words": "Every year on 20 October",
                                    "lead_days": 30,
                                    "next_due_date": "2026-10-20",
                                    "next_due_timezone": "Europe/London",
                                    "upcoming": [
                                        {
                                            "date": "2026-10-20",
                                            "label": null,
                                            "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                        },
                                        {
                                            "date": "2027-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2028-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2029-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        }
                                    ],
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000056",
                                            "text": "Check the renewal price"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000057",
                                            "text": "Update the card on file"
                                        }
                                    ],
                                    "ended_at": null,
                                    "viewer": {
                                        "is_owner": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "owner": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        }
                                    },
                                    "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                    "completions": [],
                                    "module": {
                                        "key": "domain",
                                        "input": "example.com",
                                        "label": "example.com",
                                        "icon": "globe",
                                        "refreshed_at": "2026-10-01T09:00:00+00:00",
                                        "dates": [
                                            {
                                                "key": "expiry",
                                                "label": "Renewal due",
                                                "date": "2026-10-20"
                                            }
                                        ],
                                        "trouble": true,
                                        "trouble_line": "Can't reach the registry at the moment."
                                    },
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.restarted": {
            "post": {
                "summary": "A series started again.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.restarted"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=6558f02cf88e549f5600023cf98f5abcfabd4052a4c7a3afa103c77b55ad6de5"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "schedule.restarted",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000037",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "kind": "todo",
                                    "template": "domain",
                                    "icon": "globe",
                                    "name": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "details_by": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera"
                                    },
                                    "rule": {
                                        "every": "year",
                                        "day": 20,
                                        "month": 10,
                                        "interval": 1
                                    },
                                    "rule_words": "Every year on 20 October",
                                    "lead_days": 30,
                                    "next_due_date": "2026-10-20",
                                    "next_due_timezone": "Europe/London",
                                    "upcoming": [
                                        {
                                            "date": "2026-10-20",
                                            "label": null,
                                            "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                        },
                                        {
                                            "date": "2027-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2028-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2029-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        }
                                    ],
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000056",
                                            "text": "Check the renewal price"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000057",
                                            "text": "Update the card on file"
                                        }
                                    ],
                                    "ended_at": null,
                                    "viewer": {
                                        "is_owner": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "owner": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        }
                                    },
                                    "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                    "completions": [],
                                    "module": {
                                        "key": "domain",
                                        "input": "example.com",
                                        "label": "example.com",
                                        "icon": "globe",
                                        "refreshed_at": "2026-10-01T09:00:00+00:00",
                                        "dates": [
                                            {
                                                "key": "expiry",
                                                "label": "Renewal due",
                                                "date": "2026-10-20"
                                            }
                                        ],
                                        "trouble": true,
                                        "trouble_line": "Can't reach the registry at the moment."
                                    },
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.deleted": {
            "post": {
                "summary": "A series was deleted.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.deleted"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=6f7d3f941f895520316ee8846405073c6e3e95e7f5e25ac2e90521bd34c0156d"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "schedule.deleted",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000037",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "kind": "todo",
                                    "template": "domain",
                                    "icon": "globe",
                                    "name": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "details_by": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera"
                                    },
                                    "rule": {
                                        "every": "year",
                                        "day": 20,
                                        "month": 10,
                                        "interval": 1
                                    },
                                    "rule_words": "Every year on 20 October",
                                    "lead_days": 30,
                                    "next_due_date": "2026-10-20",
                                    "next_due_timezone": "Europe/London",
                                    "upcoming": [
                                        {
                                            "date": "2026-10-20",
                                            "label": null,
                                            "occurrence_id": "0199a000-0000-7000-8000-000000000038"
                                        },
                                        {
                                            "date": "2027-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2028-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2029-10-20",
                                            "label": null,
                                            "occurrence_id": null
                                        }
                                    ],
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000056",
                                            "text": "Check the renewal price"
                                        },
                                        {
                                            "id": "0199a000-0000-7000-8000-000000000057",
                                            "text": "Update the card on file"
                                        }
                                    ],
                                    "ended_at": null,
                                    "viewer": {
                                        "is_owner": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "owner": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        }
                                    },
                                    "open_occurrence_id": "0199a000-0000-7000-8000-000000000038",
                                    "completions": [],
                                    "module": {
                                        "key": "domain",
                                        "input": "example.com",
                                        "label": "example.com",
                                        "icon": "globe",
                                        "refreshed_at": "2026-10-01T09:00:00+00:00",
                                        "dates": [
                                            {
                                                "key": "expiry",
                                                "label": "Renewal due",
                                                "date": "2026-10-20"
                                            }
                                        ],
                                        "trouble": true,
                                        "trouble_line": "Can't reach the registry at the moment."
                                    },
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.occurrence_opened": {
            "post": {
                "summary": "The next one in a series is here.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.occurrence_opened"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=5a2f84886c27b6c6b207c926b9c9b038ec0ba271f6ea4868b3548700dd78cddf"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "schedule.occurrence_opened",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.occurrence_skipped": {
            "post": {
                "summary": "One in a series was skipped.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.occurrence_skipped"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=d3653dc877fa711c9eedb14aefe9afe9ada78954b80d8e501bdc2456e66d9f30"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "schedule.occurrence_skipped",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000038",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000014",
                                        "name": "Acme",
                                        "type": "team",
                                        "colour": null
                                    },
                                    "project": null,
                                    "description": "Renew example.com",
                                    "details": null,
                                    "details_changed": null,
                                    "state": "active",
                                    "source": "schedule",
                                    "due_date": "2026-10-20",
                                    "end_date": null,
                                    "due_timezone": "Europe/London",
                                    "due_time": null,
                                    "due_at": null,
                                    "is_private": true,
                                    "visibility": "workspace",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "release_requested": false,
                                    "request_expires_at": null,
                                    "is_slipped": false,
                                    "in_grace_window": false,
                                    "grace_closed": false,
                                    "at_risk": false,
                                    "dormant": false,
                                    "quiet_days": 0,
                                    "placement": {
                                        "list": "yours_to_do",
                                        "group": "coming_up"
                                    },
                                    "module_trouble": "Can't reach the registry at the moment.",
                                    "schedule": {
                                        "id": "0199a000-0000-7000-8000-000000000037",
                                        "template": "domain",
                                        "icon": "globe",
                                        "rule_words": "Every year on 20 October",
                                        "next_due_date": "2026-10-20",
                                        "next_label": null,
                                        "following": {
                                            "date": "2027-10-20",
                                            "label": null
                                        },
                                        "occurrence_no": 1,
                                        "ended": false
                                    },
                                    "viewer": {
                                        "is_promiser": true,
                                        "is_promisee": true,
                                        "can_reword": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "promiser": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "email": "alex@example.com",
                                            "avatar_url": null,
                                            "active": true
                                        },
                                        "asked_team": null
                                    },
                                    "events": [
                                        {
                                            "type": "created",
                                            "actor": {
                                                "id": "0199a000-0000-7000-8000-000000000001",
                                                "name": "Alex Rivera"
                                            },
                                            "message": null,
                                            "reason": null,
                                            "team": null,
                                            "from": null,
                                            "to": null,
                                            "source": null,
                                            "from_workspace": null,
                                            "to_workspace": null,
                                            "created_at": "2026-10-01T09:00:00+00:00"
                                        }
                                    ],
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "schedule.moved": {
            "post": {
                "summary": "A series moved to another workspace.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "schedule.moved"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900002"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900002"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=5e59a0b859df091a98a317f4a701f54acf2856942c887b2b2d99fd1a7ac7a511"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900002",
                                "event": "schedule.moved",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000013",
                                    "name": "Home",
                                    "type": "home",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000042",
                                    "workspace": {
                                        "id": "0199a000-0000-7000-8000-000000000013",
                                        "name": "Home",
                                        "type": "home",
                                        "colour": null
                                    },
                                    "project": null,
                                    "kind": "todo",
                                    "template": "custom",
                                    "icon": "repeat",
                                    "name": "Order the printer paper",
                                    "details": null,
                                    "details_changed": null,
                                    "details_by": {
                                        "id": "0199a000-0000-7000-8000-000000000001",
                                        "name": "Alex Rivera"
                                    },
                                    "rule": {
                                        "every": "week",
                                        "weekday": 3,
                                        "interval": 1
                                    },
                                    "rule_words": "Every week on Wednesday",
                                    "lead_days": 0,
                                    "next_due_date": "2026-10-07",
                                    "next_due_timezone": "Europe/London",
                                    "upcoming": [
                                        {
                                            "date": "2026-10-07",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2026-10-14",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2026-10-21",
                                            "label": null,
                                            "occurrence_id": null
                                        },
                                        {
                                            "date": "2026-10-28",
                                            "label": null,
                                            "occurrence_id": null
                                        }
                                    ],
                                    "is_private": true,
                                    "visibility": "owner",
                                    "seen_by": [],
                                    "fyi": false,
                                    "steps": [],
                                    "ended_at": null,
                                    "viewer": {
                                        "is_owner": true,
                                        "can_change_steps": true,
                                        "can_add_step": true,
                                        "step_limit_reason": null,
                                        "can_change_project": true,
                                        "can_change_details": true
                                    },
                                    "parties": {
                                        "owner": {
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        },
                                        "promisee": {
                                            "type": "user",
                                            "id": "0199a000-0000-7000-8000-000000000001",
                                            "name": "Alex Rivera",
                                            "avatar_url": null
                                        }
                                    },
                                    "open_occurrence_id": null,
                                    "completions": [],
                                    "module": null,
                                    "created_at": "2026-10-01T09:00:00+00:00"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "member.joined": {
            "post": {
                "summary": "Somebody joined a workspace.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "member.joined"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=f4cc353f8becbb0f7898f096f5e42c48e80dfe040072ab49508ac62de3455d77"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "member.joined",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000003",
                                    "name": "Sam Okafor",
                                    "email": "sam@example.com",
                                    "avatar_url": null,
                                    "role": "member"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "member.left": {
            "post": {
                "summary": "Somebody left a workspace.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "member.left"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=d3387ce9040cbd05c30cac31df8179aea09c3e258b4d19840cf67f2eeebf2c7c"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "member.left",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000007",
                                    "name": "Robin Shaw",
                                    "email": "robin@example.com",
                                    "avatar_url": null,
                                    "role": null
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "member.role_changed": {
            "post": {
                "summary": "Somebody’s role changed.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "member.role_changed"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=f3205ec041cb8ff483052d430266a4f0292a0ee87b6c710bb480fe68fbf09d2b"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "member.role_changed",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000003",
                                    "name": "Sam Okafor",
                                    "email": "sam@example.com",
                                    "avatar_url": null,
                                    "role": "member"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        },
        "workspace.renamed": {
            "post": {
                "summary": "A workspace was renamed.",
                "description": "Every delivery is a POST, signed and stamped with the event that caused it, carrying the object as this API answers you for it.",
                "parameters": [
                    {
                        "name": "User-Agent",
                        "in": "header",
                        "required": true,
                        "description": "Who is calling. The same on every delivery.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "All My Ducks webhooks"
                    },
                    {
                        "name": "X-Webhook-Event",
                        "in": "header",
                        "required": true,
                        "description": "The event, the same as event in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "workspace.renamed"
                    },
                    {
                        "name": "X-Webhook-Id",
                        "in": "header",
                        "required": true,
                        "description": "This delivery’s id, the same as id in the body.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "description": "The same across retries, so a second copy of one you have already handled is safe to ignore.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "0199a000-0000-7000-8000-000000900001"
                    },
                    {
                        "name": "X-Webhook-Signature",
                        "in": "header",
                        "required": true,
                        "description": "t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t, a full stop and the raw body, keyed with the subscription’s secret and hex-encoded. Recompute it over the raw body you read, compare with a constant-time check, and refuse anything whose t is more than five minutes from your own clock.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "t=1790845200,v1=f886736d2a80ec5497b70653fa7f754cc973ef764484ad6a466145c1df93e2b1"
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": {
                                "id": "0199a000-0000-7000-8000-000000900001",
                                "event": "workspace.renamed",
                                "occurred_at": "2026-10-01T09:00:00+00:00",
                                "workspace": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null
                                },
                                "data": {
                                    "id": "0199a000-0000-7000-8000-000000000014",
                                    "name": "Acme",
                                    "type": "team",
                                    "colour": null,
                                    "slack_connected": false,
                                    "ai_enabled": true,
                                    "capture_enabled": false
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "2XX": {
                        "description": "Received. Any 2xx will do."
                    },
                    "default": {
                        "description": "Anything else is tried again: after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours. After five deliveries in a row that never got a 2xx, the webhook is paused and its owner is emailed."
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "personalKey": {
                "type": "http",
                "scheme": "bearer",
                "description": "A personal key, from the API and webhooks page in the app. It acts as you, with your permissions, in every workspace you are in."
            },
            "workspaceKey": {
                "type": "http",
                "scheme": "bearer",
                "description": "A workspace key, made by an admin on the API and webhooks page. It works inside its one workspace and gets 403 anywhere else."
            },
            "oauth": {
                "type": "oauth2",
                "description": "OAuth 2.1 for apps you build for other people: the authorization code flow with PKCE. The server’s metadata is at https://allmyducks.app/.well-known/oauth-authorization-server, and clients can register themselves at https://allmyducks.app/oauth/register. A token acts as the person who approved it.",
                "flows": {
                    "authorizationCode": {
                        "authorizationUrl": "https://allmyducks.app/oauth/authorize",
                        "tokenUrl": "https://allmyducks.app/oauth/token",
                        "scopes": {
                            "webhooks": "Send your events to a URL you choose",
                            "mcp:use": "Use MCP server"
                        }
                    }
                }
            },
            "appSession": {
                "type": "apiKey",
                "in": "cookie",
                "name": "all-my-ducks-session",
                "description": "The web app’s own signed-in session, from signing in on this site. It is listed so every route says who reaches it: the routes only it reaches are the app’s own doors, and a key gets 403 there."
            }
        },
        "schemas": {
            "Error": {
                "type": "object",
                "properties": {
                    "message": {
                        "type": "string"
                    },
                    "errors": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    }
                },
                "required": [
                    "message"
                ]
            },
            "PlanLimit": {
                "type": "object",
                "description": "A plan has no room for this. message is the words to show, as they come; limit is which limit it was.",
                "properties": {
                    "message": {
                        "type": "string"
                    },
                    "code": {
                        "const": "plan_limit"
                    },
                    "limit": {
                        "type": "string",
                        "enum": [
                            "open_tasks",
                            "steps",
                            "home_people",
                            "second_home",
                            "team_invites",
                            "team_room",
                            "year_view",
                            "calendar_feed",
                            "integrations",
                            "slack",
                            "projects",
                            "details"
                        ]
                    }
                },
                "required": [
                    "message",
                    "code",
                    "limit"
                ]
            }
        },
        "responses": {
            "Unauthenticated": {
                "description": "No key, or a key that is wrong or revoked.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        },
                        "example": {
                            "message": "Unauthenticated."
                        }
                    }
                }
            },
            "PlanLimit": {
                "description": "The plan has no room for this. Show message as it comes.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/PlanLimit"
                        },
                        "examples": {
                            "open_tasks": {
                                "summary": "POST /workspaces/{workspace}/commitments",
                                "value": {
                                    "message": "There’s no room for another task of your own just now. Finishing, dropping or deleting one makes room.",
                                    "code": "plan_limit",
                                    "limit": "open_tasks"
                                }
                            },
                            "steps": {
                                "summary": "POST /commitments/{commitment}/steps",
                                "value": {
                                    "message": "There’s no room for another step here. Remove one to make room.",
                                    "code": "plan_limit",
                                    "limit": "steps"
                                }
                            },
                            "home_people": {
                                "summary": "POST /workspaces/{workspace}/invites",
                                "value": {
                                    "message": "There’s no room for anyone else in this home just now.",
                                    "code": "plan_limit",
                                    "limit": "home_people"
                                }
                            },
                            "second_home": {
                                "summary": "POST /workspaces",
                                "value": {
                                    "message": "You’re already in a home, and for now each person has one.",
                                    "code": "plan_limit",
                                    "limit": "second_home"
                                }
                            },
                            "team_invites": {
                                "summary": "POST /workspaces/{workspace}/invites",
                                "value": {
                                    "message": "Invites open once this team has a plan.",
                                    "code": "plan_limit",
                                    "limit": "team_invites"
                                }
                            },
                            "team_room": {
                                "summary": "POST /workspaces/{workspace}/invites",
                                "value": {
                                    "message": "There’s no room for anyone else in this team just now.",
                                    "code": "plan_limit",
                                    "limit": "team_room"
                                }
                            },
                            "year_view": {
                                "summary": "GET /workspaces/{workspace}/calendar",
                                "value": {
                                    "message": "The year view comes with Plus.",
                                    "code": "plan_limit",
                                    "limit": "year_view"
                                }
                            },
                            "calendar_feed": {
                                "summary": "POST /workspaces/{workspace}/calendar-feed",
                                "value": {
                                    "message": "Calendar subscription comes with Plus.",
                                    "code": "plan_limit",
                                    "limit": "calendar_feed"
                                }
                            },
                            "integrations": {
                                "summary": "POST /webhooks",
                                "value": {
                                    "message": "Connecting other apps comes with Plus.",
                                    "code": "plan_limit",
                                    "limit": "integrations"
                                }
                            },
                            "projects": {
                                "summary": "POST /workspaces/{workspace}/projects",
                                "value": {
                                    "message": "New projects aren’t open on your plan just now.",
                                    "code": "plan_limit",
                                    "limit": "projects"
                                }
                            },
                            "details": {
                                "summary": "POST /workspaces/{workspace}/commitments",
                                "value": {
                                    "message": "Adding or changing a description isn’t open on your plan just now.",
                                    "code": "plan_limit",
                                    "limit": "details"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}