SkillBridge Backend API (0.1.0)

Download OpenAPI specification:

License: Proprietary

OpenAPI source of truth for SkillBridge backend routes deployed via API Gateway.

Public

Public endpoints (no Cognito authorizer)

Health check

Returns API service health status.

Responses

Response samples

Content type
application/json
{
  • "status": "ok",
  • "timestamp": 1739509200,
  • "service": "skillbridge-backend"
}

Add user to waitlist

Adds an email to the waitlist or confirms existing enrollment.

Request Body schema: application/json
required
email
required
string <email>

Responses

Request samples

Content type
application/json
{
  • "email": "learner@example.com"
}

Response samples

Content type
application/json
{
  • "message": "Added to waitlist",
  • "status": "accepted"
}

Lab platform statistics

Responses

Response samples

Content type
application/json
{
  • "totalLabs": 0,
  • "activeLabs": 0,
  • "totalExecutions": 0,
  • "runningExecutions": 0
}

Labs

Lab catalog and instance lifecycle

List labs

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "count": 0
}

Create lab

Authorizations:
bearerAuth
Request Body schema: application/json
required
title
required
string
description
string
tokenCost
required
integer >= 0
difficulty
string
Enum: "beginner" "intermediate" "advanced"
estimatedDuration
integer >= 1
amiId
string
instanceType
string
autoStopDurationHours
integer >= 1

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "tokenCost": 0,
  • "difficulty": "beginner",
  • "estimatedDuration": 1,
  • "amiId": "string",
  • "instanceType": "string",
  • "autoStopDurationHours": 1
}

Response samples

Content type
application/json
{
  • "labId": "string",
  • "title": "string",
  • "description": "string",
  • "tokenCost": 0,
  • "difficulty": "beginner",
  • "estimatedDuration": 1,
  • "amiId": "string",
  • "instanceType": "string",
  • "autoStopDurationHours": 1,
  • "status": "string"
}

Get lab by id

Authorizations:
bearerAuth
path Parameters
labId
required
string

SkillBridge lab identifier

Responses

Response samples

Content type
application/json
{
  • "labId": "string",
  • "title": "string",
  • "description": "string",
  • "tokenCost": 0,
  • "difficulty": "beginner",
  • "estimatedDuration": 1,
  • "amiId": "string",
  • "instanceType": "string",
  • "autoStopDurationHours": 1,
  • "status": "string"
}

Update lab by id

Authorizations:
bearerAuth
path Parameters
labId
required
string

SkillBridge lab identifier

Request Body schema: application/json
required
title
required
string
description
string
tokenCost
required
integer >= 0
difficulty
string
Enum: "beginner" "intermediate" "advanced"
estimatedDuration
integer >= 1
amiId
string
instanceType
string
autoStopDurationHours
integer >= 1

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "tokenCost": 0,
  • "difficulty": "beginner",
  • "estimatedDuration": 1,
  • "amiId": "string",
  • "instanceType": "string",
  • "autoStopDurationHours": 1
}

Response samples

Content type
application/json
{
  • "labId": "string",
  • "title": "string",
  • "description": "string",
  • "tokenCost": 0,
  • "difficulty": "beginner",
  • "estimatedDuration": 1,
  • "amiId": "string",
  • "instanceType": "string",
  • "autoStopDurationHours": 1,
  • "status": "string"
}

Delete lab by id

Authorizations:
bearerAuth
path Parameters
labId
required
string

SkillBridge lab identifier

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string"
}

Start lab instance

Authorizations:
bearerAuth
Request Body schema: application/json
required
labId
required
string
userId
string

Responses

Request samples

Content type
application/json
{
  • "labId": "lab-linux-basics",
  • "userId": "user-123"
}

Response samples

Content type
application/json
{
  • "executionId": "exec-8f1a21",
  • "instanceId": "i-0aa11bb22cc33dd44",
  • "status": "starting",
  • "holdTransactionId": "tx-hold-1122"
}

Stop lab instance

Authorizations:
bearerAuth
Request Body schema: application/json
required
executionId
required
string
instanceId
string

Responses

Request samples

Content type
application/json
{
  • "executionId": "string",
  • "instanceId": "string"
}

Response samples

Content type
application/json
{
  • "executionId": "string",
  • "status": "string"
}

Get lab instance status

Authorizations:
bearerAuth
path Parameters
instanceId
required
string

EC2 instance identifier

Responses

Response samples

Content type
application/json
{
  • "instanceId": "string",
  • "status": "string",
  • "publicIpAddress": "string",
  • "startedAt": 0,
  • "autoStopAt": 0
}

Terminal

Terminal session management

Start terminal session

Authorizations:
bearerAuth
Request Body schema: application/json
required
executionId
required
string
instanceId
string

Responses

Request samples

Content type
application/json
{
  • "executionId": "string",
  • "instanceId": "string"
}

Response samples

Content type
application/json
{}

Terminate terminal session

Authorizations:
bearerAuth
Request Body schema: application/json
required
sessionId
required
string

Responses

Request samples

Content type
application/json
{
  • "sessionId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string"
}

Executions

Execution and port management

Get execution details

Authorizations:
bearerAuth
path Parameters
executionId
required
string

Lab execution identifier

Responses

Response samples

Content type
application/json
{
  • "executionId": "string",
  • "labId": "string",
  • "userId": "string",
  • "status": "string",
  • "createdAt": 0,
  • "updatedAt": 0,
  • "instanceId": "string",
  • "publicIpAddress": "string"
}

List executions by user

Authorizations:
bearerAuth
path Parameters
userId
required
string

SkillBridge user identifier

query Parameters
status
string
limit
integer [ 1 .. 100 ]

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "count": 0
}

List exposed execution ports

Authorizations:
bearerAuth
path Parameters
executionId
required
string

Lab execution identifier

Responses

Response samples

Content type
application/json
{
  • "executionId": "string",
  • "items": []
}

Expose execution port

Authorizations:
bearerAuth
path Parameters
executionId
required
string

Lab execution identifier

port
required
integer [ 1 .. 65535 ]

TCP port number

Responses

Response samples

Content type
application/json
{}

Close exposed execution port

Authorizations:
bearerAuth
path Parameters
executionId
required
string

Lab execution identifier

port
required
integer [ 1 .. 65535 ]

TCP port number

Responses

Response samples

Content type
application/json
{}

Wallet

Wallet and voucher operations

Get current user wallet

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "userId": "string",
  • "balance": 0,
  • "reserved": 0,
  • "available": 0,
  • "plan": "string"
}

Get wallet ledger

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "transactions": [
    ],
  • "count": 0,
  • "nextToken": "string"
}

Redeem voucher code

Authorizations:
bearerAuth
Request Body schema: application/json
required
code
required
string

Responses

Request samples

Content type
application/json
{
  • "code": "SB-2026-STARTER"
}

Response samples

Content type
application/json
{
  • "tokensAdded": 50,
  • "newBalance": 130,
  • "code": "SB-2026-STARTER",
  • "status": "redeemed"
}

List token packs

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "packs": [
    ],
  • "count": 0,
  • "total": 0
}

Mock token purchase

Authorizations:
bearerAuth
Request Body schema: application/json
required
packId
required
string

Responses

Request samples

Content type
application/json
{
  • "packId": "string"
}

Response samples

Content type
application/json
{
  • "packId": "string",
  • "tokensAdded": 0,
  • "newBalance": 0,
  • "transactionId": "string"
}

AdminTokens

Admin token, voucher, and packs management

Credit user tokens

Authorizations:
bearerAuth
Request Body schema: application/json
required
userId
required
string
amount
required
integer >= 1
reason
string

Responses

Request samples

Content type
application/json
{
  • "userId": "user-123",
  • "amount": 75,
  • "reason": "Promo support"
}

Response samples

Content type
application/json
{
  • "userId": "user-123",
  • "credited": 75,
  • "newBalance": 205,
  • "txId": "tx-credit-9911"
}

Generate voucher codes

Authorizations:
bearerAuth
Request Body schema: application/json
required
amount
required
integer >= 1
count
required
integer >= 1
description
string
expiresAt
integer <int64>

Responses

Request samples

Content type
application/json
{
  • "amount": 1,
  • "count": 1,
  • "description": "string",
  • "expiresAt": 0
}

Response samples

Content type
application/json
{
  • "batchId": "string",
  • "count": 0,
  • "codes": [
    ]
}

Create token pack

Authorizations:
bearerAuth
Request Body schema: application/json
required
packId
required
string
totalTokens
required
integer >= 1
priceMock
string
description
string
category
string
isActive
boolean
sortOrder
integer

Responses

Request samples

Content type
application/json
{
  • "packId": "string",
  • "totalTokens": 1,
  • "priceMock": "string",
  • "description": "string",
  • "category": "string",
  • "isActive": true,
  • "sortOrder": 0
}

Response samples

Content type
application/json
{
  • "packId": "string",
  • "totalTokens": 1,
  • "priceMock": "string",
  • "description": "string",
  • "category": "string",
  • "isActive": true,
  • "sortOrder": 0
}

List vouchers

Authorizations:
bearerAuth
query Parameters
status
string

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "count": 0
}

Get voucher details

Authorizations:
bearerAuth
path Parameters
code
required
string

Voucher code identifier

Responses

Response samples

Content type
application/json
{
  • "code": "string",
  • "tokenValue": 0,
  • "status": "string",
  • "createdAt": 0,
  • "expiresAt": 0,
  • "redeemedBy": "string",
  • "redeemedAt": 0,
  • "batchId": "string"
}

Delete voucher

Authorizations:
bearerAuth
path Parameters
code
required
string

Voucher code identifier

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string"
}

List admin token packs

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "packs": [
    ],
  • "count": 0,
  • "total": 0
}

Update token pack

Authorizations:
bearerAuth
path Parameters
packId
required
string

Token pack identifier

Request Body schema: application/json
required
totalTokens
integer >= 1
priceMock
string
description
string
category
string
isActive
boolean
sortOrder
integer

Responses

Request samples

Content type
application/json
{
  • "totalTokens": 1,
  • "priceMock": "string",
  • "description": "string",
  • "category": "string",
  • "isActive": true,
  • "sortOrder": 0
}

Response samples

Content type
application/json
{
  • "packId": "string",
  • "totalTokens": 1,
  • "priceMock": "string",
  • "description": "string",
  • "category": "string",
  • "isActive": true,
  • "sortOrder": 0
}

Delete token pack

Authorizations:
bearerAuth
path Parameters
packId
required
string

Token pack identifier

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string"
}

Get token system statistics

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "totalIssued": 0,
  • "totalRedeemed": 0,
  • "totalPurchased": 0,
  • "activeVouchers": 0,
  • "activePacks": 0
}

AdminUsers

Admin user and group operations

Search users by email

Authorizations:
bearerAuth
query Parameters
email
required
string <email>

User email for admin search

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "count": 0
}

List user groups

Authorizations:
bearerAuth
path Parameters
userId
required
string

SkillBridge user identifier

Responses

Response samples

Content type
application/json
{
  • "userId": "string",
  • "groups": [
    ]
}

Add user to group

Authorizations:
bearerAuth
path Parameters
userId
required
string

SkillBridge user identifier

Request Body schema: application/json
required
groupName
required
string

Responses

Request samples

Content type
application/json
{
  • "groupName": "admins"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string"
}

Remove user from group

Authorizations:
bearerAuth
path Parameters
userId
required
string

SkillBridge user identifier

groupName
required
string

Cognito group name

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string"
}

List admin-managed groups

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "count": 0
}

Get user wallet by user id (admin)

Authorizations:
bearerAuth
path Parameters
userId
required
string

SkillBridge user identifier

Responses

Response samples

Content type
application/json
{
  • "userId": "string",
  • "balance": 0,
  • "reserved": 0,
  • "available": 0,
  • "plan": "string",
  • "requestedByAdmin": true
}