{
  "openapi": "3.1.0",
  "info": {
    "title": "Orshot API",
    "version": "1.0.0",
    "summary": "Generate images, PDFs and videos from templates.",
    "description": "The Orshot API renders images, PDFs and videos from templates you design in Orshot Studio, and manages brand assets, workflows and social publishing for your workspace. Authenticate every request with a workspace API key or an OAuth2 access token in the `Authorization: Bearer <token>` header. For agent registration and OAuth discovery see https://orshot.com/auth.md.",
    "termsOfService": "https://orshot.com/terms",
    "contact": {
      "name": "Orshot Support",
      "url": "https://orshot.com/contact"
    }
  },
  "servers": [
    {
      "url": "https://api.orshot.com/v1",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "API reference",
    "url": "https://orshot.com/docs/api-reference"
  },
  "tags": [
    {
      "name": "Generation & Templates"
    },
    {
      "name": "Template Folders"
    },
    {
      "name": "Template Sharing"
    },
    {
      "name": "Images"
    },
    {
      "name": "Colors"
    },
    {
      "name": "Fonts"
    },
    {
      "name": "Videos"
    },
    {
      "name": "Audio"
    },
    {
      "name": "Social"
    },
    {
      "name": "Workflows"
    },
    {
      "name": "Enterprise"
    },
    {
      "name": "Profile & Workspace"
    }
  ],
  "paths": {
    "/brand-assets/images/delete/{id}": {
      "delete": {
        "operationId": "brandAssetsDelete",
        "summary": "Delete Brand Image",
        "tags": [
          "Images"
        ],
        "description": "Learn how to delete brand assets from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-assets-delete"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the brand asset to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/images/get": {
      "get": {
        "operationId": "brandAssetsGet",
        "summary": "Get Brand Images",
        "tags": [
          "Images"
        ],
        "description": "Learn how to retrieve brand assets from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-assets-get"
        },
        "parameters": [
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of tags to filter by. Returns only assets that have all specified tags."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/images/add": {
      "post": {
        "operationId": "brandAssetsPost",
        "summary": "Upload Brand Image",
        "tags": [
          "Images"
        ],
        "description": "Learn how to upload brand assets to your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-assets-post"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "URL, binary or base64-encoded string of the image"
                  },
                  "fileName": {
                    "type": "string",
                    "description": "Custom filename for the asset (default: auto-generated based on timestamp)"
                  },
                  "fileType": {
                    "type": "string",
                    "description": "MIME type of the file (e.g., \"image/png\"). If not provided, it will be detected from the file"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to associate with the asset (e.g., `[\"logo\", \"brand\"]`)"
                  },
                  "meta": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Arbitrary metadata to store with the asset (e.g., `{ \"source\": \"product-catalog\" }`)"
                  }
                },
                "required": [
                  "file"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/search": {
      "get": {
        "operationId": "brandAssetsSearch",
        "summary": "Search Brand Assets",
        "tags": [
          "Images"
        ],
        "description": "Search across all brand asset types (images, colors, fonts, videos, audio) in your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-assets-search"
        },
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Search keyword. Matches against file names, font families, color values, video/audio names, and tags (case-insensitive). Omit to list all assets."
          },
          {
            "name": "types",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated asset types to search: `image`, `color`, `font`, `video`, `audio`. Defaults to all types if omitted."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Page number for pagination (starts at 1). Defaults to `1`."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Number of results per type per page (1–50). Defaults to `10`."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/images/update/{id}": {
      "patch": {
        "operationId": "brandAssetsUpdate",
        "summary": "Update Image Tags",
        "tags": [
          "Images"
        ],
        "description": "Learn how to update tags on a brand asset image",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-assets-update"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the brand asset to update"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to set on the asset (replaces any existing tags)"
                  }
                },
                "required": [
                  "tags"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/audio/delete/{id}": {
      "delete": {
        "operationId": "brandAudioDelete",
        "summary": "Delete Audio",
        "tags": [
          "Audio"
        ],
        "description": "Learn how to delete a brand audio file from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-audio-delete"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the audio to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/audio/get": {
      "get": {
        "operationId": "brandAudioGet",
        "summary": "Get Audio",
        "tags": [
          "Audio"
        ],
        "description": "Learn how to retrieve brand audio from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-audio-get"
        },
        "parameters": [
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of tags to filter by. Returns only audio that has all specified tags."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/audio/add": {
      "post": {
        "operationId": "brandAudioPost",
        "summary": "Upload Audio",
        "tags": [
          "Audio"
        ],
        "description": "Learn how to upload brand audio to your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-audio-post"
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "URL, base64-encoded string, or binary upload of the audio file"
                  },
                  "name": {
                    "type": "string",
                    "description": "Custom name for the audio (defaults to original filename or auto-generated)"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to associate with the audio (e.g., `[\"intro\", \"music\"]`)"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Custom metadata to attach to the audio (can include `duration`)"
                  }
                },
                "required": [
                  "file"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/audio/update/{id}": {
      "patch": {
        "operationId": "brandAudioUpdate",
        "summary": "Update Audio Tags",
        "tags": [
          "Audio"
        ],
        "description": "Learn how to update tags on a brand audio file",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-audio-update"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the audio to update"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to set on the audio (replaces any existing tags)"
                  }
                },
                "required": [
                  "tags"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/colors/delete/{id}": {
      "delete": {
        "operationId": "brandColorsDelete",
        "summary": "Delete Color",
        "tags": [
          "Colors"
        ],
        "description": "Learn how to delete a saved brand color from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-colors-delete"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the color to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/colors/get": {
      "get": {
        "operationId": "brandColorsGet",
        "summary": "Get Colors",
        "tags": [
          "Colors"
        ],
        "description": "Learn how to retrieve saved brand colors from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-colors-get"
        },
        "parameters": [
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of tags to filter by. Returns only colors that have all specified tags."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/colors/add": {
      "post": {
        "operationId": "brandColorsPost",
        "summary": "Add Color",
        "tags": [
          "Colors"
        ],
        "description": "Learn how to save brand colors to your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-colors-post"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "string",
                    "description": "The color value (e.g., `#FF5733`, `rgb(255, 87, 51)`, or a CSS gradient)"
                  },
                  "type": {
                    "type": "string",
                    "description": "Color type: `hex`, `rgb`, `hsl`, or `gradient`. Defaults to `hex`"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to associate with the color (e.g., `[\"primary\", \"brand\"]`)"
                  }
                },
                "required": [
                  "value"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/colors/update/{id}": {
      "patch": {
        "operationId": "brandColorsUpdate",
        "summary": "Update Color Tags",
        "tags": [
          "Colors"
        ],
        "description": "Learn how to update tags on a saved brand color",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-colors-update"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the color to update"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to set on the color (replaces any existing tags)"
                  }
                },
                "required": [
                  "tags"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/videos/delete/{id}": {
      "delete": {
        "operationId": "brandVideosDelete",
        "summary": "Delete Video",
        "tags": [
          "Videos"
        ],
        "description": "Learn how to delete a brand video from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-videos-delete"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the video to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/videos/get": {
      "get": {
        "operationId": "brandVideosGet",
        "summary": "Get Videos",
        "tags": [
          "Videos"
        ],
        "description": "Learn how to retrieve brand videos from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-videos-get"
        },
        "parameters": [
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of tags to filter by. Returns only videos that have all specified tags."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/videos/add": {
      "post": {
        "operationId": "brandVideosPost",
        "summary": "Upload Video",
        "tags": [
          "Videos"
        ],
        "description": "Learn how to upload brand videos to your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-videos-post"
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "URL, base64-encoded string, or binary upload of the video file"
                  },
                  "name": {
                    "type": "string",
                    "description": "Custom name for the video (defaults to original filename or auto-generated)"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to associate with the video (e.g., `[\"intro\", \"brand\"]`)"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Custom metadata to attach to the video (can include `width`, `height`, `duration`)"
                  }
                },
                "required": [
                  "file"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/videos/update/{id}": {
      "patch": {
        "operationId": "brandVideosUpdate",
        "summary": "Update Video Tags",
        "tags": [
          "Videos"
        ],
        "description": "Learn how to update tags on a brand video",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/brand-videos-update"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the video to update"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to set on the video (replaces any existing tags)"
                  }
                },
                "required": [
                  "tags"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/fonts/delete/{id}": {
      "delete": {
        "operationId": "customFontsDelete",
        "summary": "Delete Font",
        "tags": [
          "Fonts"
        ],
        "description": "Learn how to delete a custom font from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/custom-fonts-delete"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the font to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/fonts/get": {
      "get": {
        "operationId": "customFontsGet",
        "summary": "Get Fonts",
        "tags": [
          "Fonts"
        ],
        "description": "Learn how to retrieve custom fonts from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/custom-fonts-get"
        },
        "parameters": [
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of tags to filter by. Returns only fonts that have all specified tags."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/fonts/add": {
      "post": {
        "operationId": "customFontsPost",
        "summary": "Upload Font",
        "tags": [
          "Fonts"
        ],
        "description": "Learn how to upload custom fonts to your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/custom-fonts-post"
        },
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "URL, base64-encoded string, or binary upload of the font file"
                  },
                  "name": {
                    "type": "string",
                    "description": "Custom name for the font (defaults to original filename or auto-generated)"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to associate with the font (e.g., `[\"heading\", \"brand\"]`)"
                  }
                },
                "required": [
                  "file"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/brand-assets/fonts/update/{id}": {
      "patch": {
        "operationId": "customFontsUpdate",
        "summary": "Update Font Tags",
        "tags": [
          "Fonts"
        ],
        "description": "Learn how to update tags on a custom font",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/custom-fonts-update"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "The unique identifier of the font to update"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Array of tags to set on the font (replaces any existing tags)"
                  }
                },
                "required": [
                  "tags"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}/generate-variants": {
      "post": {
        "operationId": "enterpriseGenerateVariants",
        "summary": "Generate Template Variants",
        "tags": [
          "Enterprise"
        ],
        "description": "Generate multiple size variants of a template using AI\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/enterprise-generate-variants"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeThumbnails",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "When `true`, thumbnails are rendered for each newly created variant and returned inline in the response. When `false` or absent, thumbnails are generated asynchronously. Shape of the inline thumbnail depends on `output` mode (see below)."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "variants": {
                    "type": "array",
                    "items": {},
                    "description": "Array of target dimensions for variants"
                  },
                  "page_number": {
                    "type": "integer",
                    "description": "Which page of the template to use as source"
                  },
                  "output": {
                    "type": "string",
                    "description": "Output mode: `\"pages\"` or `\"templates\"`"
                  }
                },
                "required": [
                  "variants"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/bulk-create": {
      "post": {
        "operationId": "enterpriseTemplateBulkCreate",
        "summary": "Bulk Create Studio Templates",
        "tags": [
          "Enterprise"
        ],
        "description": "Create multiple studio templates at once via CSV or JSON\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/enterprise-template-bulk-create"
        },
        "parameters": [
          {
            "name": "includeThumbnails",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "When `true`, thumbnails for every page of every template are rendered before the response is sent. Templates are processed sequentially to bound concurrency; expect ~1–2 seconds per page. When `false` or absent, thumbnails are generated in the background."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "templates": {
                    "type": "array",
                    "items": {},
                    "description": "Array of template objects to create"
                  }
                },
                "required": [
                  "templates"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/create": {
      "post": {
        "operationId": "enterpriseTemplateCreate",
        "summary": "Create Studio Template",
        "tags": [
          "Enterprise"
        ],
        "description": "Create a single studio template programmatically via API\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/enterprise-template-create"
        },
        "parameters": [
          {
            "name": "includeThumbnails",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "When `true`, the endpoint renders a thumbnail for every page and waits for all uploads before responding. When `false` or absent, thumbnails are generated asynchronously after the response is sent."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the template (max 255 characters)"
                  },
                  "description": {
                    "type": "string",
                    "description": "Description of the template"
                  },
                  "canvas_width": {
                    "type": "integer",
                    "description": "Width of the canvas in pixels (1-5000)"
                  },
                  "canvas_height": {
                    "type": "integer",
                    "description": "Height of the canvas in pixels (1-5000)"
                  },
                  "pages_data": {
                    "type": "array",
                    "items": {},
                    "description": "Array of page objects with elements. If not provided, a blank page is created"
                  },
                  "tags": {
                    "type": "array",
                    "items": {},
                    "description": "Array of tag strings to categorize the template (e.g. `[\"social\", \"marketing\"]`)"
                  },
                  "thumbnail_url": {
                    "type": "string",
                    "description": "URL to a thumbnail image for the template"
                  },
                  "embed_user_id": {
                    "type": "string",
                    "description": "Assign the template to an embed user. Accepts either an external user ID (which will be resolved using your workspace's embed configuration) or an Orshot internal ID (prefixed with `eui_`)."
                  }
                },
                "required": [
                  "name",
                  "canvas_width",
                  "canvas_height"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}/update": {
      "patch": {
        "operationId": "enterpriseTemplateUpdate",
        "summary": "Update Template",
        "tags": [
          "Enterprise"
        ],
        "description": "Update template name and description\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/enterprise-template-update"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeThumbnails",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "When `true`, the endpoint renders thumbnails synchronously and waits for all uploads before responding. When `false` or absent, thumbnails are generated asynchronously if visual content changed."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "New name for the template (max 255 characters)"
                  },
                  "description": {
                    "type": "string",
                    "description": "New description for the template"
                  },
                  "tags": {
                    "type": "array",
                    "items": {},
                    "description": "Array of tag strings to categorize the template (e.g. `[\"social\", \"marketing\"]`)"
                  },
                  "canvas_width": {
                    "type": "integer",
                    "description": "New canvas width in pixels"
                  },
                  "canvas_height": {
                    "type": "integer",
                    "description": "New canvas height in pixels"
                  },
                  "pages_data": {
                    "type": "array",
                    "items": {},
                    "description": "Full array of page objects with elements (replaces existing pages)"
                  }
                },
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}/update-modifications": {
      "patch": {
        "operationId": "enterpriseUpdateModifications",
        "summary": "Update Template Modifications",
        "tags": [
          "Enterprise"
        ],
        "description": "Update text and image content in template layers\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/enterprise-update-modifications"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeThumbnails",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "When `true`, thumbnails are regenerated for the pages that had modifications applied, and the response waits for all renders to complete. When `false` or absent, thumbnails regenerate asynchronously after the response."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "data": {
                    "type": "array",
                    "items": {},
                    "description": "Array of page modification objects"
                  },
                  "embed_user_id": {
                    "type": "string",
                    "description": "Assign or update the template's embed user. Accepts either an external user ID (resolved using your workspace's embed configuration) or an Orshot internal ID (prefixed with `eui_`)."
                  }
                },
                "required": [
                  "data"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/signed-url/create": {
      "post": {
        "operationId": "generateSignedUrl",
        "summary": "Generate Signed URL",
        "tags": [
          "Generation & Templates"
        ],
        "description": "Learn how you can make a POST request to generate a signed URL",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/generate-signed-url"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/me": {
      "get": {
        "operationId": "getProfileWorkspace",
        "summary": "Get Profile and Workspaces",
        "tags": [
          "Profile & Workspace"
        ],
        "description": "Retrieve your profile and workspace details using your API key or OAuth token",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/get-profile-workspace"
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/render": {
      "post": {
        "operationId": "renderFromStudioTemplate",
        "summary": "Render from Studio Template",
        "tags": [
          "Generation & Templates"
        ],
        "description": "Render any template you've designed in Orshot Studio by making a POST request — as an image, PDF, or video, at any size, and optionally publish it.",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/render-from-studio-template"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "templateId": {
                    "type": "number",
                    "description": "Your template's ID — shown on the template's page and in the playground."
                  },
                  "modifications": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Your dynamic values, keyed by parameter ID. Multi-page templates prefix keys with the page, e.g. `page2@title`. You can also set [style parameters](/docs/orshot-studio/style-parameters) to change layer styles at render time."
                  },
                  "response": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "What to render and how to return it (format, type, size, …). See below."
                  },
                  "pdfOptions": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "PDF-only output controls (document title, margins, DPI, color mode, page range). See [Render as a PDF](#render-as-a-pdf)."
                  },
                  "videoOptions": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Video-only output controls (fps, trim, audio, subtitles, page transitions). See [Render as a video](#render-as-a-video)."
                  },
                  "publish": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Publish the render to connected social accounts. See [Publish to social](#publish-to-social)."
                  }
                },
                "required": [
                  "templateId"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/generate/{renderType}": {
      "post": {
        "operationId": "renderFromTemplate",
        "summary": "Render from a Utility Template",
        "tags": [
          "Generation & Templates"
        ],
        "description": "Learn how you can make a POST request to render from a template",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/render-from-template"
        },
        "parameters": [
          {
            "name": "renderType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/social/accounts": {
      "get": {
        "operationId": "socialAccountsList",
        "summary": "List Social Accounts",
        "tags": [
          "Social"
        ],
        "description": "Retrieve connected social accounts for your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/social-accounts-list"
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/social/publish": {
      "post": {
        "operationId": "socialPublish",
        "summary": "Publish to Social",
        "tags": [
          "Social"
        ],
        "description": "Publish images or videos directly to connected social accounts",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/social-publish"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accounts": {
                    "type": "array",
                    "items": {},
                    "description": "Array of account IDs to publish to (see [List Social Accounts](/docs/api-reference/social-accounts-list))"
                  },
                  "content": {
                    "type": "string",
                    "description": "Caption/text for the post (max 5000 characters)"
                  },
                  "media_url": {
                    "type": "string",
                    "description": "URL of the image or video to publish"
                  },
                  "media_urls": {
                    "type": "array",
                    "items": {},
                    "description": "Multiple media URLs for carousel posts (use instead of `media_url`)"
                  },
                  "isDraft": {
                    "type": "boolean",
                    "description": "`true` to save as draft instead of publishing"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "IANA timezone string for scheduling (e.g., `\"America/New_York\"`, `\"Europe/London\"`)"
                  },
                  "platformOptions": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Per-account options keyed by account ID (see below)"
                  },
                  "tiktokSettings": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Root-level TikTok options. For photo carousels, `{ \"autoAddMusic\": true }` asks TikTok to add recommended music."
                  }
                },
                "required": [
                  "accounts"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}/delete": {
      "delete": {
        "operationId": "studioTemplateDelete",
        "summary": "Delete Studio Template",
        "tags": [
          "Generation & Templates"
        ],
        "description": "Learn how to delete a studio template from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/studio-template-delete"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique identifier of the studio template to delete"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}/duplicate": {
      "post": {
        "operationId": "studioTemplateDuplicate",
        "summary": "Duplicate Studio Template",
        "tags": [
          "Generation & Templates"
        ],
        "description": "Duplicate a studio template to create a new one\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/studio-template-duplicate"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Target workspace ID. Defaults to current workspace if omitted. User must be the owner of target workspace."
                  },
                  "name": {
                    "type": "string",
                    "description": "Name for the new template. Defaults to \"Copy of original_name\"."
                  },
                  "description": {
                    "type": "string",
                    "description": "Description for the new template. Defaults to original description."
                  },
                  "embed_user_id": {
                    "type": "string",
                    "description": "Assign the duplicated template to an embed user. Accepts either an external user ID (resolved using your workspace's embed configuration) or an Orshot internal ID (prefixed with `eui_`)."
                  }
                },
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}": {
      "get": {
        "operationId": "studioTemplateGet",
        "summary": "Get Studio Template",
        "tags": [
          "Generation & Templates"
        ],
        "description": "Retrieve a specific studio template by ID",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/studio-template-get"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/all": {
      "get": {
        "operationId": "studioTemplatesList",
        "summary": "Get All Studio Templates",
        "tags": [
          "Generation & Templates"
        ],
        "description": "Retrieve studio templates from your workspace with pagination",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/studio-templates-list"
        },
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Page number (must be > 0)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Templates per page (max: 40, must be > 0)"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter templates by name (case-insensitive substring match, server-side)"
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of tags. Returns templates that have all of the specified tags"
          },
          {
            "name": "embedId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Embed instance ID (for user-specific filtering)"
          },
          {
            "name": "embedUserId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "User ID to filter templates for a specific user"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}/folder": {
      "patch": {
        "operationId": "templateFolderAssign",
        "summary": "Move Template to Folder",
        "tags": [
          "Template Folders"
        ],
        "description": "Move a studio template into a folder, or out of its current folder",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/template-folder-assign"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the studio template"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "folder_id": {
                    "type": "integer",
                    "description": "Target folder ID, or `null` to remove the template from its folder"
                  }
                },
                "required": [
                  "folder_id"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/folders/{folderId}": {
      "delete": {
        "operationId": "templateFoldersDelete",
        "summary": "Delete Template Folder",
        "tags": [
          "Template Folders"
        ],
        "description": "Delete a template folder from your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/template-folders-delete"
        },
        "parameters": [
          {
            "name": "folderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the folder"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      },
      "patch": {
        "operationId": "templateFoldersUpdate",
        "summary": "Rename Template Folder",
        "tags": [
          "Template Folders"
        ],
        "description": "Rename a template folder in your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/template-folders-update"
        },
        "parameters": [
          {
            "name": "folderId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the folder"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "New folder name, up to 50 characters, unique per workspace"
                  }
                },
                "required": [
                  "name"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/folders": {
      "get": {
        "operationId": "templateFoldersGet",
        "summary": "List Template Folders",
        "tags": [
          "Template Folders"
        ],
        "description": "List all template folders in your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/template-folders-get"
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      },
      "post": {
        "operationId": "templateFoldersPost",
        "summary": "Create Template Folder",
        "tags": [
          "Template Folders"
        ],
        "description": "Create a new template folder in your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/template-folders-post"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Folder name, up to 50 characters, unique per workspace"
                  }
                },
                "required": [
                  "name"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/studio/templates/{templateId}/share": {
      "get": {
        "operationId": "templateSharingGet",
        "summary": "Get Template Sharing",
        "tags": [
          "Template Sharing"
        ],
        "description": "Get the public sharing state, links and stats for a studio template",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/template-sharing-get"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the studio template"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      },
      "post": {
        "operationId": "templateSharingPost",
        "summary": "Update Template Sharing",
        "tags": [
          "Template Sharing"
        ],
        "description": "Enable or disable public sharing and duplication for a studio template",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/template-sharing-post"
        },
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the studio template"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean",
                    "description": "Turn public sharing on or off"
                  },
                  "allow_duplication": {
                    "type": "boolean",
                    "description": "Let visitors save a copy of the template to their own workspace. Requires a paid plan. Off by default."
                  }
                },
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/workflows": {
      "post": {
        "operationId": "workflowCreate",
        "summary": "Create Workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Create a workflow programmatically\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-create"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Workflow name, up to 200 characters. Defaults to \"Untitled workflow\""
                  },
                  "description": {
                    "type": "string",
                    "description": "Optional description"
                  },
                  "steps": {
                    "type": "array",
                    "items": {},
                    "description": "Ordered steps, each `{ key, type, config }`. The first step must be a trigger or data source"
                  },
                  "status": {
                    "type": "string",
                    "description": "`draft`, `active`, `paused` or `archived`. Defaults to `draft`"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Your own metadata. Server-managed keys (`health`, `poll`, `share`, `schema`) are ignored"
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      },
      "get": {
        "operationId": "workflowsList",
        "summary": "List Workflows",
        "tags": [
          "Workflows"
        ],
        "description": "List all workflows in your workspace\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflows-list"
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by status: `draft`, `active`, `paused` or `archived`"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Results per page, 1 to 200. Defaults to 50"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Number of results to skip. Defaults to 0"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/workflows/{id}": {
      "delete": {
        "operationId": "workflowDelete",
        "summary": "Delete Workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Delete a workflow from your workspace\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-delete"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      },
      "get": {
        "operationId": "workflowGet",
        "summary": "Get Workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Get a single workflow with its full steps\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-get"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      },
      "patch": {
        "operationId": "workflowUpdate",
        "summary": "Update Workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Update a workflow's steps, status or details\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-update"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "New name, up to 200 characters"
                  },
                  "description": {
                    "type": "string",
                    "description": "New description"
                  },
                  "steps": {
                    "type": "array",
                    "items": {},
                    "description": "Full replacement steps array (validated the same way as create)"
                  },
                  "status": {
                    "type": "string",
                    "description": "`draft`, `active`, `paused` or `archived`. Activating enforces the same rules as create"
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Merged into the stored metadata. Server-managed keys (`health`, `poll`, `share`, `schema`) are ignored"
                  }
                },
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/workflows/{id}/runs/{runId}": {
      "get": {
        "operationId": "workflowRunGet",
        "summary": "Get Workflow Run",
        "tags": [
          "Workflows"
        ],
        "description": "Get one run's step-by-step detail to see which step failed and why\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-run-get"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          },
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the run"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/workflows/{id}/run": {
      "post": {
        "operationId": "workflowRun",
        "summary": "Run Workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Trigger a workflow run manually\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-run"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/workflows/{id}/runs": {
      "get": {
        "operationId": "workflowRunsList",
        "summary": "List Workflow Runs",
        "tags": [
          "Workflows"
        ],
        "description": "List recent runs of a workflow with their results\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-runs-list"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Results to return, 1 to 100. Defaults to 20"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/workflows/{id}/share": {
      "get": {
        "operationId": "workflowSharingGet",
        "summary": "Get Workflow Sharing",
        "tags": [
          "Workflows"
        ],
        "description": "Get the public sharing state and links for a workflow\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-sharing-get"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      },
      "post": {
        "operationId": "workflowSharingPost",
        "summary": "Update Workflow Sharing",
        "tags": [
          "Workflows"
        ],
        "description": "Enable or disable public sharing for a workflow\n\nAvailable only to Enterprise-plan workspaces and first-party clients.",
        "x-enterprise": true,
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workflow-sharing-post"
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The unique ID of the workflow"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean",
                    "description": "Turn public sharing on or off"
                  },
                  "includeTemplate": {
                    "type": "boolean",
                    "description": "Include the workflow's template when someone copies it"
                  }
                },
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    },
    "/workspace/logs": {
      "get": {
        "operationId": "workspaceLogs",
        "summary": "List Workspace Logs",
        "tags": [
          "Profile & Workspace"
        ],
        "description": "Retrieve a paginated, trimmed list of render and API logs for your workspace",
        "externalDocs": {
          "description": "Full documentation",
          "url": "https://orshot.com/docs/api-reference/workspace-logs"
        },
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Number of logs to return. `1`–`50`, defaults to `50`."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "`next_cursor` from a previous response — fetches the next (older) page."
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by outcome: `200` for successful renders, `error` for failures."
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by request source, e.g. `api`, `signed-url`, `webhook`."
          },
          {
            "name": "template_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by template — matches both library and studio template ids."
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by output format, e.g. `png`, `jpg`, `pdf`, `mp4`."
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "ISO timestamp — only return logs created at or after this time."
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "ISO timestamp — only return logs created at or before this time."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication"
          },
          "429": {
            "description": "Rate limit exceeded — see the Retry-After header"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "A workspace API key or an OAuth2 access token, sent as `Authorization: Bearer <token>`."
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ]
}