Agency tree
The Agency tier in HumanHours is built around a tree model: one anchor workspace pays a single Stripe subscription, and up to four child workspaces hang underneath it. All five workspaces share a pooled 25,000 events / month quota and get the full Agency feature set.
This page covers the operational rules so you can plan a multi-client rollout without opening a support ticket.
Anchor + children
When you sign up for Agency, the workspace you create becomes the anchor. The anchor:
- Holds the Stripe subscription, customer, and invoice address
- Is where you manage payment methods, downgrades, and cancellation
- Counts as one of the five workspaces in your tree (so you have four left for clients)
- Owns the agency-tier feature flags that propagate to children
When you create additional workspaces from the workspace switcher, they become children of the anchor:
- Plan automatically set to
agency parent_org_idlinked to the anchor- Inherit the Agency feature set (Reports API, custom task types, share-with-CFO, etc.)
- Do not have their own Stripe subscription; everything bills to the anchor
Pooled events
Every event tracked across the entire tree counts against the same 25,000 events / month quota:
- Events on the anchor: count toward the pool
- Events on every child: count toward the pool
- Events from clients you invited as members: count toward the pool (they show up under the child workspace they have access to)
Once the tree exceeds 25k events in a billing cycle, overage is metered through the shared HumanHours Overage SKU at €0.005 / €0.004 / €0.003 per event for the first 50k / next 200k / next 750k of overage. The overage is billed to the anchor's invoice.
Member rules
Two role gates matter when you use Agency to host client data:
| Role on a child workspace | Can create new workspaces? | Can be invited as admin? |
|---|---|---|
| Anchor owner / admin | yes (up to 5 in the tree) | yes |
| Child owner / admin (you, after creating the child) | yes from the anchor | yes (the anchor owner sets this) |
| Member / viewer (your invited client) | no | no, members and viewers only |
Invited clients can only see the workspace they have access to. They cannot see the anchor, sibling workspaces, or each other. The "Switch to anchor" button in the billing UI is hidden from them.
Cancellation and downgrades
When the Agency subscription is cancelled in Stripe (either through the customer portal or customer.subscription.deleted), the entire tree downgrades atomically:
- Anchor: plan switches to
free, Stripe customer kept, subscription cleared - Every child: plan switches to
free,parent_org_idcleared so each becomes a standalone Free workspace
Members keep their access to the (now Free) workspaces. Each workspace falls back to the Free 500-event quota independently. To keep the agency tree intact, reactivate the subscription before the period ends (the Reactivate button on /billing is one click).
Workspace-cap exception
Agency caps at five workspaces per tree. If you need more, this is the trigger for a Talk-to-us conversation: agencies running 10+ clients usually want SSO, dedicated Slack, and per-client invoicing, all of which sit on the Enterprise tier.
API and webhooks
Each workspace has its own API keys and its own webhook endpoints. Cross-workspace tracking is not supported: an event posted with workspace A's hh_live_… key is recorded against workspace A only, even if the agent in question runs across multiple clients.
This is intentional. Per-client API keys keep the audit trail clean and prevent a leaked key from spilling into another client's data.
Quick reference
| Action | Where | Who can do it |
|---|---|---|
| Create child workspace | Workspace switcher → "+ Create workspace" | Anchor owner / admin |
| Delete child workspace | Settings → Workspace → "Delete this workspace" | The child's owner |
| Invite client | Settings → Team on the child workspace | Child owner / admin |
| View pooled usage | /billing on the anchor | Anchor owner / admin |
| Manage subscription | /billing on the anchor | Anchor owner / admin |
| Cancel subscription | Stripe Customer Portal via /billing | Anchor owner / admin |