POST /me/time/start
— POST /me/time/start.
- Acesso: Login
- Serviço:
https://api-workspace.axuz.net
Autenticação aceita
sessionCookie— Sessão plena Axuz (cookie de sessão da casa). Sessão restrita é 403 enrollment_required.bearerSession— JWT de acesso da sessão em `Authorization: Bearer`.
— POST /me/time/start. 201 Entry; 400/404/409/500/502/503.
Motivo: iniciar timer 1-active-per-user COM guard ABAC cross-tenant (B-005, piso §5). A rota vive sob /me/* — não tem teamId no path, logo não passa pelo RequireTeamMembership. Sem o guard abaixo, qualquer JWT válido gravava um time-entry contra uma task de OUTRO tenant só chutando/vazando o UUID. A cadeia é de três elos, nesta ordem, e nenhum aceita dado do corpo: 1. TaskTeam — o team_id sai da linha da task no DB local (nunca do body). 2. IsTeamMember — o caller precisa ser membro DESSE team; memberships vivem no axuz_api (bounded context), então a checagem é cross-service e fail-closed (sem client wirado = 503, erro de rede = 502). 3. Start — o INSERT ainda reamarra task↔team via WHERE EXISTS (última linha de defesa, sobrevive a refactor do handler).
Retorno: 201 Entry; 400 body/task_id inválido; 404 task inexistente, deletada OU de outro team (mesma resposta pros três — não vaza existência); 409 já há timer ativo; 500 falha de DB; 502 falha ao consultar o axuz_api; 503 guard não configurado. Efeito: 1 SELECT (TaskTeam) + 1 GET HTTP cross-service (cacheado no client) + 1 SELECT (Active) + 1 INSERT guardado.
Parâmetros
Sem parâmetros.
Corpo da requisição
Corpo JSON. O schema detalhado deste endpoint ainda não está tipado na spec; veja a descrição da operação.
application/json
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
(corpo) | object | não |
{}Respostas
200
TBD
400
Body/task_id inválido
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
401
Sem credencial valida
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
404
Task inexistente, deletada OU de outro team (mesma resposta pros três — não vaza existência)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
409
Já há timer ativo
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
429
Limite de requisições excedido.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
500
Falha de DB
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
502
Falha ao consultar o axuz_api
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
503
Guard não configurado. Efeito: 1 SELECT (TaskTeam) + 1 GET HTTP cross-service (cacheado no client) + 1 SELECT (Active) + 1 INSERT guardado
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
error | string | sim |
Exemplos
O "Try it" está desligado nesta referência. Use os exemplos com a sua credencial de teste.
curl
curl -sS -X POST 'https://api-workspace.axuz.net/me/time/start' \
-H "Authorization: Bearer $AXUZ_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Node.js
const res = await fetch("https://api-workspace.axuz.net/me/time/start", {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.AXUZ_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
console.log(await res.json());Python
import os
import requests
res = requests.request(
"POST",
"https://api-workspace.axuz.net/me/time/start",
headers={
"Authorization": f"Bearer {os.environ['AXUZ_TOKEN']}",
},
json={},
timeout=30,
)
res.raise_for_status()
print(res.json())