tessl.io SkillInventory API
The SkillInventory API from tessl.io — 24 operation(s) for skillinventory.
The SkillInventory API from tessl.io — 24 operation(s) for skillinventory.
openapi: 3.1.1
info:
title: Tessl Admin Keys SkillInventory API
version: 1.0.0
description: Admin-scoped API keys for support tooling.
servers:
- url: https://api.tessl.io
tags:
- name: SkillInventory
paths:
/v1/workspaces/{workspaceNameOrID}/skill-inventories:
get:
tags:
- SkillInventory
description: Lists skill inventories claimed by the workspace, ordered by scan recency.
parameters:
- schema:
default: -scannedAt
anyOf:
- type: array
items:
anyOf:
- type: string
enum:
- scannedAt
- type: string
enum:
- -scannedAt
- anyOf:
- type: string
enum:
- scannedAt
- type: string
enum:
- -scannedAt
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:
anyOf:
- type: string
enum:
- pending
- type: string
enum:
- complete
- type: string
enum:
- failed
in: query
name: status
required: false
- schema:
type: string
in: path
name: workspaceNameOrID
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
- 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:
type: string
type:
type: string
enum:
- skill-inventory
attributes:
type: object
required:
- githubOrgName
- provider
- scannedAt
- scanCount
- totalSkills
- totalRepos
- analysisStatus
- privateIndexingOptedInAt
- findingsBreakdown
properties:
githubOrgName:
type: string
provider:
type: string
scannedAt:
anyOf:
- format: date-time
type: string
- type: 'null'
scanCount:
type: number
totalSkills:
type: number
totalRepos:
type: number
analysisStatus:
anyOf:
- anyOf:
- type: string
enum:
- pending
- type: string
enum:
- complete
- type: string
enum:
- failed
- type: 'null'
privateIndexingOptedInAt:
anyOf:
- format: date-time
type: string
- type: 'null'
findingsBreakdown:
type: object
required:
- critical
- high
- medium
- low
properties:
critical:
type: number
high:
type: number
medium:
type: number
low:
type: number
'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:
tags:
- SkillInventory
description: 'Creates (or returns) the workspace''s skill inventory for a connected SCM provider, deriving the org-equivalent from the workspace''s integration. This is the backend-driven bootstrap for the read-only scan model: after connecting a provider, create the inventory here, opt it into private indexing, then start a scan. Returns 422 (scm_not_connected) when the workspace has no integration for the requested provider. `created` is false when the inventory already existed.'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- provider
properties:
provider:
anyOf:
- type: string
enum:
- github
- type: string
enum:
- gitlab
- type: string
enum:
- bitbucket
parameters:
- schema:
type: string
in: path
name: workspaceNameOrID
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:
- skill-inventory
attributes:
type: object
required:
- githubOrgName
- provider
- created
properties:
githubOrgName:
type: string
provider:
type: string
created:
type: boolean
'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
'422':
description: Unprocessable Entity
content:
application/json:
schema:
description: Unprocessable Entity
type: object
required:
- error
properties:
error:
type: object
required:
- title
- status
- message
properties:
title:
type: string
enum:
- Unprocessable Entity
status:
type: number
enum:
- 422
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
/v1/workspaces/{workspaceNameOrID}/skill-inventories/{id}:
get:
tags:
- SkillInventory
description: Returns the authenticated header row for a workspace-scoped skill inventory.
parameters:
- schema:
type: string
in: path
name: workspaceNameOrID
required: true
- schema:
format: uuid
type: string
in: path
name: id
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:
- id
- githubOrgName
- provider
- workspaceId
- totalSkills
- totalRepos
- totalUniqueSkills
- scannedAt
- scanCount
- analysisStatus
- analysisError
- categoryBreakdown
- topContributors
- agentsDistribution
- crossScanDelta
- findingsBreakdown
- skillSeverityBreakdown
- privateIndexingOptedInAt
- privateIndexingStatus
- privateIndexingStartedAt
- privateIndexingCompletedAt
- privateIndexingRegisteredCount
- privateIndexingSkippedCount
- privateIndexingFailedCount
- privateIndexingErrorMessage
- autoScanEnabled
- nextScheduledScanAt
properties:
id:
type: string
githubOrgName:
type: string
provider:
type: string
workspaceId:
format: uuid
type: string
totalSkills:
type: number
totalRepos:
type: number
totalUniqueSkills:
anyOf:
- type: number
- type: 'null'
scannedAt:
anyOf:
- format: date-time
type: string
- type: 'null'
scanCount:
type: number
analysisStatus:
anyOf:
- anyOf:
- type: string
enum:
- pending
- type: string
enum:
- complete
- type: string
enum:
- failed
- type: 'null'
analysisError:
anyOf:
- type: string
- type: 'null'
categoryBreakdown:
type: object
required:
- firstParty
- thirdParty
- unknown
properties:
firstParty:
type: number
thirdParty:
type: number
unknown:
type: number
topContributors:
type: array
items:
type: object
required:
- email
- count
properties:
email:
type: string
count:
type: number
agentsDistribution:
type: array
items:
type: object
required:
- agent
- count
properties:
agent:
type: string
count:
type: number
crossScanDelta:
type: object
required:
- newFindingsCount
- resolvedFindingsCount
properties:
newFindingsCount:
type: number
resolvedFindingsCount:
type: number
findingsBreakdown:
type: object
required:
- critical
- high
- medium
- low
properties:
critical:
type: number
high:
type: number
medium:
type: number
low:
type: number
skillSeverityBreakdown:
type: object
required:
- critical
- high
- medium
- low
- clean
properties:
critical:
type: number
high:
type: number
medium:
type: number
low:
type: number
clean:
type: number
privateIndexingOptedInAt:
anyOf:
- format: date-time
type: string
- type: 'null'
privateIndexingStatus:
anyOf:
- anyOf:
- type: string
enum:
- indexing
- type: string
enum:
- complete
- type: string
enum:
- failed
- type: 'null'
privateIndexingStartedAt:
anyOf:
- format: date-time
type: string
- type: 'null'
privateIndexingCompletedAt:
anyOf:
- format: date-time
type: string
- type: 'null'
privateIndexingRegisteredCount:
type: number
privateIndexingSkippedCount:
type: number
privateIndexingFailedCount:
type: number
privateIndexingErrorMessage:
anyOf:
- type: string
- type: 'null'
autoScanEnabled:
type: boolean
nextScheduledScanAt:
anyOf:
- format: date-time
type: string
- type: 'null'
'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
delete:
tags:
- SkillInventory
description: 'Deletes a workspace-scoped skill inventory. Requires the `manage_integrations` permission (workspace manager or owner). The delete is a soft delete: the inventory and all its scans become inaccessible, but the org can be re-scanned later. Idempotent — deleting an already-deleted or unknown inventory returns 404.'
parameters:
- schema:
type: string
in: path
name: workspaceNameOrID
required: true
- schema:
format: uuid
type: string
in: path
name: id
required: true
- schema:
type: string
example: Bearer <token>
in: header
name: Authorization
required: false
responses:
'204':
description: Default Response
'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
/v1/workspaces/{workspaceNameOrID}/skill-inventories/{id}/github-app-status:
get:
tags:
- SkillInventory
description: Reports whether the workspace's GitHub App installation is present, healthy, and covers the repos of the inventory's org. Preflight check for the private-indexing opt-in.
parameters:
- schema:
type: string
in: path
name: workspaceNameOrID
required: true
- schema:
format: uuid
type: string
in: path
name: id
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:
- skill-inventory-github-app-status
attributes:
type: object
# --- truncated at 32 KB (244 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/tesslio/refs/heads/main/openapi/tesslio-skillinventory-api-openapi.yml