# info.description
Public Masteralb HTTP API for health checks and contact inquiries. The canonical surface is URL-path versioned at /api/v1. Unversioned /api/contact and /api/health are stable v1 aliases used by the website forms. Breaking changes ship as /api/v2. Deprecated versions send Deprecation and Sunset headers with at least 180 days of notice. Deprecation policy: https://masteralb.com/developers#versioning-and-deprecation. Rate limit: 60 requests per 60 seconds per IP; responses include RateLimit, RateLimit-Policy, and Retry-After on 429.

# servers[].description
Sandbox / test environment. Unauthenticated. GET /health returns environment=sandbox.

# paths./contact.post.description
Sends a validated contact inquiry to the Masteralb team. Requires a Cloudflare Turnstile token. Alias: POST /api/contact.

# paths./contact.post.parameters[].description
Optional key that replays the same POST for 24 hours. Send the same JSON body with the same key to receive the original response.

# paths./contact.post.responses.200.description
Contact request accepted and email sent.

# paths./contact.post.responses.400.description
The request is missing required fields or security verification failed.

# paths./contact.post.responses.500.description
The email service could not process the request.

# paths./sandbox.get.description
Public sandbox / test environment probe. Returns environment=sandbox so agents can verify the test surface without API keys.

# paths./health.get.description
Returns a lightweight machine-readable health signal. Alias: GET /api/health.

# paths./health.get.parameters[].description
When true, bypass intermediary caches. The handler already sends Cache-Control: no-store.

# paths./projects.get.description
Returns a cursor-paginated catalog of selected portfolio projects. Public read; OAuth is optional.

# paths./projects.get.parameters[].description
Opaque cursor from the previous page's next_cursor.

# paths./jobs.post.description
Queues a short catalog job and returns 202 with a poll URL. Use GET /jobs/{id} until status is succeeded.

# paths./jobs/{id}.get.description
Returns the current status and result of a catalog job.

# components.schemas.ContactRequest.properties.projectType.description
Optional project category, or luv-me-support for app support.

# components.schemas.ContactRequest.properties.turnstileToken.description
Cloudflare Turnstile token proving a human submitted the form.

# components.securitySchemes.oauth2.description
Optional OAuth 2.0 for agents. The public catalog and health endpoints also accept unauthenticated requests.

# components.securitySchemes.oauth2.flows.clientCredentials.scopes.catalog:read
Read health, projects, jobs, and OpenAPI.

# components.securitySchemes.oauth2.flows.authorizationCode.scopes.catalog:read
Read health, projects, jobs, and OpenAPI.