Lister Public API Documentation
Getting started
The Lister Public API provides secure, programmatic access to operational and sales data from your Upright Labs Lister account. It enables clients to export data for use in external systems, reporting tools, or custom integrations. All endpoints are authenticated and exclude personally identifiable information (PII) to ensure data security.
Table of Contents
- GET /reports/listings/goodwillfinds
- GET /reports/listings/shopgoodwill
- GET /reports/listings/ebay
- GET /reports/listings/shopify
- GET /reports/productivity/operational
- GET /reports/productivity/user
- GET /reports/paid_orders
- GET /reports/order_items
- GET /reports/shipments
- GET /reports/refunds
- GET /reports/manifest_items
- GET /manifests
- POST /api/manifests
- PUT /api/manifests
- GET /event_logs
- GET /v4/products (Get products)
- GET /v5/products (Get products)
- POST /v5/products (Create products)
- PUT /v4/products (Update product or variants)
- GET /v5/images/presign
- Uploading images
Authentication
All API calls must supply an X-Authorization header with your generated API token. You can generate an API token from Admin > Developer in Lister.
Date formats
Every date uses an ISO8601 format.
Rate limits
- You can request up to 365 days of data in a given report, however calls may time out or return an error if results exceed 10 thousand records. You can prevent this by modifying your query to reduce your results by API call.
Resources
- All API calls should be made to https://app.uprightlabs.com/api/<resource>
- For documentation on our downloadable reports, please visit the report section in our help center documentation. These reports return similar data to the API.
Reporting
GET /reports/listings/goodwillfinds
Returns all Goodwillfinds listings created within the timeframe
Params time_start: String time_end: String
- Example
- Response
GET /reports/listings/shopgoodwill
Returns all Shopgoodwill listings created within the timeframe
Params time_start: String time_end: String
- Example
- Response
GET /reports/listings/ebay
Returns all eBay listings created within the timeframe
Params time_start: String time_end: String
- Example
- Response
GET /reports/listings/shopify
Returns all Shopify listings created within the timeframe
Params time_start: String time_end: String
external_market_id: Integer (optional) - The Shopify Product ID to filter by
- Example
- Response
GET /reports/productivity/operational
Returns operational productivity stats recorded in the timeframe grouped by interval
Params time_start: String time_end: String
interval: String - hour, day, week, month, quarter, year; What timeframe to group stats by.
user_id: Integer (optional) - Filter data by a particular user; defaults to all.
- Example
- Response
GET /reports/productivity/user
Returns user productivity stats recorded in the timeframe
Params time_start: String time_end: String
hide_inactive_users: Boolean (optional) - Exclude inactive users in the response; defaults to false
- Example
- Response
GET /reports/paid_orders
Returns all paid orders within the timeframe
Params time_start: String time_end: String
payment_status: String (optional) - One or more of “ALL”, “PENDING”, “UNPAID”, “PAID”, “PARTIALLY_PAID”, “REFUNDED”, “PARTIALLY_REFUNDED” (comma separated; defaults to ALL to if left blank)
- Example
- Response
GET /reports/order_items
Returns all ordered items paid within a timeframe
Params time_start: String time_end: String
- Example
- Response
GET /reports/shipments
Returns all shipments created within the timeframe
Params time_start: String time_end: String
- Example
- Response
GET /reports/refunds
Returns all refunds submitted within the timeframe
Params time_start: String time_end: String
- Example
- Response
GET /reports/manifest_items
Returns all manifest items created within the timeframe
Params start_date: String end_date: String
- Example
- Response
GET /manifests
Returns all manifests created within the timeframe
Params page: Integer (optional). Defaults to 1
per_page: Integer (optional) - How many items to return per call. Defaults to 5, max 100.
sort: String (optional) - Each key in the manifest response can be sorted by adding either “.desc” or “.asc”, eg: “sort=created_at.desc”
supplier_id: Integer (optional) - Filter manifests by a particular supplier.
barcode: String (optional) - Filter manifests by a barcode. This supports partial matching.
state: String (optional) - Filter manifests by a status. Options include CREATED, MISSING, READY_FOR_PICKUP, IN_TRANSIT, RECEIVED, PARTIALLY_PROCESSED, PROCESSED
- Example
- Response
POST /api/manifests
Creates a manifest
- Params
- Example
- Response
PUT /api/manifests
Update a manifest
- Params
- Example
GET /event_logs
Returns all event logs in the given timeframe
Params
created_between: String represented as an array - Must provide two timestamps to search event logs. Eg: “created_between[]=2022-08-01&created_between[]=2022-08-03”
user_id: Integer (optional) - Filter logs by a particular user
per_page: Integer - default 20, max 100. How many entries to return in each call.
cursor: String - the information to get the next or last page of results, this is the value provided from the previous call and will return the results based on the previous_cursor or next_cursor token provided
- Example
- Response
Inventory Management
GET /v4/products (Get products)
Returns a product and all of its listings by product ID.
- Params
- Example
- Response
GET /v5/products (Get products)
Returns a list of products
Params
tags[]: String represented as an array - Name of the tag to filter by
query: String - Search by title or SKU
- Example
- Response
POST /v5/products (Create products)
Creates either a draft or a live product. Only “title” is required if draft=True.
- Params
- Example
- Response
PUT /v4/products (Update product or variants)
- Params
- Example
Update a product
- Update variant(s)
- Response
GET /v5/images/presign
Get info to upload an image to the Lister data storage
Params
- type: String - the mime-type of the kind of upload, eg “image/jpg”.
- Example
- Response
Uploading images
Uploading images to Lister takes part in 3 steps
- Call our secure presign API to authorize a direct upload to the Lister S3 bucket.
- Initiate a direct multipart form upload using the response data from Step 1
- Update the product in Lister with the location of the image in S3
To best illustrate ****how to do this, we’ll use an example in JS
POS
POST /api/pos/products_sold
Mark product as sold in store
- Params
Where sku-1 and sku-2 are skus of products to mark as sold in store:
- Example
- Response
Admin
GET /api/users
Get a list of all users ever for your organization
- Params
show_all - Optional. Query parameter to include inactive users. When this parameter is omitted, only active teammates will be returned. - Example
- Response
GET /api/inventory_locations
Get a list of all inventory locations
- Example
- Response