OpenAPI Specification
openapi: 3.1.1
info:
title: Tessl Admin Keys Tiles API
version: 1.0.0
description: Admin-scoped API keys for support tooling.
servers:
- url: https://api.tessl.io
tags:
- name: Tiles
description: Tile catalog, versions, and metadata.
paths:
/v1/tiles:
get:
tags:
- Tiles
description: Lists tiles in the catalog. Supports search, filtering by workspace/registry/featured, and ranked sorting.
parameters:
- schema:
default: -updatedAt
anyOf:
- type: array
items:
anyOf:
- type: string
enum:
- updatedAt
- type: string
enum:
- -updatedAt
- type: string
enum:
- similarity
- type: string
enum:
- -similarity
- type: string
enum:
- id
- type: string
enum:
- -id
- type: string
enum:
- relevance
- type: string
enum:
- -relevance
- type: string
enum:
- evalImprovementMultiplier
- type: string
enum:
- -evalImprovementMultiplier
- anyOf:
- type: string
enum:
- updatedAt
- type: string
enum:
- -updatedAt
- type: string
enum:
- similarity
- type: string
enum:
- -similarity
- type: string
enum:
- id
- type: string
enum:
- -id
- type: string
enum:
- relevance
- type: string
enum:
- -relevance
- type: string
enum:
- evalImprovementMultiplier
- type: string
enum:
- -evalImprovementMultiplier
in: query
name: sort
required: false
- schema:
minimum: 1
maximum: 20
default: 20
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:
type: string
in: query
name: filter[fullName]
required: false
- schema:
type: string
in: query
name: filter[fullName][eq]
required: false
- schema:
type: string
in: query
name: filter[fullName][ne]
required: false
- schema:
type: string
in: query
name: filter[fullName][gt]
required: false
- schema:
type: string
in: query
name: filter[fullName][gte]
required: false
- schema:
type: string
in: query
name: filter[fullName][lt]
required: false
- schema:
type: string
in: query
name: filter[fullName][lte]
required: false
- schema:
type: string
in: query
name: filter[fullName][like]
required: false
- schema:
type: string
in: query
name: filter[describes]
required: false
- schema:
type: string
in: query
name: filter[describes][eq]
required: false
- schema:
type: string
in: query
name: filter[describes][ne]
required: false
- schema:
type: string
in: query
name: filter[describes][gt]
required: false
- schema:
type: string
in: query
name: filter[describes][gte]
required: false
- schema:
type: string
in: query
name: filter[describes][lt]
required: false
- schema:
type: string
in: query
name: filter[describes][lte]
required: false
- schema:
type: string
in: query
name: filter[describes][like]
required: false
- schema:
type: string
in: query
name: filter[search]
required: false
- schema:
type: string
in: query
name: filter[search][eq]
required: false
- schema:
type: string
in: query
name: filter[search][ne]
required: false
- schema:
type: string
in: query
name: filter[search][gt]
required: false
- schema:
type: string
in: query
name: filter[search][gte]
required: false
- schema:
type: string
in: query
name: filter[search][lt]
required: false
- schema:
type: string
in: query
name: filter[search][lte]
required: false
- schema:
type: string
in: query
name: filter[search][like]
required: false
- schema:
type: boolean
in: query
name: filter[archived]
required: false
- schema:
type: boolean
in: query
name: filter[archived][eq]
required: false
- schema:
type: boolean
in: query
name: filter[archived][ne]
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:
format: uuid
type: string
in: query
name: filter[workspaceId][ne]
required: false
- schema:
format: uuid
type: string
in: query
name: filter[workspaceId][gt]
required: false
- schema:
format: uuid
type: string
in: query
name: filter[workspaceId][gte]
required: false
- schema:
format: uuid
type: string
in: query
name: filter[workspaceId][lt]
required: false
- schema:
format: uuid
type: string
in: query
name: filter[workspaceId][lte]
required: false
- schema:
format: uuid
type: string
in: query
name: filter[workspaceId][like]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry][eq]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry][ne]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry][gt]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry][gte]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry][lt]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry][lte]
required: false
- schema:
pattern: ^[a-z]+$
type: string
in: query
name: filter[packageRegistry][like]
required: false
- schema:
type: boolean
in: query
name: filter[featured]
required: false
- schema:
type: boolean
in: query
name: filter[featured][eq]
required: false
- schema:
type: boolean
in: query
name: filter[featured][ne]
required: false
- schema:
type: boolean
in: query
name: filter[hasSkills]
required: false
- schema:
type: boolean
in: query
name: filter[hasSkills][eq]
required: false
- schema:
type: boolean
in: query
name: filter[hasSkills][ne]
required: false
- schema:
type: boolean
in: query
name: filter[hasSteering]
required: false
- schema:
type: boolean
in: query
name: filter[hasSteering][eq]
required: false
- schema:
type: boolean
in: query
name: filter[hasSteering][ne]
required: false
- schema:
type: boolean
in: query
name: filter[hasDocs]
required: false
- schema:
type: boolean
in: query
name: filter[hasDocs][eq]
required: false
- schema:
type: boolean
in: query
name: filter[hasDocs][ne]
required: false
- schema:
anyOf:
- type: string
enum:
- versions
- type: array
items:
type: string
enum:
- versions
in: query
name: include
required: false
- schema:
type: boolean
in: query
name: includeModerationFailed
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
- relationships
- meta
properties:
id:
format: uuid
type: string
type:
type: string
enum:
- tile
attributes:
type: object
required:
- name
- describes
- featured
- isPrivate
- fullName
- createdAt
- updatedAt
properties:
name:
type: string
describes:
anyOf:
- type: string
- type: 'null'
featured:
type: boolean
isPrivate:
type: boolean
fullName:
type: string
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
similarity:
anyOf:
- type: number
- type: 'null'
relevance:
anyOf:
- type: number
- type: 'null'
evalImprovementMultiplier:
anyOf:
- type: number
- type: 'null'
versions:
type: array
items:
type: object
required:
- describes
- version
- summary
- major
- minor
- patch
- archived
- createdAt
- tesslVerified
- docs
- hasDocs
- hasSteering
- hasSkills
- evalScore
- evalBaselineScore
- evalImprovement
- evalImprovementMultiplier
- moderationStatus
- moderationError
properties:
describes:
anyOf:
- type: string
- type: 'null'
version:
format: date-time
type: string
summary:
type: string
major:
type: number
minor:
type: number
patch:
type: number
archived:
type: boolean
createdAt:
type: string
tesslVerified:
type: boolean
docs:
anyOf:
- type: string
- type: 'null'
hasDocs:
type: boolean
hasSteering:
type: boolean
hasSkills:
type: boolean
evalScore:
anyOf:
- type: integer
- type: 'null'
evalBaselineScore:
anyOf:
- type: integer
- type: 'null'
evalImprovement:
anyOf:
- type: integer
- type: 'null'
evalImprovementMultiplier:
anyOf:
- type: number
- type: 'null'
moderationStatus:
description: Aggregate outcome of the moderation pipeline. `pass` means moderation passed; `skipped` means moderation did not run; `pending` means moderation is in progress; `fail` means moderation rejected the version; `error` means moderation could not complete.
anyOf:
- type: string
enum:
- pending
- type: string
enum:
- pass
- type: string
enum:
- fail
- type: string
enum:
- error
- type: string
enum:
- skipped
moderationError:
anyOf:
- description: Reason for non-visible moderation state. Populated for `fail` and `error`. Null for `pass`, `skipped`, and `pending`.
type: string
- type: 'null'
moderationPassed:
deprecated: true
type: boolean
scores:
type: object
required:
- version
- aggregate
- quality
- impact
- security
- evalAvg
- evalBaseline
- evalImprovement
- evalImprovementMultiplier
- evalCount
- validationErrors
- lastScoredAt
properties:
version:
type: string
aggregate:
anyOf:
- type: number
- type: 'null'
quality:
anyOf:
- type: number
- type: 'null'
impact:
anyOf:
- type: number
- type: 'null'
security:
anyOf:
- anyOf:
- type: string
enum:
- LOW
- type: string
enum:
- MEDIUM
- type: string
enum:
- HIGH
- type: string
enum:
- CRITICAL
- type: 'null'
evalAvg:
anyOf:
- type: number
- type: 'null'
evalBaseline:
anyOf:
- type: number
- type: 'null'
evalImprovement:
anyOf:
- type: number
- type: 'null'
evalImprovementMultiplier:
anyOf:
- type: number
- type: 'null'
evalCount:
anyOf:
- type: integer
- type: 'null'
validationErrors:
type: array
items:
type: string
lastScoredAt:
anyOf:
- format: date-time
type: string
- type: 'null'
relationships:
type: object
required:
- workspace
properties:
workspace:
type: object
required:
- data
- links
properties:
data:
type: object
required:
- id
- type
properties:
id:
format: uuid
type: string
type:
type: string
enum:
- workspace
links:
type: object
required:
- self
properties:
self:
format: uri
type: string
meta:
type: object
required:
- allowedActions
properties:
allowedActions:
type: array
items:
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: Publish a tile version
tags:
- Tiles
description: Publishes a new tile version to the registry. If the tile does not yet exist, it will be created automatically. The request body should be a gzipped tar archive (tar.gz) containing the tile manifest (tile.json) and tile contents, e.g. markdown documentation files, eval scenarios, etc. The tile name and version are extracted from the manifest file.
parameters:
- schema:
type: string
enum:
- application/x-tar
in: header
name: content-type
required: true
- schema:
type: string
in: header
name: github-oidc-token
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:
- tile
attributes:
type: object
required:
- featured
- isPrivate
- workspaceId
- name
- version
- fullName
- describes
- createdAt
- updatedAt
properties:
featured:
type: boolean
isPrivate:
type: boolean
workspaceId:
format: uuid
type: string
name:
minLength: 1
maxLength: 90
type: string
version:
type: string
fullName:
type: string
describes:
anyOf:
- type: string
- type: 'null'
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: Conflict
content:
application/json:
schema:
description: Conflict
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Conflict
status:
type: number
enum:
- 409
message:
type: string
'500':
description: Internal Server Error
content:
application/json:
schema:
# --- truncated at 32 KB (190 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/tesslio/refs/heads/main/openapi/tesslio-tiles-api-openapi.yml