Skip to content

Products by key (≤200)

POST
/v1/catalog/products/batch
curl --request POST \
--url https://api.oldsteelarsenal.com/v1/catalog/products/batch \
--header 'Content-Type: application/json' \
--header 'x-client-id: <x-client-id>' \
--header 'x-signature: <x-signature>' \
--header 'x-timestamp: <x-timestamp>' \
--data '{ "keys": [ "example" ] }'

The listing sync’s read: fresh offers from every distributor for the products it lists. A 13-digit UPC with a leading zero is read as its 12-digit UPC-A (reported in keys); unknown keys are absent. Scope: catalog:read.

x-client-id
Any of:
string
x-timestamp
Any of:
string
x-signature
Any of:
string
Media typeapplication/json
ProductsBatchRequest
object
keys
required
Keys
Array<string>
>= 1 items <= 200 items
Examplegenerated
{
"keys": [
"example"
]
}

Successful Response

Media typeapplication/json
ProductsBatchResponse
object
keys
required
Keys

Requested key → the key it was normalised to, for the ones that changed (a 13-digit UPC with a leading zero is the 12-digit UPC-A).

object
key
additional properties
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
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"
}
]
}