master-zapier-plan-draft/research/zapier/scratch/our-api/openapi.yaml
George Lambert b4150c8250 Milestone 0: import zappier billing, Verae middleware, and Zapier research
Compose-ready workspace: packages/zappier (rate card, portal, Stripe),
packages/verae-zapier-middleware (timestamp + NATS), packages/verae-zapier
(CLI app), vendor/zapier-platform, and research/zapier vendor corpus.

Gate 0 structure checks pass. Product code and research are not yet wired.
2026-09-09 02:37:36 -04:00

1132 lines
No EOL
33 KiB
YAML

openapi: 3.0.0
info:
title: Timestamping Service API
description: API for creating and verifying timestamps on a blockchain
version: 1.0.0
contact:
name: Timestamping Service Team
email: support@timestamping-service.example.com
url: https://timestamping-service.example.com
servers:
- url: /
description: Default server
tags:
- name: API
description: API operations for timestamping and status
- name: Admin
description: Administrative operations
- name: Auth
description: Authentication and user management operations
paths:
/api/timestamp:
post:
security:
- BearerAuth: []
tags:
- API
summary: Create a new timestamp
description: Submit data to be timestamped on the blockchain
operationId: createTimestamp
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TimestampRequest'
responses:
'202':
description: Accepted - Timestamp job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TimestampResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/batch/timestamp:
post:
security:
- BearerAuth: []
tags:
- API
summary: Create multiple timestamps in a batch
description: Submit multiple data items to be timestamped on the blockchain
operationId: createBatchTimestamp
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchTimestampRequest'
responses:
'202':
description: Accepted - Batch timestamp jobs submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BatchTimestampResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/verify:
post:
security:
- BearerAuth: []
tags:
- API
summary: Verify a timestamp certificate
description: Verify the authenticity of a timestamp certificate
operationId: verifyTimestamp
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VerifyRequest'
responses:
'200':
description: OK - Verification result
content:
application/json:
schema:
$ref: '#/components/schemas/VerifyResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/batch/verify:
post:
security:
- BearerAuth: []
tags:
- API
summary: Verify multiple timestamp certificates in a batch
description: Verify the authenticity of multiple timestamp certificates
operationId: verifyBatchTimestamp
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- certificates
properties:
certificates:
type: array
description: Array of timestamp certificates to verify
items:
type: string
example:
certificates:
- "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
- "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
responses:
'200':
description: OK - Batch verification results
content:
application/json:
schema:
$ref: '#/components/schemas/BatchVerifyResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/status/{jobId}:
get:
security:
- BearerAuth: []
tags:
- API
summary: Get the status of a timestamp job
description: Retrieve the current status of a timestamp job by its ID
operationId: getJobStatus
parameters:
- name: jobId
in: path
description: ID of the job to get status for
required: true
schema:
type: string
responses:
'200':
description: OK - Job status retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'400':
description: Bad Request - Missing job ID
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found - Job not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/verify/{jobId}:
get:
security:
- BearerAuth: []
tags:
- API
summary: Get verification details for a timestamp job
description: Retrieve comprehensive block details and verification information for a specific timestamp job
operationId: getJobVerification
parameters:
- name: jobId
in: path
description: ID of the job to get verification details for
required: true
schema:
type: string
responses:
'200':
description: OK - Job verification details retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'400':
description: Bad Request - Missing job ID
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found - Job not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/batch/status:
post:
security:
- BearerAuth: []
tags:
- API
summary: Get the status of multiple timestamp jobs
description: Retrieve the current status of multiple timestamp jobs by their IDs
operationId: getBatchJobStatus
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchStatusRequest'
responses:
'200':
description: OK - Batch job statuses retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BatchStatusResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'504':
description: Gateway Timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/admin/dashboard:
get:
security:
- BearerAuth: []
tags:
- Admin
summary: Admin dashboard
description: HTML dashboard for administrators
operationId: getAdminDashboard
responses:
'200':
description: OK - Admin dashboard HTML
content:
text/html:
schema:
type: string
'405':
description: Method Not Allowed
/admin/metrics:
get:
security:
- BearerAuth: []
tags:
- Admin
summary: Get system metrics
description: Retrieve system metrics including blockchain height and queue length
operationId: getMetrics
responses:
'200':
description: OK - System metrics
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsResponse'
'405':
description: Method Not Allowed
/admin/blockchain:
get:
security:
- BearerAuth: []
tags:
- Admin
summary: Get blockchain information
description: Retrieve information about the blockchain
operationId: getBlockchainInfo
responses:
'200':
description: OK - Blockchain information
content:
application/json:
schema:
$ref: '#/components/schemas/BlockchainInfoResponse'
'405':
description: Method Not Allowed
/admin/queue:
get:
security:
- BearerAuth: []
tags:
- Admin
summary: Get queue information
description: Retrieve information about the job queue
operationId: getQueueInfo
responses:
'200':
description: OK - Queue information
content:
application/json:
schema:
$ref: '#/components/schemas/QueueInfoResponse'
'405':
description: Method Not Allowed
/admin/timestamps:
get:
security:
- BearerAuth: []
tags:
- Admin
summary: Get recent timestamps
description: Retrieve the most recent timestamps (up to 10)
operationId: getRecentTimestamps
responses:
'200':
description: OK - Recent timestamps
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BlockInfo'
'405':
description: Method Not Allowed
/admin/hash:
get:
security:
- BearerAuth: []
tags:
- Admin
summary: Get block by hash
description: Retrieve a block by its hash
operationId: getBlockByHash
parameters:
- name: hash
in: query
description: Hash of the block to retrieve
required: true
schema:
type: string
- name: format
in: query
description: Format of the hash (base64 or raw)
required: false
schema:
type: string
enum: [base64, raw]
default: base64
responses:
'200':
description: OK - Block information
content:
application/json:
schema:
$ref: '#/components/schemas/BlockInfo'
'400':
description: Bad Request - Missing or invalid hash
'404':
description: Not Found - Block not found
'405':
description: Method Not Allowed
/auth/login:
post:
tags:
- Auth
summary: Login to the system
description: Authenticate with username and password to receive a JWT token
operationId: login
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LoginRequest'
responses:
'200':
description: OK - Login successful
content:
application/json:
schema:
$ref: '#/components/schemas/LoginResponse'
'401':
description: Unauthorized - Invalid credentials
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/auth/validate:
get:
tags:
- Auth
summary: Validate a token
description: Validate a JWT token and get user information
operationId: validateToken
parameters:
- name: Authorization
in: header
description: |
JWT token with Bearer prefix. Example:
`Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAiLCJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNjcyNjYxNjAwLCJpYXQiOjE2NzI1NzUyMDAsIm5iZiI6MTY3MjU3NTIwMCwiaXNzIjoidGltZXN0YW1waW5nLXNlcnZpY2UifQ.8yF71oHxDCQ5-OW2c-KR7q-PJxbaHvmDGmSlOFREIQY`
required: false
schema:
type: string
example: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAiLCJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNjcyNjYxNjAwLCJpYXQiOjE2NzI1NzUyMDAsIm5iZiI6MTY3MjU3NTIwMCwiaXNzIjoidGltZXN0YW1waW5nLXNlcnZpY2UifQ.8yF71oHxDCQ5-OW2c-KR7q-PJxbaHvmDGmSlOFREIQY"
- name: token
in: query
description: |
JWT token (alternative to Authorization header). Example:
`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAiLCJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNjcyNjYxNjAwLCJpYXQiOjE2NzI1NzUyMDAsIm5iZiI6MTY3MjU3NTIwMCwiaXNzIjoidGltZXN0YW1waW5nLXNlcnZpY2UifQ.8yF71oHxDCQ5-OW2c-KR7q-PJxbaHvmDGmSlOFREIQY`
required: false
schema:
type: string
example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAiLCJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNjcyNjYxNjAwLCJpYXQiOjE2NzI1NzUyMDAsIm5iZiI6MTY3MjU3NTIwMCwiaXNzIjoidGltZXN0YW1waW5nLXNlcnZpY2UifQ.8yF71oHxDCQ5-OW2c-KR7q-PJxbaHvmDGmSlOFREIQY"
responses:
'200':
description: OK - Token is valid
content:
application/json:
schema:
$ref: '#/components/schemas/TokenValidationResponse'
'401':
description: Unauthorized - Invalid or expired token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/auth/users:
get:
tags:
- Auth
summary: List all users
description: Get a list of all users (admin only)
operationId: listUsers
security:
- BearerAuth: []
responses:
'200':
description: OK - List of users
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/UserResponse'
'401':
description: Unauthorized - Invalid or missing token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden - Insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
tags:
- Auth
summary: Create a new user
description: Create a new user (admin only)
operationId: createUser
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
responses:
'201':
description: Created - User created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid or missing token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden - Insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict - User already exists
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/auth/users/{username}:
get:
tags:
- Auth
summary: Get a user
description: Get a specific user by username (admin only)
operationId: getUser
security:
- BearerAuth: []
parameters:
- name: username
in: path
description: Username of the user to get
required: true
schema:
type: string
responses:
'200':
description: OK - User details
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'401':
description: Unauthorized - Invalid or missing token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden - Insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found - User not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
tags:
- Auth
summary: Update a user
description: Update a specific user by username (admin only)
operationId: updateUser
security:
- BearerAuth: []
parameters:
- name: username
in: path
description: Username of the user to update
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserRequest'
responses:
'200':
description: OK - User updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
'400':
description: Bad Request - Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid or missing token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden - Insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found - User not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
tags:
- Auth
summary: Delete a user
description: Delete a specific user by username (admin only)
operationId: deleteUser
security:
- BearerAuth: []
parameters:
- name: username
in: path
description: Username of the user to delete
required: true
schema:
type: string
responses:
'204':
description: No Content - User deleted successfully
'401':
description: Unauthorized - Invalid or missing token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden - Insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found - User not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: |
JWT token obtained from the /auth/login endpoint.
To use this token:
1. First call the /auth/login endpoint with your username and password
2. Copy the token value from the response
3. Click the "Authorize" button at the top of this page
4. In the authorization popup, paste the token value (without "Bearer " prefix)
5. Click "Authorize" to apply the token to all secured endpoints
The token must be included in the Authorization header as:
`Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAiLCJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNjcyNjYxNjAwLCJpYXQiOjE2NzI1NzUyMDAsIm5iZiI6MTY3MjU3NTIwMCwiaXNzIjoidGltZXN0YW1waW5nLXNlcnZpY2UifQ.8yF71oHxDCQ5-OW2c-KR7q-PJxbaHvmDGmSlOFREIQY`
schemas:
TimestampRequest:
type: object
required:
- data
properties:
data:
type: string
description: Data to be timestamped
hashAlg:
type: string
description: Hash algorithm to use (defaults to SHA256 if not provided)
example:
data: "Hello, world!"
hashAlg: "SHA256"
TimestampResponse:
type: object
properties:
jobId:
type: string
description: ID of the submitted timestamp job
example:
jobId: "550e8400-e29b-41d4-a716-446655440000"
BatchTimestampRequest:
type: object
required:
- items
properties:
items:
type: array
description: Array of timestamp requests
items:
$ref: '#/components/schemas/TimestampRequest'
example:
items:
- data: "Hello, world!"
hashAlg: "SHA256"
- data: "Another message"
hashAlg: "SHA256"
BatchTimestampResponse:
type: object
properties:
jobIds:
type: array
description: Array of job IDs for the submitted timestamp jobs
items:
type: string
example:
jobIds:
- "550e8400-e29b-41d4-a716-446655440000"
- "650e8400-e29b-41d4-a716-446655440001"
VerifyRequest:
type: object
required:
- certificate
properties:
certificate:
type: string
description: Timestamp certificate to verify
example:
certificate: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
VerifyResponse:
type: object
properties:
valid:
type: boolean
description: Whether the certificate is valid
timestamp:
type: string
format: date-time
description: Timestamp when the data was recorded (only present if valid)
blockIndex:
type: integer
format: uint64
description: Index of the block containing the timestamp (only present if valid)
example:
valid: true
timestamp: "2023-01-01T12:00:00Z"
blockIndex: 42
BatchVerifyResponse:
type: object
properties:
results:
type: array
description: Array of verification results
items:
$ref: '#/components/schemas/VerifyResponse'
example:
results:
- valid: true
timestamp: "2023-01-01T12:00:00Z"
blockIndex: 42
- valid: false
BatchStatusRequest:
type: object
required:
- jobIds
properties:
jobIds:
type: array
description: Array of job IDs to get status for
items:
type: string
example:
jobIds:
- "550e8400-e29b-41d4-a716-446655440000"
- "650e8400-e29b-41d4-a716-446655440001"
BatchStatusResponse:
type: object
properties:
results:
type: object
description: Map of job IDs to status responses
additionalProperties:
$ref: '#/components/schemas/StatusResponse'
example:
results:
"550e8400-e29b-41d4-a716-446655440000":
id: "550e8400-e29b-41d4-a716-446655440000"
status: "completed"
result: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
completedAt: "2023-01-01T12:05:00Z"
"650e8400-e29b-41d4-a716-446655440001":
id: "650e8400-e29b-41d4-a716-446655440001"
status: "pending"
StatusResponse:
type: object
properties:
id:
type: string
description: Job ID
status:
type: string
description: Job status (pending, completed, failed)
error:
type: string
description: Error message (only present if status is failed)
result:
type: string
description: Job result (only present if status is completed)
completedAt:
type: string
format: date-time
description: Timestamp when the job was completed (only present if status is completed or failed)
metadata:
type: object
description: Additional metadata about the job
example:
id: "550e8400-e29b-41d4-a716-446655440000"
status: "completed"
result: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
completedAt: "2023-01-01T12:05:00Z"
metadata:
blockIndex: 42
timestamp: "2023-01-01T12:00:00Z"
certificate: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
block:
index: 42
timestamp: "2023-01-01T12:00:00Z"
hash: "QmFzZTY0IGVuY29kZWQgaGFzaA=="
previousHash: "UHJldmlvdXMgYmxvY2sgaGFzaA=="
hashAlgorithm: "SHA256"
transactionCount: 1
transactions:
- id: "block-42"
timestamp: "2023-01-01T12:00:00Z"
type: "block"
dataHash: "SGFzaCBvZiB0aGUgZGF0YQ=="
chain:
height: 1024
lastBlockTime: "2023-01-01T12:05:00Z"
ErrorResponse:
type: object
properties:
error:
type: string
description: Error message
code:
type: string
description: Error code
example:
error: "Invalid input data"
code: "VALIDATION_ERROR"
MetricsResponse:
type: object
properties:
blockchainHeight:
type: integer
format: uint64
description: Current height of the blockchain
queueLength:
type: integer
description: Current length of the job queue
example:
blockchainHeight: 1024
queueLength: 5
BlockchainInfoResponse:
type: object
properties:
height:
type: integer
format: uint64
description: Current height of the blockchain
example:
height: 1024
QueueInfoResponse:
type: object
properties:
length:
type: integer
description: Current length of the job queue
example:
length: 5
BlockInfo:
type: object
properties:
index:
type: integer
format: uint64
description: Block index
timestamp:
type: string
description: Block timestamp
data:
type: string
format: byte
description: Block data
hash:
type: string
format: byte
description: Block hash
example:
index: 42
timestamp: "2023-01-01T12:00:00Z"
data: "SGVsbG8sIHdvcmxkIQ=="
hash: "QmFzZTY0IGVuY29kZWQgaGFzaA=="
LoginRequest:
type: object
required:
- username
- password
properties:
username:
type: string
description: Username for authentication
password:
type: string
description: Password for authentication
format: password
example:
username: "admin"
password: "admin123"
LoginResponse:
type: object
properties:
token:
type: string
description: JWT token for authentication
expiresAt:
type: string
format: date-time
description: Token expiration time
user:
type: object
properties:
id:
type: string
description: User ID
username:
type: string
description: Username
role:
type: string
description: User role (admin, user, etc.)
example:
token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAiLCJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNjcyNjYxNjAwLCJpYXQiOjE2NzI1NzUyMDAsIm5iZiI6MTY3MjU3NTIwMCwiaXNzIjoidGltZXN0YW1waW5nLXNlcnZpY2UifQ.8yF71oHxDCQ5-OW2c-KR7q-PJxbaHvmDGmSlOFREIQY"
expiresAt: "2023-01-02T12:00:00Z"
user:
id: "550e8400-e29b-41d4-a716-446655440000"
username: "admin"
role: "admin"
TokenValidationResponse:
type: object
properties:
valid:
type: boolean
description: Whether the token is valid
userId:
type: string
description: User ID (only present if valid)
username:
type: string
description: Username (only present if valid)
role:
type: string
description: User role (only present if valid)
expiresAt:
type: string
format: date-time
description: Token expiration time (only present if valid)
example:
valid: true
userId: "550e8400-e29b-41d4-a716-446655440000"
username: "admin"
role: "admin"
expiresAt: "2023-01-02T12:00:00Z"
UserResponse:
type: object
properties:
id:
type: string
description: User ID
username:
type: string
description: Username
role:
type: string
description: User role (admin, user, etc.)
example:
id: "550e8400-e29b-41d4-a716-446655440000"
username: "admin"
role: "admin"
CreateUserRequest:
type: object
required:
- username
- password
- role
properties:
username:
type: string
description: Username for the new user
password:
type: string
description: Password for the new user
format: password
role:
type: string
description: Role for the new user (admin, user, etc.)
example:
username: "newuser"
password: "password123"
role: "user"
UpdateUserRequest:
type: object
properties:
password:
type: string
description: New password (optional)
format: password
role:
type: string
description: New role (optional)
example:
password: "newpassword123"
role: "admin"