Build integrations, automate workflows, and extend Hourivo with our RESTful API. Everything you need to get started is below.
Swagger UI — Interactive Hourivo API documentation.
/docs/auth — JWT + x-organization-id authentication guide.
/.well-known/mcp — Live JSON-RPC handshake over Streamable HTTP (/mcp).
llms.txt — When-to-use guidance for AI agents and LLM integrations.
Get up and running in under 5 minutes:
# Register a new account
curl -X POST https://hourivo.com/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "dev@youragency.com",
"fullName": "Your Name",
"organizationName": "Your Agency",
"password": "secure-password-123",
"otp": "123456",
"acceptedTerms": true
}'
# Login and extract JWT token
curl -X POST https://hourivo.com/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "dev@youragency.com", "password": "secure-password-123"}'
# Response: { "data": { "token": "eyJhbG...", "user": {...}, "organization": {...} } }
export TOKEN="eyJhbG..."
export ORG_ID="your-org-uuid"
# Check API health (no auth required)
curl https://hourivo.com/api/v1/health
# List your projects (auth required)
curl https://hourivo.com/api/v1/projects \
-H "Authorization: Bearer $TOKEN" \
-H "x-organization-id: $ORG_ID"
All protected endpoints require two headers:
Authorization: Bearer <jwt-token> — JWT obtained from login/registerx-organization-id: <org-uuid> — Your organization's UUID for multi-tenant isolationTokens expire after 7 days. Implement token refresh in your integration.
New registrations and invite joins require acceptedTerms: true. Login and GET /auth/me return needsLegalAcceptance. If true, POST the current version from GET /api/v1/auth/legal to POST /api/v1/auth/accept-terms. Public documents: Terms of Service and Privacy Policy (version 2026.8).
https://hourivo.com/api/v1GET https://hourivo.com/api/v1/healthGET https://hourivo.com/api/v1/info| Category | Endpoints | Auth |
|---|---|---|
| Health | /health, /info |
Public |
| Auth | /auth/legal, /auth/register, /auth/login, /auth/me, /auth/send-otp, /auth/verify-otp, /auth/accept-invite, /auth/accept-terms |
Mixed |
| Projects | /projects, /projects/{id}, /projects/{id}/share, /projects/portal/{token} |
Protected |
| Time Tracking | /time/entries, /time/manual, /time/live-team, /time/approve, /time/idle-resolve |
Protected |
| Screenshots | /screenshots, /screenshots/{id}, /screenshots/{id}/blur |
Protected |
| Financials | /financials/summary, /financials/invoices |
Protected |
| AI | /ai/overview, /ai/work-day, /ai/weekly-report, /ai/chat |
Protected |
| Notifications | /notifications, /notifications/{id}/read |
Protected |
| RBAC | /rbac |
Protected |
All API errors return structured JSON:
{
"success": false,
"code": "NOT_FOUND",
"error": "Project not found",
"message": "Project not found",
"hint": "Verify the project UUID and x-organization-id header. See GET /api/v1/info and /openapi.json."
}
The API allows 120 requests per minute per IP address. Exceeding this limit returns HTTP 429 with a Retry-After header.
Every new account starts with a 14-day free trial with full API access. Use the production API base URL — no separate sandbox needed. The trial includes:
Contact our developer support team: