API Reference
1.0.0REST reference generated from ops/forge-api/openapi.yaml.
Overview
Public API for accessing App Factory Forge configuration data.
This API provides read-only access to organization and application configuration, including app metadata, product pricing, and store configurations.
## Authentication All requests require an API key provided in the `X-API-Key` header.
## Rate Limiting Rate limits are enforced per API key. Check response headers for current limits: - `X-RateLimit-Limit`: Maximum requests per window - `X-RateLimit-Remaining`: Requests remaining in current window - `X-RateLimit-Reset`: Unix timestamp when the window resets
Servers
https://api.app-factory.com/v1
Production server
https://staging-api.app-factory.com/v1
Staging server
http://localhost:3000/v1
Local development server
Apps
Application configuration and metadata
/apps/{appId}/config
Get app configuration
Retrieve complete configuration for a specific application
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| Ref: #/components/parameters/AppId | |||
Responses
Successfully retrieved app configuration
Headers
{
"X-RateLimit-Limit": {
"$ref": "#/components/headers/X-RateLimit-Limit"
},
"X-RateLimit-Remaining": {
"$ref": "#/components/headers/X-RateLimit-Remaining"
},
"X-RateLimit-Reset": {
"$ref": "#/components/headers/X-RateLimit-Reset"
}
}Content-Type: application/json
{
"$ref": "#/components/schemas/AppConfig"
}#/components/responses/Unauthorized
#/components/responses/Forbidden
#/components/responses/NotFound
#/components/responses/RateLimitExceeded
#/components/responses/InternalServerError
Health
Service health and monitoring
/health
Health check
Basic health check endpoint
Responses
Service is healthy
Content-Type: application/json
{
"$ref": "#/components/schemas/HealthStatus"
}Service is unhealthy
Content-Type: application/json
{
"$ref": "#/components/schemas/HealthStatus"
}/health/ready
Readiness check
Check if service is ready to accept traffic (includes database connectivity)
Responses
Service is ready
Content-Type: application/json
{
"$ref": "#/components/schemas/HealthStatus"
}Service is not ready
Content-Type: application/json
{
"$ref": "#/components/schemas/HealthStatus"
}/metrics
Prometheus metrics
Get service metrics in Prometheus format
Responses
Metrics data
Content-Type: text/plain
{
"type": "string",
"example": "# HELP api_requests_total Total number of API requests\n# TYPE api_requests_total counter\napi_requests_total{method=\"GET\",endpoint=\"/apps/:id/config\",status=\"200\"} 1234\n"
}Organizations
Organization-level operations
/orgs/{orgId}/apps
List organization apps
Get a paginated list of all apps belonging to an organization
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| Ref: #/components/parameters/OrgId | |||
| Ref: #/components/parameters/Page | |||
| Ref: #/components/parameters/PerPage | |||
Responses
Successfully retrieved apps
Headers
{
"X-RateLimit-Limit": {
"$ref": "#/components/headers/X-RateLimit-Limit"
},
"X-RateLimit-Remaining": {
"$ref": "#/components/headers/X-RateLimit-Remaining"
},
"X-RateLimit-Reset": {
"$ref": "#/components/headers/X-RateLimit-Reset"
}
}Content-Type: application/json
{
"type": "object",
"properties": {
"apps": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AppSummary"
}
},
"pagination": {
"$ref": "#/components/schemas/Pagination"
}
}
}#/components/responses/Unauthorized
#/components/responses/Forbidden
#/components/responses/NotFound
#/components/responses/RateLimitExceeded
#/components/responses/InternalServerError
Products
Pricing and subscription products
/apps/{appId}/products
Get app products
Retrieve pricing and subscription products for an application
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| Ref: #/components/parameters/AppId | |||
Responses
Successfully retrieved products
Headers
{
"X-RateLimit-Limit": {
"$ref": "#/components/headers/X-RateLimit-Limit"
},
"X-RateLimit-Remaining": {
"$ref": "#/components/headers/X-RateLimit-Remaining"
},
"X-RateLimit-Reset": {
"$ref": "#/components/headers/X-RateLimit-Reset"
}
}Content-Type: application/json
{
"type": "object",
"properties": {
"products": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Product"
}
}
}
}#/components/responses/Unauthorized
#/components/responses/Forbidden
#/components/responses/NotFound
#/components/responses/RateLimitExceeded
#/components/responses/InternalServerError
Store
App store configurations
/apps/{appId}/store
Get app store configuration
Retrieve App Store and Google Play store configurations
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| Ref: #/components/parameters/AppId | |||
Responses
Successfully retrieved store configuration
Headers
{
"X-RateLimit-Limit": {
"$ref": "#/components/headers/X-RateLimit-Limit"
},
"X-RateLimit-Remaining": {
"$ref": "#/components/headers/X-RateLimit-Remaining"
},
"X-RateLimit-Reset": {
"$ref": "#/components/headers/X-RateLimit-Reset"
}
}Content-Type: application/json
{
"$ref": "#/components/schemas/StoreConfig"
}#/components/responses/Unauthorized
#/components/responses/Forbidden
#/components/responses/NotFound
#/components/responses/RateLimitExceeded
#/components/responses/InternalServerError