Ten Twelve / Developers
Public API
Version 1. Public API with optional OAuth 2.0 agent identity.
Ten Twelve exposes a small public API for agents and integrations: submit a qualified project inquiry, list portfolio projects, and list services. The contract is published as an OpenAPI 3.1 document at /openapi.json and catalogued at/.well-known/api-catalog (RFC 9727).
Endpoints
GET /api/v1: API index with the version, deprecation policy and endpoint list.GET /api/v1/projects: portfolio projects with title, location, scope and page URL.GET /api/v1/services: service catalog with title, description, capabilities and page URL.POST /api/v1/contact: submit a project inquiry (see fields below).
Quickstart
curl https://ten12group.com/api/v1/projects
curl https://ten12group.com/api/v1/contact \
-H 'Content-Type: application/json' \
-d '{"name":"Jane Doe","email":"jane@example.com","message":"Two-bedroom condo renovation in Miami Beach.","location":"miami","budget":"1m-3m","phase":"pre-planning"}'Authentication
The API is public, so no credential is required. Agents that need an identity can self-register with the self-hosted OAuth 2.0 server (RFC 7591 + client_credentials, EdDSA JWTs):
curl -X POST https://ten12group.com/oauth/register \
-H 'Content-Type: application/json' \
-d '{"client_name":"my-agent","grant_types":["client_credentials"]}'
curl -X POST https://ten12group.com/oauth/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=client_credentialsSend Authorization: Bearer <token> on API calls; invalid or expired tokens get a 401 + WWW-Authenticate challenge. Discovery: /.well-known/oauth-authorization-server (RFC 8414, with agent_auth) · /.well-known/oauth-protected-resource (RFC 9728) · /oauth/jwks.json. Flow docs: /auth.md.
Errors
Errors return JSON with a machine-readable code, a human-readable error message and a resolution hint:
{ "ok": false, "error": "Too many submissions.", "code": "rate_limited", "hint": "Wait for the window in Retry-After." }Rate limits
POST /api/v1/contact: 5 submissions per 15 minutes per client IP.- Read endpoints: 60 requests per minute per client IP.
Every API response carries RFC RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy headers. A 429 response includes Retry-After.
Versioning and deprecation
The API version is in the URL path (/api/v1/). A deprecated version keeps working for at least 12 months and announces removal with Deprecation and Sunset response headers (RFC 8594). The unversioned POST /api/contact remains as a deprecated alias of the v1 endpoint.
MCP server
A Model Context Protocol endpoint is live at POST /mcp (Streamable HTTP JSON-RPC, protocol 2025-06-18). Server card: /.well-known/mcp/server-card.json.
Tools: list_projects, list_services and submit_inquiry. The inquiry tool uses the same fields and limits as POST /api/v1/contact.
curl https://ten12group.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'CLI
The official ten12 CLI wraps the API for scripts and agents:
brew install potenciados/tap/ten12
ten12 projects
ten12 services
ten12 inquire --name "Jane Doe" --email jane@example.com --message "Condo renovation in Miami." --location miami --budget 1m-3m --phase pre-planningHomebrew tap: Potenciados/homebrew-tap. Source also ships in the site repository under cli/. Requires Node.js 22+. No API key needed.
For AI agents
Agent-facing documentation lives at /llms.txt (index) and /llms-full.txt (full content). Every HTML page also answers Accept: text/markdown with a Markdown rendering, and discovery metadata is in the Link response headers.