Documentation Index
Fetch the complete documentation index at: https://docs.tattoo.dev/llms.txt
Use this file to discover all available pages before exploring further.
Base URL
Use your deployed API base URL, or the current local runtime during development:
export TATTOO_API_BASE_URL=http://localhost:3001/api/v1
The current API is in transition. The ontology is the source of truth, while the runtime still carries a few legacy response wrappers. These docs describe the current behavior as it exists today.
1. Check Health
curl "$TATTOO_API_BASE_URL/health"
Expected shape:
{
"status": "healthy",
"timestamp": "2026-04-20T12:00:00.000Z",
"version": "v1",
"uptime": 1234.56,
"environment": "development"
}
2. Register and Login
Register a user:
curl -X POST "$TATTOO_API_BASE_URL/auth/register" \
-H "Content-Type: application/json" \
-d '{
"email": "developer@example.com",
"password": "SecurePassword123!",
"name": "Developer Example",
"role": "Client"
}'
Then login to get tokens:
curl -X POST "$TATTOO_API_BASE_URL/auth/login" \
-H "Content-Type: application/json" \
-d '{
"email": "developer@example.com",
"password": "SecurePassword123!"
}'
The login response contains user and tokens at the top level:
{
"success": true,
"message": "Login successful",
"user": {
"id": "uuid",
"email": "developer@example.com",
"name": "Developer Example",
"role": "Client",
"roles": []
},
"tokens": {
"access_token": "jwt",
"refresh_token": "jwt",
"expires_in": 86400
}
}
3. Search the Dataset
GET /search currently requires authentication.
curl "$TATTOO_API_BASE_URL/search?q=traditional&type=studio&limit=5" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
The response uses a success wrapper:
{
"success": true,
"data": {
"results": [],
"total": 0,
"pagination": {
"page": 1,
"limit": 5,
"total_pages": 0,
"has_next": false,
"has_prev": false
}
}
}
4. List Studios
GET /studios is the current public discovery endpoint.
curl "$TATTOO_API_BASE_URL/studios?city=Los%20Angeles&limit=5"
Unlike search, the current studios endpoint still uses the legacy paginated wrapper:
{
"data": [],
"pagination": {
"page": 1,
"limit": 5,
"total": 0,
"totalPages": 0,
"hasNext": false,
"hasPrev": false
},
"error": null
}
5. Understand Trust
Before you build on top of the current data, load the trust model:
recordState tells you if a record is raw, normalized, curated, verified, or deprecated
verificationStatus tells you how much trust has been established
licenseStatus and consentLevel tell you what kinds of downstream use are allowed
Next: