{
  "openapi": "3.1.0",
  "info": {
    "title": "ai1y",
    "version": "1"
  },
  "paths": {
    "/api/v1/projects": {
      "get": {
        "responses": {
          "200": {
            "description": "Every project",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "projects": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Project"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "responses": {
          "200": {
            "description": "The project",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/changes": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "deprecated": true,
        "description": "Use the commands; this goes once the studio's page does",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved; the project's revision after it",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Changed"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/commands": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "responses": {
          "200": {
            "description": "Every command, with its body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "commands": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Command"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/commands/add-character": {
      "post": {
        "operationId": "add-character",
        "summary": "Add a character to the cast.",
        "description": "Add a character named ``name`` to the cast, with how it should sound, which its\nvoice is designed from.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewCharacter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/rename-character": {
      "post": {
        "operationId": "rename-character",
        "summary": "Rename a character.",
        "description": "Give a character a new name.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenameCharacter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/describe-character": {
      "post": {
        "operationId": "describe-character",
        "summary": "Say who a character is.",
        "description": "Say who a character is, for the cast and the voice it is given.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DescribeCharacter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-voice-description": {
      "post": {
        "operationId": "set-voice-description",
        "summary": "Say how a character should sound.",
        "description": "Say how a character should sound, for designing its voice.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetVoiceDescription"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-group-members": {
      "post": {
        "operationId": "set-group-members",
        "summary": "Make a character a group said at once by these members, or one character again.",
        "description": "Make a character a group said by these characters at once, adding any new ones\nnamed; no members makes it one character again.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetGroupMembers"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-narrator-reads": {
      "post": {
        "operationId": "set-narrator-reads",
        "summary": "For a group: whether the narrator reads its lines instead.",
        "description": "For a group: whether the narrator reads its lines instead.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetNarratorReads"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-group-spread": {
      "post": {
        "operationId": "set-group-spread",
        "summary": "For a group: how loosely its members keep together.",
        "description": "For a group: how loosely its members keep together.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetGroupSpread"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-group-sync": {
      "post": {
        "operationId": "set-group-sync",
        "summary": "For a group: keep in step word by word or over the whole line.",
        "description": "For a group: whether its members keep in step word by word or over the whole\nline.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetGroupSync"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-group-lead": {
      "post": {
        "operationId": "set-group-lead",
        "summary": "For a group: the member the others follow.",
        "description": "For a group: the member the others follow.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetGroupLead"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-member-mix": {
      "post": {
        "operationId": "set-member-mix",
        "summary": "For a group: when one member starts and how loud it is.",
        "description": "For a group: when one member starts and how loud it is.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetMemberMix"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/remove-character": {
      "post": {
        "operationId": "remove-character",
        "summary": "Remove a character.",
        "description": "Remove the character ``id`` from the cast; the narrator reads its lines. A member\nof a group can't be removed.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoveCharacter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/merge-character": {
      "post": {
        "operationId": "merge-character",
        "summary": "Give one character's lines to another and remove it.",
        "description": "Give one character's lines to another and remove it.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CharacterMerge"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "owner",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/use-voice": {
      "post": {
        "operationId": "use-voice",
        "summary": "Pick the take a character's voice is made from.",
        "description": "Use one of a character's voice takes, or with ``take`` None, the voice designed\nfrom its description again.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VoicePick"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/discard-takes": {
      "post": {
        "operationId": "discard-takes",
        "summary": "Discard voice takes of a character.",
        "description": "Delete some of a character's voice takes, none of them in use.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiscardTakes"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/record-voice": {
      "post": {
        "operationId": "record-voice",
        "summary": "Record a character's voice to make it from.",
        "description": "A recording of a character's voice, to make a voice take from.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VoiceRecording"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/preview-group": {
      "post": {
        "operationId": "preview-group",
        "summary": "Ask for takes of a group's first lines, to hear it.",
        "description": "Ask for a take of each of the group ``id``'s first lines, read by its members at\nonce, to hear it; a line with takes waiting is left as it is.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreviewGroup"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/mark-cast-reviewed": {
      "post": {
        "operationId": "mark-cast-reviewed",
        "summary": "Mark the drafted cast as looked at and right.",
        "description": "The creator has looked at the drafted cast and marks it right.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CastReviewed"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-speaker": {
      "post": {
        "operationId": "set-speaker",
        "summary": "Say who reads a line.",
        "description": "Who says a line; null gives it to the narrator.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetSpeaker"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-say": {
      "post": {
        "operationId": "set-say",
        "summary": "Set what the voice says for a line.",
        "description": "What the voice says for a line, in place of the book's words; null says the\nbook's words again.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetSay"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-how": {
      "post": {
        "operationId": "set-how",
        "summary": "Set how a line is said, in words.",
        "description": "How a line is said, in words (\"whisper it, scared\"); null takes that away.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetHow"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-sound": {
      "post": {
        "operationId": "set-sound",
        "summary": "Play a sound in place of a line's words.",
        "description": "A sound that plays in place of a line's words; null takes it away.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetSound"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/pick-take": {
      "post": {
        "operationId": "pick-take",
        "summary": "Pick the take a line plays.",
        "description": "The take a line plays; null goes back to the take the build reads.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PickTake"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/mark-line": {
      "post": {
        "operationId": "mark-line",
        "summary": "Mark a line to come back to, or take the mark away.",
        "description": "Mark a line to come back to, or take the mark away.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LineMark"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/trim-clip": {
      "post": {
        "operationId": "trim-clip",
        "summary": "Trim the start and end of the clip a line plays.",
        "description": "Cut ``start_ms`` from the start and ``end_ms`` from the end of the clip a line\nplays, or with both 0, take its trim away (trimming clips, TM2).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrimAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-envelope": {
      "post": {
        "operationId": "set-envelope",
        "summary": "Shape a clip's loudness over time.",
        "description": "Make the clip a line plays as loud over its length as ``points`` say, (ms into\nthe clip, dB) in order, or with none, take its envelope away (volume-envelope.md,\nVE2).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnvelopeAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-pause": {
      "post": {
        "operationId": "set-pause",
        "summary": "Set the silence after a line.",
        "description": "Make the silence after a line's words ``ms`` long, in place of the build's own\ngap there, or with None, the build's own again (pauses.md, PA1).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PauseAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/cut-clip": {
      "post": {
        "operationId": "cut-clip",
        "summary": "Cut the clip a line plays in two.",
        "description": "Cut the clip a line plays in two (cutting-clips.md, CT2): its audio at ``ms``\ninto the clip, its words before the word starting at ``at`` (a code point of its\nsentence) and from it on.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CutAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/borrow-reading": {
      "post": {
        "operationId": "borrow-reading",
        "summary": "Use another line's reading of the same words.",
        "description": "Borrow another line's reading of the same words for the line ``key``\n(borrowed-takes.md, BT4): ``source`` as ``lines/{key}/borrow-sources`` named it.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BorrowAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/record-line": {
      "post": {
        "operationId": "record-line",
        "summary": "Record a line in your own voice.",
        "description": "One line read aloud on the Timeline, cut and made mono in the page, its WAV sent\nas base64, to keep as a take of the line (recording-voices.md, RV5, RV6).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LineRecording"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/record-how": {
      "post": {
        "operationId": "record-how",
        "summary": "Record how a line should be said, for its direction.",
        "description": "A line read aloud in the Fix sheet to show how it goes, made mono in the page,\nits WAV sent as base64 (delivery-from-recording.md, DR1, DR2).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HowRecording"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/forget-how": {
      "post": {
        "operationId": "forget-how",
        "summary": "Forget a recording of how to say a line.",
        "description": "The creator's reading of a line, to forget.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HowReadingRef"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/discard-line-takes": {
      "post": {
        "operationId": "discard-line-takes",
        "summary": "Discard takes of lines.",
        "description": "Delete some takes of lines, none of them in use.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiscardLineTakes"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/join-sentences": {
      "post": {
        "operationId": "join-sentences",
        "summary": "Read a sentence in one go with the next, or apart.",
        "description": "Read a sentence in one go with the one before it (True), apart from it (False),\nor as the build decides (None).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JoinAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-spoken": {
      "post": {
        "operationId": "set-spoken",
        "summary": "Mark a sentence's words as spoken or not.",
        "description": "Read a sentence aloud (True), or show it and don't read it (False).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpokenAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/give-words": {
      "post": {
        "operationId": "give-words",
        "summary": "Give some of a sentence's words to a reader.",
        "description": "Give some words of a sentence to the narrator (``narrator``) or a character\n(SF14, splitting lines SL1): a stretch of one segment, in code points, as the Fix\nsheet picks it or the Lines screen splits a line there.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GiveWords"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/restore-lines": {
      "post": {
        "operationId": "restore-lines",
        "summary": "Put a sentence's lines back as they were (an undo).",
        "description": "Put a sentence's lines back as they were, with the takes of other lines a split\nset aside picked again: the Undo of a split or of putting lines together. Its\nclips' volumes and clean-ups, when given, are put back as they were too\n(readings.md, RD9).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreLines"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-words-sound": {
      "post": {
        "operationId": "set-words-sound",
        "summary": "Play a sound in place of some of a sentence's words.",
        "description": "Play a sound in place of some words of the book: a stretch of one\nsegment, in code points.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WordsAsSound"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-clip-cleanup": {
      "post": {
        "operationId": "set-clip-cleanup",
        "summary": "Set how one clip is cleaned of noise.",
        "description": "Clean one clip of noise its own way, or as the whole book does (null).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetClipCleanup"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-book-cleanup": {
      "post": {
        "operationId": "set-book-cleanup",
        "summary": "Set how the whole book is cleaned of noise.",
        "description": "How every clip of the book is cleaned of noise, unless it has its own way.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetBookCleanup"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "owner",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-volume": {
      "post": {
        "operationId": "set-volume",
        "summary": "Set how loud a clip plays.",
        "description": "Make a clip louder or quieter, in dB; 0 leaves it as read (clip-volume.md, VL4).\nThe studio makes every other piece of the reading in one go it is a piece of as loud\n(readings.md, RD4).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VolumeAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-book-cleanup-model": {
      "post": {
        "operationId": "set-book-cleanup-model",
        "summary": "Set the model every voice of the book is cleaned with.",
        "description": "The model every voice of the book is cleaned with, unless a voice, a take or a\nclip has its own (cleanup-models.md, CM15).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetBookCleanupModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "owner",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-voice-cleanup-model": {
      "post": {
        "operationId": "set-voice-cleanup-model",
        "summary": "Set the model a character's voice, or the narrator's, is cleaned with.",
        "description": "The model a character's voice, or the narrator's (``narrator``), is cleaned with,\nor as the whole book (null).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetVoiceCleanupModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-take-cleanup-model": {
      "post": {
        "operationId": "set-take-cleanup-model",
        "summary": "Set the model a take is cleaned with.",
        "description": "The model a take is cleaned with, or as its voice (null).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetTakeCleanupModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-clip-cleanup-model": {
      "post": {
        "operationId": "set-clip-cleanup-model",
        "summary": "Set the model one clip is cleaned with.",
        "description": "The model one clip is cleaned with, or as its take or voice (null).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetClipCleanupModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/restore-cleanup-models": {
      "post": {
        "operationId": "restore-cleanup-models",
        "summary": "Put clean-up models back as they were (an undo).",
        "description": "Put clean-up models back as they were: the whole book's, when given, and\neach voice's, take's and clip's named, null for none of its own. The Undo of setting\none.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreCleanupModels"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/queue-line-takes": {
      "post": {
        "operationId": "queue-line-takes",
        "summary": "Ask for takes of a line.",
        "description": "Ask for takes of a line, made by the next takes job.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueueLineTakes"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/queue-voice-takes": {
      "post": {
        "operationId": "queue-voice-takes",
        "summary": "Ask for voice takes of a character.",
        "description": "Ask for voice takes of a character, to pick its voice from.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueueVoiceTakes"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/queue-sentence-takes": {
      "post": {
        "operationId": "queue-sentence-takes",
        "summary": "Ask for takes of one run of a sentence, made next.",
        "description": "Takes of one run of a sentence, made now or right after the running job, from\nthe reader's Fix sheet (sentence fixes, SF4).",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SentenceTakesAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/queue-everyone": {
      "post": {
        "operationId": "queue-everyone",
        "summary": "Ask for voice takes of every character with no voice yet.",
        "description": "Voice takes for every character with no voice picked and none to hear.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EveryoneAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/unqueue": {
      "post": {
        "operationId": "unqueue",
        "summary": "Take back takes asked for and not made yet.",
        "description": "Take back the request ``id`` for takes, asked for and not made yet.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueuedRef"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/respell": {
      "post": {
        "operationId": "respell",
        "summary": "Say how a word is said, everywhere in the book.",
        "description": "Say ``word`` as ``respelling`` from now on.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Respell"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/unrespell": {
      "post": {
        "operationId": "unrespell",
        "summary": "Take a word's respelling away.",
        "description": "Take the respelling of ``word`` away, so it is said as written; a suggested one\nis never suggested again.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Unrespell"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/keep-respelling": {
      "post": {
        "operationId": "keep-respelling",
        "summary": "Keep a suggested respelling of a word.",
        "description": "Keep the respelling suggested for ``word`` as the creator's own.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KeepRespelling"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/word-takes": {
      "post": {
        "operationId": "word-takes",
        "summary": "Ask for takes of a word as respelled.",
        "description": "Takes of ``word`` said as ``respelling``, to hear before it is saved.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WordTakesAsk"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "takes",
        "x-ai1y-lead": "chars_rendered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/add-sound": {
      "post": {
        "operationId": "add-sound",
        "summary": "Add a sound to the project.",
        "description": "A recorded sound with its rights, its WAV sent as base64: the file the\ncreator picked, in whatever format, converted in the page, with that file's name\nand SHA-256.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewSound"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/remove-sound": {
      "post": {
        "operationId": "remove-sound",
        "summary": "Remove a sound from the project.",
        "description": "A sound in the studio's list, by its name relative to the cast file.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SoundRef"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/add-background": {
      "post": {
        "operationId": "add-background",
        "summary": "Add a background under some sentences.",
        "description": "Add a background under some sentences.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddBackground"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-background": {
      "post": {
        "operationId": "set-background",
        "summary": "Set everything about a background.",
        "description": "Set everything about a background that is there already.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetBackground"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/remove-background": {
      "post": {
        "operationId": "remove-background",
        "summary": "Remove a background.",
        "description": "Remove the background ``id`` from under its sentences.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BackgroundRef"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-engine": {
      "post": {
        "operationId": "set-engine",
        "summary": "Pick the voice engine the book is read with.",
        "description": "The voice engine the book is read with.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetEngine"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "owner",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-narrator-name": {
      "post": {
        "operationId": "set-narrator-name",
        "summary": "Pick the engine's voice the narrator reads with.",
        "description": "The engine's voice the narrator reads with, by its name.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetNarratorName"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-narrator-description": {
      "post": {
        "operationId": "set-narrator-description",
        "summary": "Say how the narrator should sound.",
        "description": "How the narrator should sound, for designing its voice.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetNarratorDescription"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/use-designed-narrator": {
      "post": {
        "operationId": "use-designed-narrator",
        "summary": "Go back to a narrator voice designed from its description.",
        "description": "Go back to a narrator voice designed from its description, from a recording.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UseDesignedNarrator"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-narrator-clip": {
      "post": {
        "operationId": "set-narrator-clip",
        "summary": "Record the narrator's voice to make it from.",
        "description": "A recording of the narrator's voice to clone.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NarratorClip"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-seed": {
      "post": {
        "operationId": "set-seed",
        "summary": "Set the seed readings are made with.",
        "description": "The seed readings are made with, so a build can be made again the same.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetSeed"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-breeze-loop": {
      "post": {
        "operationId": "set-breeze-loop",
        "summary": "Pick which of Breeze's loops reads.",
        "description": "Which of Breeze's loops reads: its own, or the faster one.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetBreezeLoop"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-batch": {
      "post": {
        "operationId": "set-batch",
        "summary": "Set how many lines are read at once.",
        "description": "How many lines the voice reads at once.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetBatch"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-check-voices": {
      "post": {
        "operationId": "set-check-voices",
        "summary": "Set whether each reading is heard back to check it.",
        "description": "Whether each reading is heard back to check its words.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCheckVoices"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/set-attempts": {
      "post": {
        "operationId": "set-attempts",
        "summary": "Set how many readings of a line are tried.",
        "description": "How many readings of a line are tried before one is kept.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAttempts"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/go-back": {
      "post": {
        "operationId": "go-back",
        "summary": "Make an earlier version the project's again.",
        "description": "Make the version a change left the project's again, as a new change (history.md,\nHS6): the change by its number in the history. With ``sentence``, only that sentence\nand those it is read in one go with.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoBack"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "revision-required: no revision was sent in If-Match",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "owner",
        "x-ai1y-revision": true
      }
    },
    "/api/v1/projects/{project}/commands/show-build": {
      "post": {
        "operationId": "show-build",
        "summary": "Show a build in the reader.",
        "description": "Show the build ``name`` in the reader, in place of the one shown.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShowBuild"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/delete-build": {
      "post": {
        "operationId": "delete-build",
        "summary": "Delete a build.",
        "description": "Delete the build ``name`` and its files for good; the one the studio shows\ncan't be.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteBuild"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "edit",
        "x-ai1y-starts": null,
        "x-ai1y-lead": null,
        "x-ai1y-role": "owner",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/commands/export-samples": {
      "post": {
        "operationId": "export-samples",
        "summary": "Export samples to download: takes, a voice's samples or chapters.",
        "description": "Export samples to download: takes of lines, a character's voice samples, or\nchapters of a build, as audio files with a manifest (export.json, with a credit\nline), zipped. Audio already made is copied as it is; nothing is rendered, so a line\nwith no take is refused (ask for takes first). A paid use, quoted exactly in audio\ndelivered and accepted first. ``commercial`` refuses any sample a paid product may\nnot hold: a voice whose license does not allow it (Breeze's free weights, a model\nnobody has read), a clean-up model that does not (Sidon), or a person's voice (their\nconsent is not built yet). The export is named by the job; a person downloads it\nfrom ``media/exports/{name}``, which agents are never offered.",
        "parameters": [
          {
            "name": "project",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "description": "The project's revision the command is made against",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the command and say what it would touch, changing nothing; the job it starts is quoted",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportSamples"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Made; the revision after it, what it touched and its undo",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Done"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "What it touches was changed since its revision",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-ai1y-cost": "run-costly",
        "x-ai1y-starts": "export",
        "x-ai1y-lead": "audio_ms_delivered",
        "x-ai1y-role": "editor",
        "x-ai1y-revision": false
      }
    },
    "/api/v1/projects/{project}/sentences/{sentence}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "sentence",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "read-sentence",
        "x-ai1y-role": "editor",
        "summary": "A sentence: its text, its lines and their takes",
        "x-ai1y-subject": "sentence:{sentence}",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A sentence: its text, its lines and their takes",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/sentences/{sentence}/history": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "sentence",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "read-sentence-history",
        "x-ai1y-role": "editor",
        "summary": "A sentence's earlier versions, a page",
        "parameters": [
          {
            "name": "before",
            "in": "query",
            "required": false,
            "description": "The next of the page before",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A sentence's earlier versions, a page",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/history": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "read-history",
        "x-ai1y-role": "editor",
        "summary": "The changes kept in the history, newest first, a page",
        "parameters": [
          {
            "name": "before",
            "in": "query",
            "required": false,
            "description": "The next of the page before",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The changes kept in the history, newest first, a page",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/words/{word}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "word",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "read-word",
        "x-ai1y-role": "editor",
        "summary": "A word: how it is said, and its respelling",
        "x-ai1y-subject": "word:{word}",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A word: how it is said, and its respelling",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/lines/{line}/borrow-sources": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "line",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "list-borrow-sources",
        "x-ai1y-role": "editor",
        "summary": "Other lines' readings of a line's words",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Other lines' readings of a line's words",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/characters": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "list-characters",
        "x-ai1y-role": "editor",
        "summary": "The cast's characters",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The cast's characters",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/characters/{character}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "character",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "read-character",
        "x-ai1y-role": "editor",
        "summary": "One character",
        "x-ai1y-subject": "character:{character}",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "One character",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/settings": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "read-settings",
        "x-ai1y-role": "editor",
        "summary": "The project's settings",
        "x-ai1y-subject": "settings",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The project's settings",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/studio": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Everything the studio's screens show",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Everything the studio's screens show",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/contents": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "view-contents",
        "x-ai1y-role": "editor",
        "summary": "The book's contents",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The book's contents",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/sections/{section}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "section",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "view-section",
        "x-ai1y-role": "editor",
        "summary": "A section of the book, line by line",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A section of the book, line by line",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/timeline/{section}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "section",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "view-timeline",
        "x-ai1y-role": "editor",
        "summary": "The Timeline of a section",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The Timeline of a section",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/fixes": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "view-fixes",
        "x-ai1y-role": "editor",
        "summary": "The sentences changed since the book was built",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sentences changed since the book was built",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/joins/{part}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "part",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "The links between sentences of a part",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The links between sentences of a part",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/heard-now/{part}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "part",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "A part's changed sentences as they sound now",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A part's changed sentences as they sound now",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/views/cleanup-preview": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "A clip heard cleaned, before the clean-up is set",
        "parameters": [
          {
            "name": "clip",
            "in": "query",
            "required": false,
            "description": "The clip",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "noise",
            "in": "query",
            "required": false,
            "description": "off, light or strong",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rumble",
            "in": "query",
            "required": false,
            "description": "1 to cut it",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "job",
            "in": "query",
            "required": false,
            "description": "Instead, what a hear-cleaned job heard: its number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A clip heard cleaned, before the clean-up is set",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/media/readings/{take}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "take",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "A take read in one go, heard whole",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A take read in one go, heard whole",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "audio/wav": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/media/lines/{line}/borrow-sources/{source}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "line",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "source",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "What borrowing a reading would copy",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "What borrowing a reading would copy",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "audio/wav": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/media/heard-now/{version}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "version",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "A changed sentence as it sounds now",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A changed sentence as it sounds now",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "audio/wav": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/media/cleanup/{which}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "which",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "The last clean-up preview, as read or cleaned",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The last clean-up preview, as read or cleaned",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "audio/wav": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/media/files/{folder}/{path}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "folder",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "A file the studio serves, in ranges",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A file the studio serves, in ranges",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/media/exports/{export}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "export",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "An export's samples, zipped, for a person",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An export's samples, zipped, for a person",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Ai1y-Revision": {
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the ETag sent"
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/ledger/verify": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "responses": {
          "200": {
            "description": "Whether the project's ledger holds",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Verified"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/jobs": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "list-jobs",
        "summary": "The project's jobs, newest first, a page",
        "x-ai1y-role": "editor",
        "parameters": [
          {
            "name": "before",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The jobs, newest first, a page; next is the cursor of the next page",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "jobs": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Job"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "ask-job",
        "summary": "Ask for a job; it runs in its turn",
        "description": "One call for every kind of job for now; a command per kind replaces it (PA-2's requests)",
        "x-ai1y-role": "editor",
        "x-ai1y-cost": "run-costly",
        "x-ai1y-cost-by-kind": {
          "cast": "run-costly",
          "takes": "run-costly",
          "build": "run-costly",
          "yoto": "run-costly",
          "directions": "run-costly",
          "words": "run-costly",
          "hear-cleaned": "run-cheap"
        },
        "x-ai1y-lead-by-kind": {
          "cast": "tokens",
          "takes": "chars_rendered",
          "build": "chars_rendered",
          "yoto": "audio_ms_delivered",
          "directions": "tokens",
          "words": "tokens",
          "hear-cleaned": null
        },
        "x-ai1y-revision": false,
        "parameters": [
          {
            "name": "Ai1y-Accept-Up-To",
            "in": "header",
            "required": false,
            "description": "The most this costly run may make, accepted by the person after seeing its quote (dry_run): a whole number in the quote's lead unit (x-ai1y-lead). Without it a costly run is refused as accept-required, with the quote",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,16}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "The same key with another body is refused",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Check the job and quote it (JobDryRun), asking for nothing",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobAsk"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Asked for; it waits its turn",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                }
              }
            }
          },
          "200": {
            "description": "Asked for already with this Idempotency-Key: the job now; or, with dry_run, what it would make and cost",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Job"
                    },
                    {
                      "$ref": "#/components/schemas/JobDryRun"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "command-in-flight: the first is being asked",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Refused, with the reason",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "accept-required: a costly run sent without Ai1y-Accept-Up-To, with its quote",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/events": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "parameters": [
          {
            "name": "Last-Event-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Server-sent events: first `hello` (`{revision, replayed}`, unnumbered), then `job` (a Job), `job-removed` (`{id}`), `change` (`{revision, action, subject}`) and `command` (`{action, subject}`), each with its number",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such project, job or call",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/jobs/{job}": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "job",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,64}$"
          }
        }
      ],
      "get": {
        "responses": {
          "200": {
            "description": "The job",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                }
              }
            }
          },
          "404": {
            "description": "No such project or job",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "operationId": "read-job",
        "summary": "A job as it is now",
        "x-ai1y-role": "editor"
      }
    },
    "/api/v1/projects/{project}/jobs/{job}/stop": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "job",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,64}$"
          }
        }
      ],
      "post": {
        "operationId": "stop-job",
        "summary": "Stop a job",
        "description": "Stop a running job, or remove one that waits. An agent stops only the jobs it asked for, which the ledger's job.asked entry names",
        "x-ai1y-revision": false,
        "x-ai1y-role": "editor",
        "responses": {
          "200": {
            "description": "Stopped, or removed while it waited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stopped"
                }
              }
            }
          },
          "404": {
            "description": "No such project or job",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "job-ended: it has already ended",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{project}/jobs/{job}/log": {
      "parameters": [
        {
          "name": "project",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "job",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,64}$"
          }
        }
      ],
      "get": {
        "operationId": "read-job-log",
        "summary": "A job's log, its last lines",
        "x-ai1y-agents": false,
        "x-ai1y-role": "editor",
        "responses": {
          "200": {
            "description": "Its log's last lines",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "lines": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such project or job",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{job}": {
      "parameters": [
        {
          "name": "job",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,64}$"
          }
        }
      ],
      "get": {
        "responses": {
          "200": {
            "description": "The job",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                }
              }
            }
          },
          "404": {
            "description": "No such project or job",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "deprecated": true,
        "description": "Moved under the job's project"
      }
    },
    "/api/v1/jobs/{job}/stop": {
      "parameters": [
        {
          "name": "job",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,64}$"
          }
        }
      ],
      "post": {
        "deprecated": true,
        "description": "Moved under the job's project",
        "responses": {
          "200": {
            "description": "Stopped, or removed while it waited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stopped"
                }
              }
            }
          },
          "404": {
            "description": "No such project or job",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "job-ended: it has already ended",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{job}/log": {
      "parameters": [
        {
          "name": "job",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,64}$"
          }
        }
      ],
      "get": {
        "deprecated": true,
        "description": "Moved under the job's project",
        "responses": {
          "200": {
            "description": "Its log's last lines",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "lines": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such project or job",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "CleanupSettings": {
        "additionalProperties": false,
        "description": "How one stretch of the voice is cleaned.",
        "properties": {
          "noise": {
            "$ref": "#/components/schemas/NoiseLevel",
            "default": "off"
          },
          "rumble": {
            "default": false,
            "title": "Rumble",
            "type": "boolean"
          }
        },
        "title": "CleanupSettings",
        "type": "object"
      },
      "ModelName": {
        "enum": [
          "off",
          "deepfilternet3",
          "mossformer2",
          "sidon"
        ],
        "type": "string"
      },
      "NoiseLevel": {
        "enum": [
          "off",
          "light",
          "medium",
          "strong"
        ],
        "type": "string"
      },
      "JobAsk": {
        "additionalProperties": false,
        "description": "Run a job: draft the cast (with Claude, rules alone, or for the narrator\nalone), make the queued takes, build the book, put a build on Yoto, suggest\nhow lines are said (with Claude, or the rules, CV26), or hear a clip, a take or a\nvoice's first clip cleaned with a model.",
        "properties": {
          "kind": {
            "enum": [
              "cast",
              "takes",
              "build",
              "yoto",
              "directions",
              "words",
              "hear-cleaned"
            ],
            "title": "Kind",
            "type": "string"
          },
          "how": {
            "default": "claude",
            "enum": [
              "claude",
              "rules",
              "narrator"
            ],
            "title": "How",
            "type": "string"
          },
          "build": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Build"
          },
          "icons": {
            "default": false,
            "title": "Icons",
            "type": "boolean"
          },
          "update": {
            "default": false,
            "title": "Update",
            "type": "boolean"
          },
          "minutes": {
            "anyOf": [
              {
                "exclusiveMinimum": 0,
                "maximum": 600,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Minutes"
          },
          "rest": {
            "default": false,
            "title": "Rest",
            "type": "boolean"
          },
          "through": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Through"
          },
          "keep": {
            "default": [],
            "items": {
              "type": "string"
            },
            "maxItems": 200,
            "title": "Keep",
            "type": "array"
          },
          "clip": {
            "anyOf": [
              {
                "pattern": "^s-[0-9a-f]{20}:\\d+-\\d+$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Clip"
          },
          "take": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Take"
          },
          "voice": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Voice"
          },
          "model": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelName"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "noise": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CleanupSettings"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          }
        },
        "required": [
          "kind"
        ],
        "title": "JobAsk",
        "type": "object"
      },
      "ChangeAsk": {
        "additionalProperties": false,
        "description": "A change asked for through the API: one the studio's page could ask for,\nby its name, with the project's revision it was made against.",
        "properties": {
          "action": {
            "pattern": "^[a-z-]{1,40}$",
            "title": "Action",
            "type": "string"
          },
          "change": {
            "additionalProperties": true,
            "title": "Change",
            "type": "object"
          },
          "revision": {
            "minimum": 0,
            "title": "Revision",
            "type": "integer"
          }
        },
        "required": [
          "action",
          "change",
          "revision"
        ],
        "title": "ChangeAsk",
        "type": "object"
      },
      "Changed": {
        "additionalProperties": false,
        "properties": {
          "revision": {
            "title": "Revision",
            "type": "integer"
          }
        },
        "required": [
          "revision"
        ],
        "title": "ApiChanged",
        "type": "object"
      },
      "ApiBuild": {
        "additionalProperties": false,
        "description": "The book a job makes.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "made_as": {
            "$ref": "#/components/schemas/MadeAs"
          },
          "kept_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kept At"
          }
        },
        "required": [
          "name",
          "made_as",
          "kept_at"
        ],
        "title": "ApiBuild",
        "type": "object"
      },
      "ApiExport": {
        "additionalProperties": false,
        "description": "The samples a job exports, named by the job: a person downloads them,\nzipped, at ``media``; agents are never offered media.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "media": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Media"
          }
        },
        "required": [
          "name",
          "media"
        ],
        "title": "ApiExport",
        "type": "object"
      },
      "ApiMade": {
        "additionalProperties": false,
        "description": "What a job made for the customer of one product unit, for one output. A count, never money.",
        "properties": {
          "unit": {
            "title": "Unit",
            "type": "string"
          },
          "output": {
            "title": "Output",
            "type": "string"
          },
          "count": {
            "title": "Count",
            "type": "integer"
          },
          "disputed": {
            "title": "Disputed",
            "type": "boolean"
          }
        },
        "required": [
          "unit",
          "output",
          "count",
          "disputed"
        ],
        "title": "ApiMade",
        "type": "object"
      },
      "ApiProgress": {
        "additionalProperties": false,
        "properties": {
          "step": {
            "title": "Step",
            "type": "string"
          },
          "done": {
            "title": "Done",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          },
          "unit": {
            "title": "Unit",
            "type": "string"
          },
          "seconds_left": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seconds Left"
          }
        },
        "required": [
          "step",
          "done",
          "total",
          "unit",
          "seconds_left"
        ],
        "title": "ApiProgress",
        "type": "object"
      },
      "ApiUsage": {
        "additionalProperties": false,
        "properties": {
          "settled": {
            "title": "Settled",
            "type": "boolean"
          },
          "used": {
            "items": {
              "$ref": "#/components/schemas/ApiUsed"
            },
            "title": "Used",
            "type": "array"
          },
          "made": {
            "items": {
              "$ref": "#/components/schemas/ApiMade"
            },
            "title": "Made",
            "type": "array"
          }
        },
        "required": [
          "settled",
          "used",
          "made"
        ],
        "title": "ApiUsage",
        "type": "object"
      },
      "ApiUsed": {
        "additionalProperties": false,
        "description": "What a job used of one provider's model, in one unit.",
        "properties": {
          "provider": {
            "title": "Provider",
            "type": "string"
          },
          "model": {
            "title": "Model",
            "type": "string"
          },
          "unit": {
            "title": "Unit",
            "type": "string"
          },
          "count": {
            "title": "Count",
            "type": "integer"
          },
          "reported": {
            "title": "Reported",
            "type": "boolean"
          },
          "disputed": {
            "title": "Disputed",
            "type": "boolean"
          }
        },
        "required": [
          "provider",
          "model",
          "unit",
          "count",
          "reported",
          "disputed"
        ],
        "title": "ApiUsed",
        "type": "object"
      },
      "JobId": {
        "type": "string"
      },
      "JobKind": {
        "enum": [
          "cast",
          "takes",
          "build",
          "yoto",
          "directions",
          "words",
          "hear-cleaned",
          "export"
        ],
        "type": "string"
      },
      "JobState": {
        "enum": [
          "waiting",
          "running",
          "done",
          "failed",
          "stopped"
        ],
        "type": "string"
      },
      "MadeAs": {
        "enum": [
          "whole",
          "update",
          "first",
          "more",
          "rest",
          "chapter"
        ],
        "type": "string"
      },
      "Outcome": {
        "enum": [
          "succeeded",
          "failed",
          "stopped"
        ],
        "type": "string"
      },
      "Job": {
        "additionalProperties": false,
        "description": "A job as the API shows it.",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/JobId"
          },
          "project": {
            "title": "Project",
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/JobKind"
          },
          "state": {
            "$ref": "#/components/schemas/JobState"
          },
          "outcome": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Outcome"
              },
              {
                "type": "null"
              }
            ]
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "asked_at": {
            "title": "Asked At",
            "type": "string"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "ended_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ended At"
          },
          "why": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Why"
          },
          "last_line": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Last Line",
            "x-ai1y-agents": false,
            "x-ai1y-content": true
          },
          "build": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ApiBuild"
              },
              {
                "type": "null"
              }
            ]
          },
          "export": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ApiExport"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "progress": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ApiProgress"
              },
              {
                "type": "null"
              }
            ]
          },
          "log": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Log"
          },
          "usage": {
            "$ref": "#/components/schemas/ApiUsage"
          }
        },
        "required": [
          "id",
          "project",
          "kind",
          "state",
          "outcome",
          "title",
          "asked_at",
          "started_at",
          "ended_at",
          "why",
          "build",
          "progress",
          "log",
          "usage"
        ],
        "title": "ApiJob",
        "type": "object"
      },
      "Project": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "revision": {
            "title": "Revision",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "revision"
        ],
        "title": "ApiProject",
        "type": "object"
      },
      "Stopped": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/JobId"
          },
          "stopped": {
            "const": true,
            "default": true,
            "title": "Stopped",
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ],
        "title": "ApiStopped",
        "type": "object"
      },
      "Verified": {
        "additionalProperties": false,
        "description": "What checking the project's ledger found (PL-L3).",
        "properties": {
          "ok": {
            "title": "Ok",
            "type": "boolean"
          },
          "entries": {
            "title": "Entries",
            "type": "integer"
          },
          "bad": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bad"
          },
          "why": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Why"
          }
        },
        "required": [
          "ok",
          "entries",
          "bad",
          "why"
        ],
        "title": "ApiVerified",
        "type": "object"
      },
      "ApiUndo": {
        "additionalProperties": false,
        "description": "The command that undoes one, sent as any other.",
        "properties": {
          "command": {
            "title": "Command",
            "type": "string"
          },
          "body": {
            "additionalProperties": true,
            "title": "Body",
            "type": "object"
          },
          "gone": {
            "default": null,
            "title": "Gone"
          },
          "sentences": {
            "default": null,
            "title": "Sentences"
          }
        },
        "required": [
          "command",
          "body"
        ],
        "title": "ApiUndo",
        "type": "object"
      },
      "Done": {
        "additionalProperties": false,
        "description": "A command made.",
        "properties": {
          "revision": {
            "title": "Revision",
            "type": "integer"
          },
          "subject": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subject"
          },
          "undo": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ApiUndo"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          }
        },
        "required": [
          "revision",
          "subject"
        ],
        "title": "ApiDone",
        "type": "object"
      },
      "ApiCredits": {
        "additionalProperties": false,
        "description": "A quote in credits: at most, and likely when that is known.",
        "properties": {
          "most": {
            "title": "Most",
            "type": "integer"
          },
          "likely": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Likely"
          }
        },
        "required": [
          "most",
          "likely"
        ],
        "title": "ApiCredits",
        "type": "object"
      },
      "ApiQuote": {
        "additionalProperties": false,
        "description": "What a job would make, in the unit its cap counts, and cost, with nothing asked. A null says it can't be told honestly, and ``notes`` say why.",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/JobKind"
          },
          "lead": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lead"
          },
          "output": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output"
          },
          "most": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Most"
          },
          "likely": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Likely"
          },
          "credits": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ApiCredits"
              },
              {
                "type": "null"
              }
            ]
          },
          "provisional": {
            "title": "Provisional",
            "type": "boolean"
          },
          "notes": {
            "items": {
              "type": "string"
            },
            "title": "Notes",
            "type": "array"
          },
          "table": {
            "title": "Table",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "lead",
          "output",
          "most",
          "likely",
          "credits",
          "provisional",
          "notes",
          "table"
        ],
        "title": "ApiQuote",
        "type": "object"
      },
      "JobDryRun": {
        "additionalProperties": false,
        "description": "A job asked for with ``?dry_run=true``: checked and refused as asking for\nit is, and quoted, with nothing asked.",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/JobKind"
          },
          "cost": {
            "title": "Cost",
            "type": "string"
          },
          "quote": {
            "$ref": "#/components/schemas/ApiQuote"
          },
          "dry_run": {
            "const": true,
            "default": true,
            "title": "Dry Run",
            "type": "boolean"
          }
        },
        "required": [
          "kind",
          "cost",
          "quote"
        ],
        "title": "ApiJobDryRun",
        "type": "object"
      },
      "Command": {
        "additionalProperties": false,
        "description": "A command, for a program or an agent to find what it can ask.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "summary": {
            "title": "Summary",
            "type": "string"
          },
          "cost": {
            "title": "Cost",
            "type": "string"
          },
          "starts": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/JobKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "revision": {
            "title": "Revision",
            "type": "boolean"
          },
          "body": {
            "additionalProperties": true,
            "title": "Body",
            "type": "object"
          }
        },
        "required": [
          "name",
          "summary",
          "cost",
          "starts",
          "role",
          "revision",
          "body"
        ],
        "title": "ApiCommand",
        "type": "object"
      },
      "NewCharacter": {
        "additionalProperties": false,
        "description": "Add a character named ``name`` to the cast, with how it should sound, which its\nvoice is designed from.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "voiceDescription": {
            "default": "",
            "title": "Voicedescription",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "NewCharacter",
        "type": "object"
      },
      "RenameCharacter": {
        "additionalProperties": false,
        "description": "Give a character a new name.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "RenameCharacter",
        "type": "object"
      },
      "DescribeCharacter": {
        "additionalProperties": false,
        "description": "Say who a character is, for the cast and the voice it is given.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "description": {
            "title": "Description",
            "type": "string"
          }
        },
        "required": [
          "id",
          "description"
        ],
        "title": "DescribeCharacter",
        "type": "object"
      },
      "SetVoiceDescription": {
        "additionalProperties": false,
        "description": "Say how a character should sound, for designing its voice.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "voiceDescription": {
            "title": "Voicedescription",
            "type": "string"
          }
        },
        "required": [
          "id",
          "voiceDescription"
        ],
        "title": "SetVoiceDescription",
        "type": "object"
      },
      "SetGroupMembers": {
        "additionalProperties": false,
        "description": "Make a character a group said by these characters at once, adding any new ones\nnamed; no members makes it one character again.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "members": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "title": "Members",
            "type": "array"
          },
          "newMembers": {
            "items": {
              "type": "string"
            },
            "maxItems": 16,
            "title": "Newmembers",
            "type": "array"
          }
        },
        "required": [
          "id",
          "members"
        ],
        "title": "SetGroupMembers",
        "type": "object"
      },
      "SetNarratorReads": {
        "additionalProperties": false,
        "description": "For a group: whether the narrator reads its lines instead.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "narratorReads": {
            "title": "Narratorreads",
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "narratorReads"
        ],
        "title": "SetNarratorReads",
        "type": "object"
      },
      "SetGroupSpread": {
        "additionalProperties": false,
        "description": "For a group: how loosely its members keep together.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "spread": {
            "enum": [
              "tight",
              "natural",
              "loose"
            ],
            "title": "Spread",
            "type": "string"
          }
        },
        "required": [
          "id",
          "spread"
        ],
        "title": "SetGroupSpread",
        "type": "object"
      },
      "SetGroupSync": {
        "additionalProperties": false,
        "description": "For a group: whether its members keep in step word by word or over the whole\nline.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "sync": {
            "enum": [
              "words",
              "line"
            ],
            "title": "Sync",
            "type": "string"
          }
        },
        "required": [
          "id",
          "sync"
        ],
        "title": "SetGroupSync",
        "type": "object"
      },
      "SetGroupLead": {
        "additionalProperties": false,
        "description": "For a group: the member the others follow.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "lead": {
            "title": "Lead",
            "type": "string"
          }
        },
        "required": [
          "id",
          "lead"
        ],
        "title": "SetGroupLead",
        "type": "object"
      },
      "MemberMixChange": {
        "additionalProperties": false,
        "description": "When a member other than the lead starts and how loud it is, each ``None`` to\ndraw it from the line within the group's spread.",
        "properties": {
          "member": {
            "title": "Member",
            "type": "string"
          },
          "delayMs": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Delayms"
          },
          "volume": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Volume"
          }
        },
        "required": [
          "member"
        ],
        "title": "MemberMixChange",
        "type": "object"
      },
      "SetMemberMix": {
        "additionalProperties": false,
        "description": "For a group: when one member starts and how loud it is.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "memberMix": {
            "$ref": "#/components/schemas/MemberMixChange"
          }
        },
        "required": [
          "id",
          "memberMix"
        ],
        "title": "SetMemberMix",
        "type": "object"
      },
      "RemoveCharacter": {
        "additionalProperties": false,
        "description": "Remove the character ``id`` from the cast; the narrator reads its lines. A member\nof a group can't be removed.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "title": "RemoveCharacter",
        "type": "object"
      },
      "CharacterMerge": {
        "additionalProperties": false,
        "description": "Give one character's lines to another and remove it.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "into": {
            "title": "Into",
            "type": "string"
          }
        },
        "required": [
          "id",
          "into"
        ],
        "title": "CharacterMerge",
        "type": "object"
      },
      "VoicePick": {
        "additionalProperties": false,
        "description": "Use one of a character's voice takes, or with ``take`` None, the voice designed\nfrom its description again.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "take": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Take"
          }
        },
        "required": [
          "id"
        ],
        "title": "VoicePick",
        "type": "object"
      },
      "DiscardTakes": {
        "additionalProperties": false,
        "description": "Delete some of a character's voice takes, none of them in use.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "takes": {
            "items": {
              "type": "string"
            },
            "title": "Takes",
            "type": "array"
          }
        },
        "required": [
          "id",
          "takes"
        ],
        "title": "DiscardTakes",
        "type": "object"
      },
      "VoiceRecording": {
        "additionalProperties": false,
        "description": "A recording of a character's voice, to make a voice take from.",
        "properties": {
          "words": {
            "title": "Words",
            "type": "string"
          },
          "data": {
            "format": "binary",
            "title": "Data",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "words",
          "data",
          "id"
        ],
        "title": "VoiceRecording",
        "type": "object"
      },
      "PreviewGroup": {
        "additionalProperties": false,
        "description": "Ask for a take of each of the group ``id``'s first lines, read by its members at\nonce, to hear it; a line with takes waiting is left as it is.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "title": "PreviewGroup",
        "type": "object"
      },
      "CastReviewed": {
        "additionalProperties": false,
        "description": "The creator has looked at the drafted cast and marks it right.",
        "properties": {},
        "title": "CastReviewed",
        "type": "object"
      },
      "SetSpeaker": {
        "additionalProperties": false,
        "description": "Who says a line; null gives it to the narrator.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "speaker": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Speaker"
          }
        },
        "required": [
          "key",
          "speaker"
        ],
        "title": "SetSpeaker",
        "type": "object"
      },
      "SetSay": {
        "additionalProperties": false,
        "description": "What the voice says for a line, in place of the book's words; null says the\nbook's words again.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "say": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Say"
          }
        },
        "required": [
          "key",
          "say"
        ],
        "title": "SetSay",
        "type": "object"
      },
      "SetHow": {
        "additionalProperties": false,
        "description": "How a line is said, in words (\"whisper it, scared\"); null takes that away.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "how": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "How"
          }
        },
        "required": [
          "key",
          "how"
        ],
        "title": "SetHow",
        "type": "object"
      },
      "SetSound": {
        "additionalProperties": false,
        "description": "A sound that plays in place of a line's words; null takes it away.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "sound": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sound"
          }
        },
        "required": [
          "key",
          "sound"
        ],
        "title": "SetSound",
        "type": "object"
      },
      "PickTake": {
        "additionalProperties": false,
        "description": "The take a line plays; null goes back to the take the build reads.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "take": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Take"
          }
        },
        "required": [
          "key",
          "take"
        ],
        "title": "PickTake",
        "type": "object"
      },
      "LineMark": {
        "additionalProperties": false,
        "description": "Mark a line to come back to, or take the mark away.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "marked": {
            "title": "Marked",
            "type": "boolean"
          }
        },
        "required": [
          "key",
          "marked"
        ],
        "title": "LineMark",
        "type": "object"
      },
      "TrimAsk": {
        "additionalProperties": false,
        "description": "Cut ``start_ms`` from the start and ``end_ms`` from the end of the clip a line\nplays, or with both 0, take its trim away (trimming clips, TM2).",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "start_ms": {
            "maximum": 120000,
            "minimum": 0,
            "title": "Start Ms",
            "type": "integer"
          },
          "end_ms": {
            "maximum": 120000,
            "minimum": 0,
            "title": "End Ms",
            "type": "integer"
          }
        },
        "required": [
          "key",
          "start_ms",
          "end_ms"
        ],
        "title": "TrimAsk",
        "type": "object"
      },
      "EnvelopeAsk": {
        "additionalProperties": false,
        "description": "Make the clip a line plays as loud over its length as ``points`` say, (ms into\nthe clip, dB) in order, or with none, take its envelope away (volume-envelope.md,\nVE2).",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "points": {
            "items": {
              "items": {
                "type": "number"
              },
              "maxItems": 2,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 64,
            "title": "Points",
            "type": "array"
          }
        },
        "required": [
          "key",
          "points"
        ],
        "title": "EnvelopeAsk",
        "type": "object"
      },
      "PauseAsk": {
        "additionalProperties": false,
        "description": "Make the silence after a line's words ``ms`` long, in place of the build's own\ngap there, or with None, the build's own again (pauses.md, PA1).",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "ms": {
            "anyOf": [
              {
                "maximum": 5000,
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ms"
          }
        },
        "required": [
          "key",
          "ms"
        ],
        "title": "PauseAsk",
        "type": "object"
      },
      "CutAsk": {
        "additionalProperties": false,
        "description": "Cut the clip a line plays in two (cutting-clips.md, CT2): its audio at ``ms``\ninto the clip, its words before the word starting at ``at`` (a code point of its\nsentence) and from it on.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "ms": {
            "maximum": 600000,
            "minimum": 1,
            "title": "Ms",
            "type": "integer"
          },
          "at": {
            "minimum": 1,
            "title": "At",
            "type": "integer"
          }
        },
        "required": [
          "key",
          "ms",
          "at"
        ],
        "title": "CutAsk",
        "type": "object"
      },
      "BorrowAsk": {
        "additionalProperties": false,
        "description": "Borrow another line's reading of the same words for the line ``key``\n(borrowed-takes.md, BT4): ``source`` as ``lines/{key}/borrow-sources`` named it.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "source": {
            "title": "Source",
            "type": "string"
          }
        },
        "required": [
          "key",
          "source"
        ],
        "title": "BorrowAsk",
        "type": "object"
      },
      "LineRecording": {
        "additionalProperties": false,
        "description": "One line read aloud on the Timeline, cut and made mono in the page, its WAV sent\nas base64, to keep as a take of the line (recording-voices.md, RV5, RV6).",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "data": {
            "format": "binary",
            "title": "Data",
            "type": "string"
          }
        },
        "required": [
          "key",
          "data"
        ],
        "title": "LineRecording",
        "type": "object"
      },
      "HowRecording": {
        "additionalProperties": false,
        "description": "A line read aloud in the Fix sheet to show how it goes, made mono in the page,\nits WAV sent as base64 (delivery-from-recording.md, DR1, DR2).",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "data": {
            "format": "binary",
            "title": "Data",
            "type": "string"
          }
        },
        "required": [
          "key",
          "data"
        ],
        "title": "HowRecording",
        "type": "object"
      },
      "HowReadingRef": {
        "additionalProperties": false,
        "description": "The creator's reading of a line, to forget.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "title": "HowReadingRef",
        "type": "object"
      },
      "DiscardLineTakes": {
        "additionalProperties": false,
        "description": "Delete some takes of lines, none of them in use.",
        "properties": {
          "takes": {
            "items": {
              "type": "string"
            },
            "title": "Takes",
            "type": "array"
          }
        },
        "required": [
          "takes"
        ],
        "title": "DiscardLineTakes",
        "type": "object"
      },
      "JoinAsk": {
        "additionalProperties": false,
        "description": "Read a sentence in one go with the one before it (True), apart from it (False),\nor as the build decides (None).",
        "properties": {
          "segment": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "Segment",
            "type": "string"
          },
          "together": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Together"
          },
          "takes": {
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 64,
            "title": "Takes",
            "type": "object"
          }
        },
        "required": [
          "segment",
          "together"
        ],
        "title": "JoinAsk",
        "type": "object"
      },
      "SpokenAsk": {
        "additionalProperties": false,
        "description": "Read a sentence aloud (True), or show it and don't read it (False).",
        "properties": {
          "segment": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "Segment",
            "type": "string"
          },
          "spoken": {
            "title": "Spoken",
            "type": "boolean"
          }
        },
        "required": [
          "segment",
          "spoken"
        ],
        "title": "SpokenAsk",
        "type": "object"
      },
      "GiveWords": {
        "additionalProperties": false,
        "description": "Give some words of a sentence to the narrator (``narrator``) or a character\n(SF14, splitting lines SL1): a stretch of one segment, in code points, as the Fix\nsheet picks it or the Lines screen splits a line there.",
        "properties": {
          "segment": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "Segment",
            "type": "string"
          },
          "start": {
            "minimum": 0,
            "title": "Start",
            "type": "integer"
          },
          "end": {
            "minimum": 1,
            "title": "End",
            "type": "integer"
          },
          "speaker": {
            "title": "Speaker",
            "type": "string"
          }
        },
        "required": [
          "segment",
          "start",
          "end",
          "speaker"
        ],
        "title": "GiveWords",
        "type": "object"
      },
      "Envelope": {
        "additionalProperties": false,
        "description": "How loud the clip a line plays is over its length, drawn on its waveform on the\nTimeline (volume-envelope.md, VE2): points of (ms into the clip, dB), the volume\ngoing straight from one to the next in dB, and held before the first and after the\nlast. Like a trim, it applies only while the line plays the clip it was drawn on, and the clip itself is never changed.",
        "properties": {
          "clip": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Clip",
            "type": "string"
          },
          "points": {
            "items": {
              "maxItems": 2,
              "minItems": 2,
              "prefixItems": [
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                }
              ],
              "type": "array"
            },
            "maxItems": 64,
            "minItems": 1,
            "title": "Points",
            "type": "array"
          }
        },
        "required": [
          "clip",
          "points"
        ],
        "title": "Envelope",
        "type": "object"
      },
      "SavedLine": {
        "additionalProperties": false,
        "description": "A line of the cast file as it was before a split, to put back, with its id\n(readings.md, RD8).",
        "properties": {
          "id": {
            "anyOf": [
              {
                "pattern": "^l-[0-9a-f]{12}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Id"
          },
          "start": {
            "minimum": 0,
            "title": "Start",
            "type": "integer"
          },
          "end": {
            "minimum": 1,
            "title": "End",
            "type": "integer"
          },
          "speaker": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Speaker"
          },
          "by_model": {
            "default": false,
            "title": "By Model",
            "type": "boolean"
          },
          "say": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Say"
          },
          "how": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "How"
          },
          "how_by": {
            "anyOf": [
              {
                "enum": [
                  "model",
                  "creator"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "How By"
          },
          "sound": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Sound"
          },
          "take": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Take"
          },
          "trim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Trim"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "envelope": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Envelope"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "pause_ms": {
            "anyOf": [
              {
                "maximum": 5000,
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Pause Ms"
          }
        },
        "required": [
          "start",
          "end",
          "speaker"
        ],
        "title": "SavedLine",
        "type": "object"
      },
      "Trim": {
        "additionalProperties": false,
        "description": "What is cut from the start and the end of the clip a line plays, its take or its\nsound, set on the Timeline (trimming clips, TM2). The clip itself is never changed,\nso a trim can be changed or taken away; it applies only while the line plays the\nclip it was set on.",
        "properties": {
          "clip": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Clip",
            "type": "string"
          },
          "start_ms": {
            "maximum": 120000,
            "minimum": 0,
            "title": "Start Ms",
            "type": "integer"
          },
          "end_ms": {
            "maximum": 120000,
            "minimum": 0,
            "title": "End Ms",
            "type": "integer"
          }
        },
        "required": [
          "clip",
          "start_ms",
          "end_ms"
        ],
        "title": "Trim",
        "type": "object"
      },
      "RestoreLines": {
        "additionalProperties": false,
        "description": "Put a sentence's lines back as they were, with the takes of other lines a split\nset aside picked again: the Undo of a split or of putting lines together. Its\nclips' volumes and clean-ups, when given, are put back as they were too\n(readings.md, RD9).",
        "properties": {
          "segment": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "Segment",
            "type": "string"
          },
          "lines": {
            "items": {
              "$ref": "#/components/schemas/SavedLine"
            },
            "maxItems": 500,
            "title": "Lines",
            "type": "array"
          },
          "takes": {
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 64,
            "title": "Takes",
            "type": "object"
          },
          "volume": {
            "anyOf": [
              {
                "maxProperties": 500,
                "patternProperties": {
                  "^s-[0-9a-f]{20}:\\d+-\\d+$": {
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Volume"
          },
          "cleanup": {
            "anyOf": [
              {
                "maxProperties": 500,
                "patternProperties": {
                  "^s-[0-9a-f]{20}:\\d+-\\d+$": {
                    "$ref": "#/components/schemas/CleanupSettings"
                  }
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Cleanup"
          },
          "models": {
            "anyOf": [
              {
                "maxProperties": 500,
                "patternProperties": {
                  "^s-[0-9a-f]{20}:\\d+-\\d+$": {
                    "$ref": "#/components/schemas/ModelName"
                  }
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Models"
          }
        },
        "required": [
          "segment",
          "lines"
        ],
        "title": "RestoreLines",
        "type": "object"
      },
      "WordsAsSound": {
        "additionalProperties": false,
        "description": "Play a sound in place of some words of the book: a stretch of one\nsegment, in code points.",
        "properties": {
          "segment": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "Segment",
            "type": "string"
          },
          "start": {
            "minimum": 0,
            "title": "Start",
            "type": "integer"
          },
          "end": {
            "minimum": 1,
            "title": "End",
            "type": "integer"
          },
          "sound": {
            "title": "Sound",
            "type": "string"
          }
        },
        "required": [
          "segment",
          "start",
          "end",
          "sound"
        ],
        "title": "WordsAsSound",
        "type": "object"
      },
      "SetClipCleanup": {
        "additionalProperties": false,
        "description": "Clean one clip of noise its own way, or as the whole book does (null).",
        "properties": {
          "clip": {
            "pattern": "^s-[0-9a-f]{20}:\\d+-\\d+$",
            "title": "Clip",
            "type": "string"
          },
          "settings": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CleanupSettings"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "clip",
          "settings"
        ],
        "title": "SetClipCleanup",
        "type": "object"
      },
      "SetBookCleanup": {
        "additionalProperties": false,
        "description": "How every clip of the book is cleaned of noise, unless it has its own way.",
        "properties": {
          "settings": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CleanupSettings"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "settings"
        ],
        "title": "SetBookCleanup",
        "type": "object"
      },
      "VolumeAsk": {
        "additionalProperties": false,
        "description": "Make a clip louder or quieter, in dB; 0 leaves it as read (clip-volume.md, VL4).\nThe studio makes every other piece of the reading in one go it is a piece of as loud\n(readings.md, RD4).",
        "properties": {
          "clip": {
            "pattern": "^s-[0-9a-f]{20}:\\d+-\\d+$",
            "title": "Clip",
            "type": "string"
          },
          "gainDb": {
            "title": "Gaindb",
            "type": "integer"
          }
        },
        "required": [
          "clip",
          "gainDb"
        ],
        "title": "VolumeAsk",
        "type": "object"
      },
      "SetBookCleanupModel": {
        "additionalProperties": false,
        "description": "The model every voice of the book is cleaned with, unless a voice, a take or a\nclip has its own (cleanup-models.md, CM15).",
        "properties": {
          "model": {
            "$ref": "#/components/schemas/ModelName"
          }
        },
        "required": [
          "model"
        ],
        "title": "SetBookCleanupModel",
        "type": "object"
      },
      "SetVoiceCleanupModel": {
        "additionalProperties": false,
        "description": "The model a character's voice, or the narrator's (``narrator``), is cleaned with,\nor as the whole book (null).",
        "properties": {
          "voice": {
            "title": "Voice",
            "type": "string"
          },
          "model": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelName"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "voice",
          "model"
        ],
        "title": "SetVoiceCleanupModel",
        "type": "object"
      },
      "SetTakeCleanupModel": {
        "additionalProperties": false,
        "description": "The model a take is cleaned with, or as its voice (null).",
        "properties": {
          "take": {
            "title": "Take",
            "type": "string"
          },
          "model": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelName"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "take",
          "model"
        ],
        "title": "SetTakeCleanupModel",
        "type": "object"
      },
      "SetClipCleanupModel": {
        "additionalProperties": false,
        "description": "The model one clip is cleaned with, or as its take or voice (null).",
        "properties": {
          "clip": {
            "pattern": "^s-[0-9a-f]{20}:\\d+-\\d+$",
            "title": "Clip",
            "type": "string"
          },
          "model": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelName"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "clip",
          "model"
        ],
        "title": "SetClipCleanupModel",
        "type": "object"
      },
      "RestoreCleanupModels": {
        "additionalProperties": false,
        "description": "Put clean-up models back as they were: the whole book's, when given, and\neach voice's, take's and clip's named, null for none of its own. The Undo of setting\none.",
        "properties": {
          "book": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelName"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "voices": {
            "additionalProperties": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/ModelName"
                },
                {
                  "type": "null"
                }
              ]
            },
            "maxProperties": 500,
            "title": "Voices",
            "type": "object"
          },
          "takes": {
            "additionalProperties": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/ModelName"
                },
                {
                  "type": "null"
                }
              ]
            },
            "maxProperties": 500,
            "title": "Takes",
            "type": "object"
          },
          "clips": {
            "maxProperties": 500,
            "patternProperties": {
              "^s-[0-9a-f]{20}:\\d+-\\d+$": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ModelName"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "title": "Clips",
            "type": "object"
          }
        },
        "title": "RestoreCleanupModels",
        "type": "object"
      },
      "QueueLineTakes": {
        "additionalProperties": false,
        "description": "Ask for takes of a line, made by the next takes job.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "count": {
            "default": 3,
            "title": "Count",
            "type": "integer"
          }
        },
        "required": [
          "key"
        ],
        "title": "QueueLineTakes",
        "type": "object"
      },
      "QueueVoiceTakes": {
        "additionalProperties": false,
        "description": "Ask for voice takes of a character, to pick its voice from.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "count": {
            "default": 3,
            "title": "Count",
            "type": "integer"
          }
        },
        "required": [
          "id"
        ],
        "title": "QueueVoiceTakes",
        "type": "object"
      },
      "SentenceTakesAsk": {
        "additionalProperties": false,
        "description": "Takes of one run of a sentence, made now or right after the running job, from\nthe reader's Fix sheet (sentence fixes, SF4).",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "count": {
            "default": 3,
            "title": "Count",
            "type": "integer"
          }
        },
        "required": [
          "key"
        ],
        "title": "SentenceTakesAsk",
        "type": "object"
      },
      "EveryoneAsk": {
        "additionalProperties": false,
        "description": "Voice takes for every character with no voice picked and none to hear.",
        "properties": {
          "count": {
            "default": 3,
            "title": "Count",
            "type": "integer"
          }
        },
        "title": "EveryoneAsk",
        "type": "object"
      },
      "QueuedRef": {
        "additionalProperties": false,
        "description": "Take back the request ``id`` for takes, asked for and not made yet.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "title": "QueuedRef",
        "type": "object"
      },
      "Respell": {
        "additionalProperties": false,
        "description": "Say ``word`` as ``respelling`` from now on.",
        "properties": {
          "word": {
            "title": "Word",
            "type": "string"
          },
          "respelling": {
            "title": "Respelling",
            "type": "string"
          }
        },
        "required": [
          "word",
          "respelling"
        ],
        "title": "Respell",
        "type": "object"
      },
      "Unrespell": {
        "additionalProperties": false,
        "description": "Take the respelling of ``word`` away, so it is said as written; a suggested one\nis never suggested again.",
        "properties": {
          "word": {
            "title": "Word",
            "type": "string"
          }
        },
        "required": [
          "word"
        ],
        "title": "Unrespell",
        "type": "object"
      },
      "KeepRespelling": {
        "additionalProperties": false,
        "description": "Keep the respelling suggested for ``word`` as the creator's own.",
        "properties": {
          "word": {
            "title": "Word",
            "type": "string"
          }
        },
        "required": [
          "word"
        ],
        "title": "KeepRespelling",
        "type": "object"
      },
      "WordTakesAsk": {
        "additionalProperties": false,
        "description": "Takes of ``word`` said as ``respelling``, to hear before it is saved.",
        "properties": {
          "word": {
            "title": "Word",
            "type": "string"
          },
          "respelling": {
            "title": "Respelling",
            "type": "string"
          },
          "count": {
            "default": 3,
            "title": "Count",
            "type": "integer"
          }
        },
        "required": [
          "word",
          "respelling"
        ],
        "title": "WordTakesAsk",
        "type": "object"
      },
      "NewSound": {
        "additionalProperties": false,
        "description": "A recorded sound with its rights, its WAV sent as base64: the file the\ncreator picked, in whatever format, converted in the page, with that file's name\nand SHA-256.",
        "properties": {
          "title": {
            "title": "Title",
            "type": "string"
          },
          "source": {
            "title": "Source",
            "type": "string"
          },
          "license": {
            "title": "License",
            "type": "string"
          },
          "author": {
            "default": "",
            "title": "Author",
            "type": "string"
          },
          "originalName": {
            "default": "",
            "title": "Originalname",
            "type": "string"
          },
          "originalSha256": {
            "default": "",
            "pattern": "^([0-9a-f]{64})?$",
            "title": "Originalsha256",
            "type": "string"
          },
          "data": {
            "format": "binary",
            "title": "Data",
            "type": "string"
          }
        },
        "required": [
          "title",
          "source",
          "license",
          "data"
        ],
        "title": "NewSound",
        "type": "object"
      },
      "SoundRef": {
        "additionalProperties": false,
        "description": "A sound in the studio's list, by its name relative to the cast file.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "SoundRef",
        "type": "object"
      },
      "AddBackground": {
        "additionalProperties": false,
        "description": "Add a background under some sentences.",
        "properties": {
          "sound": {
            "title": "Sound",
            "type": "string"
          },
          "first": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "First",
            "type": "string"
          },
          "last": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "Last",
            "type": "string"
          },
          "level": {
            "default": "soft",
            "enum": [
              "quiet",
              "soft",
              "medium"
            ],
            "title": "Level",
            "type": "string"
          },
          "loop": {
            "default": true,
            "title": "Loop",
            "type": "boolean"
          },
          "gainDb": {
            "default": 0,
            "title": "Gaindb",
            "type": "integer"
          },
          "fadeInMs": {
            "default": 1500,
            "title": "Fadeinms",
            "type": "integer"
          },
          "fadeOutMs": {
            "default": 2000,
            "title": "Fadeoutms",
            "type": "integer"
          },
          "rise": {
            "default": true,
            "title": "Rise",
            "type": "boolean"
          },
          "leadMs": {
            "default": 500,
            "title": "Leadms",
            "type": "integer"
          },
          "holdMs": {
            "default": 500,
            "title": "Holdms",
            "type": "integer"
          }
        },
        "required": [
          "sound",
          "first",
          "last"
        ],
        "title": "AddBackground",
        "type": "object"
      },
      "SetBackground": {
        "additionalProperties": false,
        "description": "Set everything about a background that is there already.",
        "properties": {
          "sound": {
            "title": "Sound",
            "type": "string"
          },
          "first": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "First",
            "type": "string"
          },
          "last": {
            "pattern": "^s-[0-9a-f]{20}$",
            "title": "Last",
            "type": "string"
          },
          "level": {
            "default": "soft",
            "enum": [
              "quiet",
              "soft",
              "medium"
            ],
            "title": "Level",
            "type": "string"
          },
          "loop": {
            "default": true,
            "title": "Loop",
            "type": "boolean"
          },
          "gainDb": {
            "default": 0,
            "title": "Gaindb",
            "type": "integer"
          },
          "fadeInMs": {
            "default": 1500,
            "title": "Fadeinms",
            "type": "integer"
          },
          "fadeOutMs": {
            "default": 2000,
            "title": "Fadeoutms",
            "type": "integer"
          },
          "rise": {
            "default": true,
            "title": "Rise",
            "type": "boolean"
          },
          "leadMs": {
            "default": 500,
            "title": "Leadms",
            "type": "integer"
          },
          "holdMs": {
            "default": 500,
            "title": "Holdms",
            "type": "integer"
          },
          "id": {
            "pattern": "^[a-z0-9-]{1,40}$",
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "sound",
          "first",
          "last",
          "id"
        ],
        "title": "SetBackground",
        "type": "object"
      },
      "BackgroundRef": {
        "additionalProperties": false,
        "description": "Remove the background ``id`` from under its sentences.",
        "properties": {
          "id": {
            "pattern": "^[a-z0-9-]{1,40}$",
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "title": "BackgroundRef",
        "type": "object"
      },
      "SetEngine": {
        "additionalProperties": false,
        "description": "The voice engine the book is read with.",
        "properties": {
          "engine": {
            "title": "Engine",
            "type": "string"
          }
        },
        "required": [
          "engine"
        ],
        "title": "SetEngine",
        "type": "object"
      },
      "SetNarratorName": {
        "additionalProperties": false,
        "description": "The engine's voice the narrator reads with, by its name.",
        "properties": {
          "narratorName": {
            "title": "Narratorname",
            "type": "string"
          }
        },
        "required": [
          "narratorName"
        ],
        "title": "SetNarratorName",
        "type": "object"
      },
      "SetNarratorDescription": {
        "additionalProperties": false,
        "description": "How the narrator should sound, for designing its voice.",
        "properties": {
          "narratorDescription": {
            "title": "Narratordescription",
            "type": "string"
          }
        },
        "required": [
          "narratorDescription"
        ],
        "title": "SetNarratorDescription",
        "type": "object"
      },
      "UseDesignedNarrator": {
        "additionalProperties": false,
        "description": "Go back to a narrator voice designed from its description, from a recording.",
        "properties": {},
        "title": "UseDesignedNarrator",
        "type": "object"
      },
      "NarratorClip": {
        "additionalProperties": false,
        "description": "A recording of the narrator's voice to clone.",
        "properties": {
          "words": {
            "title": "Words",
            "type": "string"
          },
          "data": {
            "format": "binary",
            "title": "Data",
            "type": "string"
          }
        },
        "required": [
          "words",
          "data"
        ],
        "title": "NarratorClip",
        "type": "object"
      },
      "SetSeed": {
        "additionalProperties": false,
        "description": "The seed readings are made with, so a build can be made again the same.",
        "properties": {
          "seed": {
            "title": "Seed",
            "type": "integer"
          }
        },
        "required": [
          "seed"
        ],
        "title": "SetSeed",
        "type": "object"
      },
      "SetBreezeLoop": {
        "additionalProperties": false,
        "description": "Which of Breeze's loops reads: its own, or the faster one.",
        "properties": {
          "breezeLoop": {
            "enum": [
              "stock",
              "fast"
            ],
            "title": "Breezeloop",
            "type": "string"
          }
        },
        "required": [
          "breezeLoop"
        ],
        "title": "SetBreezeLoop",
        "type": "object"
      },
      "SetBatch": {
        "additionalProperties": false,
        "description": "How many lines the voice reads at once.",
        "properties": {
          "batch": {
            "title": "Batch",
            "type": "integer"
          }
        },
        "required": [
          "batch"
        ],
        "title": "SetBatch",
        "type": "object"
      },
      "SetCheckVoices": {
        "additionalProperties": false,
        "description": "Whether each reading is heard back to check its words.",
        "properties": {
          "checkVoices": {
            "title": "Checkvoices",
            "type": "boolean"
          }
        },
        "required": [
          "checkVoices"
        ],
        "title": "SetCheckVoices",
        "type": "object"
      },
      "SetAttempts": {
        "additionalProperties": false,
        "description": "How many readings of a line are tried before one is kept.",
        "properties": {
          "attempts": {
            "title": "Attempts",
            "type": "integer"
          }
        },
        "required": [
          "attempts"
        ],
        "title": "SetAttempts",
        "type": "object"
      },
      "GoBack": {
        "additionalProperties": false,
        "description": "Make the version a change left the project's again, as a new change (history.md,\nHS6): the change by its number in the history. With ``sentence``, only that sentence\nand those it is read in one go with.",
        "properties": {
          "to": {
            "minimum": 1,
            "title": "To",
            "type": "integer"
          },
          "sentence": {
            "anyOf": [
              {
                "pattern": "^s-[0-9a-f]{20}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Sentence"
          }
        },
        "required": [
          "to"
        ],
        "title": "GoBack",
        "type": "object"
      },
      "ShowBuild": {
        "additionalProperties": false,
        "description": "Show the build ``name`` in the reader, in place of the one shown.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "ShowBuild",
        "type": "object"
      },
      "DeleteBuild": {
        "additionalProperties": false,
        "description": "Delete the build ``name`` and its files for good; the one the studio shows\ncan't be.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "DeleteBuild",
        "type": "object"
      },
      "ExportChapters": {
        "additionalProperties": false,
        "description": "Whole parts of one of the studio's builds, as its package has them, by their\nplace in its reading order, from 1.",
        "properties": {
          "what": {
            "const": "chapters",
            "title": "What",
            "type": "string"
          },
          "build": {
            "title": "Build",
            "type": "string"
          },
          "chapters": {
            "items": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer"
            },
            "maxItems": 200,
            "minItems": 1,
            "title": "Chapters",
            "type": "array"
          }
        },
        "required": [
          "what",
          "build",
          "chapters"
        ],
        "title": "ExportChapters",
        "type": "object"
      },
      "ExportLines": {
        "additionalProperties": false,
        "description": "The take each of these lines plays now, in the order given.",
        "properties": {
          "what": {
            "const": "lines",
            "title": "What",
            "type": "string"
          },
          "keys": {
            "items": {
              "type": "string"
            },
            "maxItems": 500,
            "minItems": 1,
            "title": "Keys",
            "type": "array"
          }
        },
        "required": [
          "what",
          "keys"
        ],
        "title": "ExportLines",
        "type": "object"
      },
      "ExportVoice": {
        "additionalProperties": false,
        "description": "The lines a character's voice take in use was made reading.",
        "properties": {
          "what": {
            "const": "voice",
            "title": "What",
            "type": "string"
          },
          "character": {
            "title": "Character",
            "type": "string"
          }
        },
        "required": [
          "what",
          "character"
        ],
        "title": "ExportVoice",
        "type": "object"
      },
      "ExportSamples": {
        "additionalProperties": false,
        "description": "Export samples to download: takes of lines, a character's voice samples, or\nchapters of a build, as audio files with a manifest (export.json, with a credit\nline), zipped. Audio already made is copied as it is; nothing is rendered, so a line\nwith no take is refused (ask for takes first). A paid use, quoted exactly in audio\ndelivered and accepted first. ``commercial`` refuses any sample a paid product may\nnot hold: a voice whose license does not allow it (Breeze's free weights, a model\nnobody has read), a clean-up model that does not (Sidon), or a person's voice (their\nconsent is not built yet). The export is named by the job; a person downloads it\nfrom ``media/exports/{name}``, which agents are never offered.",
        "properties": {
          "samples": {
            "discriminator": {
              "mapping": {
                "chapters": "#/components/schemas/ExportChapters",
                "lines": "#/components/schemas/ExportLines",
                "voice": "#/components/schemas/ExportVoice"
              },
              "propertyName": "what"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportLines"
              },
              {
                "$ref": "#/components/schemas/ExportVoice"
              },
              {
                "$ref": "#/components/schemas/ExportChapters"
              }
            ],
            "title": "Samples"
          },
          "format": {
            "default": "wav",
            "enum": [
              "wav",
              "m4a"
            ],
            "title": "Format",
            "type": "string"
          },
          "use": {
            "default": "personal",
            "enum": [
              "personal",
              "commercial"
            ],
            "title": "Use",
            "type": "string"
          }
        },
        "required": [
          "samples"
        ],
        "title": "ExportSamples",
        "type": "object"
      },
      "Problem": {
        "type": "object",
        "description": "RFC 9457: act on type and next; detail is for a person",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "https://ai1y.co/problems/not-found",
              "https://ai1y.co/problems/invalid-body",
              "https://ai1y.co/problems/cannot-run",
              "https://ai1y.co/problems/idempotency-key-reused",
              "https://ai1y.co/problems/revision-required",
              "https://ai1y.co/problems/stale-revision",
              "https://ai1y.co/problems/job-ended",
              "https://ai1y.co/problems/command-in-flight",
              "https://ai1y.co/problems/accept-required",
              "https://ai1y.co/problems/forbidden",
              "https://ai1y.co/problems/too-large",
              "https://ai1y.co/problems/failed"
            ]
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "next": {
            "type": "string",
            "description": "What to do next: one fixed sentence for each type"
          },
          "kind": {
            "type": "string",
            "enum": [
              "transient",
              "refused",
              "fatal",
              "invariant"
            ],
            "description": "Who acts: transient (try again after Retry-After), refused (change something first), fatal (this can't go on), invariant (a bug: tell the person)"
          },
          "retryable": {
            "type": "boolean",
            "description": "Whether sending it again, after Retry-After, may succeed"
          },
          "code": {
            "type": "string",
            "description": "Only when an error of ai1y's named it: its stable code"
          },
          "said": {
            "type": "string",
            "description": "The refusal in the person's own words, for their page: it may hold the book's text or a file's name",
            "x-ai1y-content": true,
            "x-ai1y-agents": false
          },
          "revision": {
            "type": "integer",
            "description": "Only in stale-revision: the project's revision now"
          },
          "subject": {
            "type": [
              "string",
              "null"
            ],
            "description": "Only in stale-revision: what was changed, to read again"
          },
          "quote": {
            "type": [
              "object",
              "null"
            ],
            "description": "Only in accept-required: what the run would make and cost (a Quote), to show the person before they accept"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "next",
          "kind",
          "retryable"
        ]
      }
    }
  }
}
