This is the developer portal for danielfarina.com. Agents and scripts should start here, not by guessing paths. Every interface is public, read-only, and unauthenticated. There is no signup, no dashboard, and no paid plan.
Quickstart
Three ways in. Pick one:
# 1. Agent index
curl -s https://danielfarina.com/llms.txt
# 2. Markdown of any page
curl -sH 'Accept: text/markdown' https://danielfarina.com/
# 3. Official CLI
npx github:daniel-farina/danielfarina
# or: brew install daniel-farina/tap/danielfarina API keys
No API keys. Do not send an Authorization header. Do not create a token. GET, HEAD, and
OPTIONS are open. POST, PUT, PATCH, and DELETE return HTTP 405 with RFC 9457
application/problem+json. Unknown API paths return HTTP 404 in the same shape —
never an HTML app shell.
Documentation
- OpenAPI 3.1 — machine-readable description of
/api/v1 - RFC 9727 API catalog
- llms.txt — when to use this site, plus links
- llms-full.txt — longer dump of essays and work
- sitemap.xml · RSS
-
Pages speak Markdown: send
Accept: text/markdown. Responses setContent-Type: text/markdown; charset=utf-8andVary: Accept, Accept-Encoding. Unsupported types get 406.
REST API
Base: https://danielfarina.com/api/v1. CORS is *.
GET /api/v1/site— identity, CLI, index URLsGET /api/v1/work— selected workGET /api/v1/posts— writing index
Official CLI
Package name danielfarina. Source:
github.com/daniel-farina/danielfarina.
Homebrew tap:
daniel-farina/homebrew-tap.
npx github:daniel-farina/danielfarina
npx github:daniel-farina/danielfarina work
npx github:daniel-farina/danielfarina writing
npx github:daniel-farina/danielfarina --json
brew install daniel-farina/tap/danielfarina
danielfarina llms Sandbox
The production API is the sandbox. Hit it from this machine — no staging key, no allowlist. Try these and you should get JSON, not HTML:
curl -s https://danielfarina.com/api/v1/site
curl -s https://danielfarina.com/api/v1/work
curl -s -o /dev/null -w '%{http_code}\n' https://danielfarina.com/api/v1/does-not-exist
# expect 404 application/problem+json
curl -s -o /dev/null -w '%{http_code}\n' -X POST https://danielfarina.com/api/v1/site
# expect 405 Errors
Every 4xx and 5xx API response is RFC 9457 application/problem+json. The object
always includes type, title, status, detail,
instance, code (machine-readable), and resolution.
Codes: api_route_not_found, method_not_allowed,
rate_limit_exceeded. Agents should branch on code, not on the prose.
Rate limits
120 requests per client IP per 60 seconds on /api/v1/*. Successful and error
responses include IETF RateLimit / RateLimit-Policy plus the
compatibility headers RateLimit-Limit, RateLimit-Remaining, and
RateLimit-Reset. A 429 also sends Retry-After. Quota name:
catalog.
Versioning and deprecation
Stable operations live under /api/v1. Breaking changes require a new major path
(/api/v2). The current major is advertised as the API-Version: v1
response header. Deprecated operations will be announced here and with RFC 9745
Deprecation and Sunset headers at least 90 days before removal.
There is no scheduled sunset for v1. See OpenAPI field x-api-lifecycle.
Contact
Bugs and agent-integration questions: [email protected] or the contact form. Consulting for teams: /consulting. Pricing: discovery call is free; see pricing.md.