Skip to main content

How to Set Up an API

The API gives you full programmatic access to your workspace: projects, time tracking, invoicing, expenses, contacts, and much more. This guide walks you through everything from zero to your first authenticated request.

🔓 Permissions requises
Super admin

Reading time

10mn

Set up time

Varies depending on configuration

Number of steps

4

1️⃣ Create an Account

Start by creating your workspace. Registration is free and includes a 15-day trial, perfect for testing your integrations without commitment.

💡 Your agency account only needs to be created once. The super admin can then invite collaborators, who will be able to create their own access credentials.

2️⃣ Choose Your Authentication Method

Two authentication methods are available. Choose the one that best fits your use case:

🔵 OPTION A

🟢 OPTION B

JWT — User Sessions

For applications where users log in interactively. Short-lived token (30 min), refreshable.

API Token — Integrations

For Make, Zapier, n8n, or server-side scripts. Long-lived scoped token created from the Settings menu.

A — JWT AUTHENTICATION

Exchange your credentials for an access token and a refresh token:

CURL · GET A TOKEN

`# Send your credentials

-H "Content-Type: application/json"

-d '{"username": "[email protected]", "password": "your-password"}'`

Expected response:

JSON · RESPONSE

`{

"access": "eyJ0eXAiOi...", ← use this field

"refresh": "eyJ0eXAiOi...",

"token": "eyJ0eXAiOi..." ← legacy alias, prefer "access"

}`

⏱️ Access tokens expire after 30 minutes. Refresh them without logging in again.

CURL · REFRESH A TOKEN

-H "Content-Type: application/json"

-d '{"refresh": "<YOUR_REFRESH_TOKEN>"}'`

B — API TOKEN (UNATTENDED INTEGRATIONS)

Super admins can create a token under Settings → Integrations → API Tokens. This is the recommended option for server-to-server usage and automations.

🔒 Store your tokens securely. Do not expose them in your source code and never expose a token client-side.

3️⃣ Make Your First API Request

Pass the token in the Authorization header. The prefix depends on the token type:

CURL · WITH A JWT (USERS)

-H "Authorization: JWT <VOTRE_ACCESS_TOKEN>"`

CURL · WITH AN API TOKEN (INTEGRATIONS)

-H "Authorization: Token <YOUR_API_TOKEN>"`

This endpoint returns the organizations and teams the authenticated user belongs to. The id field of each organization corresponds to the org_pk value required by most other endpoints.

4️⃣ Explore the Full API

The complete reference — including every endpoint, request/response schemas, and an interactive “try it” console — is available at:
api.ooti.co/api/v1/docs/.

Common entry points to start exploring:

GET /api/v1/projects/list/{org_pk}/ List projects

POST /api/v1/timelogs/worklogs/ Log time

POST /api/v1/invoices/list/{org_pk}/ Create an invoice

GET /api/v1/contacts/list/{org_pk}/ List clients and contacts

QUICK REFERENCE

Format JSON

Auth (utilisateur) Authorization: JWT <access-token>

Auth (intégration) Authorization: Token <api-token>

Get a token POST /api/v1/token-auth/

Refresh POST /api/v1/token-refresh/

Did this answer your question?