Ad binding requests (retired)
Retired
This page has been retired. Binding requests are now managed inside the ClickUp Audit "Requests" tab.
- Route:
/admin/ad-binding-requests - Guard:
/admin/*layout (isAdminTier()); the request-review API is admin-gated server-side. - Redirects to:
/admin/clickup-audit?tab=requests— the screenshot below shows that destination (an honest empty state: 0 pending requests from active clients at capture time).

What this route is now
src/app/admin/ad-binding-requests/page.tsx is an unconditional redirect to
the "Requests" tab of the merged ClickUp Audit workspace. It is kept alive
purely so existing bookmarks do not 404; no params are read.
The "Requests" tab (destination)
Rendered by AdBindingRequests.tsx inside ClickUpCoveragePanel:
- Request queue — lists ad-binding requests raised from the client portal,
fetched from
GET /api/admin/ad-binding-requestswith an optional?status=filter. Statuses arepending | approved | rejected | fulfilled; the tab defaults topendingplus an "All statuses" option. - Client filter — active-client dropdown fed by
GET /api/admin/clients?status=active&purpose=ad-linking; the empty state in the screenshot is scoped to active clients. - Approve / Reject — per-row actions on pending requests; each sends
PATCH /api/admin/ad-binding-requests/{id}with the new status. - Fulfill via linking — approving is separate from actually creating the
binding. The tab can hand a request off to the Linked Ads link tool and then
PATCHthe request tofulfilledwith the reviewer note "Linked from Binding Requests." — the review queue records outcomes; the binding itself is created by the Linked Ads tool (seeadmin-ad-bindings.md). - Pending badge — the parent panel shows a live count on the Requests tab
label, fetched cheaply via
GET /api/admin/ad-binding-requests?status=pending&limit=1(readstotal).
Where requests come from
Client-portal users cannot create bindings directly (that would cross the
tenancy boundary), so the portal exposes
/api/portal/ad-binding-requests — a request inbox. Portal users ask "link
this ad", and an admin reviews it here. This tab is therefore the
admin-side half of a two-sided workflow; the portal-side half is documented
with the /portal page (P17).
Behavior summary
| Aspect | Value |
|---|---|
| HTTP behavior | Server redirect to /admin/clickup-audit?tab=requests |
| Query params | Not preserved (legacy ?tab= aliases are handled by the /admin/ad-bindings redirect instead) |
| Nav entry | None — reached via ClickUp Audit (requires manage_clickup) |
| Rendering mode | force-dynamic |
Key files
| File / endpoint | Role |
|---|---|
src/app/admin/ad-binding-requests/page.tsx | The redirect (whole page) |
src/components/admin/AdBindingRequests.tsx | Requests tab UI (queue + review actions) |
src/components/admin/ClickUpCoveragePanel.tsx | Host panel + pending-count badge |
GET /api/admin/ad-binding-requests | Queue list (status-filterable) |
PATCH /api/admin/ad-binding-requests/{id} | Approve / reject / mark fulfilled |
GET /api/admin/clients?purpose=ad-linking | Client filter source |
/api/portal/ad-binding-requests | Portal-side request creation (origin of rows) |