OpenAPI Specification
openapi: 3.1.1
info:
title: Tessl Admin Keys Projects API
version: 1.0.0
description: Admin-scoped API keys for support tooling.
servers:
- url: https://api.tessl.io
tags:
- name: Projects
description: Workspace projects.
paths:
/v1/projects:
get:
summary: List projects
tags:
- Projects
description: Lists projects, optionally filtered by workspace and name.
parameters:
- schema:
default: -createdAt
anyOf:
- type: array
items:
anyOf:
- type: string
enum:
- createdAt
- type: string
enum:
- -createdAt
- type: string
enum:
- updatedAt
- type: string
enum:
- -updatedAt
- type: string
enum:
- id
- type: string
enum:
- -id
- anyOf:
- type: string
enum:
- createdAt
- type: string
enum:
- -createdAt
- type: string
enum:
- updatedAt
- type: string
enum:
- -updatedAt
- type: string
enum:
- id
- type: string
enum:
- -id
in: query
name: sort
required: false
- schema:
minimum: 1
maximum: 100
default: 100
type: number
in: query
name: page[size]
required: false
- schema:
type: string
in: query
name: page[after]
required: false
- schema:
type: string
in: query
name: page[before]
required: false
- schema:
format: uuid
type: string
in: query
name: filter[workspaceId]
required: false
- schema:
format: uuid
type: string
in: query
name: filter[workspaceId][eq]
required: false
- schema:
type: string
in: query
name: filter[name]
required: false
- schema:
type: string
in: query
name: filter[name][eq]
required: false
- schema:
type: string
example: Bearer <token>
in: header
name: Authorization
required: false
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
required:
- links
- meta
- data
properties:
links:
type: object
required:
- self
- next
- prev
properties:
self:
format: uri
type: string
next:
anyOf:
- format: uri
type: string
- type: 'null'
prev:
anyOf:
- format: uri
type: string
- type: 'null'
meta:
type: object
required:
- count
properties:
count:
type: number
data:
type: array
items:
type: object
required:
- id
- type
- attributes
properties:
id:
format: uuid
type: string
type:
type: string
enum:
- project
attributes:
type: object
required:
- workspaceId
- name
- sourceType
- sourceUri
- repoSubpath
- createdBy
- createdAt
- updatedAt
properties:
workspaceId:
format: uuid
type: string
name:
type: string
sourceType:
type: string
sourceUri:
type: string
repoSubpath:
type: string
createdBy:
format: uuid
type: string
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
'400':
description: Bad Request
content:
application/json:
schema:
description: Bad Request
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Bad Request
status:
type: number
enum:
- 400
message:
type: string
'401':
description: Unauthorized
content:
application/json:
schema:
description: Unauthorized
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Unauthorized
status:
type: number
enum:
- 401
message:
type: string
'403':
description: Forbidden
content:
application/json:
schema:
description: Forbidden
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Forbidden
status:
type: number
enum:
- 403
message:
type: string
'404':
description: Not Found
content:
application/json:
schema:
description: Not Found
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Not Found
status:
type: number
enum:
- 404
message:
type: string
'500':
description: Internal Server Error
content:
application/json:
schema:
description: Internal Server Error
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Internal Server Error
status:
type: number
enum:
- 500
message:
type: string
post:
summary: Create a project
tags:
- Projects
description: Creates a project bound to a workspace and a source repository.
requestBody:
required: true
content:
application/json:
schema:
additionalProperties: false
type: object
required:
- workspaceId
- name
- sourceType
- sourceUri
properties:
workspaceId:
format: uuid
type: string
name:
minLength: 1
pattern: ^\s*[A-Za-z0-9][A-Za-z0-9_-]{0,199}\s*$
type: string
sourceType:
minLength: 1
maxLength: 64
type: string
sourceUri:
minLength: 1
maxLength: 2048
type: string
repoSubpath:
maxLength: 4096
type: string
parameters:
- schema:
type: string
example: Bearer <token>
in: header
name: Authorization
required: false
responses:
'201':
description: Default Response
content:
application/json:
schema:
type: object
required:
- links
- data
properties:
links:
type: object
required:
- self
properties:
self:
format: uri
type: string
data:
type: object
required:
- id
- type
- attributes
properties:
id:
format: uuid
type: string
type:
type: string
enum:
- project
attributes:
type: object
required:
- workspaceId
- name
- sourceType
- sourceUri
- repoSubpath
- createdBy
- createdAt
- updatedAt
properties:
workspaceId:
format: uuid
type: string
name:
type: string
sourceType:
type: string
sourceUri:
type: string
repoSubpath:
type: string
createdBy:
format: uuid
type: string
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
'400':
description: Bad Request
content:
application/json:
schema:
description: Bad Request
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Bad Request
status:
type: number
enum:
- 400
message:
type: string
'401':
description: Unauthorized
content:
application/json:
schema:
description: Unauthorized
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Unauthorized
status:
type: number
enum:
- 401
message:
type: string
'403':
description: Forbidden
content:
application/json:
schema:
description: Forbidden
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Forbidden
status:
type: number
enum:
- 403
message:
type: string
'404':
description: Not Found
content:
application/json:
schema:
description: Not Found
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Not Found
status:
type: number
enum:
- 404
message:
type: string
'409':
description: Default Response
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- status
- title
- message
- code
properties:
status:
type: number
enum:
- 409
title:
type: string
message:
type: string
code:
anyOf:
- type: string
enum:
- duplicate_project_name
- type: string
enum:
- duplicate_project_provenance
'500':
description: Internal Server Error
content:
application/json:
schema:
description: Internal Server Error
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Internal Server Error
status:
type: number
enum:
- 500
message:
type: string
/v1/projects/{projectId}:
get:
summary: Get a project
tags:
- Projects
description: Fetches a project by id.
parameters:
- schema:
format: uuid
type: string
in: path
name: projectId
required: true
- schema:
type: string
example: Bearer <token>
in: header
name: Authorization
required: false
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
required:
- links
- data
properties:
links:
type: object
required:
- self
properties:
self:
format: uri
type: string
data:
type: object
required:
- id
- type
- attributes
properties:
id:
format: uuid
type: string
type:
type: string
enum:
- project
attributes:
type: object
required:
- workspaceId
- name
- sourceType
- sourceUri
- repoSubpath
- createdBy
- createdAt
- updatedAt
properties:
workspaceId:
format: uuid
type: string
name:
type: string
sourceType:
type: string
sourceUri:
type: string
repoSubpath:
type: string
createdBy:
format: uuid
type: string
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
'401':
description: Unauthorized
content:
application/json:
schema:
description: Unauthorized
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Unauthorized
status:
type: number
enum:
- 401
message:
type: string
'403':
description: Forbidden
content:
application/json:
schema:
description: Forbidden
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Forbidden
status:
type: number
enum:
- 403
message:
type: string
'404':
description: Not Found
content:
application/json:
schema:
description: Not Found
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Not Found
status:
type: number
enum:
- 404
message:
type: string
'500':
description: Internal Server Error
content:
application/json:
schema:
description: Internal Server Error
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Internal Server Error
status:
type: number
enum:
- 500
message:
type: string
patch:
summary: Update a project
tags:
- Projects
description: Updates a project (rename, or replace source binding).
requestBody:
required: true
content:
application/json:
schema:
anyOf:
- additionalProperties: false
type: object
required:
- name
properties:
name:
minLength: 1
pattern: ^\s*[A-Za-z0-9][A-Za-z0-9_-]{0,199}\s*$
type: string
sourceType:
not: {}
sourceUri:
not: {}
repoSubpath:
not: {}
- additionalProperties: false
type: object
required:
- sourceType
- sourceUri
properties:
name:
not: {}
sourceType:
minLength: 1
maxLength: 64
type: string
sourceUri:
minLength: 1
maxLength: 2048
type: string
repoSubpath:
maxLength: 4096
type: string
parameters:
- schema:
format: uuid
type: string
in: path
name: projectId
required: true
- schema:
type: string
example: Bearer <token>
in: header
name: Authorization
required: false
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
required:
- links
- data
properties:
links:
type: object
required:
- self
properties:
self:
format: uri
type: string
data:
type: object
required:
- id
- type
- attributes
properties:
id:
format: uuid
type: string
type:
type: string
enum:
- project
attributes:
type: object
required:
- workspaceId
- name
- sourceType
- sourceUri
- repoSubpath
- createdBy
- createdAt
- updatedAt
properties:
workspaceId:
format: uuid
type: string
name:
type: string
sourceType:
type: string
sourceUri:
type: string
repoSubpath:
type: string
createdBy:
format: uuid
type: string
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
'400':
description: Bad Request
content:
application/json:
schema:
description: Bad Request
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Bad Request
status:
type: number
enum:
- 400
message:
type: string
'401':
description: Unauthorized
content:
application/json:
schema:
description: Unauthorized
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Unauthorized
status:
type: number
enum:
- 401
message:
type: string
'403':
description: Forbidden
content:
application/json:
schema:
description: Forbidden
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Forbidden
status:
type: number
enum:
- 403
message:
type: string
'404':
description: Not Found
content:
application/json:
schema:
description: Not Found
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Not Found
status:
type: number
enum:
- 404
message:
type: string
'409':
description: Default Response
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
required:
- status
- title
- message
- code
properties:
status:
type: number
enum:
- 409
title:
type: string
message:
type: string
code:
anyOf:
- type: string
enum:
- duplicate_project_name
- type: string
enum:
- duplicate_project_provenance
'500':
description: Internal Server Error
content:
application/json:
schema:
description: Internal Server Error
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Internal Server Error
status:
type: number
enum:
- 500
message:
# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/tesslio/refs/heads/main/openapi/tesslio-projects-api-openapi.yml