Skip to content

Products across every distributor (paged)

GET
/v1/catalog/products
curl --request GET \
--url 'https://api.oldsteelarsenal.com/v1/catalog/products?in_stock=false&include_discontinued=false&sort=key&offset=0&limit=100&count=false' \
--header 'x-client-id: <x-client-id>' \
--header 'x-signature: <x-signature>' \
--header 'x-timestamp: <x-timestamp>'

One row per product — a UPC, or <distributor>:<sku> for an offer with no UPC — with every live offer and this service’s best_offer. Filters match OFFERS (a product is listed when one of its offers meets them all): brand (brand_key, repeatable), product_class, distributor, department (<distributor>:<code>), min_cost / max_cost, in_stock, ffl_required, q (UPC / SKU / mfg number / text), include_discontinued. sort=key pages by cursor (the full scan); brand / cost / qty page by offset. count=true adds the total. Scope: catalog:read.

brand
Any of:
Array<string>
product_class
Any of:
Array<string>
distributor
Any of:
Array<string>
department
Any of:
Array<string>
min_cost
Any of:
number
max_cost
Any of:
number
in_stock
In Stock
boolean
ffl_required
Any of:
boolean
q
Any of:
string
<= 100 characters
include_discontinued
Include Discontinued
boolean
sort
Sort
string
default: key /^(key|brand|cost|qty)$/
cursor
Any of:
string
offset
Offset
integer
0 <= 100000
limit
Limit
integer
default: 100 >= 1 <= 500
count
Count
boolean
x-client-id
Any of:
string
x-timestamp
Any of:
string
x-signature
Any of:
string

Successful Response

Media typeapplication/json
ProductsResponse
object
cursor
Any of:
string
products
required
Products
Array<object>
CatalogProduct
object
best_offer
Any of:
ProductOffer
object
brand_key
required
Brand Key

The brand folded for matching: case, punctuation and ‘&’ vs ‘and’ ignored, spelling kept (‘s and w’ ≠ ‘smith and wesson’) except for the brand synonyms the service keeps (‘holosun technologies’ → ‘holosun’).

string
caliber
required
Caliber
string
cost
required
Cost
number
department
required
Department
string
discontinued
required
Discontinued
boolean
distributor
required
Distributor
string
dropship_blocked
required
Dropship Blocked
boolean
ffl_required
required
Ffl Required
boolean
image_name
required
Image Name
string
image_url
required
Image Url
string
image_url_hires
required
Image Url Hires
string
long_description
required
Long Description
string
manufacturer
required
Manufacturer
string
map
required
Map
number
map_policy
Map Policy

Manufacturer price-policy mark when the distributor ships one (ss: ‘M’ = enforceable MAP, ‘U’ = suggested MSRP, ‘’ = no policy — render ‘’ as ‘no policy’, never as MAP $0). Always ‘’ for rsr.

string
""
mfg_number
required
Mfg Number
string
model
required
Model
string
msrp
required
Msrp
number
product_class
required
Product Class

Handgun / Long Gun / Other Firearm / Ammunition / Accessory, from this distributor’s own department code — the one class table; a client keeps none of its own.

string
product_key
required
Product Key
string
prop65
required
Prop65
boolean
qty
required
Qty
integer
qty_updated_at
Any of:
string format: date-time
ships_ground_only
required
Ships Ground Only
boolean
short_description
required
Short Description
string
signature_required
required
Signature Required
boolean
sku
required
Sku
string
status_flag
required
Status Flag
string
upc
required
Any of:
string
vendor_approval_required
required
Vendor Approval Required
boolean
weight_lb
required
Weight Lb
number
content_locked
Content Locked
boolean
content_optimized
Content Optimized

Any optimized field is set.

boolean
content_source
Any of:
string
description
required
Description

The product title: the optimized one when set, else the distributor’s (original.description).

string
ffl_required
required
Ffl Required
boolean
image_url
required
Image Url
string
key
required
Key

The UPC, or <distributor>:<sku> for an offer with no UPC (an orphan is its own product).

string
long_description
Long Description

The long description: the optimized one when set, else the distributor’s (original.long_description).

string
""
manufacturer
required
Manufacturer
string
meta_description
Meta Description

Optimized search result snippet; empty when none.

string
""
model
required
Model
string
offers
required
Offers

Every live (not Deleted) offer on the product, discontinued ones included and flagged.

Array<object>
ProductOffer
object
brand_key
required
Brand Key

The brand folded for matching: case, punctuation and ‘&’ vs ‘and’ ignored, spelling kept (‘s and w’ ≠ ‘smith and wesson’) except for the brand synonyms the service keeps (‘holosun technologies’ → ‘holosun’).

string
caliber
required
Caliber
string
cost
required
Cost
number
department
required
Department
string
discontinued
required
Discontinued
boolean
distributor
required
Distributor
string
dropship_blocked
required
Dropship Blocked
boolean
ffl_required
required
Ffl Required
boolean
image_name
required
Image Name
string
image_url
required
Image Url
string
image_url_hires
required
Image Url Hires
string
long_description
required
Long Description
string
manufacturer
required
Manufacturer
string
map
required
Map
number
map_policy
Map Policy

Manufacturer price-policy mark when the distributor ships one (ss: ‘M’ = enforceable MAP, ‘U’ = suggested MSRP, ‘’ = no policy — render ‘’ as ‘no policy’, never as MAP $0). Always ‘’ for rsr.

string
""
mfg_number
required
Mfg Number
string
model
required
Model
string
msrp
required
Msrp
number
product_class
required
Product Class

Handgun / Long Gun / Other Firearm / Ammunition / Accessory, from this distributor’s own department code — the one class table; a client keeps none of its own.

string
product_key
required
Product Key
string
prop65
required
Prop65
boolean
qty
required
Qty
integer
qty_updated_at
Any of:
string format: date-time
ships_ground_only
required
Ships Ground Only
boolean
short_description
required
Short Description
string
signature_required
required
Signature Required
boolean
sku
required
Sku
string
status_flag
required
Status Flag
string
upc
required
Any of:
string
vendor_approval_required
required
Vendor Approval Required
boolean
weight_lb
required
Weight Lb
number
original
Any of:
OriginalCopy
object
description
required
Description

The distributor’s title (the merged short description), whatever is served.

string
long_description
required
Long Description

The distributor’s long copy (the best offer in merge order that has any; the content bench’s own when locked).

string
short_description
Short Description

Optimized short description; empty when none (distributors have no such field).

string
""
total_qty
Total Qty

Units on hand across every distributor: the sum of the current (not discontinued) offers’ qty. Raw distributor counts — a client’s own buffers and exclusions are its to apply.

integer
0
upc
required
Any of:
string
total
Any of:
integer
Example
{
"products": [
{
"best_offer": {
"map_policy": ""
},
"content_locked": false,
"content_optimized": false,
"long_description": "",
"meta_description": "",
"offers": [
{
"map_policy": ""
}
],
"short_description": "",
"total_qty": 0
}
]
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
ctx
Context
object
input
Input
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
Examplegenerated
{
"detail": [
{
"ctx": {},
"input": "example",
"loc": [
"example"
],
"msg": "example",
"type": "example"
}
]
}