Skip to content

Product submissions

Let a customer propose a new product for the catalog, then review it, approve it into a real product, or reject it with a reason.

A customer submits the product through the customer portal. Staff review it from the Product Submissions queue: approving creates a real Product record and links it back to the submission; rejecting sends the customer a reason and nothing further happens on its own. This gives customers a self-service way to expand the catalog without giving them direct write access, and gives staff a checkpoint to enforce SKU, dimensional, and handling-class standards before a product enters the system.

Before you begin

To submit a product, you need a portal account linked to a customer, plus the submit:products permission — staff without a customer link can't submit, only review.

To review the queue, you need view:products. To see the Approve and Reject buttons, you need manage:products.

Workflow at a glance

graph LR
    A[Customer fills<br/>Submit Product form] --> B[SKU availability<br/>check]
    B --> C[Submission<br/>PENDING]
    C --> D{Staff<br/>review}
    D -->|Approve| E[Catalog Product<br/>created]
    D -->|Reject| F[Rejection reason<br/>captured]
    E --> G[Customer notified<br/>APPROVED]
    F --> H[Customer notified<br/>REJECTED]

    style A fill:#e3f2fd
    style C fill:#fff3e0
    style D fill:#fff3e0
    style E fill:#e8f5e9
    style F fill:#ffebee
    style G fill:#e8f5e9
    style H fill:#ffebee

Customer workflow

This section is for customer-portal users submitting products for catalog inclusion.

Opening the submission form

You submit a product while raising a delivery request — there's no separate Products page in the portal.

  1. Sign in to the portal. You land on Delivery Requests.
  2. Choose New Request.
  3. When you reach a line whose product isn't in the catalog yet, use the submit-product shortcut in the form.

    The submission form opens, and the new submission is linked to the request you're building.

Once staff approve it, the delivery request line is re-pointed at the real catalog product automatically. You don't need to come back and fix it.

Required and optional fields

Field Required Notes
Product Name Yes Up to 255 characters. Example: Heavy Duty Widget
SKU Yes Up to 100 characters. Letters, numbers, and hyphens only. Checked live for availability.
Unit of Measure Yes One of: EACH, CASE, PALLET, LB, KG, OZ, G
Description No Up to 2,000 characters. Free-form product description.
Weight No In pounds. Decimal allowed.
Length / Width / Height No In inches. Decimal allowed.
Cases per Pallet No Whole number, 1 – 9,999.
Notes No Up to 2,000 characters. Special handling, compliance, or any info for the reviewer.

Provide dimensions and weight when possible

Reviewers use weight and dimensional data to assign storage and freight classes during approval. Submissions missing this data are approvable but may be sent back for revision if your operations team needs it upfront.

SKU availability

As you type the SKU, the form checks it against the catalog and shows one of three states:

State Means
Available Safe to proceed
Already in the catalog The SKU belongs to an existing approved product
Pending approval Another submission — possibly your own — is already using this SKU

If the SKU is taken, change it before you submit.

Submitting

  1. Review all fields.
  2. Choose Submit for Review.

    A confirmation appears and the form closes. The submission is created with status Pending, and both staff reviewers and your own customer account get an in-app notification.

Checking submission status

The My Products section on the Delivery Requests page lists everything you've submitted, scoped to your own customer account. Each card shows the product name, its SKU, the date, a status badge, and — if it was turned down — the reason.

Badge Meaning
Pending Waiting for staff review
Approved Accepted — a catalog product has been created
Rejected Declined. The reason is shown on the card

The cards are a read-only summary; there's nothing to click into. If a submission was rejected, read the reason on the card and submit a corrected one.


Staff (admin) workflow

This section is for internal staff with the manage:products permission reviewing the submission queue.

Reviewing the submission queue

Open Catalog → Products. Pending submissions appear in a collapsible Product Submissions panel on that page — there's no separate entry in the sidebar.

Column Shows
Product The submitted product name and its proposed SKU
Customer The submitting customer's company name
UOM The unit of measure submitted
Status Status badge
Submitted When it came in

Click a row to open the review dialog.

The panel only ever shows pending submissions

It's hardcoded to the pending queue, and it disappears entirely when nothing is pending — so an empty Products page means there's nothing waiting, not that the feature is missing.

There's no search box and no status filter here, which also means approved and rejected submissions can't be reviewed from this screen. To look those up, use the API — see the API reference below.

Opening a submission for review

Choose any row to open the Review dialog. It shows every field the customer entered — name, SKU, and status badge; unit of measure, weight, dimensions, and cases per pallet; description and notes, if provided; and the customer, submitting user, and submission timestamp.

For a submission that's already been reviewed, it also shows who reviewed it and when, plus the Rejection Reason on a rejected submission or the Linked Product on an approved one.

Approving a submission

Approving a submission creates a real Product in the catalog and links back to the submission.

  1. Open the submission in the Review dialog.
  2. Optionally, expand Show Overrides to adjust any of the following before creating the product:

    Override Purpose
    SKU Normalize the SKU to your internal scheme
    Name Tidy up the display name
    Storage Class Assign a storage class (e.g., AMBIENT, REFRIGERATED)
    Freight Class Assign a freight class for rating
    NMFC Code National Motor Freight Classification code
    Lot Tracked Enable lot tracking on the new product
    Serial Tracked Enable serial-number tracking
    Reorder Point / Reorder Quantity / Max Stock Inventory planning defaults
    Cost / Price Financial defaults

SKU conflicts at approval time

If another product takes the same SKU between submission and approval, approving fails with a conflict error. Use the SKU override field to assign a different SKU and try again.

  1. Choose Approve.

    The platform creates the product using the submission's fields plus any overrides, marks the submission Approved with who approved it and when, and re-points any pending delivery-request lines that referenced this submission to the real product. The customer gets an in-app notification, and the change is written to the activity history.

Rejecting a submission

  1. Open the submission in the Review dialog.
  2. Scroll to the Reject section.
  3. Enter a Rejection Reason — required.
  4. Choose Reject.

    The platform marks the submission Rejected, records who reviewed it and when, and sends the customer an in-app notification with your rejection reason. Any delivery-request lines that referenced the submission stay blocked.

Write useful rejection reasons

The rejection reason is shown verbatim to the customer. Be specific and actionable — for example, "Weight and pallet dimensions required for LTL rating — please resubmit with weight and L/W/H" is far more useful than "Missing info". The customer can resubmit with the same SKU once the original submission is rejected.

Reason-code guidance

There are no hard-coded reason codes — the field is free-form. Common patterns most operations teams use:

Pattern Example reason text
Missing data "Dimensions required for pallet calculation — please add L/W/H and cases per pallet."
Duplicate "Equivalent product already exists in the catalog as SKU WIDGET-001. Please use that SKU on your delivery request."
Non-compliant SKU "SKU does not follow XXX-000 format required for this customer. Please resubmit as HDW-100."
Needs classification review "Hazmat classification required before onboarding. Please email compliance@… with the SDS and resubmit."
Out of scope "This product falls outside the categories in your current MSA. Contact your account manager."

Once reviewed, a submission is locked

Approve and Reject only work on a submission that's still Pending. If you made a mistake:

  • Rejected by mistake — the customer resubmits. You can't "un-reject" from the interface.
  • Approved by mistake — deactivate the resulting catalog product through the normal Products admin flow. The submission record itself stays approved, for the audit trail.

API reference

This section is for developers integrating with product submissions directly, not for day-to-day use of the screens above. All endpoints are prefixed with the platform API base URL and require a Bearer token.

Method Path Permission Purpose
POST /product-submissions submit:products Customer creates a submission
GET /product-submissions view:products List submissions (auto-scoped to customer for portal users)
GET /product-submissions/check-sku/:sku submit:products Live SKU-availability check
GET /product-submissions/:id view:products Submission details with reviewer and product relations
PATCH /product-submissions/:id/approve manage:products Approve and create catalog product
PATCH /product-submissions/:id/reject manage:products Reject with a required rejectionReason

List filters supported on GET /product-submissions:

  • status[eq] — PENDING, APPROVED, or REJECTED
  • status[in] — comma-separated list
  • customerId[eq] — staff-only scoping (portal users are always scoped to their own customer)
  • search — matches name or SKU
  • page, pageSize, sortBy, sortOrder — standard pagination and sort (sortBy: createdAt, name, sku, status)

Response shapes follow the standard { data, meta } envelope used elsewhere in the API. Error responses use standard HTTP status codes: 400 for validation, 404 for not-found, 409 for SKU conflict.


Notifications

The platform sends an in-app notification on three events:

Event Recipients Content
Submission created Staff with manage:products for the submission's warehouse "New product submission — Name (SKU) from Customer"
Submission approved The submitting portal user and their customer organization "Your product submission Name (SKU) was approved"
Submission rejected The submitting portal user and their customer organization "Your product submission Name (SKU) was rejected — reason"

Choosing a notification opens the submission directly. In the staff UI that's the Review dialog; in the customer portal it's the status view, with the submission highlighted.


Audit trail

Every state change on a submission is recorded in activity history: creation; approval, with the status change from Pending to Approved and the new product it created; and rejection, with the status change from Pending to Rejected and the reason given. Each entry carries the acting user and the timestamp.


Troubleshooting

Problem Cause What to do
"User has no customers they can submit products for." (PS_NO_SUBMIT_ACCESS) The signed-in user has no customer set on their profile. An administrator edits the user in Users and sets a default customer, or the user signs in with a portal account that belongs to a customer.
"No warehouse assigned. Please contact your warehouse representative." The submitting user has neither a preferred default warehouse nor a warehouse data filter. Set a default warehouse on the user's profile preferences, or add a warehouse data filter assignment.
"SKU already exists in the product catalog" An active, approved product already uses this SKU. Use the existing catalog SKU on your delivery request instead — no submission needed. If the existing product is genuinely different, pick a unique SKU.
"SKU is already pending approval" Another submission — possibly your own, from earlier — is already sitting in the queue with this SKU. Check My Submissions; you may already have one open. Wait for it to be reviewed, or pick a different SKU.
Approve fails with "SKU was just taken" Between opening the Review dialog and choosing Approve, another product grabbed the same SKU. Expand Show Overrides, enter a different SKU in the SKU override field, and choose Approve again.
"Cannot approve/reject a submission in APPROVED status" The submission has already been reviewed. Approve and Reject only work on Pending submissions. See Once reviewed, a submission is locked.

  • Order processing — how approved products flow into orders and delivery requests
  • Customers — managing the customer accounts that portal submitters belong to
  • Users — managing the submit:products, view:products, and manage:products permissions
  • Bulk Upload — alternate path for importing large product catalogs (staff-only)
  • Activity history — the audit trail behind every submission

Support

For product-submission assistance: