# Developers: Jordão Qualho Profile API

A public, read-only JSON API over my verified profile: the same data behind this site and the MCP server. Use it from scripts, backends or LLM function calling.

## Overview

- **Base URL:** https://jordaoqualho.com/api
- **Authentication:** None. No key or sign-up, and every call is read-only and safe to repeat, so there is no separate sandbox.
- **Format:** JSON in and out. Errors are RFC 9457 problem details (application/problem+json) with a stable code and a hint.
- **CORS and caching:** Open CORS, so browsers can call it directly. GET responses are cached at the edge for up to an hour.
- **Privacy:** Nothing you send is stored, including job descriptions.

## Quickstart

```sh
# Profile summary
curl https://jordaoqualho.com/api/profile

# Roles that used AWS
curl "https://jordaoqualho.com/api/experience?technology=AWS"

# Check a job description
curl -X POST https://jordaoqualho.com/api/job-fit \
  -H 'content-type: application/json' \
  -d '{"job_description":"Senior Backend Engineer: Node.js, TypeScript, AWS"}'
```

## Endpoints

- `GET /api` (`getApiIndex`): List every endpoint
- `GET /api/profile` (`getProfile`): Get the profile
- `GET /api/cases` (`listEngineeringCases`): List case studies
- `GET /api/cases/{slug}` (`getCaseDetail`): Get one case study
- `GET /api/experience` (`queryExperience`): Query work history
- `POST /api/job-fit` (`evaluateJobFit`): Match a job description

Schemas: https://jordaoqualho.com/openapi.json

## Errors

- `404 not_found`: The path doesn't exist. GET /api lists every endpoint.
- `404 case_not_found`: Unknown slug. GET /api/cases for valid slugs.
- `400 invalid_request`: Malformed body or unknown query parameter. The hint names the fix.
- `405 method_not_allowed`: Wrong HTTP method. The Allow header lists valid ones.

```json
{
  "type": "https://jordaoqualho.com/developers/#error-case_not_found",
  "title": "Case study not found",
  "status": 404,
  "detail": "No case study has the slug 'payments'.",
  "code": "case_not_found",
  "hint": "Use one of: financial-onboarding-incident, … GET /api/cases lists them.",
  "docs": "https://jordaoqualho.com/openapi.json"
}
```

## Function calling and MCP

Import https://jordaoqualho.com/openapi.json as a ChatGPT GPT Action, or map each operation to a tool in any function-calling framework. Every operation has a unique operationId, a description and typed parameters. For Claude, Cursor and other MCP clients, connect the MCP server instead.

MCP setup: https://jordaoqualho.com/agents.md

## Machine-readable files

- `/openapi.json`: OpenAPI 3.1 contract: operationIds, typed parameters and response schemas.
- `/.well-known/api-catalog`: RFC 9727 API catalog linking the spec and these docs.
- `/api`: JSON index of every endpoint.
- `/llms.txt`: When to use this profile, and reading order.
- `/api/mcp`: MCP server (https://jordaoqualho.com/api/mcp), same data as tools.
