Platform admins only. Every pending request, oldest first, with what a reviewer needs to decide: the app, its publisher (the owning org), the creator as contact while they're a member, the requester's notes. Approve lists it; Reject requires a reason the requester will read.
3 requests · oldest first
| App | Publisher | Notes | Submitted | Actions |
|---|---|---|---|---|
Expense trackerexpense-tracker |
Acme CorpContact: Dana Levi |
Used daily by our finance team for six months… | 2 Oct 2026 | |
Shift plannershift-planner |
Northwind LogisticsContact: former member |
— | 3 Oct 2026 | |
Recipe boxrecipe-box |
Sam OrtizPersonal workspace |
Family recipes with a shopping list. | 4 Oct 2026 |
It will be listed on the FuzeFront marketplace with Acme Corp as publisher, and any FuzeFront user or organization will be able to install it.
The requester sees your reason and can fix the app and resubmit. The app's current visibility doesn't change.
A reason is required to reject.
New marketplace requests will appear here.
You don't have access to marketplace review.
Contract gap — commissioned by approval. app-registry 1.2.0 has approve/reject per app but no way to
list pending requests. This queue needs an additive, platform-admin-only, cursor-paginated
GET /publication-requests?status=pending returning AppPublication plus the app's
display name, icon and organizationId (flag-gated like its siblings). contract-designer
owns that amendment (1.3.0, minor); until it lands this flow cannot be implemented — the frames do not
invent a client-side scan of GET /apps.
Decisions. Approve → visibility=marketplace; Reject → { reason }, the app may be
resubmitted. Both remove the row optimistically and restore it on any non-2xx except 409 NOT_PENDING
(g4). Publisher is the owning org; the contact column follows the frame (e) rule — a former member is
never named. Nav entry lives beside the other admin consoles and renders only for platform admins.
Test hooks: [data-frame='07-review-queue'] · [data-panel='publication-queue'] ·
[data-queue-item='expense-tracker'] · [data-action='approve-publication'] ·
[data-action='reject-publication'] · [data-panel='approve-publication-dialog'] ·
[data-action='confirm-approve-publication'] · [data-panel='reject-publication-dialog'] ·
[data-input='rejection-reason'] · [data-action='confirm-reject-publication'] ·
[data-error-code='NOT_PENDING'] · [data-state='empty'] · [data-state='loading'] ·
[data-state='error'] · [data-state='forbidden'].