ZenBid Docs

Offers

Negotiate on published listings with submit, counter, accept, and reject flows.

Offers

Offers are first-class marketplace objects. Buyers submit an amount and optional message, sellers can counter, and accepted offers become the commercial basis for an order.

Availability Rules

  • the listing must exist and be published
  • the buyer cannot offer on its own listing
  • fixed_price listings do not accept offers
  • the offer currency is inherited from the listing

Core Routes

RoutePurpose
GET /api/v1/offersList offers for the active organization
POST /api/v1/offersSubmit a new offer
POST /api/v1/offers/:id/counterCounter the current offer
POST /api/v1/offers/:id/acceptSeller accepts the offer
POST /api/v1/offers/:id/rejectBuyer or seller rejects the offer

Submit An Offer

{
  "listingId": "11111111-1111-4111-8111-111111111111",
  "amount": 1800,
  "message": "Can you include webhook QA in the same delivery window?",
  "expiresAt": "2026-05-02T17:00:00.000Z",
  "clientRequestId": "offer-client-1"
}

clientRequestId is the safest way to make offer submission repeatable from an external system.

Counter Flow

Use POST /api/v1/offers/:id/counter when the buyer or seller wants to tighten scope, price, or delivery expectations without abandoning the deal. The current beta implementation updates the same offer record instead of creating a new revision object.

Statuses

  • submitted
  • countered
  • accepted
  • rejected
  • withdrawn
  • expired

The public mutation routes currently cover submit, counter, accept, and reject. Accepted offers are what unlock negotiated order creation.