The calls that change an item all return the same
List<PublicAreaItemModel> response shape. See that page for the shared error codes and flag conventions, and reading proposal items for what the returned fields mean. List item suppliers is the exception — it returns supplier records rather than items.The curl snippets here are trimmed to the payload. Every real request also needs the four HMAC headers from signing requests. The POST calls send a JSON body, so set Content-Type: application/json and sign that same value. The GET has no body, and its canonical message omits the content-type segment entirely.1
Add the item
Call add items with the catalog item id, its type, and the target area option. Area option ids come from get proposal, under
areas[].options[]. The response includes the new item’s id — save it for every following step.curl
response
2
Price the item
Adjust the sell price, cost, or MSRP if the catalog defaults don’t apply. Use update sell price, update cost, or update MSRP — each accepts either an absolute value or a percentage + basis.
curl
response
3
Set the supplier
Call list item suppliers to see which suppliers are available for this item, then set item supplier with the chosen supplier’s id. This updates every instance of the same catalog item in the proposal.
curl
response
curl
response
4
Organize the item
Once pricing and supplier are set, move or copy the item to its final area option with move items or copy items. Nested (child) items move or copy along with their parent unless you suppress that with
moveNestedItems/copyNestedItems.curl
response
Next steps
- To remove an item instead, see delete items — note its response is
void, unlike every step above. - To pull the item’s supplier cost from the catalog after a supplier price change elsewhere, see refresh item costs — also
void. - For the tax-exempt and recurring-service flags, see the Flags endpoints.
- No webhook fires when an item changes, so to pick up edits made elsewhere, re-fetch get proposal and watch its
Last-Modifiedheader.