{
  "swagger": "2.0",
  "info": {
    "title": "Registry service",
    "version": "0.1507.0",
    "description": "Send your API key as a bearer token: `Authorization: Bearer <api key>`."
  },
  "tags": [
    {
      "name": "RegistryService",
      "x-displayName": "Registry service",
      "description": "The sole registry wire surface (the legacy v1 RegistryService has been removed). The read endpoints (GetImage / DeleteImage / SearchImages) delegate to shared RegistryService Java service methods — only CreateImage has a v2-specific service path (different OCI key, different DB fields). See file-level comment."
    }
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/registry/v2/images": {
      "post": {
        "operationId": "RegistryService_CreateImage",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/CreateImageResponse"
            },
            "x-example": {
              "image": {
                "rid": "<rid>",
                "tag": "<tag>",
                "sizeBytes": "1",
                "status": "CONTAINER_IMAGE_STATUS_PENDING",
                "createdAt": "2026-01-01T00:00:00Z",
                "extractorRid": "<extractor rid>",
                "inputs": [
                  {
                    "environmentVariable": "<environment variable>",
                    "name": "<name>",
                    "description": "<description>",
                    "fileFilters": [
                      {
                        "suffix": {
                          "suffix": "<suffix>"
                        }
                      }
                    ],
                    "required": true
                  }
                ],
                "parameters": [
                  {
                    "environmentVariable": "<environment variable>",
                    "name": "<name>",
                    "description": "<description>",
                    "required": true
                  }
                ],
                "fileOutputFormat": "FILE_OUTPUT_FORMAT_PARQUET",
                "defaultTimestampMetadata": {
                  "seriesName": "<series name>",
                  "timestampType": {
                    "relative": {
                      "timeUnit": "<time unit>",
                      "offset": "2026-01-01T00:00:00Z"
                    }
                  }
                },
                "exitCodeMappings": [
                  {
                    "exitCode": 1,
                    "code": "<code>",
                    "message": "<message>",
                    "retryable": true
                  }
                ],
                "resources": {
                  "cpuCores": 1,
                  "memoryGib": 1,
                  "diskGib": 1
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateImageRequest"
            },
            "x-example": {
              "workspaceRid": "<workspace rid>",
              "tag": "<tag>",
              "extractorRid": "<extractor rid>",
              "defaultTimestampMetadata": {
                "seriesName": "<series name>",
                "timestampType": {
                  "relative": {
                    "timeUnit": "<time unit>",
                    "offset": "2026-01-01T00:00:00Z"
                  }
                }
              }
            }
          }
        ],
        "tags": [
          "RegistryService"
        ],
        "summary": "Create image",
        "description": "Register a new container image from a previously uploaded tarball and attach it to the referenced containerized extractor. The client should first upload the tarball via the existing UploadService multipart flow, then call this endpoint with the object key to create the image record and start the push. Alternatively, set source_image_rid instead of object_path to register a new (extractor, tag) version that reuses an existing READY image's stored binary — for metadata-only changes that don't need a tarball re-upload."
      }
    },
    "/registry/v2/images/search": {
      "post": {
        "operationId": "RegistryService_SearchImages",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/SearchImagesResponse"
            },
            "x-example": {
              "images": [
                {
                  "rid": "<rid>",
                  "tag": "<tag>",
                  "sizeBytes": "1",
                  "status": "CONTAINER_IMAGE_STATUS_PENDING",
                  "createdAt": "2026-01-01T00:00:00Z",
                  "extractorRid": "<extractor rid>",
                  "inputs": [
                    {
                      "environmentVariable": "<environment variable>",
                      "name": "<name>",
                      "description": "<description>",
                      "fileFilters": [
                        {
                          "suffix": {
                            "suffix": "<suffix>"
                          }
                        }
                      ],
                      "required": true
                    }
                  ],
                  "parameters": [
                    {
                      "environmentVariable": "<environment variable>",
                      "name": "<name>",
                      "description": "<description>",
                      "required": true
                    }
                  ],
                  "fileOutputFormat": "FILE_OUTPUT_FORMAT_PARQUET",
                  "defaultTimestampMetadata": {
                    "seriesName": "<series name>",
                    "timestampType": {
                      "relative": {
                        "timeUnit": "<time unit>",
                        "offset": "2026-01-01T00:00:00Z"
                      }
                    }
                  },
                  "exitCodeMappings": [
                    {
                      "exitCode": 1,
                      "code": "<code>",
                      "message": "<message>",
                      "retryable": true
                    }
                  ],
                  "resources": {
                    "cpuCores": 1,
                    "memoryGib": 1,
                    "diskGib": 1
                  }
                }
              ],
              "nextPageToken": "<next page token>"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SearchImagesRequest"
            },
            "x-example": {
              "workspaceRid": "<workspace rid>"
            }
          }
        ],
        "tags": [
          "RegistryService"
        ],
        "summary": "Search images",
        "description": "List container images in a workspace, optionally filtered by tag / status."
      }
    },
    "/registry/v2/images/{rid}": {
      "get": {
        "operationId": "RegistryService_GetImage",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/GetImageResponse"
            },
            "x-example": {
              "image": {
                "rid": "<rid>",
                "tag": "<tag>",
                "sizeBytes": "1",
                "status": "CONTAINER_IMAGE_STATUS_PENDING",
                "createdAt": "2026-01-01T00:00:00Z",
                "extractorRid": "<extractor rid>",
                "inputs": [
                  {
                    "environmentVariable": "<environment variable>",
                    "name": "<name>",
                    "description": "<description>",
                    "fileFilters": [
                      {
                        "suffix": {
                          "suffix": "<suffix>"
                        }
                      }
                    ],
                    "required": true
                  }
                ],
                "parameters": [
                  {
                    "environmentVariable": "<environment variable>",
                    "name": "<name>",
                    "description": "<description>",
                    "required": true
                  }
                ],
                "fileOutputFormat": "FILE_OUTPUT_FORMAT_PARQUET",
                "defaultTimestampMetadata": {
                  "seriesName": "<series name>",
                  "timestampType": {
                    "relative": {
                      "timeUnit": "<time unit>",
                      "offset": "2026-01-01T00:00:00Z"
                    }
                  }
                },
                "exitCodeMappings": [
                  {
                    "exitCode": 1,
                    "code": "<code>",
                    "message": "<message>",
                    "retryable": true
                  }
                ],
                "resources": {
                  "cpuCores": 1,
                  "memoryGib": 1,
                  "diskGib": 1
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "workspaceRid",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "RegistryService"
        ],
        "summary": "Get image",
        "description": "Get the current state of a container image."
      },
      "delete": {
        "operationId": "RegistryService_DeleteImage",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/DeleteImageResponse"
            },
            "x-example": {}
          }
        },
        "parameters": [
          {
            "name": "rid",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "workspaceRid",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "RegistryService"
        ],
        "summary": "Delete image",
        "description": "Delete a container image. Fails if any containerized extractor references it."
      }
    }
  },
  "definitions": {
    "AndFilter": {
      "type": "object",
      "properties": {
        "clauses": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/SearchFilter"
          }
        }
      }
    },
    "ContainerImage": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string"
        },
        "tag": {
          "type": "string",
          "description": "User-supplied tag, unique within (workspace, extractor)."
        },
        "sizeBytes": {
          "type": "string",
          "format": "int64",
          "description": "Size of the stored image in bytes once the image reaches READY."
        },
        "status": {
          "$ref": "#/definitions/ContainerImageStatus",
          "description": "Current lifecycle status (PENDING while pushing, READY after a successful push, FAILED otherwise)."
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "When the image record was created."
        },
        "extractorRid": {
          "type": "string",
          "description": "The containerized extractor this image is built for."
        },
        "inputs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FileExtractionInput"
          },
          "description": "The input files this extractor requires, mapped to environment variables that store the path to each file."
        },
        "parameters": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FileExtractionParameter"
          },
          "description": "Parameters the extractor accepts."
        },
        "fileOutputFormat": {
          "$ref": "#/definitions/FileOutputFormat",
          "description": "Format of the output file produced by the extractor."
        },
        "defaultTimestampMetadata": {
          "$ref": "#/definitions/TimestampMetadata",
          "description": "Metadata about the intermediate parquet this extractor will produce. If not set, timestamp metadata must be provided at ingest time."
        },
        "exitCodeMappings": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ExitCodeMapping"
          },
          "description": "Fallback exit-code-to-error mappings for extractors that cannot emit a structured /dev/termination-log document."
        },
        "resources": {
          "$ref": "#/definitions/ContainerResources",
          "description": "Compute resources this image's extractor container runs with. Unset fields fall back to the deployment-wide defaults."
        }
      },
      "description": "Container image registered through the V2 (extractor-linked) registry flow. V2 images carry no user-supplied `name` — extractor identity replaces it as the stable handle.",
      "required": [
        "rid"
      ]
    },
    "ContainerImageStatus": {
      "type": "string",
      "enum": [
        "CONTAINER_IMAGE_STATUS_UNSPECIFIED",
        "CONTAINER_IMAGE_STATUS_PENDING",
        "CONTAINER_IMAGE_STATUS_READY",
        "CONTAINER_IMAGE_STATUS_FAILED"
      ],
      "default": "CONTAINER_IMAGE_STATUS_UNSPECIFIED",
      "example": "CONTAINER_IMAGE_STATUS_PENDING"
    },
    "ContainerResources": {
      "type": "object",
      "properties": {
        "cpuCores": {
          "type": "integer",
          "format": "int64",
          "description": "CPU cores requested for the container.",
          "minimum": 1,
          "maximum": 32,
          "x-constraints": [
            "From 1 to 32."
          ]
        },
        "memoryGib": {
          "type": "integer",
          "format": "int64",
          "description": "Memory in GiB, applied as both the request and the limit.",
          "minimum": 1,
          "maximum": 128,
          "x-constraints": [
            "From 1 to 128."
          ]
        },
        "diskGib": {
          "type": "integer",
          "format": "int64",
          "description": "Size in GiB of each of the ephemeral input and output volumes.",
          "minimum": 1,
          "maximum": 512,
          "x-constraints": [
            "From 1 to 512."
          ]
        }
      },
      "description": "Compute resources granted to the container this image runs. Every field is optional; an unset field falls back to the deployment-wide default configured on combined-service. The upper bounds are a platform ceiling, not a guarantee the cluster can satisfy the request — an unschedulable pod fails the ingest with EXTRACTOR_UNSCHEDULABLE. RegistryService re-checks them server-side, because the first-party catalog flow calls CreateImage in-process and never reaches protovalidate."
    },
    "CreateImageRequest": {
      "type": "object",
      "properties": {
        "workspaceRid": {
          "type": "string",
          "description": "Workspace that owns the image. Must match the extractor's workspace."
        },
        "tag": {
          "type": "string",
          "description": "User-supplied tag (e.g. \"latest\", \"v1\"). Unique within (workspace, extractor)."
        },
        "objectPath": {
          "type": "string",
          "description": "Full object-storage path (\"s3://bucket/key\") of an uploaded tarball (UploadService multipart flow) in the configured upload bucket; mutually exclusive with source_image_rid."
        },
        "extractorRid": {
          "type": "string",
          "description": "The containerized extractor this image is built for. Must exist in the same workspace."
        },
        "inputs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FileExtractionInput"
          },
          "description": "The input files this extractor requires, mapped to environment variables that store the path to each file. At least one input must be declared.",
          "minItems": 1,
          "x-constraints": [
            "At least 1 item."
          ]
        },
        "parameters": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FileExtractionParameter"
          },
          "description": "Parameters the extractor accepts."
        },
        "fileOutputFormat": {
          "$ref": "#/definitions/FileOutputFormat",
          "description": "Format of the output file produced by the extractor."
        },
        "defaultTimestampMetadata": {
          "$ref": "#/definitions/TimestampMetadata",
          "description": "Metadata about the intermediate parquet this extractor will produce. Required so the image carries a complete execution contract: ingest needs timestamp metadata from the image or the request, and an image without a default silently depends on every caller supplying it. Callers may still override it per ingest request."
        },
        "sourceImageRid": {
          "type": "string",
          "description": "Existing READY image of the same extractor whose stored binary the new version reuses (no tarball re-upload); mutually exclusive with object_path.",
          "minLength": 1,
          "x-constraints": [
            "At least 1 character."
          ]
        },
        "exitCodeMappings": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ExitCodeMapping"
          },
          "description": "Fallback exit-code-to-error mappings for extractors that cannot emit a structured /dev/termination-log document."
        },
        "resources": {
          "$ref": "#/definitions/ContainerResources",
          "description": "Compute resources the extractor container runs with. Unset fields fall back to the deployment-wide defaults."
        }
      },
      "required": [
        "workspaceRid",
        "tag",
        "extractorRid",
        "defaultTimestampMetadata"
      ],
      "description": "exactly one of object_path or source_image_rid must be set.",
      "example": {
        "workspaceRid": "<workspace rid>",
        "tag": "<tag>",
        "extractorRid": "<extractor rid>",
        "defaultTimestampMetadata": {
          "seriesName": "<series name>",
          "timestampType": {
            "relative": {
              "timeUnit": "<time unit>",
              "offset": "2026-01-01T00:00:00Z"
            }
          }
        }
      }
    },
    "CreateImageResponse": {
      "type": "object",
      "properties": {
        "image": {
          "$ref": "#/definitions/ContainerImage"
        }
      }
    },
    "DeleteImageResponse": {
      "type": "object"
    },
    "ExitCodeMapping": {
      "type": "object",
      "properties": {
        "exitCode": {
          "type": "integer",
          "format": "int32",
          "description": "The container process exit code this mapping applies to."
        },
        "code": {
          "type": "string",
          "description": "Machine-readable error code. Extractor-defined codes must fall outside the reserved platform namespace."
        },
        "message": {
          "type": "string",
          "description": "Human-readable error message."
        },
        "retryable": {
          "type": "boolean",
          "description": "Whether the platform may retry the ingest for this failure."
        }
      },
      "description": "Maps a container exit code to a structured error, for extractors that cannot emit a structured /dev/termination-log document. Applied as a fallback error tier at ingest time.",
      "required": [
        "code",
        "message"
      ]
    },
    "ExtractorFilter": {
      "type": "object",
      "properties": {
        "extractorRid": {
          "type": "string"
        }
      },
      "description": "Selects images registered against a specific containerized extractor. Combine with a TagFilter (via AndFilter) to fetch a single (extractor, tag) image.",
      "required": [
        "extractorRid"
      ]
    },
    "FileExtractionInput": {
      "type": "object",
      "properties": {
        "environmentVariable": {
          "type": "string",
          "description": "The environment variable that stores the path to the input file."
        },
        "name": {
          "type": "string",
          "description": "Name of the input file which users will be prompted with."
        },
        "description": {
          "type": "string",
          "description": "Description of the input file which users will be prompted with."
        },
        "fileFilters": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/FileFilter"
          },
          "description": "Optionally filter files for file selection."
        },
        "required": {
          "type": "boolean",
          "description": "Whether the input file is required for the extractor to run."
        }
      },
      "description": "Defines an input file to be provided to the extractor.",
      "required": [
        "environmentVariable",
        "name"
      ]
    },
    "FileExtractionParameter": {
      "type": "object",
      "properties": {
        "environmentVariable": {
          "type": "string",
          "description": "The environment variable that stores the argument."
        },
        "name": {
          "type": "string",
          "description": "Name of the parameter which users will be prompted with."
        },
        "description": {
          "type": "string",
          "description": "Description of the parameter which users will be prompted with."
        },
        "required": {
          "type": "boolean",
          "description": "Whether the parameter is required for the extractor to run."
        }
      },
      "description": "Defines an input parameter to be provided to the extractor.",
      "required": [
        "environmentVariable",
        "name"
      ]
    },
    "FileFilter": {
      "type": "object",
      "properties": {
        "suffix": {
          "$ref": "#/definitions/FileSuffix"
        }
      },
      "description": "Optional filter applied during file selection for a file input.",
      "x-oneofs": [
        {
          "fields": [
            "suffix"
          ],
          "required": true
        }
      ],
      "example": {
        "suffix": {
          "suffix": "string"
        }
      }
    },
    "FileOutputFormat": {
      "type": "string",
      "enum": [
        "FILE_OUTPUT_FORMAT_UNSPECIFIED",
        "FILE_OUTPUT_FORMAT_PARQUET",
        "FILE_OUTPUT_FORMAT_CSV",
        "FILE_OUTPUT_FORMAT_PARQUET_TAR",
        "FILE_OUTPUT_FORMAT_AVRO_STREAM",
        "FILE_OUTPUT_FORMAT_JSON_L",
        "FILE_OUTPUT_FORMAT_MANIFEST"
      ],
      "default": "FILE_OUTPUT_FORMAT_UNSPECIFIED",
      "description": "Output file format emitted by the extractor. Currently PARQUET, CSV, and PARQUET_TAR are the primary supported formats.",
      "example": "FILE_OUTPUT_FORMAT_PARQUET"
    },
    "FileSuffix": {
      "type": "object",
      "properties": {
        "suffix": {
          "type": "string"
        }
      },
      "description": "The expected suffix of the file. For example, \"parquet\", \"json\", \"csv\", etc.",
      "required": [
        "suffix"
      ]
    },
    "GetImageResponse": {
      "type": "object",
      "properties": {
        "image": {
          "$ref": "#/definitions/ContainerImage"
        }
      }
    },
    "SearchFilter": {
      "type": "object",
      "properties": {
        "tag": {
          "$ref": "#/definitions/TagFilter"
        },
        "status": {
          "$ref": "#/definitions/StatusFilter"
        },
        "and": {
          "$ref": "#/definitions/AndFilter"
        },
        "extractor": {
          "$ref": "#/definitions/ExtractorFilter"
        }
      },
      "x-oneofs": [
        {
          "fields": [
            "tag",
            "status",
            "and",
            "extractor"
          ],
          "required": true
        }
      ],
      "description": "Set exactly one of the fields below.",
      "example": {
        "tag": {
          "tag": "string"
        }
      }
    },
    "SearchImagesRequest": {
      "type": "object",
      "properties": {
        "workspaceRid": {
          "type": "string"
        },
        "filter": {
          "$ref": "#/definitions/SearchFilter",
          "description": "Optional composable filter. Omit to list all images in the workspace."
        },
        "pageSize": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 1000,
          "x-constraints": [
            "From 1 to 1,000."
          ]
        },
        "nextPageToken": {
          "type": "string"
        }
      },
      "required": [
        "workspaceRid"
      ],
      "example": {
        "workspaceRid": "<workspace rid>"
      }
    },
    "SearchImagesResponse": {
      "type": "object",
      "properties": {
        "images": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ContainerImage"
          }
        },
        "nextPageToken": {
          "type": "string"
        }
      }
    },
    "StatusFilter": {
      "type": "object",
      "properties": {
        "status": {
          "$ref": "#/definitions/ContainerImageStatus"
        }
      },
      "required": [
        "status"
      ]
    },
    "TagFilter": {
      "type": "object",
      "properties": {
        "tag": {
          "type": "string"
        }
      },
      "description": "V2 search filter types. V2 deliberately omits NameFilter (v2 images have no user-supplied name) in favour of ExtractorFilter, which selects images by the containerized extractor they belong to.",
      "required": [
        "tag"
      ]
    },
    "TimestampMetadata": {
      "type": "object",
      "properties": {
        "seriesName": {
          "type": "string",
          "description": "Name of the series within the output whose values are used as the row timestamp."
        },
        "timestampType": {
          "$ref": "#/definitions/TimestampType",
          "description": "How the values in `series_name` should be interpreted as timestamps."
        }
      },
      "description": "Describes how to derive a row timestamp from the extracted output.",
      "required": [
        "seriesName",
        "timestampType"
      ]
    },
    "AbsoluteTimestamp": {
      "type": "object",
      "properties": {
        "iso8601": {
          "$ref": "#/definitions/Iso8601Timestamp"
        },
        "epochOfTimeUnit": {
          "$ref": "#/definitions/EpochTimestamp"
        },
        "customFormat": {
          "$ref": "#/definitions/CustomTimestamp"
        }
      },
      "description": "Absolute timestamp parser variants.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "iso8601",
            "epochOfTimeUnit",
            "customFormat"
          ],
          "required": true
        }
      ],
      "example": {
        "iso8601": {}
      }
    },
    "CustomTimestamp": {
      "type": "object",
      "properties": {
        "format": {
          "type": "string",
          "description": "The format string should be in the format of the `DateTimeFormatter` class in Java."
        },
        "defaultYear": {
          "type": "integer",
          "format": "int32",
          "description": "Default year is accepted as an optional field for cases like IRIG time format. Will be overridden by year in time format."
        },
        "defaultDayOfYear": {
          "type": "integer",
          "format": "int32",
          "description": "Default day of year is accepted as an optional field for cases like IRIG time format. Will be overridden by day of year in time format.",
          "minimum": 1,
          "maximum": 366,
          "x-constraints": [
            "From 1 to 366."
          ]
        }
      },
      "description": "Absolute timestamps parsed with a user-supplied format string."
    },
    "EpochTimestamp": {
      "type": "object",
      "properties": {
        "timeUnit": {
          "type": "string",
          "description": "Unit in which epoch values are expressed (e.g. SECONDS, MILLISECONDS)."
        }
      },
      "description": "Absolute timestamps expressed as an integer count of some time unit since the Unix epoch."
    },
    "Iso8601Timestamp": {
      "type": "object",
      "description": "Absolute timestamps serialized in ISO-8601 form. No additional parser configuration is needed."
    },
    "RelativeTimestamp": {
      "type": "object",
      "properties": {
        "timeUnit": {
          "type": "string",
          "description": "Unit in which relative offsets are expressed. Aliases the classic REST TimeUnit alias."
        },
        "offset": {
          "type": "string",
          "format": "date-time",
          "description": "Starting timestamp to use when indexing the file."
        }
      },
      "description": "Relative timestamp parser: interprets each row's timestamp as an offset from a fixed origin."
    },
    "TimestampType": {
      "type": "object",
      "properties": {
        "relative": {
          "$ref": "#/definitions/RelativeTimestamp"
        },
        "absolute": {
          "$ref": "#/definitions/AbsoluteTimestamp"
        }
      },
      "description": "Selects between relative-offset and absolute-timestamp parsing strategies.\n\nSet exactly one of the fields below.",
      "x-oneofs": [
        {
          "fields": [
            "relative",
            "absolute"
          ],
          "required": true
        }
      ],
      "example": {
        "relative": {
          "timeUnit": "string",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    }
  },
  "securityDefinitions": {
    "ApiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "Authorization",
      "description": "Your API key as a bearer token: `Authorization: Bearer <api key>`."
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ]
}
