O RabbitWork é um software de controle de horas e gestão de projetos para equipes e freelancers,
feito para tornar a gestão do tempo simples, rápida e precisa.
A API do RabbitWork é um serviço web RESTful para integrar o seu workspace. Ela aceita corpos em JSON (application/json) e em formulário (application/x-www-form-urlencoded), devolve respostas em JSON e usa métodos HTTP, autenticação e códigos de status padrão. Os exemplos desta documentação usam JSON.
https://app.rabbitwork.io/api/v1
name ou email. Os demais campos são opcionais.Reenviar o objeto completo de um GET também grava os campos editáveis presentes nesse corpo. Na atualização, envie só o que deve mudar.
Arquivar atualiza só o próprio registro. Os registros relacionados a ele continuam como estão e todo o histórico permanece. Envie somente active com 0. A qualquer momento o registro pode ser reativado enviando active com 1.
Arquivar o usuário 15:
POST /users/15
{ "active": 0 }
Arquivar o projeto 449:
POST /projects/449
{ "active": 0 }
Envie o token pessoal da API em toda requisição no header HTTP x-api-token.
Tokens pessoais são criados dentro do app do RabbitWork, com você autenticado. Eles não são criados enviando e-mail e senha para a API.
Um token pessoal tem o mesmo acesso do usuário que o criou. Mantenha-o em segredo. Não faça commit dele no GitHub, não o coloque em código que roda no navegador e não o compartilhe em canais públicos.
Tokens pessoais não ficam presos a um User-Agent e não expiram depois de 30 dias sem uso. Revogue o token no app quando a integração precisar parar de funcionar.
#/personal-tokens).Integração com o ERP.O administrador da conta define quem pode criar tokens (Somente administradores, Administradores e superusuários ou Todos os membros) em Configurações > Integrações > Gestão da API.
Administradores podem ver e revogar qualquer token da conta em Configurações > Integrações > Tokens da conta.
Pare de usar e-mail e senha para autenticar na API. O POST /auth está descontinuado.
Use um token pessoal. Ele é seguro, tem mais flexibilidade de uso e a gestão é feita pela interface, em Configurações > Você > Meus tokens.
O token gerado com e-mail e senha tem limite de tempo e fica preso ao user agent do navegador. Novas integrações não são mais aceitas por esse caminho. Integrações que já usam esse login podem continuar até 30 de abril de 2027. Depois dessa data, esse acesso deixa de funcionar.
A API do RabbitWork usa os códigos de status HTTP padrão para indicar se a requisição deu certo ou falhou.
Cada resposta de erro inclui uma mensagem clara e, quando couber, um código de erro para identificar e tratar o problema no código.
A API do RabbitWork aplica várias camadas de limite para manter o uso justo e o desempenho estável. Esses mecanismos juntos garantem estabilidade para todas as contas e permitem que planos maiores cresçam com segurança.
Os limites abaixo podem ser ajustados a qualquer momento conforme o desempenho ou o uso do sistema.
Quem integra é responsável por evitar interrupção, observando o header Retry-After e aplicando espera ou nova tentativa quando o limite for atingido.
O login descontinuado com e-mail e senha (POST /auth) é limitado a 60 requisições por dia por usuário, para reduzir tentativas de força bruta.
Tokens pessoais são criados no app e não usam esse endpoint. Se o limite do login descontinuado for ultrapassado, a API devolve HTTP 429 Too Many Requests ou, em alguns casos, HTTP 401 Unauthorized.
Cada token da API tem uma cota de curto prazo de 600 requisições por minuto, com pico de 30 requisições por segundo. Esses limites evitam uso concorrente excessivo de uma única integração. Tokens diferentes têm limites independentes.
Se o limite for ultrapassado, a API devolve HTTP 429 Too Many Requests e inclui o erro minute_limit_exceeded ou second_limit_exceeded na resposta.
Cada conta tem uma cota diária compartilhada entre todos os usuários e tokens, conforme o plano contratado:
A cota vigente é o limite do plano. O uso atual, as requisições restantes e o horário de renovação aparecem no app em Configurações > Integrações > Gestão da API.
| Plano | Limite diário |
|---|---|
| Free / teste / planos legados | 50 requisições por dia |
| Plus | 1 000 requisições por dia |
| Ultimate | 2 500 requisições por dia |
| Business | 5 000 requisições por dia (limite flexível*) |
| Business Max | 25 000 requisições por dia (limite flexível*) |
Se o limite for ultrapassado, a API devolve HTTP 429 Too Many Requests e inclui o erro account_daily_limit_exceeded na resposta.
* Os planos Business usam um limite flexível — requisições acima desse patamar são aceitas por um tempo, mas a resposta traz um aviso. Se o uso acima do limite for constante, o recomendado é um complemento para ampliar a cota diária.
Além disso, todo o tráfego de entrada é protegido por um limite de rede de 2 000 requisições por minuto por endereço IP, independente da autenticação.
Se o limite for ultrapassado, a API devolve HTTP 429 Too Many Requests e inclui o erro ip_rate_limit_exceeded na resposta.
| Header | Descrição |
|---|---|
| X-RateLimit-Minute | Limite por minuto do token atual (limite, usado, restante, renovação) |
| X-RateLimit-AccountDaily | Limite diário de toda a conta (limite, usado, restante, renovação) |
| X-RateLimit-AccountDaily-Warning | Indica que a cota diária foi ultrapassada — valores possíveis: • soft_limit_exceeded: limite flexível atingido (folga temporária dos planos Business)• hard_limit_blocked: bloqueio rígido (requisições recusadas) |
| Retry-After | Devolvido com HTTP 429 Too Many Requests — informa quantos segundos esperar antes de tentar de novo |
Este endpoint está descontinuado e não devolve mais dados. Use /reports/detailed para consultar lançamentos de horas.
{- "message": "This endpoint is deprecated. Please use the new endpoint to retrieve paginated time entries: /reports/detailed.",
- "status": "deprecated",
- "deprecated_since": "2025-07-11"
}Novo lançamento de horas
| date_execution | string Data em que a atividade foi executada pelo colaborador |
| description | string Descrição da atividade executada |
| project_id required | integer ID do projeto |
| task_id | integer ID da tarefa |
| time_end | string Default: "00:00:00" Hora de fim deste lançamento |
| time_start | string Default: "00:00:00" Hora de início deste lançamento |
| time_total | string Default: "00:00:00" Tempo total deste lançamento |
| user_id | integer Default: "Logged user" ID do usuário responsável pelo lançamento. Pode ser enviado ao criar ou editar; se omitido, usa o usuário autenticado. Para filtrar lançamentos por responsável, use o parâmetro |
| has_overtime | boolean Indica hora extra. Aceito no save só com o cronômetro parado. |
| overtime | string Duração da hora extra, no formato HH:mm:ss. Aceito no save só com o cronômetro parado. |
| start_stopwatch | string Value: "1" Envie |
| todo_id | string Atividade vinculada a este lançamento. Envie |
| breaks_total | string Tempo total de pausa, no formato HH:mm:ss |
Array of objects Intervalos de pausa dentro do lançamento |
{- "date_execution": "2022-01-14",
- "description": "activity description...",
- "project_id": 2,
- "task_id": 10,
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "has_overtime": false,
- "overtime": "01:00:00",
- "start_stopwatch": "1",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
]
}{- "data": {
- "id": 1201,
- "bill_by": null,
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "customer_id": 2,
- "customer_name": "ACME",
- "date_changed": "2022-01-03 10:01:00",
- "date_created": "2022-01-01 12:33:00",
- "date_execution": "2022-01-14",
- "description": "activity description...",
- "form": "time_entry_form_1",
- "is_billable": true,
- "is_invoiced": 0,
- "is_locked": false,
- "locked_reason": "is invoiced",
- "permissions": {
- "can_modify_locked": false
}, - "project_id": 2,
- "project_is_billable": true,
- "project_name": "Processo ISO",
- "project_status": 1,
- "stopwatch_active": false,
- "stopwatch_date_start": "2022-01-01 12:33:00",
- "task_id": 10,
- "task_name": "Meeting",
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "rate_hour": 100,
- "rate_total": 600,
- "has_overtime": false,
- "overtime": "01:00:00",
- "regular_time": "05:00:00",
- "is_editable": true,
- "approval_id": 40,
- "approval_status": "pending",
- "created_at": "2024-05-14 19:11:25",
- "changed_at": "2024-05-15 10:00:00",
- "creator_id": 5,
- "changed_by_user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "task_color": "#4C6EF5",
- "project_color": "#12B886",
- "manager_id": 3,
- "manager_name": "Ana",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "todo_name": "Buy a coffee",
- "cost_rate": 65,
- "cost_amount": 520,
- "billable_tax_rate": 8,
- "billable_tax_amount": 64,
- "billable_net_amount": 736,
- "margin_amount": 216,
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
], - "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Retorna o lançamento de horas cujo cronômetro está em andamento para o usuário autenticado. data é null quando nenhum cronômetro está ativo.
{- "data": {
- "id": 1201,
- "bill_by": null,
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "customer_id": 2,
- "customer_name": "ACME",
- "date_changed": "2022-01-03 10:01:00",
- "date_created": "2022-01-01 12:33:00",
- "date_execution": "2022-01-14",
- "description": "activity description...",
- "form": "time_entry_form_1",
- "is_billable": true,
- "is_invoiced": 0,
- "is_locked": false,
- "locked_reason": "is invoiced",
- "permissions": {
- "can_modify_locked": false
}, - "project_id": 2,
- "project_is_billable": true,
- "project_name": "Processo ISO",
- "project_status": 1,
- "stopwatch_active": false,
- "stopwatch_date_start": "2022-01-01 12:33:00",
- "task_id": 10,
- "task_name": "Meeting",
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "rate_hour": 100,
- "rate_total": 600,
- "has_overtime": false,
- "overtime": "01:00:00",
- "regular_time": "05:00:00",
- "is_editable": true,
- "approval_id": 40,
- "approval_status": "pending",
- "created_at": "2024-05-14 19:11:25",
- "changed_at": "2024-05-15 10:00:00",
- "creator_id": 5,
- "changed_by_user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "task_color": "#4C6EF5",
- "project_color": "#12B886",
- "manager_id": 3,
- "manager_name": "Ana",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "todo_name": "Buy a coffee",
- "cost_rate": 65,
- "cost_amount": 520,
- "billable_tax_rate": 8,
- "billable_tax_amount": 64,
- "billable_net_amount": 736,
- "margin_amount": 216,
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
], - "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Obtém um lançamento de horas pelo ID
| id required | integer Example: 25 ID do lançamento de horas |
{- "data": {
- "id": 1201,
- "bill_by": null,
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "customer_id": 2,
- "customer_name": "ACME",
- "date_changed": "2022-01-03 10:01:00",
- "date_created": "2022-01-01 12:33:00",
- "date_execution": "2022-01-14",
- "description": "activity description...",
- "form": "time_entry_form_1",
- "is_billable": true,
- "is_invoiced": 0,
- "is_locked": false,
- "locked_reason": "is invoiced",
- "permissions": {
- "can_modify_locked": false
}, - "project_id": 2,
- "project_is_billable": true,
- "project_name": "Processo ISO",
- "project_status": 1,
- "stopwatch_active": false,
- "stopwatch_date_start": "2022-01-01 12:33:00",
- "task_id": 10,
- "task_name": "Meeting",
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "rate_hour": 100,
- "rate_total": 600,
- "has_overtime": false,
- "overtime": "01:00:00",
- "regular_time": "05:00:00",
- "is_editable": true,
- "approval_id": 40,
- "approval_status": "pending",
- "created_at": "2024-05-14 19:11:25",
- "changed_at": "2024-05-15 10:00:00",
- "creator_id": 5,
- "changed_by_user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "task_color": "#4C6EF5",
- "project_color": "#12B886",
- "manager_id": 3,
- "manager_name": "Ana",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "todo_name": "Buy a coffee",
- "cost_rate": 65,
- "cost_amount": 520,
- "billable_tax_rate": 8,
- "billable_tax_amount": 64,
- "billable_net_amount": 736,
- "margin_amount": 216,
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
], - "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}| id required | integer Example: 25 ID do lançamento de horas |
| date_execution | string Data em que a atividade foi executada pelo colaborador |
| description | string Descrição da atividade executada |
| project_id required | integer ID do projeto |
| task_id | integer ID da tarefa |
| time_end | string Default: "00:00:00" Hora de fim deste lançamento |
| time_start | string Default: "00:00:00" Hora de início deste lançamento |
| time_total | string Default: "00:00:00" Tempo total deste lançamento |
| user_id | integer Default: "Logged user" ID do usuário responsável pelo lançamento. Pode ser enviado ao criar ou editar; se omitido, usa o usuário autenticado. Para filtrar lançamentos por responsável, use o parâmetro |
| has_overtime | boolean Indica hora extra. Aceito no save só com o cronômetro parado. |
| overtime | string Duração da hora extra, no formato HH:mm:ss. Aceito no save só com o cronômetro parado. |
| start_stopwatch | string Value: "1" Envie |
| todo_id | string Atividade vinculada a este lançamento. Envie |
| breaks_total | string Tempo total de pausa, no formato HH:mm:ss |
Array of objects Intervalos de pausa dentro do lançamento |
{- "date_execution": "2022-01-14",
- "description": "activity description...",
- "project_id": 2,
- "task_id": 10,
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "has_overtime": false,
- "overtime": "01:00:00",
- "start_stopwatch": "1",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
]
}{- "data": {
- "id": 1201,
- "bill_by": null,
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "customer_id": 2,
- "customer_name": "ACME",
- "date_changed": "2022-01-03 10:01:00",
- "date_created": "2022-01-01 12:33:00",
- "date_execution": "2022-01-14",
- "description": "activity description...",
- "form": "time_entry_form_1",
- "is_billable": true,
- "is_invoiced": 0,
- "is_locked": false,
- "locked_reason": "is invoiced",
- "permissions": {
- "can_modify_locked": false
}, - "project_id": 2,
- "project_is_billable": true,
- "project_name": "Processo ISO",
- "project_status": 1,
- "stopwatch_active": false,
- "stopwatch_date_start": "2022-01-01 12:33:00",
- "task_id": 10,
- "task_name": "Meeting",
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "rate_hour": 100,
- "rate_total": 600,
- "has_overtime": false,
- "overtime": "01:00:00",
- "regular_time": "05:00:00",
- "is_editable": true,
- "approval_id": 40,
- "approval_status": "pending",
- "created_at": "2024-05-14 19:11:25",
- "changed_at": "2024-05-15 10:00:00",
- "creator_id": 5,
- "changed_by_user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "task_color": "#4C6EF5",
- "project_color": "#12B886",
- "manager_id": 3,
- "manager_name": "Ana",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "todo_name": "Buy a coffee",
- "cost_rate": 65,
- "cost_amount": 520,
- "billable_tax_rate": 8,
- "billable_tax_amount": 64,
- "billable_net_amount": 736,
- "margin_amount": 216,
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
], - "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Inicia o cronômetro de um lançamento existente
| id required | integer Example: 25 ID do lançamento de horas |
| time_start | string Default: "00:00:00" Hora de início deste lançamento |
| stopwatch_date_start | string Data e hora em que o cronômetro foi iniciado |
{- "time_start": "08:00:00",
- "stopwatch_date_start": "2022-01-01 12:33:00"
}{- "data": {
- "id": 1201,
- "bill_by": null,
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "customer_id": 2,
- "customer_name": "ACME",
- "date_changed": "2022-01-03 10:01:00",
- "date_created": "2022-01-01 12:33:00",
- "date_execution": "2022-01-14",
- "description": "activity description...",
- "form": "time_entry_form_1",
- "is_billable": true,
- "is_invoiced": 0,
- "is_locked": false,
- "locked_reason": "is invoiced",
- "permissions": {
- "can_modify_locked": false
}, - "project_id": 2,
- "project_is_billable": true,
- "project_name": "Processo ISO",
- "project_status": 1,
- "stopwatch_active": false,
- "stopwatch_date_start": "2022-01-01 12:33:00",
- "task_id": 10,
- "task_name": "Meeting",
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "rate_hour": 100,
- "rate_total": 600,
- "has_overtime": false,
- "overtime": "01:00:00",
- "regular_time": "05:00:00",
- "is_editable": true,
- "approval_id": 40,
- "approval_status": "pending",
- "created_at": "2024-05-14 19:11:25",
- "changed_at": "2024-05-15 10:00:00",
- "creator_id": 5,
- "changed_by_user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "task_color": "#4C6EF5",
- "project_color": "#12B886",
- "manager_id": 3,
- "manager_name": "Ana",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "todo_name": "Buy a coffee",
- "cost_rate": 65,
- "cost_amount": 520,
- "billable_tax_rate": 8,
- "billable_tax_amount": 64,
- "billable_net_amount": 736,
- "margin_amount": 216,
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
], - "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Para o cronômetro de um lançamento que está em andamento
| id required | integer Example: 25 ID do lançamento de horas |
| time_total | string Default: "00:00:00" Tempo total deste lançamento |
{- "time_total": "06:00:00"
}{- "data": {
- "id": 1201,
- "bill_by": null,
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "customer_id": 2,
- "customer_name": "ACME",
- "date_changed": "2022-01-03 10:01:00",
- "date_created": "2022-01-01 12:33:00",
- "date_execution": "2022-01-14",
- "description": "activity description...",
- "form": "time_entry_form_1",
- "is_billable": true,
- "is_invoiced": 0,
- "is_locked": false,
- "locked_reason": "is invoiced",
- "permissions": {
- "can_modify_locked": false
}, - "project_id": 2,
- "project_is_billable": true,
- "project_name": "Processo ISO",
- "project_status": 1,
- "stopwatch_active": false,
- "stopwatch_date_start": "2022-01-01 12:33:00",
- "task_id": 10,
- "task_name": "Meeting",
- "time_end": "14:00:00",
- "time_start": "08:00:00",
- "time_total": "06:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "rate_hour": 100,
- "rate_total": 600,
- "has_overtime": false,
- "overtime": "01:00:00",
- "regular_time": "05:00:00",
- "is_editable": true,
- "approval_id": 40,
- "approval_status": "pending",
- "created_at": "2024-05-14 19:11:25",
- "changed_at": "2024-05-15 10:00:00",
- "creator_id": 5,
- "changed_by_user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "task_color": "#4C6EF5",
- "project_color": "#12B886",
- "manager_id": 3,
- "manager_name": "Ana",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "todo_name": "Buy a coffee",
- "cost_rate": 65,
- "cost_amount": 520,
- "billable_tax_rate": 8,
- "billable_tax_amount": 64,
- "billable_net_amount": 736,
- "margin_amount": 216,
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
], - "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Gera o relatório detalhado de lançamentos de horas
| date_execution_start | string <date> Example: date_execution_start=2024-01-01 Traz apenas horas cuja data de execução é maior ou igual à data informada. |
| date_execution_end | string <date> Example: date_execution_end=2024-01-30 Traz apenas horas cuja data de execução é menor ou igual à data informada. |
| project_id | Array of integers or guids Examples:
Filtra pelo ID do projeto. Use uma lista de IDs separada por vírgula para vários IDs. |
| task_id | Array of integers or guids Examples:
Filtra pelo ID da tarefa. Use uma lista de IDs separada por vírgula para vários IDs. |
| customer_id | Array of integers or guids Examples:
Filtra pelo ID do cliente. Use uma lista de IDs separada por vírgula para vários IDs. |
| user_id | Array of integers or guids Examples:
Filtra por usuário. Use uma lista de IDs separada por vírgula para vários IDs. |
| team_id | Array of integers or guids Examples:
Filtra responsáveis por equipe. Use uma lista de IDs separada por vírgula para vários IDs. |
| id | integer or guid Default: null Examples:
Identificador do lançamento. Use uma lista de IDs separada por vírgula para vários IDs. |
| is_invoiced | boolean Default: null Example: is_invoiced=true Filtra lançamentos conforme já foram faturados ou não. |
| only_active_users | boolean Deprecated Default: false Example: only_active_users=true Ignorado. Este relatório não filtra usuários ativos. |
| only_active_projects | boolean Default: false Example: only_active_projects=true Filtra apenas projetos ativos. |
| only_projects_member_of | boolean Default: false Example: only_projects_member_of=true Quando verdadeiro, devolve só projetos dos quais o usuário autenticado participa. O padrão é falso. |
| project_privacy | string Default: null Enum: "public" "private" Example: project_privacy=public Filtra projetos pela privacidade. |
| description | string Busca na descrição do lançamento. |
| manager_id | string Example: manager_id=3,8 Filtra pelo gestor do usuário do lançamento. Ids separados por vírgula. |
| manager_empty | string Value: "true" Envie |
| task_empty | string Value: "true" Envie |
| customer_empty | string Value: "true" Envie |
| todo_id | string Filtra pelo id da atividade vinculada. |
| todo_id_empty | string Value: "true" Envie |
| is_stopwatch_active | boolean Default: false Quando verdadeiro, devolve só lançamentos com cronômetro em andamento. |
| include_unregistered_projects | boolean Deprecated Descontinuado. Vale só quando |
| custom_fields.{id} | string Default: null Example: custom_fields.{id}=10 Filtra registros por campos personalizados. Troque |
| opt_page_limit | integer [ 1 .. 100 ] Default: 50 Quantidade de itens a retornar |
| opt_sort_direction | string Default: "asc" Enum: "asc" "desc" Direção da ordenação. |
| opt_sort_by | string Enum: "date_execution" "user_name" "project_name" "customer_name" "task_name" "todo_name" "description" "manager_name" "time_total" "time_start" "rate_total" "cost_amount" "created_at" "created_by_user_name" "changed_at" "changed_by_user_name" "regular_time" "overtime" "breaks_total" "is_invoiced" Ordena os itens por coluna. Use uma lista separada por vírgula para ordenar por várias colunas. |
{- "data": [
- {
- "billable_net_amount": 736,
- "billable_tax_amount": 64,
- "billable_tax_rate": 8,
- "changed_at": null,
- "changed_by": null,
- "changed_by_user_name": null,
- "cost_amount": 520,
- "cost_rate": 65,
- "created_at": "2024-05-14 19:11:25",
- "created_by": 1,
- "created_by_user_name": "Anna Santos",
- "creator_id": 1,
- "custom_fields": [ ],
- "customer_id": 2,
- "customer_name": "Negócios Digitais",
- "date_changed": null,
- "date_created": "2024-05-14T19:11:25-0300",
- "date_execution": "2024-01-01",
- "description": "",
- "id": 127,
- "is_billable": true,
- "is_invoiced": 0,
- "is_editable": true,
- "approval_id": 40,
- "approval_status": "pending",
- "regular_time": "07:00:00",
- "has_overtime": false,
- "overtime": "01:00:00",
- "breaks_total": "01:00:00",
- "break_intervals": [
- {
- "time_start": "12:00:00",
- "time_end": "13:00:00"
}
], - "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "task_color": "#4C6EF5",
- "project_color": "#12B886",
- "manager_id": 3,
- "manager_name": "Ana",
- "is_locked": false,
- "locked_reason": null,
- "margin_amount": 216,
- "permissions": {
- "can_modify_locked": false
}, - "project_id": 12,
- "project_is_billable": true,
- "project_name": "Redesign do Site",
- "project_status": 1,
- "rate_hour": "100.00",
- "rate_total": "800.00",
- "stopwatch_active": 0,
- "stopwatch_date_start": null,
- "task_id": 3,
- "task_name": "Reunião",
- "time_end": null,
- "time_start": null,
- "time_total": "08:00:00",
- "todo_id": "c96r3a88u0k0b3e6hft0",
- "todo_name": null,
- "user_email": "anna@example.com",
- "user_id": 1,
- "user_name": "Anna Santos"
}
], - "totals": {
- "total_time": "2422:24:00",
- "total_rate": 184687.5,
- "total_cost": 164292.08,
- "total_uninvoiced": 184687.5,
- "total_overtime": "12:00:00",
- "total_breaks": "08:00:00",
- "total_rows": 150
}, - "has_next_page": true,
- "next_page_query_params": { }
}Gera relatórios com grupos de dados e colunas personalizadas
| date_execution_start | string <date> Example: date_execution_start=2024-01-01 Traz apenas horas cuja data de execução é maior ou igual à data informada. |
| date_execution_end | string <date> Example: date_execution_end=2024-01-30 Traz apenas horas cuja data de execução é menor ou igual à data informada. |
| project_id | Array of integers or guids Examples:
Filtra pelo ID do projeto. Use uma lista de IDs separada por vírgula para vários IDs. |
| task_id | Array of integers or guids Examples:
Filtra pelo ID da tarefa. Use uma lista de IDs separada por vírgula para vários IDs. |
| customer_id | Array of integers or guids Examples:
Filtra pelo ID do cliente. Use uma lista de IDs separada por vírgula para vários IDs. |
| user_id | Array of integers or guids Examples:
Filtra por usuário. Use uma lista de IDs separada por vírgula para vários IDs. |
| team_id | Array of integers or guids Examples:
Filtra responsáveis por equipe. Use uma lista de IDs separada por vírgula para vários IDs. |
| include_archived_users | boolean Default: false Example: include_archived_users=true Traz usuários ativos e arquivados. Por padrão, só usuários ativos são retornados. Esta opção só funciona quando |
| opt_export_columns | string Enum: "user_id" "user_name" "user_email" "user_active" "user_role" "user_is_owner" "user_work_start_at" "user_work_end_at" "user_cost_rate" "user_capacity_*" "task_id" "task_name" "todo_id" "todo_name" "project_id" "project_name" "project_budget_*" "customer_id" "customer_name" "time_billable" "time_non_billable" "billable_total" "billable_taxes_total" "billable_net_total" "billable_invoiced" "billable_uninvoiced" "cost_total" "cost_billable" "cost_non_billable" "margin_*" "custom_field_|:id:|" "custom_field_|:id:|_enum_name" Define as colunas opcionais que serão retornadas. Colunas usadas em |
| opt_group_by | string Enum: "date" "week" "month" "year" "user_id" "task_id" "todo_id" "project_id" "customer_id" "custom_field_|:id:|" Agrupa as horas por colunas. Use uma lista separada por vírgula para agrupar por várias colunas. |
| opt_report_template | string Default: null Enum: "days" "months" "users_and_days" "users_and_weeks" "users_and_months" Os modelos devolvem grupos mesmo quando estão vazios. Deixe vazio para o padrão. |
| capacity_filter_type | string Enum: "missing_percent_gte" "exceeded_percent_gte" "consumed_percent_lte" "logged_without_capacity" Filtro posterior usado só quando |
| capacity_filter_scope | string Default: "any_day" Enum: "any_day" "all_days" "period_total" Como a porcentagem de capacidade é aplicada. O padrão é |
| capacity_filter_value | string Example: capacity_filter_value=20 Limite percentual do filtro de capacidade. |
| opt_sort_direction | string Default: "asc" Enum: "asc" "desc" Direção da ordenação. |
| opt_sort_by | string Enum: "date" "week" "month" "year" "user_id" "task_id" "todo_id" "project_id" "customer_id" Ordena os itens por coluna. Use uma lista separada por vírgula para ordenar por várias colunas. Só colunas incluídas em |
{- "items": [
- {
- "details": {
- "group_key": "project_id",
- "group_type": "project",
- "level": 1
}, - "total": {
- "billable_invoiced": 84687.5,
- "billable_net_total": 169912.5,
- "billable_taxes_total": 14775,
- "billable_total": 184687.5,
- "billable_uninvoiced": 100000,
- "cost_billable": 148072.33,
- "cost_non_billable": 16219.75,
- "cost_total": 164292.08,
- "margin_percentage": 3.04,
- "margin_total": 5620.42,
- "time_billable": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}, - "time_non_billable": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}, - "time_percentage": 100,
- "time_percentage_overall": 100,
- "time_total": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}
}, - "items": [ ]
}, - {
- "details": {
- "group_key": "project_id",
- "group_type": "project",
- "level": 1
}, - "total": {
- "billable_invoiced": 84687.5,
- "billable_net_total": 169912.5,
- "billable_taxes_total": 14775,
- "billable_total": 184687.5,
- "billable_uninvoiced": 100000,
- "cost_billable": 148072.33,
- "cost_non_billable": 16219.75,
- "cost_total": 164292.08,
- "margin_percentage": 3.04,
- "margin_total": 5620.42,
- "time_billable": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}, - "time_non_billable": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}, - "time_percentage": 100,
- "time_percentage_overall": 100,
- "time_total": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}
}, - "items": [ ]
}
], - "total": {
- "billable_invoiced": 84687.5,
- "billable_net_total": 169912.5,
- "billable_taxes_total": 14775,
- "billable_total": 184687.5,
- "billable_uninvoiced": 100000,
- "cost_billable": 148072.33,
- "cost_non_billable": 16219.75,
- "cost_total": 164292.08,
- "margin_percentage": 3.04,
- "margin_total": 5620.42,
- "time_billable": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}, - "time_non_billable": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}, - "time_percentage": 100,
- "time_percentage_overall": 100,
- "time_total": {
- "time": "372:15:00",
- "hours": 372.25,
- "minutes": 22335,
- "seconds": 1340100
}
}
}Listar projetos
| id | Array of integers or guids Examples:
Filtra por ID. Use uma lista de IDs separada por vírgula para vários IDs. |
| customer_id | Array of integers or guids Examples:
Filtra pelo ID do cliente. Use uma lista de IDs separada por vírgula para vários IDs. |
| active | integer Example: active=1 Filtra pelo status ativo ("1" é ativo e "0" é arquivado) |
| custom_fields.{id} | string Default: null Example: custom_fields.{id}=10 Filtra registros por campos personalizados. Troque |
| opt_page_limit | integer [ 1 .. 100 ] Default: 50 Quantidade de itens a retornar |
| only_active_projects | boolean Default: false Quando verdadeiro, devolve só projetos ativos. É distinto do filtro |
| opt_sort_by | string Enum: "name" "customer_name" "budget" "budget_by" "time_total" "total_invoiced" "total_uninvoiced" "value_total" "active" "total_members" "total_active_tasks" "total_pending_todos" "date_created" Ordena os itens por coluna. Use uma lista separada por vírgula para ordenar por várias colunas. |
| opt_sort_direction | string Default: "asc" Enum: "asc" "desc" Direção da ordenação. |
| opt_show_total | boolean Quando verdadeiro, a resposta paginada inclui |
{- "data": [
- {
- "id": 7,
- "active": true,
- "billable": 0,
- "bill_by": "string",
- "budget": 160,
- "budget_by": "time",
- "budget_progress": 90.5,
- "contractor_id": 0,
- "customer_id": 7,
- "customer_name": "ACME",
- "created_by": 0,
- "description": "Activities regarding API development (dev, testing, documentation, rollout, etc)",
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "is_billable": true,
- "is_manager": true,
- "is_member": true,
- "name": "API development",
- "color": "#12B886",
- "privacy": 7,
- "privacy_s": "private",
- "rate": 110.3,
- "rate_start_at": "2023-01-31",
- "required_task": 0,
- "status": "active",
- "template": false,
- "budget_options": {
- "only_billable_time": true,
- "progress": 90.5,
- "consumed": 0,
- "remaining": 0,
- "exceed": 0
}, - "time_total": "120:00:00",
- "total_pending_todos": 4,
- "total_uninvoiced": 120,
- "total_active_tasks": 120,
- "total_invoiced": 120,
- "total_members": 120,
- "value_total": 120,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "51": {
- "type": "enum",
- "value": "139",
- "enum_name": "Cebola"
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "todo_permissions": {
- "member_visibility": "all_activities",
- "create": "all_members",
- "edit": "all_members",
- "complete": "all_members",
- "comment": "all_members",
- "assign": "all_members",
- "planning": "all_members",
- "move": "all_members",
- "delete": "all_members",
- "manage_lists": "all_members"
}, - "todo_allowed_actions": {
- "bypass": true,
- "create": true,
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true,
- "manage_lists": true
}
}
], - "has_next_page": true,
- "next_page_query_params": { },
- "totals": {
- "total_rows": 150
}
}Novo projeto
| active | boolean Projeto ativo. Nas listas, filtre com |
| bill_by | string Deprecated Não é mais necessário. |
| budget | integer Valor do orçamento |
| budget_by | string Enum: "billing" "time" "none" Tipo de orçamento |
| customer_id | integer ID do cliente. Todo projeto pertence a um cliente |
| description | string Descrição do projeto |
| is_billable | boolean Default: false Lançamentos do projeto são faturáveis por padrão |
| name required | string Nome do projeto |
| color | string Cor do projeto em hexadecimal. |
| privacy | integer Enum: 1 2 Projeto público ou privado ( |
| rate | integer Default: 0 Taxa horária faturável mais recente do projeto |
| rate_start_at_new | string Default: null Data de início da nova taxa. |
| required_task | integer Default: 0 Enum: 0 1 Tarefa obrigatória ao criar um lançamento de horas no projeto. |
| template | boolean Default: false O projeto é um modelo |
object Opções de orçamento. Na gravação, | |
| only_admin_publish | integer Deprecated Descontinuado. Ainda é aceito na gravação e não volta na resposta. Use |
| only_admin_see_others | integer Deprecated Descontinuado. Ainda é aceito na gravação e não volta na resposta. Use |
| project_id_source | integer Na criação, copia dados deste projeto. Não volta depois. |
| keep_from_source | Array of strings Partes a manter ao copiar |
object Quem pode executar cada ação de atividade neste projeto. |
{- "active": true,
- "bill_by": "string",
- "budget": 160,
- "budget_by": "time",
- "customer_id": 7,
- "description": "Activities regarding API development (dev, testing, documentation, rollout, etc)",
- "is_billable": true,
- "name": "API development",
- "color": "#12B886",
- "privacy": 7,
- "rate": 110.3,
- "rate_start_at_new": "2023-01-02",
- "required_task": 0,
- "template": false,
- "budget_options": {
- "only_billable_time": true
}, - "only_admin_publish": 0,
- "only_admin_see_others": 0,
- "project_id_source": 12,
- "keep_from_source": [
- "string"
], - "todo_permissions": {
- "member_visibility": "all_activities",
- "create": "all_members",
- "edit": "all_members",
- "complete": "all_members",
- "comment": "all_members",
- "assign": "all_members",
- "planning": "all_members",
- "move": "all_members",
- "delete": "all_members",
- "manage_lists": "all_members"
}, - "custom_fields": {
- "26": "120",
- "45": 150000,
- "51": "139",
- "73": "2026-10-07"
}
}{- "data": {
- "id": 7,
- "active": true,
- "billable": 0,
- "bill_by": "string",
- "budget": 160,
- "budget_by": "time",
- "budget_progress": 90.5,
- "contractor_id": 0,
- "customer_id": 7,
- "customer_name": "ACME",
- "created_by": 0,
- "description": "Activities regarding API development (dev, testing, documentation, rollout, etc)",
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "is_billable": true,
- "is_manager": true,
- "is_member": true,
- "name": "API development",
- "color": "#12B886",
- "privacy": 7,
- "privacy_s": "private",
- "rate": 110.3,
- "rate_start_at": "2023-01-31",
- "required_task": 0,
- "status": "active",
- "template": false,
- "budget_options": {
- "only_billable_time": true,
- "progress": 90.5,
- "consumed": 0,
- "remaining": 0,
- "exceed": 0
}, - "time_total": "120:00:00",
- "total_pending_todos": 4,
- "total_uninvoiced": 120,
- "total_active_tasks": 120,
- "total_invoiced": 120,
- "total_members": 120,
- "value_total": 120,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "51": {
- "type": "enum",
- "value": "139",
- "enum_name": "Cebola"
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "todo_permissions": {
- "member_visibility": "all_activities",
- "create": "all_members",
- "edit": "all_members",
- "complete": "all_members",
- "comment": "all_members",
- "assign": "all_members",
- "planning": "all_members",
- "move": "all_members",
- "delete": "all_members",
- "manage_lists": "all_members"
}, - "todo_allowed_actions": {
- "bypass": true,
- "create": true,
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true,
- "manage_lists": true
}
}
}Obtém um projeto pelo ID
| id required | integer Example: 57 ID do projeto |
| opt_expand | string Value: "custom_fields_settings" Envie |
{- "data": {
- "id": 7,
- "active": true,
- "billable": 0,
- "bill_by": "string",
- "budget": 160,
- "budget_by": "time",
- "budget_progress": 90.5,
- "contractor_id": 0,
- "customer_id": 7,
- "customer_name": "ACME",
- "created_by": 0,
- "description": "Activities regarding API development (dev, testing, documentation, rollout, etc)",
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "is_billable": true,
- "is_manager": true,
- "is_member": true,
- "name": "API development",
- "color": "#12B886",
- "privacy": 7,
- "privacy_s": "private",
- "rate": 110.3,
- "rate_start_at": "2023-01-31",
- "required_task": 0,
- "status": "active",
- "template": false,
- "budget_options": {
- "only_billable_time": true,
- "progress": 90.5,
- "consumed": 0,
- "remaining": 0,
- "exceed": 0
}, - "time_total": "120:00:00",
- "total_pending_todos": 4,
- "total_uninvoiced": 120,
- "total_active_tasks": 120,
- "total_invoiced": 120,
- "total_members": 120,
- "value_total": 120,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "51": {
- "type": "enum",
- "value": "139",
- "enum_name": "Cebola"
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "todo_permissions": {
- "member_visibility": "all_activities",
- "create": "all_members",
- "edit": "all_members",
- "complete": "all_members",
- "comment": "all_members",
- "assign": "all_members",
- "planning": "all_members",
- "move": "all_members",
- "delete": "all_members",
- "manage_lists": "all_members"
}, - "todo_allowed_actions": {
- "bypass": true,
- "create": true,
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true,
- "manage_lists": true
}
}
}| id required | integer Example: 57 ID do projeto |
| active | boolean Projeto ativo. Nas listas, filtre com |
| bill_by | string Deprecated Não é mais necessário. |
| budget | integer Valor do orçamento |
| budget_by | string Enum: "billing" "time" "none" Tipo de orçamento |
| customer_id | integer ID do cliente. Todo projeto pertence a um cliente |
| description | string Descrição do projeto |
| is_billable | boolean Default: false Lançamentos do projeto são faturáveis por padrão |
| name required | string Nome do projeto |
| color | string Cor do projeto em hexadecimal. |
| privacy | integer Enum: 1 2 Projeto público ou privado ( |
| rate | integer Default: 0 Taxa horária faturável mais recente do projeto |
| rate_start_at_new | string Default: null Data de início da nova taxa. |
| required_task | integer Default: 0 Enum: 0 1 Tarefa obrigatória ao criar um lançamento de horas no projeto. |
| template | boolean Default: false O projeto é um modelo |
object Opções de orçamento. Na gravação, | |
| only_admin_publish | integer Deprecated Descontinuado. Ainda é aceito na gravação e não volta na resposta. Use |
| only_admin_see_others | integer Deprecated Descontinuado. Ainda é aceito na gravação e não volta na resposta. Use |
| project_id_source | integer Na criação, copia dados deste projeto. Não volta depois. |
| keep_from_source | Array of strings Partes a manter ao copiar |
object Quem pode executar cada ação de atividade neste projeto. |
{- "active": true,
- "bill_by": "string",
- "budget": 160,
- "budget_by": "time",
- "customer_id": 7,
- "description": "Activities regarding API development (dev, testing, documentation, rollout, etc)",
- "is_billable": true,
- "name": "API development",
- "color": "#12B886",
- "privacy": 7,
- "rate": 110.3,
- "rate_start_at_new": "2023-01-02",
- "required_task": 0,
- "template": false,
- "budget_options": {
- "only_billable_time": true
}, - "only_admin_publish": 0,
- "only_admin_see_others": 0,
- "project_id_source": 12,
- "keep_from_source": [
- "string"
], - "todo_permissions": {
- "member_visibility": "all_activities",
- "create": "all_members",
- "edit": "all_members",
- "complete": "all_members",
- "comment": "all_members",
- "assign": "all_members",
- "planning": "all_members",
- "move": "all_members",
- "delete": "all_members",
- "manage_lists": "all_members"
}, - "custom_fields": {
- "26": "120",
- "45": 150000,
- "51": "139",
- "73": "2026-10-07"
}
}{- "data": {
- "id": 7,
- "active": true,
- "billable": 0,
- "bill_by": "string",
- "budget": 160,
- "budget_by": "time",
- "budget_progress": 90.5,
- "contractor_id": 0,
- "customer_id": 7,
- "customer_name": "ACME",
- "created_by": 0,
- "description": "Activities regarding API development (dev, testing, documentation, rollout, etc)",
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "is_billable": true,
- "is_manager": true,
- "is_member": true,
- "name": "API development",
- "color": "#12B886",
- "privacy": 7,
- "privacy_s": "private",
- "rate": 110.3,
- "rate_start_at": "2023-01-31",
- "required_task": 0,
- "status": "active",
- "template": false,
- "budget_options": {
- "only_billable_time": true,
- "progress": 90.5,
- "consumed": 0,
- "remaining": 0,
- "exceed": 0
}, - "time_total": "120:00:00",
- "total_pending_todos": 4,
- "total_uninvoiced": 120,
- "total_active_tasks": 120,
- "total_invoiced": 120,
- "total_members": 120,
- "value_total": 120,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "51": {
- "type": "enum",
- "value": "139",
- "enum_name": "Cebola"
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "todo_permissions": {
- "member_visibility": "all_activities",
- "create": "all_members",
- "edit": "all_members",
- "complete": "all_members",
- "comment": "all_members",
- "assign": "all_members",
- "planning": "all_members",
- "move": "all_members",
- "delete": "all_members",
- "manage_lists": "all_members"
}, - "todo_allowed_actions": {
- "bypass": true,
- "create": true,
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true,
- "manage_lists": true
}
}
}Lista os membros do projeto
| id required | integer Example: 57 ID do projeto |
{- "data": [
- {
- "id": 88,
- "user_email": "dyorg@rabbit.com",
- "user_name": "Dyorg",
- "manager": 1,
- "date_created": "2022-01-01 12:33:00",
- "active": 1,
- "is_billable": true,
- "rate": 110.3,
- "rate_start_at": "2023-01-31",
- "billable": 0,
- "budget": 40,
- "user_role": "member",
- "user_profile_photo": "string",
- "user_profile_photo_url": "string",
- "project_id": 57,
- "user_id": 1,
- "teams": [ ]
}
]
}Adiciona o usuário como membro do projeto e define a taxa específica dele nesse projeto
| id required | integer Example: 57 ID do projeto |
| id required | integer Example: 5 ID do usuário |
| manager | integer Default: 0 O membro tem privilégio de gestor neste projeto ("1" é verdadeiro e "0" é falso) |
| is_billable | boolean Default: true O tempo do membro é faturável neste projeto |
| rate | string Default: "project houly rate" Taxa horária faturável mais recente do membro do projeto. |
| budget | number Orçamento deste membro no projeto. |
| rate_start_at_new | string Default: null Data de início da nova taxa. |
{- "manager": 1,
- "is_billable": true,
- "rate": 110.3,
- "budget": 40,
- "rate_start_at_new": "2023-01-02"
}{- "data": {
- "id": 88,
- "user_email": "dyorg@rabbit.com",
- "user_name": "Dyorg",
- "manager": 1,
- "date_created": "2022-01-01 12:33:00",
- "active": 1,
- "is_billable": true,
- "rate": 110.3,
- "rate_start_at": "2023-01-31",
- "billable": 0,
- "budget": 40,
- "user_role": "member",
- "user_profile_photo": "string",
- "user_profile_photo_url": "string",
- "project_id": 57,
- "user_id": 1,
- "teams": [ ]
}
}Lista usuários ativos que ainda não são membros do projeto
| id required | integer Example: 57 ID do projeto |
{- "data": [
- {
- "id": 4,
- "name": "Anne",
- "email": "anne@rabbitwork.io",
- "profile_photo": "string",
- "profile_photo_url": "string",
- "teams": [
- {
- "id": 11,
- "name": "Sales"
}
]
}
]
}Lista os membros do projeto
| id required | integer Example: 57 ID do projeto |
| checked | boolean Filtra as tarefas do projeto pela flag de conclusão. |
{- "data": [
- {
- "id": 88,
- "project_id": 57,
- "task_id": 12,
- "task_name": "Meeting",
- "task_description": "Meeting description",
- "is_billable_default": 1,
- "date_created": "2022-01-01 12:33:00",
- "checked": 1,
- "is_billable": true,
- "budget": 20,
- "rate": 110,
- "color": "#4C6EF5",
- "user_id": 5,
- "user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "billable": 0
}
]
}Adiciona a tarefa ao projeto e define a taxa específica dela nesse projeto
| id required | integer Example: 57 ID do projeto |
| id required | integer Example: 25 ID da tarefa |
| is_billable | boolean Default: true O tempo lançado nesta tarefa é faturável ou não neste projeto |
| budget | number Orçamento desta tarefa no projeto. |
| rate | number Taxa faturável desta tarefa no projeto. |
{- "is_billable": true,
- "budget": 20,
- "rate": 110
}{- "data": {
- "id": 88,
- "project_id": 57,
- "task_id": 12,
- "task_name": "Meeting",
- "task_description": "Meeting description",
- "is_billable_default": 1,
- "date_created": "2022-01-01 12:33:00",
- "checked": 1,
- "is_billable": true,
- "budget": 20,
- "rate": 110,
- "color": "#4C6EF5",
- "user_id": 5,
- "user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "billable": 0
}
}Marca a tarefa como concluída no projeto
| id required | integer Example: 57 ID do projeto |
| id required | integer Example: 25 ID da tarefa |
{- "data": {
- "id": 88,
- "project_id": 57,
- "task_id": 12,
- "task_name": "Meeting",
- "task_description": "Meeting description",
- "is_billable_default": 1,
- "date_created": "2022-01-01 12:33:00",
- "checked": 1,
- "is_billable": true,
- "budget": 20,
- "rate": 110,
- "color": "#4C6EF5",
- "user_id": 5,
- "user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "billable": 0
}
}Marca a tarefa como não concluída no projeto
| id required | integer Example: 57 ID do projeto |
| id required | integer Example: 25 ID da tarefa |
{- "data": {
- "id": 88,
- "project_id": 57,
- "task_id": 12,
- "task_name": "Meeting",
- "task_description": "Meeting description",
- "is_billable_default": 1,
- "date_created": "2022-01-01 12:33:00",
- "checked": 1,
- "is_billable": true,
- "budget": 20,
- "rate": 110,
- "color": "#4C6EF5",
- "user_id": 5,
- "user_name": "Dyorg",
- "user_email": "dyorg@rabbitwork.io",
- "billable": 0
}
}Lista tarefas ativas que ainda não estão no projeto
| id required | integer Example: 57 ID do projeto |
{- "data": [
- {
- "id": 1,
- "name": "ACME",
- "description": "Description...",
- "is_billable_default": true,
- "color": "#4C6EF5",
- "active": 1,
- "date_created": "2022-01-01 12:33:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
]
}Listas de atividades organizam o trabalho dentro dos projetos
| id required | integer Example: 57 ID do projeto |
| id | string Filtra pelo id da lista. |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "name": "Ideas",
- "color": "#4C6EF5",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1
}
], - "has_next_page": true,
- "next_page_query_params": { },
- "totals": {
- "total_rows": 150
}
}Nova lista de atividades
| project_id required | integer ID do projeto. Não é possível trocar o projeto depois da criação. |
| name required | string Nome da lista de atividades |
| color | string or null Cor da lista |
| position | integer Default: 1 Posição da lista de atividades no projeto para ordenação. Deve ser um inteiro maior que 0 |
{- "project_id": 2,
- "name": "Ideas",
- "color": "#4C6EF5",
- "position": 3
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "name": "Ideas",
- "color": "#4C6EF5",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1
}
}Obtém uma lista de atividades pelo ID
| id required | integer Example: 25 ID da lista de atividades |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "name": "Ideas",
- "color": "#4C6EF5",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1
}
}| id required | integer Example: 25 ID da lista de atividades |
| name required | string Nome da lista de atividades |
| color | string or null Cor da lista |
| position | integer Default: 1 Posição da lista de atividades no projeto para ordenação. Deve ser um inteiro maior que 0 |
{- "name": "Ideas",
- "color": "#4C6EF5",
- "position": 3
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "name": "Ideas",
- "color": "#4C6EF5",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1
}
}Restaura uma lista de atividades excluída
| id required | integer Example: 25 ID da lista de atividades |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "name": "Ideas",
- "color": "#4C6EF5",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1
}
}Atividades são a lista de trabalho dos projetos
| id | guid Example: id=c96r3a88u0k0b3e6hft0 Filtra pelo ID da atividade. Use uma lista de IDs separada por vírgula para vários IDs. |
| project_id | Array of integers or guids Examples:
Filtra pelo ID do projeto. Use uma lista de IDs separada por vírgula para vários IDs. |
| is_completed | boolean Example: is_completed=false Filtra atividades concluídas ou não |
| only_active_projects | boolean Example: only_active_projects=true Traz apenas atividades de projetos ativos |
| only_my_projects | boolean Example: only_my_projects=true Traz apenas atividades de projetos em que o usuário autenticado é membro. |
| trashed | boolean Default: false Quando verdadeiro, inclui atividades na lixeira dos últimos 30 dias. Também vale no detalhe. |
| parent_todo_id | string Filtra pela atividade pai. |
| only_root_todos | boolean Quando verdadeiro, devolve só atividades sem pai. |
| has_name | string Filtra atividades cujo nome corresponde a este texto. |
| enrich_hierarchy_display | boolean Default: false Quando verdadeiro, cada item da lista inclui |
| user_id | Array of integers or guids Examples:
Filtra pelo responsável. Use uma lista de IDs separada por vírgula para vários IDs. |
| team_id | Array of integers or guids Examples:
Filtra responsáveis por equipe. Use uma lista de IDs separada por vírgula para vários IDs. |
| due_on | string <date> Example: due_on=2024-01-15 Traz apenas atividades cujo vencimento é exatamente a data informada. |
| due_on_gte | string <date> Example: due_on_gte=2024-01-01 Traz apenas atividades com vencimento maior ou igual à data informada. |
| due_on_lte | string <date> Example: due_on_lte=2024-01-30 Traz apenas atividades com vencimento menor ou igual à data informada. |
| opt_page_limit | integer [ 1 .. 100 ] Default: 50 Quantidade de itens a retornar |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "description": "To-do description...",
- "is_completed": true,
- "name": "Buy a coffee",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1,
- "todo_list_id": 10,
- "todo_list_name": "Meeting",
- "todo_list_position": 1,
- "time_estimate": "14:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "due_on": "2024-01-15",
- "parent_todo_id": "c96r3a88u0k0b3e6hft0",
- "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "time_total": "04:00:00",
- "subtodo_time_estimate_sum": "string",
- "subtodo_time_total_sum": "string",
- "time_progress": 50,
- "attachments_count": 1,
- "comments_count": 2,
- "subtodos_count": 3,
- "todo_list_color": "#4C6EF5",
- "changed_by_user_name": "string",
- "user_profile_photo": "string",
- "user_profile_photo_url": "string",
- "todo_allowed_actions": {
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true
}, - "ancestor_name_path": "string",
- "name_path": "string",
- "depth": 1,
- "tags": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Urgent",
- "color": "#E85D4C",
- "is_highlighted": true
}
]
}
], - "has_next_page": true,
- "next_page_query_params": { },
- "totals": {
- "total_rows": 150
}
}Nova atividade
| project_id required | integer ID do projeto. Não é possível trocar o projeto depois da criação. |
| description | string Notas sobre esta atividade |
| is_completed | boolean Default: false A atividade está concluída |
| name required | string Nome da atividade |
| position | integer Default: 1 Posição da atividade no projeto para ordenação. Deve ser um inteiro maior que 0 |
| todo_list_id | string ID da lista de atividades |
| time_estimate | string Default: "00:00:00" Tempo estimado para concluir |
| user_id | integer ID do responsável |
| due_on | string or null <date> Data de vencimento da atividade |
| parent_todo_id | string or null ID da atividade pai quando este registro é uma subtarefa |
| tag_ids | Array of strings Substitui as tags da atividade por esta lista de IDs. Envie uma lista vazia para limpar. |
| highlighted_tag_id | string or null ID da tag a destacar. Precisa estar em tag_ids. Null remove o destaque. |
{- "project_id": 2,
- "description": "To-do description...",
- "is_completed": true,
- "name": "Buy a coffee",
- "position": 3,
- "todo_list_id": 10,
- "time_estimate": "14:00:00",
- "user_id": 5,
- "due_on": "2024-01-15",
- "parent_todo_id": "c96r3a88u0k0b3e6hft0",
- "tag_ids": [
- "c96r3a88u0k0b3e6hft0"
], - "highlighted_tag_id": "c96r3a88u0k0b3e6hft0"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "description": "To-do description...",
- "is_completed": true,
- "name": "Buy a coffee",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1,
- "todo_list_id": 10,
- "todo_list_name": "Meeting",
- "todo_list_position": 1,
- "time_estimate": "14:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "due_on": "2024-01-15",
- "parent_todo_id": "c96r3a88u0k0b3e6hft0",
- "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "time_total": "04:00:00",
- "subtodo_time_estimate_sum": "string",
- "subtodo_time_total_sum": "string",
- "time_progress": 50,
- "attachments_count": 1,
- "comments_count": 2,
- "subtodos_count": 3,
- "todo_list_color": "#4C6EF5",
- "changed_by_user_name": "string",
- "user_profile_photo": "string",
- "user_profile_photo_url": "string",
- "todo_allowed_actions": {
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true
}, - "ancestor_name_path": "string",
- "name_path": "string",
- "depth": 1,
- "tags": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Urgent",
- "color": "#E85D4C",
- "is_highlighted": true
}
]
}
}Obtém uma atividade pelo ID
| id required | integer Example: 25 ID da atividade |
| trashed | boolean Default: false Quando verdadeiro, inclui atividades na lixeira dos últimos 30 dias. Também vale no detalhe. |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "description": "To-do description...",
- "is_completed": true,
- "name": "Buy a coffee",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1,
- "todo_list_id": 10,
- "todo_list_name": "Meeting",
- "todo_list_position": 1,
- "time_estimate": "14:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "due_on": "2024-01-15",
- "parent_todo_id": "c96r3a88u0k0b3e6hft0",
- "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "time_total": "04:00:00",
- "subtodo_time_estimate_sum": "string",
- "subtodo_time_total_sum": "string",
- "time_progress": 50,
- "attachments_count": 1,
- "comments_count": 2,
- "subtodos_count": 3,
- "todo_list_color": "#4C6EF5",
- "changed_by_user_name": "string",
- "user_profile_photo": "string",
- "user_profile_photo_url": "string",
- "todo_allowed_actions": {
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true
}, - "ancestor_name_path": "string",
- "name_path": "string",
- "depth": 1,
- "tags": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Urgent",
- "color": "#E85D4C",
- "is_highlighted": true
}
]
}
}| id required | integer Example: 25 ID da atividade |
| description | string Notas sobre esta atividade |
| is_completed | boolean Default: false A atividade está concluída |
| name required | string Nome da atividade |
| position | integer Default: 1 Posição da atividade no projeto para ordenação. Deve ser um inteiro maior que 0 |
| todo_list_id | string ID da lista de atividades |
| time_estimate | string Default: "00:00:00" Tempo estimado para concluir |
| user_id | integer ID do responsável |
| due_on | string or null <date> Data de vencimento da atividade |
| parent_todo_id | string or null ID da atividade pai quando este registro é uma subtarefa |
| tag_ids | Array of strings Substitui as tags da atividade por esta lista de IDs. Envie uma lista vazia para limpar. |
| highlighted_tag_id | string or null ID da tag a destacar. Precisa estar em tag_ids. Null remove o destaque. |
{- "description": "To-do description...",
- "is_completed": true,
- "name": "Buy a coffee",
- "position": 3,
- "todo_list_id": 10,
- "time_estimate": "14:00:00",
- "user_id": 5,
- "due_on": "2024-01-15",
- "parent_todo_id": "c96r3a88u0k0b3e6hft0",
- "tag_ids": [
- "c96r3a88u0k0b3e6hft0"
], - "highlighted_tag_id": "c96r3a88u0k0b3e6hft0"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "description": "To-do description...",
- "is_completed": true,
- "name": "Buy a coffee",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1,
- "todo_list_id": 10,
- "todo_list_name": "Meeting",
- "todo_list_position": 1,
- "time_estimate": "14:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "due_on": "2024-01-15",
- "parent_todo_id": "c96r3a88u0k0b3e6hft0",
- "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "time_total": "04:00:00",
- "subtodo_time_estimate_sum": "string",
- "subtodo_time_total_sum": "string",
- "time_progress": 50,
- "attachments_count": 1,
- "comments_count": 2,
- "subtodos_count": 3,
- "todo_list_color": "#4C6EF5",
- "changed_by_user_name": "string",
- "user_profile_photo": "string",
- "user_profile_photo_url": "string",
- "todo_allowed_actions": {
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true
}, - "ancestor_name_path": "string",
- "name_path": "string",
- "depth": 1,
- "tags": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Urgent",
- "color": "#E85D4C",
- "is_highlighted": true
}
]
}
}Restaura uma atividade excluída
| id required | integer Example: 25 ID da atividade |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "changed_by": 5,
- "created_by": 5,
- "created_by_user_name": "Dyorg",
- "changed_at": "2022-01-03 10:01:00",
- "created_at": "2022-01-01 12:33:00",
- "description": "To-do description...",
- "is_completed": true,
- "name": "Buy a coffee",
- "position": 3,
- "project_id": 2,
- "project_name": "Processo ISO",
- "project_status": 1,
- "todo_list_id": 10,
- "todo_list_name": "Meeting",
- "todo_list_position": 1,
- "time_estimate": "14:00:00",
- "user_id": 5,
- "user_name": "Dyorg",
- "due_on": "2024-01-15",
- "parent_todo_id": "c96r3a88u0k0b3e6hft0",
- "external_ref": {
- "provider": "jira",
- "entity_type": "issue",
- "entity_id": "API-42",
- "parent_id": "string",
- "parent_type": "string",
- "display_name": "string",
- "alt_id": "string"
}, - "time_total": "04:00:00",
- "subtodo_time_estimate_sum": "string",
- "subtodo_time_total_sum": "string",
- "time_progress": 50,
- "attachments_count": 1,
- "comments_count": 2,
- "subtodos_count": 3,
- "todo_list_color": "#4C6EF5",
- "changed_by_user_name": "string",
- "user_profile_photo": "string",
- "user_profile_photo_url": "string",
- "todo_allowed_actions": {
- "edit": true,
- "complete": true,
- "delete": true,
- "comment": true,
- "move": true
}, - "ancestor_name_path": "string",
- "name_path": "string",
- "depth": 1,
- "tags": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Urgent",
- "color": "#E85D4C",
- "is_highlighted": true
}
]
}
}Listar clientes
| id | Array of integers or guids Examples:
Filtra por ID. Use uma lista de IDs separada por vírgula para vários IDs. |
| customer_id | integer Alias de |
| active | integer Example: active=1 Filtra pelo status ativo ("1" é ativo e "0" é arquivado) |
{- "data": [
- {
- "id": 1,
- "name": "ACME",
- "observation": "Description...",
- "email": "billing@acme.com",
- "phone": "+55 11 99999-0000",
- "phone2": "string",
- "phone3": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "country": "string",
- "cnpj": "string",
- "cpf": "string",
- "contact": "string",
- "type_person": "string",
- "active": true,
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
]
}Novo cliente
| name required | string Nome do cliente |
| observation | string Default: null Descrição do cliente |
string E-mail do cliente. | |
| phone | string Telefone principal. |
| phone2 | string or null Segundo telefone. |
| phone3 | string or null Terceiro telefone. |
| address | string Endereço. |
| city | string Cidade. |
| state | string Estado ou região. |
| country | string País. |
| cnpj | string CNPJ. |
| cpf | string CPF. |
| active | boolean Indica se o cliente está ativo. A resposta usa boolean. |
{- "name": "ACME",
- "observation": "Description...",
- "email": "billing@acme.com",
- "phone": "+55 11 99999-0000",
- "phone2": "string",
- "phone3": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "country": "string",
- "cnpj": "string",
- "cpf": "string",
- "active": true,
- "custom_fields": {
- "26": "120",
- "45": 150000,
- "73": "2026-10-07"
}
}{- "data": {
- "id": 1,
- "name": "ACME",
- "observation": "Description...",
- "email": "billing@acme.com",
- "phone": "+55 11 99999-0000",
- "phone2": "string",
- "phone3": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "country": "string",
- "cnpj": "string",
- "cpf": "string",
- "contact": "string",
- "type_person": "string",
- "active": true,
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Obtém um cliente pelo ID
| id required | integer Example: 25 ID do cliente |
{- "data": {
- "id": 1,
- "name": "ACME",
- "observation": "Description...",
- "email": "billing@acme.com",
- "phone": "+55 11 99999-0000",
- "phone2": "string",
- "phone3": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "country": "string",
- "cnpj": "string",
- "cpf": "string",
- "contact": "string",
- "type_person": "string",
- "active": true,
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}| id required | integer Example: 25 ID do cliente |
| name required | string Nome do cliente |
| observation | string Default: null Descrição do cliente |
string E-mail do cliente. | |
| phone | string Telefone principal. |
| phone2 | string or null Segundo telefone. |
| phone3 | string or null Terceiro telefone. |
| address | string Endereço. |
| city | string Cidade. |
| state | string Estado ou região. |
| country | string País. |
| cnpj | string CNPJ. |
| cpf | string CPF. |
| active | boolean Indica se o cliente está ativo. A resposta usa boolean. |
{- "name": "ACME",
- "observation": "Description...",
- "email": "billing@acme.com",
- "phone": "+55 11 99999-0000",
- "phone2": "string",
- "phone3": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "country": "string",
- "cnpj": "string",
- "cpf": "string",
- "active": true,
- "custom_fields": {
- "26": "120",
- "45": 150000,
- "73": "2026-10-07"
}
}{- "data": {
- "id": 1,
- "name": "ACME",
- "observation": "Description...",
- "email": "billing@acme.com",
- "phone": "+55 11 99999-0000",
- "phone2": "string",
- "phone3": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "country": "string",
- "cnpj": "string",
- "cpf": "string",
- "contact": "string",
- "type_person": "string",
- "active": true,
- "date_created": "2022-01-01 12:33:00",
- "date_changed": "2022-01-03 10:01:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Listar tarefas
| id | Array of integers or guids Examples:
Filtra por ID. Use uma lista de IDs separada por vírgula para vários IDs. |
| active | integer Example: active=1 Filtra pelo status ativo ("1" é ativo e "0" é arquivado) |
{- "data": [
- {
- "id": 1,
- "name": "ACME",
- "description": "Description...",
- "is_billable_default": true,
- "color": "#4C6EF5",
- "active": 1,
- "date_created": "2022-01-01 12:33:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
]
}Nova tarefa
| name | string Nome da tarefa |
| description | string Default: null Descrição da tarefa |
| color | string Cor da tarefa em hexadecimal. |
| is_billable_default | boolean Default: false Define esta tarefa como faturável por padrão quando for adicionada a um projeto |
| active | integer Enum: 0 1 1 ativo, 0 arquivado. |
object No salvamento, um mapa do ID do campo personalizado para o valor simples: texto, número, data ( |
{- "name": "ACME",
- "description": "Description...",
- "color": "#4C6EF5",
- "is_billable_default": true,
- "active": 1,
- "custom_fields": {
- "26": "120",
- "45": 150000,
- "73": "2026-10-07"
}
}{- "data": {
- "id": 1,
- "name": "ACME",
- "description": "Description...",
- "is_billable_default": true,
- "color": "#4C6EF5",
- "active": 1,
- "date_created": "2022-01-01 12:33:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Obtém uma tarefa pelo ID
| id required | integer Example: 25 ID da tarefa |
{- "data": {
- "id": 1,
- "name": "ACME",
- "description": "Description...",
- "is_billable_default": true,
- "color": "#4C6EF5",
- "active": 1,
- "date_created": "2022-01-01 12:33:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}| id required | integer Example: 25 ID da tarefa |
| name | string Nome da tarefa |
| description | string Default: null Descrição da tarefa |
| color | string Cor da tarefa em hexadecimal. |
| is_billable_default | boolean Default: false Define esta tarefa como faturável por padrão quando for adicionada a um projeto |
| active | integer Enum: 0 1 1 ativo, 0 arquivado. |
object No salvamento, um mapa do ID do campo personalizado para o valor simples: texto, número, data ( |
{- "name": "ACME",
- "description": "Description...",
- "color": "#4C6EF5",
- "is_billable_default": true,
- "active": 1,
- "custom_fields": {
- "26": "120",
- "45": 150000,
- "73": "2026-10-07"
}
}{- "data": {
- "id": 1,
- "name": "ACME",
- "description": "Description...",
- "is_billable_default": true,
- "color": "#4C6EF5",
- "active": 1,
- "date_created": "2022-01-01 12:33:00",
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}
}
}Listar usuários
| id | Array of integers or guids Examples:
Filtra por ID. Use uma lista de IDs separada por vírgula para vários IDs. |
| active | integer Example: active=1 Filtra pelo status ativo ("1" é ativo e "0" é arquivado) |
{- "data": [
- {
- "active": 1,
- "assigned_team_ids": [ ],
- "auto_assign_new_users": false,
- "billable_rate_default": null,
- "capacity_per_day": null,
- "cost_rate": "65",
- "cost_rate_start_at": null,
- "count_employees": 5,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "date_changed": "2024-05-20T13:36:46-0300",
- "date_created": "2022-02-10T15:06:32-0300",
- "date_deleted": null,
- "email": "name@example.com",
- "id": 1,
- "last_calendar_start_at": "2026-04-01",
- "profile_photo": "9f1c0a.png",
- "total_projects": 12,
- "total_assigned_users": 4,
- "is_billable_default": true,
- "is_owner": true,
- "manager_email": null,
- "manager_id": null,
- "manager_name": null,
- "manage_restricted_teams": false,
- "name": "Anna Santos",
- "owner": true,
- "permissions": [
- "can_manage_assigned_users"
], - "role": "regular",
- "status": "active",
- "teams": [
- {
- "id": 1,
- "name": "Projects"
}
], - "work_days": null,
- "work_end_at": null,
- "work_start_at": null
}
]
}Novo usuário
| email required | string E-mail do usuário (obrigatório na criação). |
| active | integer Default: 1
|
| auto_assign_new_users | boolean Default: false Quando true, usuários novos são atribuídos automaticamente a este usuário. Vale para um superusuário. Na edição, envie só para alterar. |
| billable_rate_default | number or null <double> Default: null Taxa faturável padrão do usuário. Na edição, envie só para alterar. |
| capacity_per_day | number or null <float> Default: null Capacidade diária de trabalho do usuário, em horas. Na edição, envie só para alterar. |
| cost_rate | string or null Default: null Taxa de custo na gravação; na leitura, a taxa vigente. Na edição, envie só para alterar. |
| cost_rate_start_at_new | string or null <date> Default: null Data de início de uma nova taxa de custo na edição. Se omitida no editar, a taxa atual é substituída. Na edição parcial, envie junto com |
| last_calendar_id | integer or null Default: null Calendário de trabalho a atribuir ao usuário. Na edição, envie só para alterar. |
| last_calendar_start_at_new | string or null <date> Default: null Data de início de um novo período de calendário na edição. Se omitida no editar, o período atual é atualizado. |
| is_billable_default | boolean Default: true Indica se o tempo é faturável por padrão. Na edição, envie só para alterar. |
| manager_id | integer or null Default: null ID do gestor. Referencia o usuário que é gestor deste usuário. Na edição, envie só para alterar. |
| manage_restricted_teams | boolean Deprecated (Descontinuado) Indica se o usuário pode gerenciar equipes restritas. Vale apenas para o papel |
| name required | string Nome do usuário. Na edição, envie só para alterar. |
Array of "can_manage_own_projects" (string) or "can_time_log_for_assigned_users" (string) or "can_manage_all_customers" (string) or "can_manage_all_tasks" (string) or "can_manage_assigned_users" (string) or "can_report_costs_of_assigned_users" (string) or "can_edit_costs_of_assigned_users" (string) or "can_report_billing_of_assigned_users" (string) or "can_report_billing_of_managed_projects" (string) or "can_edit_billing_of_managed_projects" (string) or "can_mark_entries_as_invoiced" (string) or "can_approve_timesheets" (string) Permissões extras de um superusuário. Envie a lista completa. Uma lista vazia limpa as permissões. Expanda items para ver cada valor permitido e o que ele autoriza. | |
| role | string Default: "regular" Enum: "admin" "regular" "super" "manager" Papel de permissão do usuário. Na edição, envie só para alterar; omitir não volta ao padrão de criação. |
| work_days | Array of integers or null Default: null Dias de trabalho do usuário, de 0 a 6. 0 é domingo e 6 é sábado. Na edição, envie só para alterar. |
| work_end_at | string <time> Horário de fim do trabalho, usado no painel de capacidade |
| work_start_at | string <time> Horário de início do trabalho, usado no painel de capacidade |
{- "email": "anne@rabbitwork.io",
- "active": 1,
- "auto_assign_new_users": false,
- "billable_rate_default": null,
- "capacity_per_day": null,
- "cost_rate": null,
- "cost_rate_start_at_new": null,
- "last_calendar_id": null,
- "last_calendar_start_at_new": null,
- "is_billable_default": true,
- "manager_id": null,
- "manage_restricted_teams": false,
- "name": "string",
- "permissions": [
- "can_manage_assigned_users"
], - "role": "regular",
- "work_days": null,
- "work_end_at": null,
- "work_start_at": null,
- "custom_fields": {
- "26": "120",
- "45": 150000,
- "73": "2026-10-07"
}
}{- "data": {
- "active": 1,
- "assigned_team_ids": [ ],
- "auto_assign_new_users": false,
- "billable_rate_default": null,
- "capacity_per_day": null,
- "cost_rate": "65",
- "cost_rate_start_at": null,
- "count_employees": 5,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "date_changed": "2024-05-20T13:36:46-0300",
- "date_created": "2022-02-10T15:06:32-0300",
- "date_deleted": null,
- "email": "name@example.com",
- "id": 1,
- "last_calendar_start_at": "2026-04-01",
- "profile_photo": "9f1c0a.png",
- "total_projects": 12,
- "total_assigned_users": 4,
- "is_billable_default": true,
- "is_owner": true,
- "manager_email": null,
- "manager_id": null,
- "manager_name": null,
- "manage_restricted_teams": false,
- "name": "Anna Santos",
- "owner": true,
- "permissions": [
- "can_manage_assigned_users"
], - "role": "regular",
- "status": "active",
- "teams": [
- {
- "id": 1,
- "name": "Projects"
}
], - "work_days": null,
- "work_end_at": null,
- "work_start_at": null
}
}Obtém um usuário pelo ID
| id required | integer Example: 5 ID do usuário |
{- "data": {
- "active": 1,
- "assigned_team_ids": [ ],
- "auto_assign_new_users": false,
- "billable_rate_default": null,
- "capacity_per_day": null,
- "cost_rate": "65",
- "cost_rate_start_at": null,
- "count_employees": 5,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "date_changed": "2024-05-20T13:36:46-0300",
- "date_created": "2022-02-10T15:06:32-0300",
- "date_deleted": null,
- "email": "name@example.com",
- "id": 1,
- "last_calendar_start_at": "2026-04-01",
- "profile_photo": "9f1c0a.png",
- "total_projects": 12,
- "total_assigned_users": 4,
- "is_billable_default": true,
- "is_owner": true,
- "manager_email": null,
- "manager_id": null,
- "manager_name": null,
- "manage_restricted_teams": false,
- "name": "Anna Santos",
- "owner": true,
- "permissions": [
- "can_manage_assigned_users"
], - "role": "regular",
- "status": "active",
- "teams": [
- {
- "id": 1,
- "name": "Projects"
}
], - "work_days": null,
- "work_end_at": null,
- "work_start_at": null
}
}Atualiza somente os campos enviados. Para arquivar um usuário e manter os lançamentos de horas, envie { "active": 0 }. O arquivamento remove o acesso de login e os tokens desse usuário. A participação nos projetos permanece. Um administrador pode arquivar qualquer usuário, exceto o dono da conta. Um superusuário com a permissão can_manage_assigned_users pode arquivar usuários regulares que pertençam a uma das equipes atribuídas a ele.
| id required | integer Example: 5 ID do usuário |
| active | integer
|
| auto_assign_new_users | boolean Quando true, usuários novos são atribuídos automaticamente a este usuário. Vale para um superusuário. Na edição, envie só para alterar. |
| billable_rate_default | number <double> Taxa faturável padrão do usuário. Na edição, envie só para alterar. |
| capacity_per_day | number or null <float> Capacidade diária de trabalho do usuário, em horas. Na edição, envie só para alterar. |
| cost_rate | string Taxa de custo na gravação; na leitura, a taxa vigente. Na edição, envie só para alterar. |
| cost_rate_start_at_new | string or null <date> Data de início de uma nova taxa de custo na edição. Se omitida no editar, a taxa atual é substituída. Na edição parcial, envie junto com |
| last_calendar_id | integer Calendário de trabalho a atribuir ao usuário. Na edição, envie só para alterar. |
| last_calendar_start_at_new | string or null <date> Data de início de um novo período de calendário na edição. Se omitida no editar, o período atual é atualizado. |
| is_billable_default | boolean Indica se o tempo é faturável por padrão. Na edição, envie só para alterar. |
| manager_id | integer ID do gestor. Referencia o usuário que é gestor deste usuário. Na edição, envie só para alterar. |
| manage_restricted_teams | boolean Deprecated (Descontinuado) Indica se o usuário pode gerenciar equipes restritas. Vale apenas para o papel |
| name required | string Nome do usuário. Na edição, envie só para alterar. |
Array of "can_manage_own_projects" (string) or "can_time_log_for_assigned_users" (string) or "can_manage_all_customers" (string) or "can_manage_all_tasks" (string) or "can_manage_assigned_users" (string) or "can_report_costs_of_assigned_users" (string) or "can_edit_costs_of_assigned_users" (string) or "can_report_billing_of_assigned_users" (string) or "can_report_billing_of_managed_projects" (string) or "can_edit_billing_of_managed_projects" (string) or "can_mark_entries_as_invoiced" (string) or "can_approve_timesheets" (string) Permissões extras de um superusuário. Envie a lista completa. Uma lista vazia limpa as permissões. Expanda items para ver cada valor permitido e o que ele autoriza. | |
| role | string Enum: "admin" "regular" "super" "manager" Papel de permissão do usuário. Na edição, envie só para alterar; omitir não volta ao padrão de criação. |
| work_days | Array of integers or null Dias de trabalho do usuário, de 0 a 6. 0 é domingo e 6 é sábado. Na edição, envie só para alterar. |
| work_end_at | string <time> Horário de fim do trabalho, usado no painel de capacidade |
| work_start_at | string <time> Horário de início do trabalho, usado no painel de capacidade |
{- "active": 1,
- "auto_assign_new_users": false,
- "billable_rate_default": null,
- "capacity_per_day": null,
- "cost_rate": "65",
- "cost_rate_start_at_new": null,
- "last_calendar_id": 3,
- "last_calendar_start_at_new": null,
- "is_billable_default": true,
- "manager_id": null,
- "manage_restricted_teams": false,
- "name": "Anna Santos",
- "permissions": [
- "can_manage_assigned_users"
], - "role": "regular",
- "work_days": null,
- "work_end_at": null,
- "work_start_at": null,
- "custom_fields": {
- "26": "120",
- "45": 150000,
- "73": "2026-10-07"
}
}{- "data": {
- "active": 1,
- "assigned_team_ids": [ ],
- "auto_assign_new_users": false,
- "billable_rate_default": null,
- "capacity_per_day": null,
- "cost_rate": "65",
- "cost_rate_start_at": null,
- "count_employees": 5,
- "custom_fields": {
- "26": {
- "type": "enum",
- "value": "120",
- "enum_name": "Em campo"
}, - "45": {
- "type": "money",
- "value": 150000
}, - "73": {
- "type": "date",
- "value": "2026-10-07"
}
}, - "date_changed": "2024-05-20T13:36:46-0300",
- "date_created": "2022-02-10T15:06:32-0300",
- "date_deleted": null,
- "email": "name@example.com",
- "id": 1,
- "last_calendar_start_at": "2026-04-01",
- "profile_photo": "9f1c0a.png",
- "total_projects": 12,
- "total_assigned_users": 4,
- "is_billable_default": true,
- "is_owner": true,
- "manager_email": null,
- "manager_id": null,
- "manager_name": null,
- "manage_restricted_teams": false,
- "name": "Anna Santos",
- "owner": true,
- "permissions": [
- "can_manage_assigned_users"
], - "role": "regular",
- "status": "active",
- "teams": [
- {
- "id": 1,
- "name": "Projects"
}
], - "work_days": null,
- "work_end_at": null,
- "work_start_at": null
}
}Exclui o usuário de forma permanente. A requisição falha quando o usuário tem lançamentos de horas. Arquivar com active: 0 mantém esse histórico. Somente um administrador pode excluir usuários.
| id required | integer Example: 5 ID do usuário |
{- "message": "The requested user does not exist",
- "status": 400
}Campo multipart file. PNG ou JPEG, até 2 MB. A imagem é guardada como miniatura quadrada.
| id required | integer Example: 5 ID do usuário |
| file required | string <binary> Campo multipart file. PNG ou JPEG, até 2 MB. A imagem é guardada como miniatura quadrada. |
{- "data": {
- "profile_photo": "9f1c0a.png"
}
}Projetos ativos em que o usuário é membro.
| id required | integer Example: 5 ID do usuário |
{- "data": [
- {
- "id": "57",
- "customer_id": "string",
- "customer_name": "Acme",
- "name": "Website",
- "active": 1,
- "color": "#12B886",
- "required_task": 0,
- "is_member": true,
- "is_manager": false,
- "current_user_can_manage": true
}
]
}project_id aceita uma lista de IDs ou um texto separado por vírgula.
| id required | integer Example: 5 ID do usuário |
required | Array of strings or string Um ID de projeto, uma lista separada por vírgula ou um array de IDs. |
{- "project_id": [
- "57",
- "58"
]
}Usa o mesmo corpo project_id do pedido de inclusão.
| id required | integer Example: 5 ID do usuário |
required | Array of strings or string Um ID de projeto, uma lista separada por vírgula ou um array de IDs. |
{- "project_id": [
- "57",
- "58"
]
}Projetos ativos em que o usuário não é membro e quem chama pode gerenciar a participação.
| id required | integer Example: 5 ID do usuário |
{- "data": [
- {
- "id": "57",
- "customer_id": "string",
- "customer_name": "Acme",
- "name": "Website",
- "active": 1,
- "color": "#12B886",
- "required_task": 0,
- "is_member": true,
- "is_manager": false,
- "current_user_can_manage": true
}
]
}Retorna usuários e equipes atribuídos a este usuário. A resposta não vem dentro de data.
| id required | integer Example: 5 ID do usuário |
{- "users": [
- {
- "id": "8",
- "name": "Ana",
- "profile_photo_url": "string",
- "email": "ana@rabbitwork.io",
- "active": 1
}
], - "teams": [
- {
- "id": "11",
- "name": "Sales",
- "total_members": 4
}
]
}Envie users, teams ou os dois como listas de IDs. Exige o recurso de permissões por papel.
| id required | integer Example: 5 ID do usuário |
| users | Array of strings IDs de usuários a atribuir ou remover. |
| teams | Array of strings IDs de equipes a atribuir ou remover. |
{- "users": [
- "string"
], - "teams": [
- "string"
]
}| id required | integer Example: 5 ID do usuário |
{- "users": [
- {
- "id": "8",
- "name": "Ana",
- "profile_photo_url": "string",
- "email": "ana@rabbitwork.io",
- "active": 1
}
], - "teams": [
- {
- "id": "11",
- "name": "Sales",
- "total_members": 4
}
]
}Envie os IDs de usuários e equipes a remover.
| id required | integer Example: 5 ID do usuário |
| users | Array of strings IDs de usuários a atribuir ou remover. |
| teams | Array of strings IDs de equipes a atribuir ou remover. |
{- "users": [
- "string"
], - "teams": [
- "string"
]
}Filtre por type (vacation ou leave) e por ano.
| id required | integer Example: 5 ID do usuário |
| type | string Enum: "vacation" "leave" |
| year | integer Example: year=2026 |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": "5",
- "type": "vacation",
- "start_date": "2026-07-01",
- "end_date": "2026-07-15",
- "hours": 8,
- "description": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
]
}type, start_date e end_date são obrigatórios. end_date precisa ser igual ou posterior a start_date.
| id required | integer Example: 5 ID do usuário |
| type required | string Enum: "vacation" "leave" vacation (férias) ou leave (folga). |
| start_date required | string <date> |
| end_date required | string <date> |
| hours | number or null Quantidade opcional de horas do período. |
| description | string or null |
{- "type": "vacation",
- "start_date": "2026-07-01",
- "end_date": "2026-07-15",
- "hours": 8,
- "description": "string"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": "5",
- "type": "vacation",
- "start_date": "2026-07-01",
- "end_date": "2026-07-15",
- "hours": 8,
- "description": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}| id required | integer Example: 5 ID do usuário |
| allocationId required | string Example: c96r3a88u0k0b3e6hft0 ID da folga ou das férias. |
| type required | string Enum: "vacation" "leave" vacation (férias) ou leave (folga). |
| start_date required | string <date> |
| end_date required | string <date> |
| hours | number or null Quantidade opcional de horas do período. |
| description | string or null |
{- "type": "vacation",
- "start_date": "2026-07-01",
- "end_date": "2026-07-15",
- "hours": 8,
- "description": "string"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": "5",
- "type": "vacation",
- "start_date": "2026-07-01",
- "end_date": "2026-07-15",
- "hours": 8,
- "description": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}Períodos que atribuem um calendário de trabalho ao usuário, do mais recente para o mais antigo. Um período aberto tem end_at nulo.
| id required | integer Example: 5 ID do usuário |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hftg",
- "user_id": "5",
- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "start_at": "2026-01-01",
- "end_at": "2026-12-31",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
]
}calendar_id e start_at são obrigatórios.
| id required | integer Example: 5 ID do usuário |
| calendar_id required | string |
| start_at required | string <date> Primeiro dia desta atribuição de calendário. |
| end_at | string or null <date> Último dia desta atribuição de calendário. Null enquanto o período está aberto. |
{- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "start_at": "2026-01-01",
- "end_at": "2026-12-31"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hftg",
- "user_id": "5",
- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "start_at": "2026-01-01",
- "end_at": "2026-12-31",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}| id required | integer Example: 5 ID do usuário |
| calendarHistoryId required | string Example: c96r3a88u0k0b3e6hftg ID do histórico de calendário. |
| calendar_id required | string |
| start_at required | string <date> Primeiro dia desta atribuição de calendário. |
| end_at | string or null <date> Último dia desta atribuição de calendário. Null enquanto o período está aberto. |
{- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "start_at": "2026-01-01",
- "end_at": "2026-12-31"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hftg",
- "user_id": "5",
- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "start_at": "2026-01-01",
- "end_at": "2026-12-31",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}Lista as equipes da conta
| id | Array of integers or guids Examples:
Filtra por ID. Use uma lista de IDs separada por vírgula para vários IDs. |
{- "data": [
- {
- "id": 11,
- "name": "Projects",
- "date_created": "2022-01-01 12:33:00",
- "assigned_to": [
- {
- "id": 1,
- "name": "Ana",
- "email": "ana@rabbitwork.io",
- "active": 1
}
], - "total_members": 4,
- "users": [
- {
- "id": 5,
- "name": "Dyorg",
- "email": "dyorg@rabbitwork.io",
- "active": 1,
- "profile_photo": "string",
- "profile_photo_url": "string"
}
], - "timesheet_submission_configured": false
}
]
}Cria uma equipe. name é obrigatório.
| name required | string Nome da equipe |
{- "name": "Projects"
}{- "data": {
- "id": 11,
- "name": "Projects",
- "date_created": "2022-01-01 12:33:00"
}
}| teamId required | integer Example: 11 ID da equipe |
| name required | string |
{- "name": "Projects"
}{- "data": {
- "id": 11,
- "name": "Projects",
- "date_created": "2022-01-01 12:33:00"
}
}| teamId required | integer Example: 11 ID da equipe |
| include_archived_users | boolean Default: false Quando verdadeiro, a lista de membros inclui arquivados. O padrão os exclui. |
{- "data": [
- {
- "id": 5,
- "name": "Dyorg",
- "email": "dyorg@rabbitwork.io",
- "active": 1,
- "profile_photo": "string",
- "profile_photo_url": "string"
}
]
}| teamId required | integer Example: 11 ID da equipe |
{- "data": [
- {
- "id": 5,
- "name": "Dyorg",
- "email": "dyorg@rabbitwork.io",
- "active": 1,
- "profile_photo": "string",
- "profile_photo_url": "string"
}
]
}| entity | string Enum: "time_entries" "projects" "customers" "tasks" "users" "todos" Filtra pelo tipo de registro ao qual o campo pertence |
| type | string Enum: "text" "enum" "numeric" "date" "money" "time" "user" Filtra pelo tipo do campo. |
| id | string Filtra pelo id do campo personalizado. |
| active | integer Example: active=1 Filtra pelo status ativo ("1" é ativo e "0" é arquivado) |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Cost center",
- "description": "string",
- "entity": "time_entries",
- "type": "text",
- "active": true,
- "required": false,
- "importance": "string",
- "position": 0,
- "json_version": 1,
- "is_restricted": false,
- "restricted_roles": [ ],
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00",
- "enum_options": [
- {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
]
}
]
}| name required | string |
| description | string or null |
| entity required | string Enum: "time_entries" "projects" "customers" "tasks" "users" Registro ao qual o campo pertence. A criação aceita time_entries, projects, customers, tasks e users. A listagem pode filtrar |
| type required | string Enum: "text" "enum" "numeric" "date" "money" "time" "user" |
| active | boolean |
| required | boolean |
| importance | string or null |
| position | integer |
| is_restricted | boolean |
| restricted_roles | Array of strings |
{- "name": "Cost center",
- "description": "string",
- "entity": "time_entries",
- "type": "text",
- "active": true,
- "required": false,
- "importance": "string",
- "position": 0,
- "is_restricted": false,
- "restricted_roles": [ ]
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Cost center",
- "description": "string",
- "entity": "time_entries",
- "type": "text",
- "active": true,
- "required": false,
- "importance": "string",
- "position": 0,
- "json_version": 1,
- "is_restricted": false,
- "restricted_roles": [ ],
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00",
- "enum_options": [
- {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
]
}
}Campos do tipo enum incluem as opções.
| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Cost center",
- "description": "string",
- "entity": "time_entries",
- "type": "text",
- "active": true,
- "required": false,
- "importance": "string",
- "position": 0,
- "json_version": 1,
- "is_restricted": false,
- "restricted_roles": [ ],
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00",
- "enum_options": [
- {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
]
}
}| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
| name required | string |
| description | string or null |
| entity required | string Enum: "time_entries" "projects" "customers" "tasks" "users" Registro ao qual o campo pertence. A criação aceita time_entries, projects, customers, tasks e users. A listagem pode filtrar |
| type required | string Enum: "text" "enum" "numeric" "date" "money" "time" "user" |
| active | boolean |
| required | boolean |
| importance | string or null |
| position | integer |
| is_restricted | boolean |
| restricted_roles | Array of strings |
{- "name": "Cost center",
- "description": "string",
- "entity": "time_entries",
- "type": "text",
- "active": true,
- "required": false,
- "importance": "string",
- "position": 0,
- "is_restricted": false,
- "restricted_roles": [ ]
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Cost center",
- "description": "string",
- "entity": "time_entries",
- "type": "text",
- "active": true,
- "required": false,
- "importance": "string",
- "position": 0,
- "json_version": 1,
- "is_restricted": false,
- "restricted_roles": [ ],
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00",
- "enum_options": [
- {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
]
}
}| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
]
}| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
| custom_field_id | string |
| name required | string |
| active | boolean |
{- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true
}{- "data": {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
}| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
| enumOptionId required | string Example: c96r3a88u0k0b3e6hftg ID da opção de enum |
{- "data": {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
}| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
| enumOptionId required | string Example: c96r3a88u0k0b3e6hftg ID da opção de enum |
| custom_field_id | string |
| name required | string |
| active | boolean |
{- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true
}{- "data": {
- "id": "c96r3a88u0k0b3e6hftg",
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "name": "Buildings",
- "active": true,
- "created_at": "2022-01-01 12:33:00",
- "changed_at": "2022-01-03 10:01:00"
}
}| id required | integer Example: 57 ID do projeto |
| active | integer Example: active=1 Filtra pelo status ativo ("1" é ativo e "0" é arquivado) |
| custom_field_id | string Filtra as configurações pelo id do campo personalizado. |
| id | string Filtra pelo id da configuração. A resposta omite o id. |
{- "data": [
- {
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "project_id": 7,
- "position": 0,
- "importance": "string",
- "required": false,
- "active": true,
- "created_at": "string",
- "changed_at": "string"
}
]
}| id required | integer Example: 57 ID do projeto |
| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
{- "data": {
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "project_id": 7,
- "position": 0,
- "importance": "string",
- "required": false,
- "active": true,
- "created_at": "string",
- "changed_at": "string"
}
}| id required | integer Example: 57 ID do projeto |
| customFieldId required | string Example: c96r3a88u0k0b3e6hft0 ID do campo personalizado |
| custom_field_id | string |
| project_id | integer |
| position | integer |
| importance | string or null |
| required | boolean |
| active | boolean |
{- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "project_id": 7,
- "position": 0,
- "importance": "string",
- "required": false,
- "active": true
}{- "data": {
- "custom_field_id": "c96r3a88u0k0b3e6hft0",
- "project_id": 7,
- "position": 0,
- "importance": "string",
- "required": false,
- "active": true,
- "created_at": "string",
- "changed_at": "string"
}
}Timesheets enviados e aprovados travam os lançamentos de horas relacionados. Lançamentos travados devolvem is_locked e locked_reason.
| user_id | Array of integers or guids Examples:
Filtra pelo ID do usuário. Use uma lista de IDs separada por vírgula para vários IDs. |
| approver_user_id | string Filtra pelo aprovador. Use uma lista de IDs separada por vírgula para vários IDs. |
| status | string Enum: "draft" "submitted" "approved" "rejected" |
| period_start | string <date> Apenas aprovações cujo período começa nesta data ou depois |
| period_end | string <date> Apenas aprovações cujo período termina nesta data ou antes |
| opt_page_limit | integer [ 1 .. 100 ] Default: 50 Quantidade de itens a retornar |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
], - "has_next_page": true,
- "next_page_query_params": { },
- "totals": {
- "total_rows": 150
}
}Envia a semana do usuário atual, ou de user_id quando quem chama pode forçar o envio.
| user_id | integer Se omitido, usa o usuário autenticado |
| period_start required | string <date> |
| period_end required | string <date> |
{- "user_id": 0,
- "period_start": "2026-10-05",
- "period_end": "2026-10-11"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
}| timesheetApprovalId required | string Example: c96r3a88u0k0b3e6hft0 ID da aprovação de horas |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
}| timesheetApprovalId required | string Example: c96r3a88u0k0b3e6hft0 ID da aprovação de horas |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
}comment é obrigatório.
| timesheetApprovalId required | string Example: c96r3a88u0k0b3e6hft0 ID da aprovação de horas |
| comment required | string |
{- "comment": "Missing Monday hours"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
}| timesheetApprovalId required | string Example: c96r3a88u0k0b3e6hft0 ID da aprovação de horas |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
}| timesheetApprovalId required | string Example: c96r3a88u0k0b3e6hft0 ID da aprovação de horas |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
}| timesheetApprovalId required | string Example: c96r3a88u0k0b3e6hft0 ID da aprovação de horas |
| approver_user_id required | integer |
{- "approver_user_id": 2
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "user_id": 5,
- "user_name": "Anna Santos",
- "approver_user_id": 1,
- "approver_name": "Dyorg",
- "period_start": "2026-10-05",
- "period_end": "2026-10-11",
- "status": "submitted",
- "submitted_at": "string",
- "submitted_by": 0,
- "last_rejection_comment": "string",
- "created_at": "string",
- "changed_at": "string",
- "created_by": 0,
- "changed_by": 0,
- "week_capacity_hours": 0,
- "total_hours": "string",
- "billable_hours": "string"
}
}type é obrigatório. billable exige project_id. Sem user_id, lista a taxa do projeto. cost exige user_id. tax é a taxa de imposto da conta.
| type required | string Enum: "billable" "cost" "tax" billable, cost ou tax. |
| project_id | string Obrigatório quando type é billable. |
| user_id | string Obrigatório quando type é cost. Substituição opcional do membro quando type é billable. |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "type": "billable",
- "user_name": "Ana",
- "rate": 150,
- "project_id": "57",
- "user_id": "5",
- "start_at": "2026-01-01",
- "end_at": "2026-06-30",
- "date_created": "2022-01-01 12:33:00"
}
]
}Cria a taxa vigente. Envie rate_start_at_new para guardar a taxa anterior como histórico a partir dessa data. Sem esse campo, a taxa vigente é substituída. Uma taxa nula limpa o valor.
| type required | string Enum: "billable" "cost" "tax" |
| rate required | number or null |
| project_id | string |
| user_id | string |
| rate_start_at_new | string <date> Data inicial de um novo período histórico. Precisa ser posterior ao início da taxa vigente. |
{- "type": "billable",
- "rate": 0,
- "project_id": "string",
- "user_id": "string",
- "rate_start_at_new": "2019-08-24"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "type": "billable",
- "user_name": "Ana",
- "rate": 150,
- "project_id": "57",
- "user_id": "5",
- "start_at": "2026-01-01",
- "end_at": "2026-06-30",
- "date_created": "2022-01-01 12:33:00"
}
}Usa os mesmos filtros da listagem. data vem vazio quando não existe taxa.
| type required | string Enum: "billable" "cost" "tax" |
| project_id | string |
| user_id | string |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "type": "billable",
- "user_name": "Ana",
- "rate": 150,
- "project_id": "57",
- "user_id": "5",
- "start_at": "2026-01-01",
- "end_at": "2026-06-30",
- "date_created": "2022-01-01 12:33:00"
}
}Exige entity_type e entity_id. Os comentários fixados vêm primeiro. Envie next_page_query_params para ler a página seguinte.
| entity_type required | string Value: "todo" |
| entity_id required | string |
| opt_page_limit | integer [ 1 .. 100 ] Default: 50 Quantidade de itens a retornar |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "entity_type": "todo",
- "entity_id": "c96r3a88u0k0b3e6hftg",
- "user_id": "5",
- "user_name": "Dyorg",
- "profile_photo_url": "string",
- "content": "Please review this @[Dyorg](mention:5)",
- "pinned_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "attachments": [
- {
- "id": "string",
- "original_name": "string",
- "size_bytes": 0,
- "mime_type": "string"
}
]
}
], - "has_next_page": true,
- "total_rows": 0,
- "next_page_query_params": { }
}content é obrigatório. Mencione um usuário com @Nome.
| entity_type required | string Value: "todo" |
| entity_id required | string |
| content required | string Texto do comentário. Mencione um usuário com @Nome. |
| attachment_ids | Array of strings Ids de anexos já enviados para este comentário. |
{- "entity_type": "todo",
- "entity_id": "string",
- "content": "string",
- "attachment_ids": [
- "string"
]
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "entity_type": "todo",
- "entity_id": "c96r3a88u0k0b3e6hftg",
- "user_id": "5",
- "user_name": "Dyorg",
- "profile_photo_url": "string",
- "content": "Please review this @[Dyorg](mention:5)",
- "pinned_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "attachments": [
- {
- "id": "string",
- "original_name": "string",
- "size_bytes": 0,
- "mime_type": "string"
}
]
}
}Envie content, pinned ou os dois. pinned true define pinned_at. pinned false limpa o valor.
| commentId required | string Example: c96r3a88u0k0b3e6hft0 ID do comentário. |
| content | string |
| pinned | boolean Envie true para fixar o comentário, ou false para desafixar. |
{- "content": "string",
- "pinned": true
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "entity_type": "todo",
- "entity_id": "c96r3a88u0k0b3e6hftg",
- "user_id": "5",
- "user_name": "Dyorg",
- "profile_photo_url": "string",
- "content": "Please review this @[Dyorg](mention:5)",
- "pinned_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "attachments": [
- {
- "id": "string",
- "original_name": "string",
- "size_bytes": 0,
- "mime_type": "string"
}
]
}
}| name | string Filtro de nome sem diferenciar maiúsculas. |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Brazil",
- "parent_id": "c96r3a88u0k0b3e6hftg",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z",
- "people_count": 12
}
]
}Exige permissão para editar as configurações da conta. name é obrigatório. parent_id herda feriados de outro calendário.
| name required | string Nome do calendário. |
| parent_id | string or null Calendário pai cujos feriados também são listados. |
{- "name": "Brazil",
- "parent_id": "c96r3a88u0k0b3e6hftg"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Brazil",
- "parent_id": "c96r3a88u0k0b3e6hftg",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}| calendarId required | string Example: c96r3a88u0k0b3e6hft0 ID do calendário. |
{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Brazil",
- "parent_id": "c96r3a88u0k0b3e6hftg",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}| calendarId required | string Example: c96r3a88u0k0b3e6hft0 ID do calendário. |
| name required | string Nome do calendário. |
| parent_id | string or null Calendário pai cujos feriados também são listados. |
{- "name": "Brazil",
- "parent_id": "c96r3a88u0k0b3e6hftg"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "Brazil",
- "parent_id": "c96r3a88u0k0b3e6hftg",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}Inclui os feriados do calendário pai quando parent_id está definido.
| calendarId required | string Example: c96r3a88u0k0b3e6hft0 ID do calendário. |
| year | integer Example: year=2026 Limita os feriados a um ano. |
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hftg",
- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "holiday_date": "2026-01-01",
- "description": "New Year",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
]
}holiday_date é obrigatório e precisa ser único no calendário.
| calendarId required | string Example: c96r3a88u0k0b3e6hft0 ID do calendário. |
| holiday_date required | string <date> |
| description | string |
{- "holiday_date": "2019-08-24",
- "description": "string"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hftg",
- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "holiday_date": "2026-01-01",
- "description": "New Year",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}| calendarId required | string Example: c96r3a88u0k0b3e6hft0 ID do calendário. |
| holidayId required | string Example: c96r3a88u0k0b3e6hftg ID do feriado. |
| holiday_date required | string <date> Data do feriado. |
| description | string or null Nome do feriado. |
{- "holiday_date": "2026-01-01",
- "description": "New Year"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hftg",
- "calendar_id": "c96r3a88u0k0b3e6hft0",
- "holiday_date": "2026-01-01",
- "description": "New Year",
- "created_at": "2019-08-24T14:15:22Z",
- "changed_at": "2019-08-24T14:15:22Z"
}
}Cada entrega é um HTTP POST com Content-Type: application/json. O RabbitWork assina o corpo bruto com HMAC-SHA256 usando o segredo da assinatura e envia o digest hexadecimal em X-Signature. As entregas também incluem X-Event-Id, X-Event-Type e X-Delivery-Id.
{- "data": [
- {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "ERP sync",
- "event_types": [
- "project.created"
], - "enabled": true,
- "secret": "string",
- "created_at": "2026-10-09 13:00:00",
- "updated_at": "2026-10-09 13:00:00"
}
], - "usage": { }
}O segredo de assinatura é devolvido apenas nesta resposta.
| name required | string |
| url required | string <uri> |
| event_types required | Array of strings Items Enum: "project.created" "project.updated" "project.deleted" "customer.created" "customer.updated" "customer.deleted" "rate.created" "rate.updated" "rate.deleted" "user.created" "user.updated" "user.deleted" "task.created" "task.updated" "task.deleted" "team.created" "team.updated" "team.deleted" "team_user.created" "team_user.deleted" "project_user.created" "project_user.updated" "project_user.deleted" "project_task.created" "project_task.updated" "project_task.deleted" "time_entry.created" "time_entry.updated" "time_entry.deleted" "time_entry.timer_started" "time_entry.timer_stopped" "todo_list.created" "todo_list.updated" "todo_list.deleted" "todo_list.restored" "todo.created" "todo.updated" "todo.deleted" "todo.restored" "timesheet_approval.created" "timesheet_approval.update" |
| enabled | boolean |
| secret | string Opcional na criação e na atualização. Quando omitido, o RabbitWork gera um. O valor volta só quando a assinatura é criada ou o segredo é regenerado. Use-o para verificar |
{- "name": "ERP sync",
- "event_types": [
- "project.created"
], - "enabled": true,
- "secret": "string"
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "ERP sync",
- "event_types": [
- "project.created"
], - "enabled": true,
- "secret": "string",
- "created_at": "2026-10-09 13:00:00",
- "updated_at": "2026-10-09 13:00:00"
}
}Envie regenerate_secret como true para trocar o segredo de assinatura. O novo segredo é devolvido uma única vez.
| webhookSubscriptionId required | string Example: c96r3a88u0k0b3e6hft0 ID da assinatura de webhook |
| name required | string |
| url required | string <uri> |
| event_types required | Array of strings Items Enum: "project.created" "project.updated" "project.deleted" "customer.created" "customer.updated" "customer.deleted" "rate.created" "rate.updated" "rate.deleted" "user.created" "user.updated" "user.deleted" "task.created" "task.updated" "task.deleted" "team.created" "team.updated" "team.deleted" "team_user.created" "team_user.deleted" "project_user.created" "project_user.updated" "project_user.deleted" "project_task.created" "project_task.updated" "project_task.deleted" "time_entry.created" "time_entry.updated" "time_entry.deleted" "time_entry.timer_started" "time_entry.timer_stopped" "todo_list.created" "todo_list.updated" "todo_list.deleted" "todo_list.restored" "todo.created" "todo.updated" "todo.deleted" "todo.restored" "timesheet_approval.created" "timesheet_approval.update" |
| enabled | boolean |
| secret | string Opcional na criação e na atualização. Quando omitido, o RabbitWork gera um. O valor volta só quando a assinatura é criada ou o segredo é regenerado. Use-o para verificar |
| regenerate_secret | boolean |
{- "name": "ERP sync",
- "event_types": [
- "project.created"
], - "enabled": true,
- "secret": "string",
- "regenerate_secret": false
}{- "data": {
- "id": "c96r3a88u0k0b3e6hft0",
- "name": "ERP sync",
- "event_types": [
- "project.created"
], - "enabled": true,
- "secret": "string",
- "created_at": "2026-10-09 13:00:00",
- "updated_at": "2026-10-09 13:00:00"
}
}| event_type | string Enum: "project.created" "project.updated" "project.deleted" "customer.created" "customer.updated" "customer.deleted" "rate.created" "rate.updated" "rate.deleted" "user.created" "user.updated" "user.deleted" "task.created" "task.updated" "task.deleted" "team.created" "team.updated" "team.deleted" "team_user.created" "team_user.deleted" "project_user.created" "project_user.updated" "project_user.deleted" "project_task.created" "project_task.updated" "project_task.deleted" "time_entry.created" "time_entry.updated" "time_entry.deleted" "time_entry.timer_started" "time_entry.timer_stopped" "todo_list.created" "todo_list.updated" "todo_list.deleted" "todo_list.restored" "todo.created" "todo.updated" "todo.deleted" "todo.restored" "timesheet_approval.created" "timesheet_approval.update" |
| status | string Enum: "pending" "delivered" "failed" "retrying" Filtra as entregas pelo status. |
{- "data": [
- {
- "id": "string",
- "webhook_subscription_id": "string",
- "event_type": "project.created",
- "event_log_id": "string",
- "payload": { },
- "status": "delivered",
- "http_status": 200,
- "response_body": "string",
- "attempts": 1,
- "next_retry_at": "string",
- "last_error": "string",
- "created_at": "string",
- "updated_at": "string"
}
], - "has_next_page": true,
- "next_page_query_params": { },
- "totals": {
- "total_rows": 150
}
}