swagger: '2.0' info: contact: email: info@portainer.io description: 'Portainer API is an HTTP API served by Portainer. It is used by the Portainer UI and everything you can do with the UI can be done using the HTTP API. Examples are available at https://documentation.portainer.io/api/api-examples/ You can find out more about Portainer at [http://portainer.io](http://portainer.io) and get some support on [Slack](http://portainer.io/slack/). # Authentication Most of the API environments(endpoints) require to be authenticated as well as some level of authorization to be used. Portainer API uses JSON Web Token to manage authentication and thus requires you to provide a token in the **Authorization** header of each request with the **Bearer** authentication mechanism. Example: ``` Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInJvbGUiOjEsImV4cCI6MTQ5OTM3NjE1NH0.NJ6vE8FY1WG6jsRQzfMqeatJ4vh2TWAeeYfDhP71YEE ``` # Security Each API environment(endpoint) has an associated access policy, it is documented in the description of each environment(endpoint). Different access policies are available: - Public access - Authenticated access - Restricted access - Administrator access ### Public access No authentication is required to access the environments(endpoints) with this access policy. ### Authenticated access Authentication is required to access the environments(endpoints) with this access policy. ### Restricted access Authentication is required to access the environments(endpoints) with this access policy. Extra-checks might be added to ensure access to the resource is granted. Returned data might also be filtered. ### Administrator access Authentication as well as an administrator role are required to access the environments(endpoints) with this access policy. # Execute Docker requests Portainer **DO NOT** expose specific environments(endpoints) to manage your Docker resources (create a container, remove a volume, etc...). Instead, it acts as a reverse-proxy to the Docker HTTP API. This means that you can execute Docker requests **via** the Portainer HTTP API. To do so, you can use the `/endpoints/{id}/docker` Portainer API environment(endpoint) (which is not documented below due to Swagger limitations). This environment(endpoint) has a restricted access policy so you still need to be authenticated to be able to query this environment(endpoint). Any query on this environment(endpoint) will be proxied to the Docker API of the associated environment(endpoint) (requests and responses objects are the same as documented in the Docker API). # Private Registry Using private registry, you will need to pass a based64 encoded JSON string ‘{"registryId":\}’ inside the Request Header. The parameter name is "X-Registry-Auth". \ - The registry ID where the repository was created. Example: ``` eyJyZWdpc3RyeUlkIjoxfQ== ``` **NOTE**: You can find more information on how to query the Docker API in the [Docker official documentation](https://docs.docker.com/engine/api/v1.30/) as well as in [this Portainer example](https://documentation.portainer.io/api/api-examples/). ' license: name: zlib url: https://github.com/portainer/portainer/blob/develop/LICENSE title: PortainerCE auth custom_templates API version: 2.39.1 basePath: /api schemes: - http - https tags: - description: Manage Custom Templates name: custom_templates paths: /custom_templates: get: description: 'List available custom templates. **Access policy**: authenticated' operationId: CustomTemplateList parameters: - collectionFormat: csv description: Template types in: query items: enum: - 1 - 2 - 3 type: integer name: type required: true type: array - description: Filter by edge templates in: query name: edge type: boolean produces: - application/json responses: '200': description: Success schema: items: $ref: '#/definitions/portainer.CustomTemplate' type: array '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: List available custom templates tags: - custom_templates /custom_templates/{id}: delete: description: 'Remove a template. **Access policy**: authenticated' operationId: CustomTemplateDelete parameters: - description: Template identifier in: path name: id required: true type: integer responses: '204': description: Success '400': description: Invalid request '403': description: Access denied to resource '404': description: Template not found '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Remove a template tags: - custom_templates get: description: 'Retrieve details about a template. **Access policy**: authenticated' operationId: CustomTemplateInspect parameters: - description: Template identifier in: path name: id required: true type: integer produces: - application/json responses: '200': description: Success schema: $ref: '#/definitions/portainer.CustomTemplate' '400': description: Invalid request '404': description: Template not found '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Inspect a custom template tags: - custom_templates put: consumes: - application/json description: 'Update a template. **Access policy**: authenticated' operationId: CustomTemplateUpdate parameters: - description: Template identifier in: path name: id required: true type: integer - description: Template details in: body name: body required: true schema: $ref: '#/definitions/customtemplates.customTemplateUpdatePayload' produces: - application/json responses: '200': description: Success schema: $ref: '#/definitions/portainer.CustomTemplate' '400': description: Invalid request '403': description: Permission denied to access template '404': description: Template not found '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Update a template tags: - custom_templates /custom_templates/{id}/file: get: description: 'Retrieve the content of the Stack file for the specified custom template **Access policy**: authenticated' operationId: CustomTemplateFile parameters: - description: Template identifier in: path name: id required: true type: integer produces: - application/json responses: '200': description: Success schema: $ref: '#/definitions/customtemplates.fileResponse' '400': description: Invalid request '404': description: Custom template not found '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Get Template stack file content. tags: - custom_templates /custom_templates/{id}/git_fetch: put: description: 'Retrieve details about a template created from git repository method. **Access policy**: authenticated' operationId: CustomTemplateGitFetch parameters: - description: Template identifier in: path name: id required: true type: integer produces: - application/json responses: '200': description: Success schema: $ref: '#/definitions/customtemplates.fileResponse' '400': description: Invalid request '404': description: Custom template not found '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Fetch the latest config file content based on custom template's git repository configuration tags: - custom_templates /custom_templates/create/file: post: consumes: - multipart/form-data description: 'Create a custom template. **Access policy**: authenticated' operationId: CustomTemplateCreateFile parameters: - description: Title of the template in: formData name: Title required: true type: string - description: Description of the template in: formData name: Description required: true type: string - description: A note that will be displayed in the UI. Supports HTML content in: formData name: Note required: true type: string - description: Platform associated to the template (1 - 'linux', 2 - 'windows') enum: - 1 - 2 in: formData name: Platform required: true type: integer - description: Type of created stack (1 - swarm, 2 - compose, 3 - kubernetes) enum: - 1 - 2 - 3 in: formData name: Type required: true type: integer - description: File in: formData name: File required: true type: file - description: URL of the template's logo in: formData name: Logo type: string - description: A json array of variables definitions in: formData name: Variables type: string produces: - application/json responses: '200': description: OK schema: $ref: '#/definitions/portainer.CustomTemplate' '400': description: Invalid request '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Create a custom template tags: - custom_templates /custom_templates/create/repository: post: consumes: - application/json description: 'Create a custom template. **Access policy**: authenticated' operationId: CustomTemplateCreateRepository parameters: - description: Required when using method=repository in: body name: body required: true schema: $ref: '#/definitions/customtemplates.customTemplateFromGitRepositoryPayload' produces: - application/json responses: '200': description: OK schema: $ref: '#/definitions/portainer.CustomTemplate' '400': description: Invalid request '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Create a custom template tags: - custom_templates /custom_templates/create/string: post: consumes: - application/json description: 'Create a custom template. **Access policy**: authenticated' operationId: CustomTemplateCreateString parameters: - description: body in: body name: body required: true schema: $ref: '#/definitions/customtemplates.customTemplateFromFileContentPayload' produces: - application/json responses: '200': description: OK schema: $ref: '#/definitions/portainer.CustomTemplate' '400': description: Invalid request '500': description: Server error security: - ApiKeyAuth: [] - jwt: [] summary: Create a custom template tags: - custom_templates definitions: customtemplates.customTemplateUpdatePayload: properties: ComposeFilePathInRepository: default: docker-compose.yml description: Path to the Stack file inside the Git repository example: docker-compose.yml type: string Description: description: Description of the template example: High performance web server type: string EdgeTemplate: description: EdgeTemplate indicates if this template purpose for Edge Stack example: false type: boolean FileContent: description: Content of stack file type: string IsComposeFormat: description: IsComposeFormat indicates if the Kubernetes template is created from a Docker Compose file example: false type: boolean Logo: description: URL of the template's logo example: https://portainer.io/img/logo.svg type: string Note: description: A note that will be displayed in the UI. Supports HTML content example: This is my custom template type: string Platform: allOf: - $ref: '#/definitions/portainer.CustomTemplatePlatform' description: 'Platform associated to the template. Valid values are: 1 - ''linux'', 2 - ''windows'' Required for Docker stacks' enum: - 1 - 2 example: 1 RepositoryAuthentication: description: Use authentication to clone the Git repository example: true type: boolean RepositoryAuthorizationType: allOf: - $ref: '#/definitions/gittypes.GitCredentialAuthType' description: RepositoryAuthorizationType is the authorization type to use example: 0 RepositoryGitCredentialID: description: 'GitCredentialID used to identify the bound git credential. Required when RepositoryAuthentication is true and RepositoryUsername/RepositoryPassword are not provided' example: 0 type: integer RepositoryPassword: description: 'Password used in basic authentication or token used in token authentication. Required when RepositoryAuthentication is true and RepositoryGitCredentialID is 0' example: myGitPassword type: string RepositoryReferenceName: description: Reference name of a Git repository hosting the Stack file example: refs/heads/master type: string RepositoryURL: description: URL of a Git repository hosting the Stack file example: https://github.com/openfaas/faas type: string RepositoryUsername: description: 'Username used in basic authentication. Required when RepositoryAuthentication is true and RepositoryGitCredentialID is 0. Ignored if RepositoryAuthType is token' example: myGitUsername type: string TLSSkipVerify: description: TLSSkipVerify skips SSL verification when cloning the Git repository example: false type: boolean Title: description: Title of the template example: Nginx type: string Type: allOf: - $ref: '#/definitions/portainer.StackType' description: Type of created stack (1 - swarm, 2 - compose, 3 - kubernetes) enum: - 1 - 2 - 3 example: 1 Variables: description: Definitions of variables in the stack file items: $ref: '#/definitions/portainer.CustomTemplateVariableDefinition' type: array required: - Description - FileContent - RepositoryURL - Title - Type type: object portainer.CustomTemplatePlatform: enum: - 0 - 1 - 2 type: integer x-enum-varnames: - _ - CustomTemplatePlatformLinux - CustomTemplatePlatformWindows portainer.UserResourceAccess: properties: AccessLevel: $ref: '#/definitions/portainer.ResourceAccessLevel' UserId: type: integer type: object portainer.TeamResourceAccess: properties: AccessLevel: $ref: '#/definitions/portainer.ResourceAccessLevel' TeamId: type: integer type: object portainer.ResourceControlType: enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 type: integer x-enum-varnames: - _ - ContainerResourceControl - ServiceResourceControl - VolumeResourceControl - NetworkResourceControl - SecretResourceControl - StackResourceControl - ConfigResourceControl - CustomTemplateResourceControl - ContainerGroupResourceControl portainer.CustomTemplateVariableDefinition: properties: defaultValue: example: default value type: string description: example: Description type: string label: example: My Variable type: string name: example: MY_VAR type: string type: object gittypes.GitCredentialAuthType: enum: - 0 - 1 type: integer x-enum-varnames: - GitCredentialAuthType_Basic - GitCredentialAuthType_Token gittypes.RepoConfig: properties: Authentication: allOf: - $ref: '#/definitions/gittypes.GitAuthentication' description: Git credentials ConfigFilePath: description: Path to where the config file is in this url/refName example: docker-compose.yml type: string ConfigHash: description: Repository hash example: bc4c183d756879ea4d173315338110b31004b8e0 type: string ReferenceName: description: The reference name example: refs/heads/branch_name type: string TLSSkipVerify: description: TLSSkipVerify skips SSL verification when cloning the Git repository example: false type: boolean URL: description: The repo url example: https://github.com/portainer/portainer.git type: string type: object portainer.StackType: enum: - 0 - 1 - 2 - 3 type: integer x-enum-varnames: - _ - DockerSwarmStack - DockerComposeStack - KubernetesStack customtemplates.fileResponse: properties: FileContent: type: string type: object customtemplates.customTemplateFromGitRepositoryPayload: properties: ComposeFilePathInRepository: default: docker-compose.yml description: Path to the Stack file inside the Git repository example: docker-compose.yml type: string Description: description: Description of the template example: High performance web server type: string EdgeTemplate: description: EdgeTemplate indicates if this template purpose for Edge Stack example: false type: boolean IsComposeFormat: description: IsComposeFormat indicates if the Kubernetes template is created from a Docker Compose file example: false type: boolean Logo: description: URL of the template's logo example: https://portainer.io/img/logo.svg type: string Note: description: A note that will be displayed in the UI. Supports HTML content example: This is my custom template type: string Platform: allOf: - $ref: '#/definitions/portainer.CustomTemplatePlatform' description: 'Platform associated to the template. Valid values are: 1 - ''linux'', 2 - ''windows'' Required for Docker stacks' enum: - 1 - 2 example: 1 RepositoryAuthentication: description: Use basic authentication to clone the Git repository example: true type: boolean RepositoryPassword: description: Password used in basic authentication. Required when RepositoryAuthentication is true. example: myGitPassword type: string RepositoryReferenceName: description: Reference name of a Git repository hosting the Stack file example: refs/heads/master type: string RepositoryURL: description: URL of a Git repository hosting the Stack file example: https://github.com/openfaas/faas type: string RepositoryUsername: description: Username used in basic authentication. Required when RepositoryAuthentication is true. example: myGitUsername type: string TLSSkipVerify: description: TLSSkipVerify skips SSL verification when cloning the Git repository example: false type: boolean Title: description: Title of the template example: Nginx type: string Type: allOf: - $ref: '#/definitions/portainer.StackType' description: 'Type of created stack: * 1 - swarm * 2 - compose * 3 - kubernetes' enum: - 1 - 2 example: 1 Variables: description: Definitions of variables in the stack file items: $ref: '#/definitions/portainer.CustomTemplateVariableDefinition' type: array required: - Description - RepositoryURL - Title - Type type: object portainer.CustomTemplate: properties: CreatedByUserId: description: User identifier who created this template example: 3 type: integer Description: description: Description of the template example: High performance web server type: string EdgeTemplate: description: EdgeTemplate indicates if this template purpose for Edge Stack example: false type: boolean EntryPoint: description: Path to the Stack file example: docker-compose.yml type: string GitConfig: $ref: '#/definitions/gittypes.RepoConfig' Id: description: CustomTemplate Identifier example: 1 type: integer IsComposeFormat: description: IsComposeFormat indicates if the Kubernetes template is created from a Docker Compose file example: false type: boolean Logo: description: URL of the template's logo example: https://portainer.io/img/logo.svg type: string Note: description: A note that will be displayed in the UI. Supports HTML content example: This is my custom template type: string Platform: allOf: - $ref: '#/definitions/portainer.CustomTemplatePlatform' description: 'Platform associated to the template. Valid values are: 1 - ''linux'', 2 - ''windows''' enum: - 1 - 2 example: 1 ProjectPath: description: Path on disk to the repository hosting the Stack file example: /data/custom_template/3 type: string ResourceControl: $ref: '#/definitions/portainer.ResourceControl' Title: description: Title of the template example: Nginx type: string Type: allOf: - $ref: '#/definitions/portainer.StackType' description: 'Type of created stack: * 1 - swarm * 2 - compose * 3 - kubernetes' enum: - 1 - 2 - 3 example: 1 Variables: items: $ref: '#/definitions/portainer.CustomTemplateVariableDefinition' type: array type: object portainer.ResourceControl: properties: AccessLevel: $ref: '#/definitions/portainer.ResourceAccessLevel' AdministratorsOnly: description: Permit access to resource only to admins example: true type: boolean Id: description: ResourceControl Identifier example: 1 type: integer OwnerId: description: 'Deprecated fields Deprecated in DBVersion == 2' type: integer Public: description: Permit access to the associated resource to any user example: true type: boolean ResourceId: description: 'Docker resource identifier on which access control will be applied.\ In the case of a resource control applied to a stack, use the stack name as identifier' example: 617c5f22bb9b023d6daab7cba43a57576f83492867bc767d1c59416b065e5f08 type: string SubResourceIds: description: List of Docker resources that will inherit this access control example: - 617c5f22bb9b023d6daab7cba43a57576f83492867bc767d1c59416b065e5f08 items: type: string type: array System: type: boolean TeamAccesses: items: $ref: '#/definitions/portainer.TeamResourceAccess' type: array Type: allOf: - $ref: '#/definitions/portainer.ResourceControlType' description: 'Type of Docker resource. Valid values are: 1- container, 2 -service 3 - volume, 4 - secret, 5 - stack, 6 - config or 7 - custom template' example: 1 UserAccesses: items: $ref: '#/definitions/portainer.UserResourceAccess' type: array type: object gittypes.GitAuthentication: properties: AuthorizationType: $ref: '#/definitions/gittypes.GitCredentialAuthType' GitCredentialID: description: 'Git credentials identifier when the value is not 0 When the value is 0, Username, Password, and Authtype are set without using saved credential This is introduced since 2.15.0' example: 0 type: integer Password: type: string Username: type: string type: object customtemplates.customTemplateFromFileContentPayload: properties: Description: description: Description of the template example: High performance web server type: string EdgeTemplate: description: EdgeTemplate indicates if this template purpose for Edge Stack example: false type: boolean FileContent: description: Content of stack file type: string Logo: description: URL of the template's logo example: https://portainer.io/img/logo.svg type: string Note: description: A note that will be displayed in the UI. Supports HTML content example: This is my custom template type: string Platform: allOf: - $ref: '#/definitions/portainer.CustomTemplatePlatform' description: 'Platform associated to the template. Valid values are: 1 - ''linux'', 2 - ''windows'' Required for Docker stacks' enum: - 1 - 2 example: 1 Title: description: Title of the template example: Nginx type: string Type: allOf: - $ref: '#/definitions/portainer.StackType' description: 'Type of created stack: * 1 - swarm * 2 - compose * 3 - kubernetes' enum: - 1 - 2 - 3 example: 1 Variables: description: Definitions of variables in the stack file items: $ref: '#/definitions/portainer.CustomTemplateVariableDefinition' type: array required: - Description - FileContent - Title - Type type: object portainer.ResourceAccessLevel: enum: - 0 - 1 type: integer x-enum-varnames: - _ - ReadWriteAccessLevel securityDefinitions: ApiKeyAuth: in: header name: X-API-KEY type: apiKey jwt: in: header name: Authorization type: apiKey