API reference

Offers

Answer offers as a seller, or make them as a buyer.

List offers

GET/v1/offers
Needs a key with read

Offers on your listings (role=seller, the default) or offers you've made (role=buyer), newest first. Status is as of now: an open offer past its deadline reads expired.

Query

role"seller" | "buyer"default "seller"
status"open" | "countered" | "accepted" | "declined" | "withdrawn" | "expired" | "paid"
listingstring
Only offers on this listing id.
limitintegerdefault 25
How many to return, 1 to 100. Default 25.
offsetintegerdefault 0
How many to skip, for the next page.
Request
curl https://api.resell.store/v1/offers?status=open \
  -H "Authorization: Bearer $RESELL_KEY"
Response
{
  "object": "list",
  "data": [
    {
      "object": "offer",
      "id": "5b0f…",
      "status": "open",
      "amount": 150,
      "counter": null,
      "agreed": 150,
      "note": "Could pick up this weekend.",
      "deposit": null,
      "expires_at": "2026-10-04T18:00:00.000Z",
      "responded_at": null,
      "created_at": "2026-10-02T18:00:00.000Z",
      "listing": {
        "id": "8d1e6c2a-…",
        "title": "Yellow Le Creuset dutch oven, 5.5 qt",
        "price": 185,
        "status": "live",
        "photo": "https://files.resell.store/…",
        "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
      },
      "shop": {
        "slug": "maya",
        "name": "Maya's closet"
      },
      "buyer": {
        "name": "Jess"
      }
    }
  ],
  "total": 1,
  "has_more": false
}

Get an offer

GET/v1/offers/:id
Needs a key with read

One offer, on your listing or made by you.

Path

idstringrequired
The id.
Request
curl https://api.resell.store/v1/offers/5b0f… \
  -H "Authorization: Bearer $RESELL_KEY"
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "open",
  "amount": 150,
  "counter": null,
  "agreed": 150,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": null,
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  },
  "buyer": {
    "name": "Jess"
  }
}

Accept an offer

POST/v1/offers/:id/accept
Needs a key with offers

Says yes. The buyer gets an email and 48 hours to pay the offered amount.

Path

idstringrequired
The id.
Request
curl -X POST https://api.resell.store/v1/offers/5b0f…/accept \
  -H "Authorization: Bearer $RESELL_KEY"
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "accepted",
  "amount": 150,
  "counter": null,
  "agreed": 150,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": "2026-10-02T19:00:00.000Z",
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  },
  "buyer": {
    "name": "Jess"
  }
}

Decline an offer

POST/v1/offers/:id/decline
Needs a key with offers

Says no, kindly. The buyer gets an email.

Path

idstringrequired
The id.
Request
curl -X POST https://api.resell.store/v1/offers/5b0f…/decline \
  -H "Authorization: Bearer $RESELL_KEY"
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "declined",
  "amount": 150,
  "counter": null,
  "agreed": 150,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": "2026-10-02T19:00:00.000Z",
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  },
  "buyer": {
    "name": "Jess"
  }
}

Counter an offer

POST/v1/offers/:id/counter
Needs a key with offers

Names your price. It has to sit between their offer and your asking price. The buyer has 48 hours to take it.

Path

idstringrequired
The id.

Body

amountnumberrequired
Your counter, in dollars.
Request
curl https://api.resell.store/v1/offers/5b0f…/counter \
  -H "Authorization: Bearer $RESELL_KEY" \
  -d amount=170
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "countered",
  "amount": 150,
  "counter": 170,
  "agreed": 170,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": "2026-10-02T19:00:00.000Z",
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  },
  "buyer": {
    "name": "Jess"
  }
}

Make an offer

POST/v1/offers
Needs a key with buying

Offers a price on a live listing that takes offers. It has to be under the asking price. The seller has 48 hours to answer; a new offer on the same listing replaces your last one.

Body

listingstringrequired
The listing id.
amountnumberrequired
Your offer, in dollars.
notestring
A line for the seller.
Request
curl https://api.resell.store/v1/offers \
  -H "Authorization: Bearer $RESELL_KEY" \
  -d listing="8d1e6c2a-…" \
  -d amount=150 \
  -d note="Could pick up this weekend."
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "open",
  "amount": 150,
  "counter": null,
  "agreed": 150,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": null,
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  }
}

Withdraw your offer

POST/v1/offers/:id/withdraw
Needs a key with buying

Takes back an offer that's still open or countered.

Path

idstringrequired
The id.
Request
curl -X POST https://api.resell.store/v1/offers/5b0f…/withdraw \
  -H "Authorization: Bearer $RESELL_KEY"
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "withdrawn",
  "amount": 150,
  "counter": null,
  "agreed": 150,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": null,
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  }
}

Take the counter

POST/v1/offers/:id/accept-counter
Needs a key with buying

Agrees to the seller's counter. You then have 48 hours to pay (see POST /checkout).

Path

idstringrequired
The id.
Request
curl -X POST https://api.resell.store/v1/offers/5b0f…/accept-counter \
  -H "Authorization: Bearer $RESELL_KEY"
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "accepted",
  "amount": 150,
  "counter": null,
  "agreed": 150,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": null,
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  }
}

Turn down the counter

POST/v1/offers/:id/decline-counter
Needs a key with buying

Says no to the seller's counter. The offer ends.

Path

idstringrequired
The id.
Request
curl -X POST https://api.resell.store/v1/offers/5b0f…/decline-counter \
  -H "Authorization: Bearer $RESELL_KEY"
Response
{
  "object": "offer",
  "id": "5b0f…",
  "status": "declined",
  "amount": 150,
  "counter": null,
  "agreed": 150,
  "note": "Could pick up this weekend.",
  "deposit": null,
  "expires_at": "2026-10-04T18:00:00.000Z",
  "responded_at": null,
  "created_at": "2026-10-02T18:00:00.000Z",
  "listing": {
    "id": "8d1e6c2a-…",
    "title": "Yellow Le Creuset dutch oven, 5.5 qt",
    "price": 185,
    "status": "live",
    "photo": "https://files.resell.store/…",
    "url": "https://maya.resell.store/yellow-le-creuset-dutch-oven-5-5-qt"
  },
  "shop": {
    "slug": "maya",
    "name": "Maya's closet"
  }
}