ObjectStackObjectStack

Documentation

Documentation protocol schemas

API Documentation & Testing Interface Protocol

Provides schemas for generating interactive API documentation and testing interfaces similar to Swagger UI, Postman, etc.

Features:

  • OpenAPI/Swagger specification generation
  • Interactive API testing playground
  • API versioning and changelog
  • Code generation templates
  • Mock server configuration

Architecture Alignment:

  • Swagger UI: Interactive API documentation
  • Postman: API testing collections
  • Redoc: Documentation rendering

@example Documentation Config

const docConfig: ApiDocumentationConfig = {
  enabled: true,
  title: 'ObjectStack API',
  version: '1.0.0',
  servers: [{ url: 'https://api.example.com', description: 'Production' }],
  ui: {
    type: 'swagger-ui',
    theme: 'light',
    enableTryItOut: true
  }
}

Source: packages/spec/src/api/documentation.zod.ts

TypeScript Usage

import { ApiChangelogEntrySchema, ApiDocumentationConfigSchema, ApiTestCollectionSchema, ApiTestRequestSchema, ApiTestingUiConfigSchema, ApiTestingUiType, CodeGenerationTemplateSchema, GeneratedApiDocumentationSchema, OpenApiSecuritySchemeSchema, OpenApiServerSchema, OpenApiSpecSchema } from '@objectstack/spec/api';
import type { ApiChangelogEntry, ApiDocumentationConfig, ApiTestCollection, ApiTestRequest, ApiTestingUiConfig, ApiTestingUiType, CodeGenerationTemplate, GeneratedApiDocumentation, OpenApiSecurityScheme, OpenApiServer, OpenApiSpec } from '@objectstack/spec/api';

// Validate data
const result = ApiChangelogEntrySchema.parse(data);

ApiChangelogEntry

Properties

PropertyTypeRequiredDescription
versionstringAPI version
datestringRelease date
changes{ added: string[]; changed: string[]; deprecated: string[]; removed: string[]; … }Version changes
migrationGuidestringoptionalMigration guide URL or text

Nested Shape: ApiChangelogEntry.changes

PropertyTypeRequiredDescription
addedstring[]optional (default: [])New features
changedstring[]optional (default: [])Changes
deprecatedstring[]optional (default: [])Deprecations
removedstring[]optional (default: [])Removed features
fixedstring[]optional (default: [])Bug fixes
securitystring[]optional (default: [])Security fixes

ApiDocumentationConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)Enable API documentation
titlestringoptional (default: "API Documentation")Documentation title
versionstringAPI version
descriptionstringoptionalAPI description
servers{ url: string; description?: string; variables?: Record<string, object> }[]optional (default: [])API server URLs
ui{ type: Enum<'swagger-ui' | 'redoc' | 'rapidoc' | 'stoplight' | 'scalar' | 'graphiql' | 'postman' | 'custom'>; path: string; theme: Enum<'light' | 'dark' | 'auto'>; enableTryItOut: boolean; … }optionalTesting UI configuration
generateOpenApibooleanoptional (default: true)Generate OpenAPI 3.0 specification
generateTestCollectionsbooleanoptional (default: true)Generate API test collections
testCollections{ name: string; description?: string; variables: Record<string, any>; requests: object[]; … }[]optional (default: [])Predefined test collections
changelog{ version: string; date: string; changes: object; migrationGuide?: string }[]optional (default: [])API version changelog
codeTemplates{ language: string; name: string; template: string; variables?: string[] }[]optional (default: [])Code generation templates
termsOfServicestringoptionalTerms of service URL
contact{ name?: string; url?: string; email?: string }optionalContact information
license{ name: string; url?: string }optionalAPI license
externalDocs{ description?: string; url: string }optionalExternal documentation link
securitySchemesRecord<string, { type: Enum<'apiKey' | 'http' | 'oauth2' | 'openIdConnect'>; scheme?: string; bearerFormat?: string; name?: string; … }>optionalSecurity scheme definitions
tags{ name: string; description?: string; externalDocs?: object }[]optionalGlobal tag definitions

Nested Shape: ApiDocumentationConfig.servers[number]

PropertyTypeRequiredDescription
urlstringServer base URL
descriptionstringoptionalServer description
variablesRecord<string, { default: string; description?: string; enum?: string[] }>optionalURL template variables

Nested Shape: ApiDocumentationConfig.ui

PropertyTypeRequiredDescription
typeEnum<'swagger-ui' | 'redoc' | 'rapidoc' | 'stoplight' | 'scalar' | 'graphiql' | 'postman' | 'custom'>Testing UI implementation
pathstringoptional (default: "/api-docs")URL path for documentation UI
themeEnum<'light' | 'dark' | 'auto'>optional (default: "light")UI color theme
enableTryItOutbooleanoptional (default: true)Enable interactive API testing
enableFilterbooleanoptional (default: true)Enable endpoint filtering
enableCorsbooleanoptional (default: true)Enable CORS for browser testing
defaultModelsExpandDepthintegeroptional (default: 1)Default expand depth for schemas (-1 = fully expand)
displayRequestDurationbooleanoptional (default: true)Show request duration
syntaxHighlightingbooleanoptional (default: true)Enable syntax highlighting
customCssUrlstringoptionalCustom CSS stylesheet URL
customJsUrlstringoptionalCustom JavaScript URL
layout{ showExtensions: boolean; showCommonExtensions: boolean; deepLinking: boolean; displayOperationId: boolean; … }optionalLayout configuration

Nested Shape: ApiDocumentationConfig.testCollections[number]

PropertyTypeRequiredDescription
namestringCollection name
descriptionstringoptionalCollection description
variablesRecord<string, any>optional (default: {})Shared variables
requests{ name: string; description?: string; method: Enum<'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'>; url: string; … }[]Test requests in this collection
folders{ name: string; description?: string; requests: object[] }[]optionalRequest folders for organization

Nested Shape: ApiDocumentationConfig.changelog[number]

PropertyTypeRequiredDescription
versionstringAPI version
datestringRelease date
changes{ added: string[]; changed: string[]; deprecated: string[]; removed: string[]; … }Version changes
migrationGuidestringoptionalMigration guide URL or text

Nested Shape: ApiDocumentationConfig.codeTemplates[number]

PropertyTypeRequiredDescription
languagestringTarget language/framework (e.g., typescript, python, curl)
namestringTemplate name
templatestringCode template with placeholders
variablesstring[]optionalRequired template variables

Nested Shape: ApiDocumentationConfig.securitySchemes[string]

PropertyTypeRequiredDescription
typeEnum<'apiKey' | 'http' | 'oauth2' | 'openIdConnect'>Security type
schemestringoptionalHTTP auth scheme (bearer, basic, etc.)
bearerFormatstringoptionalBearer token format (e.g., JWT)
namestringoptionalAPI key parameter name
inEnum<'header' | 'query' | 'cookie'>optionalAPI key location
flows{ implicit?: any; password?: any; clientCredentials?: any; authorizationCode?: any }optionalOAuth2 flows
openIdConnectUrlstringoptionalOpenID Connect discovery URL
descriptionstringoptionalSecurity scheme description

ApiTestCollection

Properties

PropertyTypeRequiredDescription
namestringCollection name
descriptionstringoptionalCollection description
variablesRecord<string, any>optional (default: {})Shared variables
requests{ name: string; description?: string; method: Enum<'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'>; url: string; … }[]Test requests in this collection
folders{ name: string; description?: string; requests: object[] }[]optionalRequest folders for organization

Nested Shape: ApiTestCollection.requests[number]

PropertyTypeRequiredDescription
namestringTest request name
descriptionstringoptionalRequest description
methodEnum<'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'>HTTP method
urlstringRequest URL (can include variables)
headersRecord<string, string>optional (default: {})Request headers
queryParamsRecord<string, string | number | boolean>optional (default: {})Query parameters
bodyanyoptionalRequest body
variablesRecord<string, any>optional (default: {})Template variables
expectedResponse{ statusCode: integer; body?: any }optionalExpected response for validation

ApiTestRequest

Properties

PropertyTypeRequiredDescription
namestringTest request name
descriptionstringoptionalRequest description
methodEnum<'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'>HTTP method
urlstringRequest URL (can include variables)
headersRecord<string, string>optional (default: {})Request headers
queryParamsRecord<string, string | number | boolean>optional (default: {})Query parameters
bodyanyoptionalRequest body
variablesRecord<string, any>optional (default: {})Template variables
expectedResponse{ statusCode: integer; body?: any }optionalExpected response for validation

ApiTestingUiConfig

Properties

PropertyTypeRequiredDescription
typeEnum<'swagger-ui' | 'redoc' | 'rapidoc' | 'stoplight' | 'scalar' | 'graphiql' | 'postman' | 'custom'>Testing UI implementation
pathstringoptional (default: "/api-docs")URL path for documentation UI
themeEnum<'light' | 'dark' | 'auto'>optional (default: "light")UI color theme
enableTryItOutbooleanoptional (default: true)Enable interactive API testing
enableFilterbooleanoptional (default: true)Enable endpoint filtering
enableCorsbooleanoptional (default: true)Enable CORS for browser testing
defaultModelsExpandDepthintegeroptional (default: 1)Default expand depth for schemas (-1 = fully expand)
displayRequestDurationbooleanoptional (default: true)Show request duration
syntaxHighlightingbooleanoptional (default: true)Enable syntax highlighting
customCssUrlstringoptionalCustom CSS stylesheet URL
customJsUrlstringoptionalCustom JavaScript URL
layout{ showExtensions: boolean; showCommonExtensions: boolean; deepLinking: boolean; displayOperationId: boolean; … }optionalLayout configuration

Nested Shape: ApiTestingUiConfig.layout

PropertyTypeRequiredDescription
showExtensionsbooleanoptional (default: false)Show vendor extensions
showCommonExtensionsbooleanoptional (default: false)Show common extensions
deepLinkingbooleanoptional (default: true)Enable deep linking
displayOperationIdbooleanoptional (default: false)Display operation IDs
defaultModelRenderingEnum<'example' | 'model'>optional (default: "example")Default model rendering mode
defaultModelsExpandDepthintegeroptional (default: 1)Models expand depth
defaultModelExpandDepthintegeroptional (default: 1)Single model expand depth
docExpansionEnum<'list' | 'full' | 'none'>optional (default: "list")Documentation expansion mode

ApiTestingUiType

Allowed Values

  • swagger-ui
  • redoc
  • rapidoc
  • stoplight
  • scalar
  • graphiql
  • postman
  • custom

CodeGenerationTemplate

Properties

PropertyTypeRequiredDescription
languagestringTarget language/framework (e.g., typescript, python, curl)
namestringTemplate name
templatestringCode template with placeholders
variablesstring[]optionalRequired template variables

GeneratedApiDocumentation

Properties

PropertyTypeRequiredDescription
openApiSpec{ openapi: string; info: object; servers: object[]; paths: Record<string, any>; … }optionalGenerated OpenAPI specification
testCollections{ name: string; description?: string; variables: Record<string, any>; requests: object[]; … }[]optionalGenerated test collections
markdownstringoptionalGenerated markdown documentation
htmlstringoptionalGenerated HTML documentation
generatedAtstringGeneration timestamp
sourceApisstring[]Source API IDs used for generation

Nested Shape: GeneratedApiDocumentation.openApiSpec

PropertyTypeRequiredDescription
openapistringoptional (default: "3.0.0")OpenAPI specification version
info{ title: string; version: string; description?: string; termsOfService?: string; … }API metadata
servers{ url: string; description?: string; variables?: Record<string, object> }[]optional (default: [])API servers
pathsRecord<string, any>API paths and operations
components{ schemas?: Record<string, any>; responses?: Record<string, any>; parameters?: Record<string, any>; examples?: Record<string, any>; … }optionalReusable components
securityRecord<string, string[]>[]optionalGlobal security requirements
tags{ name: string; description?: string; externalDocs?: object }[]optionalTag definitions
externalDocs{ description?: string; url: string }optionalExternal documentation

Nested Shape: GeneratedApiDocumentation.testCollections[number]

PropertyTypeRequiredDescription
namestringCollection name
descriptionstringoptionalCollection description
variablesRecord<string, any>optional (default: {})Shared variables
requests{ name: string; description?: string; method: Enum<'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'>; url: string; … }[]Test requests in this collection
folders{ name: string; description?: string; requests: object[] }[]optionalRequest folders for organization

OpenApiSecurityScheme

Properties

PropertyTypeRequiredDescription
typeEnum<'apiKey' | 'http' | 'oauth2' | 'openIdConnect'>Security type
schemestringoptionalHTTP auth scheme (bearer, basic, etc.)
bearerFormatstringoptionalBearer token format (e.g., JWT)
namestringoptionalAPI key parameter name
inEnum<'header' | 'query' | 'cookie'>optionalAPI key location
flows{ implicit?: any; password?: any; clientCredentials?: any; authorizationCode?: any }optionalOAuth2 flows
openIdConnectUrlstringoptionalOpenID Connect discovery URL
descriptionstringoptionalSecurity scheme description

OpenApiServer

Properties

PropertyTypeRequiredDescription
urlstringServer base URL
descriptionstringoptionalServer description
variablesRecord<string, { default: string; description?: string; enum?: string[] }>optionalURL template variables

OpenApiSpec

Properties

PropertyTypeRequiredDescription
openapistringoptional (default: "3.0.0")OpenAPI specification version
info{ title: string; version: string; description?: string; termsOfService?: string; … }API metadata
servers{ url: string; description?: string; variables?: Record<string, object> }[]optional (default: [])API servers
pathsRecord<string, any>API paths and operations
components{ schemas?: Record<string, any>; responses?: Record<string, any>; parameters?: Record<string, any>; examples?: Record<string, any>; … }optionalReusable components
securityRecord<string, string[]>[]optionalGlobal security requirements
tags{ name: string; description?: string; externalDocs?: object }[]optionalTag definitions
externalDocs{ description?: string; url: string }optionalExternal documentation

Nested Shape: OpenApiSpec.info

PropertyTypeRequiredDescription
titlestringAPI title
versionstringAPI version
descriptionstringoptionalAPI description
termsOfServicestringoptionalTerms of service URL
contact{ name?: string; url?: string; email?: string }optional
license{ name: string; url?: string }optional

Nested Shape: OpenApiSpec.servers[number]

PropertyTypeRequiredDescription
urlstringServer base URL
descriptionstringoptionalServer description
variablesRecord<string, { default: string; description?: string; enum?: string[] }>optionalURL template variables

On this page