[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Approve Hubstaff manual time requests

> Approve or deny Hubstaff manual time requests by your rule on the reason and the hours, with a denial reason sent each time. Runs daily.

Source: https://cotlet.dev/integrations/hubstaff-api-mcp-server/approve-manual-time-requests

Members add time they forgot to track, Hubstaff holds it as a manual time request, and the Manual time tab fills up until a manager opens each request to read the reason and decide.

Cotlet does it in your own Hubstaff account with list\_manual\_time\_requests and review\_manual\_time\_request, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=hubstaff) [All Hubstaff tools](https://cotlet.dev/integrations/hubstaff-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Hubstaff do this on its own?

Hubstaff shows manual time requests on the Manual time tab and offers batch approve and batch deny there, and its API approves or denies one request at a time, while its MCP server is read-only (checked 17 Oct 2026). Batch approve in the app applies to whatever you select and does not read the reason. Nothing in Hubstaff approves by a rule on the reason, the hours or the project, which is the gap this job fills.

## How you do it in Hubstaff today

1. An owner turns on approvals under Settings > Activity & tracking > Timesheets, on the Modify time tab, with the Require approval when time is added toggle.
2. A member adds or edits time from Timesheets > View & edit, and must give a project, a start and end time and a reason.
3. The request goes to Timesheets > Approvals, on the Manual time tab, where owners and managers see it.
4. The manager clicks Actions on a request and picks view, approve, deny or delete; deny asks for a reason.
5. If the manual time overlaps tracked time, Hubstaff shows a dialog to keep or discard the exceeding hours.
6. Many requests can be selected with the checkboxes and approved or denied together with Batch approve or Batch Deny.

## How to approve Hubstaff manual time requests

Prompt

```
Go through the Hubstaff manual time requests that are waiting for approval. Approve the ones inside the member's scheduled hours with a real reason, deny the rest with a one-line reason, and leave anything over 4 hours for me.
```

1. 01  
### Pull the queue  
list\_manual\_time\_requests runs with status submitted and pages through the cursor, so requests that arrived over a weekend are judged together with today's.
2. 02  
### Read each reason  
Each request has a project, a start and stop time and the member's reason. The agent compares them with your rule, for example "reason names a meeting or an outage" or "inside 9:00 to 18:00".
3. 03  
### Sort into three piles  
Clear matches go to approve, requests with an empty or copied reason go to deny with a short reason, and requests over your hours limit stay for you.
4. 04  
### Decide, one request each  
review\_manual\_time\_request approves or denies. A denial always carries a reason, because Hubstaff requires one. Each call asks for your OK until you switch confirmation off for it.
5. 05  
### Handle a conflict  
If Hubstaff warns about a collision with tracked time, a member limit or a budget, the agent does not override it. It leaves the request pending and lists it with the warning.

### What you get back

Example data

```
Manual time requests waiting: 11
Approved 7 (inside scheduled hours, reason given, e.g. Maria Silva, 1h 30m "client call ran over")
Denied 2 (reason "No reason given, please resubmit")
Left for you 2:
- Tom Becker, 5h 00m on Website relaunch, over your 4 hour limit
- Jake Ortiz, overlaps tracked time
```

### Other ways to ask

- Every morning, approve manual time under 30 minutes and list everything longer for me.
- Show me the manual time requests grouped by member with total hours, and approve nothing.
- Deny every request that has no reason and tell the member to resubmit with one.
- Approve all requests on the Support rota project this week, and leave other projects for me.

## What Hubstaff allows, and what to know first

- The Require approval when time is added toggle appears only when Modify time is enabled for at least one user, and members can still delete time without approval.
- Only owners, managers and team leads with manual time approval can approve, and approving creates activity for the full requested range.
- Only a submitted request can be denied, and a denial reason is required.
- Creating, deleting and batch approve or deny of manual time requests are not available through the API.
- Manual time is always recorded with 0 percent activity, and notes are shown on the Manual time edits report.

review\_manual\_time\_request asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.

Sources: [Hubstaff Support: Manual Time Approvals](https://support.hubstaff.com/manual-time-approvals/) · [Hubstaff Support: How can I add, delete or edit time manually?](https://support.hubstaff.com/how-to-add-delete-and-edit-manual-time-entries/) · [Hubstaff developers: Manual time requests](https://developer.hubstaff.com/manual-time-requests/)

## Call review\_manual\_time\_request from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/hubstaff/requests/5530117/manual-time-request/review \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"decision":"approve"}'
```

Example response

```
{
"request_id": 5530117,
"status": "approved",
"user_id": 3011,
"project_id": 90311,
"tracked": 5400
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is hubstaff\_write → review\_manual\_time\_request. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/hubstaff-api-mcp-server.md#automations)

## Hubstaff tools this automation uses

__Cotlet Hubstaff tools used to approve Hubstaff manual time requests__
| Tool | Parameters |
| ----------------------------- | ---------------------------------------------------------------- |
| list\_manual\_time\_requests | organization\_id, status, start\_date, stop\_date, limit, cursor |
| review\_manual\_time\_request | request\_id, decision, denial\_reason |

[All 15 Hubstaff tools with descriptions](https://cotlet.dev/integrations/hubstaff-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Hubstaff to Cotlet?

Yes. You sign in to Hubstaff yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Hubstaff once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Hubstaff automations

- [Approve Hubstaff timesheets with AI](https://cotlet.dev/integrations/hubstaff-api-mcp-server/approve-timesheets.md)
- [Set up a Hubstaff project with tasks and a team](https://cotlet.dev/integrations/hubstaff-api-mcp-server/set-up-a-project.md)
- [Hubstaff API and MCP server: every tool](https://cotlet.dev/integrations/hubstaff-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Hubstaff.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Hubstaff.

[Sign up free](https://cotlet.dev/app/signup?app=hubstaff)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
