Browse all guides
Quickstart
The Growee REST API lives at your workspace’s own subdomain:
https://<your-company>.growee.net/api/restify
<your-company> is the part before .growee.net in the URL you use to sign in to Growee.
1. Create an API key
In Growee, go to Settings → Integrations → API Keys and create a key. Pick the permission scopes the key needs (for example Manage timesheets to log time) and optionally restrict it to your server’s IP addresses.
The full key is shown once when you create it. Store it in a secret manager - you can regenerate it later, but never read it again.
See Authentication for how scopes and IP allowlists behave.
2. Make your first request
List five employees:
curl "https://your-company.growee.net/api/restify/employees?perPage=5" \
-H "Authorization: Bearer <your-api-key>" \
-H "Accept: application/json"
The same request in JavaScript:
const response = await fetch(
'https://your-company.growee.net/api/restify/employees?perPage=5',
{
headers: {
Authorization: `Bearer ${process.env.GROWEE_API_KEY}`,
Accept: 'application/json',
},
},
)
const { data, meta } = await response.json()
And in PHP:
$response = Http::withToken(config('services.growee.key'))
->acceptJson()
->get('https://your-company.growee.net/api/restify/employees', [
'perPage' => 5,
]);
$employees = $response->json('data');
3. Read the response
Every list endpoint returns the same envelope:
{
"meta": {
"current_page": 1,
"from": 1,
"last_page": 9,
"path": "https://your-company.growee.net/api/restify/employees",
"per_page": 5,
"to": 5,
"total": 42
},
"links": {
"first": "...?page=1",
"prev": null,
"next": "...?page=2"
},
"data": [
{
"id": "01j2xw6ykq3f8p9r0v5m7n8s4t",
"type": "employees",
"attributes": {
"first_name": "Sarah",
"last_name": "Mitchell",
"company_email": "sarah.mitchell@your-company.com"
},
"meta": {
"authorizedToShow": true,
"authorizedToUpdate": false
}
}
]
}
Things to know:
- IDs are ULIDs - 26-character sortable strings, not integers.
data[].attributesholds the fields; the exact set depends on your key’s permissions.data[].metatells you what the key may do with each record.- Single-record endpoints (
GET /employees/{id}) return{ "data": { ... } }without pagination.
4. Create something
Log a timesheet entry:
curl -X POST "https://your-company.growee.net/api/restify/timesheets" \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"project_id": "01j2xw...",
"task_id": "01j2xx...",
"worked_minutes": 90,
"date": "2026-07-14",
"description": "API integration work"
}'
A successful create returns 201 with the new record; validation problems return 422 with per-field messages - see Errors & validation.
Next steps
- Browse every endpoint, schema and example in the API Reference
- Learn pagination, filtering and sorting
- Connect AI agents via MCP
The Growee API is built on the open-source Laravel Restify framework - its documentation covers the shared query language (filters, search, sorting, pagination) in more depth.
Questions about the API? Contact support or email support@growee.net.