Skip to content

The client portal

The client portal is your customer’s own view of the work you are doing for them. It is a separate surface, not your dashboard with things hidden: a client signing in lands in the portal and never sees the agency’s information architecture at all.

Your dashboard answers what is the work doing; the portal answers what has the agency shared with this customer. The two are built separately so that nothing internal can reach the portal by accident.

  • A client collaborator with a grant on at least one project — see Client access.
  • At least one published deliverable or live deployment. Until then, the portal is empty.
Screen What it shows
Overview One row per shared project — its name, how many deliverables you have published, and when it last moved. Plus the most recent activity across all of them.
Deliverables The work you published, its progress, and anything waiting on the customer’s sign-off.

Activity is a small, fixed vocabulary. Three things reach a customer’s timeline:

type What happened
deliverable.published A deliverable was published to them for the first time
deliverable.approved They accepted a deliverable
deployment.published A deployment they can visit went live

Each entry carries what changed and when. There is no actor. The customer is told a deliverable was published, never which agent or which person inside your agency published it.

Nothing in the portal comes from run history, execution logs, agent runs, prompts, model costs or the audit log. A customer cannot see:

  • what a cycle or a task cost you, or how many runs it took
  • internal workflow states, timings or run counts
  • secrets, environments, integrations, or model configuration
  • the approval queue, events, or the audit log
  • any project they were not individually invited to — or that such a project exists

The same two endpoints serve both audiences, and for an agency viewer they cover every project in the Workspace rather than only the shared ones. Use them to check what a customer is shown.

One row per project, plus recent activity.

Terminal window
curl -sS "$HLIX_BASE_URL/v1/api/client-portal/overview" \
-H "x-api-key: $HLIX_API_KEY" \
-H "X-Organization-Id: $HLIX_WORKSPACE_ID"

Expected output:

{
"projects": [
{
"projectId": "…",
"name": "Acme storefront",
"publishedDeliverables": 4,
"awaitingYourDecision": 0,
"lastActivityAt": "2026-08-27T16:02:44.000Z"
}
],
"recentActivity": [
{
"id": "deliverable-published-…",
"type": "deliverable.published",
"projectId": "…",
"title": "Checkout redesign",
"detail": "Ready for your review.",
"occurredAt": "2026-08-27T16:02:44.000Z",
"source": { "kind": "deliverable", "id": "…" }
}
]
}

recentActivity is capped at 20 items of all kinds. awaitingYourDecision is always 0 for a customer; sign-off is tracked on the Deliverables screen.

  • A filter returns []. An unrecognised type matches nothing. Check the spelling against the three names above.
  • Your customer sees an empty portal. They have no grant on any project yet, or they are signed into the wrong Workspace. Accepting an invitation returns the Workspace to switch to.
  • They see a project but no deliverables. Nothing has been published to them. Work in progress is not visible until you publish it — see Deliverables & approvals.
  • You opened a portal URL as an agency member and were sent back. The portal is for customers only. Use the API calls above to see what a customer is shown.
  • An activity entry you expected is missing. Only the three kinds above are produced. Anything else your customer needs to know belongs in a deliverable’s own summary.
If you want to… Read
Give someone access to a project Client access
Publish work and request a decision Deliverables & approvals
Charge this customer for the work Invoicing your client
Understand the boundary underneath Tenancy & isolation