Skip to main content

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).

Admin: Ad Binding Requests redirect target

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-requests with an optional ?status= filter. Statuses are pending | approved | rejected | fulfilled; the tab defaults to pending plus 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 PATCH the request to fulfilled with the reviewer note "Linked from Binding Requests." — the review queue records outcomes; the binding itself is created by the Linked Ads tool (see admin-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 (reads total).

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​

AspectValue
HTTP behaviorServer redirect to /admin/clickup-audit?tab=requests
Query paramsNot preserved (legacy ?tab= aliases are handled by the /admin/ad-bindings redirect instead)
Nav entryNone — reached via ClickUp Audit (requires manage_clickup)
Rendering modeforce-dynamic

Key files​

File / endpointRole
src/app/admin/ad-binding-requests/page.tsxThe redirect (whole page)
src/components/admin/AdBindingRequests.tsxRequests tab UI (queue + review actions)
src/components/admin/ClickUpCoveragePanel.tsxHost panel + pending-count badge
GET /api/admin/ad-binding-requestsQueue list (status-filterable)
PATCH /api/admin/ad-binding-requests/{id}Approve / reject / mark fulfilled
GET /api/admin/clients?purpose=ad-linkingClient filter source
/api/portal/ad-binding-requestsPortal-side request creation (origin of rows)