Catalog enrichment
Add product details from supported product page URLs to internal catalog records.
Product data API
Build stock monitoring, catalog enrichment, pricing, and marketplace operations around product page URLs and structured JSON responses.
https://shop.example/p/123Use stock when availability, offers, price, seller, and delivery signals drive the workflow.
{
"productUrl": "https://shop.example/p/123"
}{
"externalId": "B0EXAMPLE1",
"source": "amazon_gb",
"method": "checkStock",
"outcome": "OK",
"inStock": true,
"offerCount": 2,
"offers": [
{
"price": 49.95,
"currency": "GBP",
"seller": "AquaPro",
"fulfilment": "FBA",
"deliveryDays": 2
},
{
"price": 54.99,
"currency": "GBP",
"seller": "PartsHub",
"fulfilment": "FBM",
"deliveryDays": 4
}
],
"cacheStatus": "live",
"creditsRemaining": 4871
}Use product information when catalog, enrichment, onboarding, or content-quality workflows need structured details.
{
"productUrl": "https://shop.example/p/123"
}{
"productInformation": {
"title": "Replacement water filter cartridge",
"brand": "AquaPro",
"images": [
"https://cdn.example/products/water-filter-123/main.jpg"
],
"attributes": {
"capacity": "1 liter",
"packSize": "2"
},
"ratings": {
"average": 4.6,
"reviewCount": 1284
}
},
"creditsRemaining": 2480
}API reference
Single requests send productUrl. Bulk requests send items[].productUrl. Bearer auth is required for product and usage routes.
| Use case | Endpoint | Request body | Returns |
|---|---|---|---|
| Check stock | POST /v1/product-stock | { "productUrl": "https://shop.example/p/123" } | Returns availability, offer count, price, currency, seller, fulfilment, and delivery fields for one product page URL. |
| Get product information | POST /v1/product-information | { "productUrl": "https://shop.example/p/123" } | Returns title, brand, images, attributes, ratings, category data, and other product details for one product page URL. |
| Usage and credits | GET /v1/usage | No request body | Returns credit balance, rate class, limits, plan data, and recent usage rows for the authenticated token. |
Code examples
Put your API token in PIA_API_TOKEN, replace the example URL with a product page from a supported store, and run the snippet. API tokens are in your account console.
Errors return error.code, error.message, error.requestId, and error.retryable. When retryable is true, wait for the Retry-After seconds, then send the request again. Only successful requests use credits.
The OpenAPI reference lists every field and status code.
curl -sS https://api.productinformationapi.com/v1/product-information \
-H "Authorization: Bearer $PIA_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"productUrl": "https://shop.example/p/123"}'// Node.js 18+, no packages. Run: PIA_API_TOKEN=your-token node product_information.mjs
const response = await fetch("https://api.productinformationapi.com/v1/product-information", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PIA_API_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ productUrl: "https://shop.example/p/123" }),
signal: AbortSignal.timeout(150_000),
});
const data = await response.json();
if (!response.ok) {
const { code, message, requestId } = data.error ?? {};
throw new Error(`${response.status} ${code}: ${message} (request ${requestId})`);
}
const info = data.productInformation ?? {};
console.log({
title: info.title,
brand: info.brand,
images: info.images?.length ?? 0,
categoryPath: info.categoryPath,
});# Python 3.8+ with requests (pip install requests). Run: PIA_API_TOKEN=your-token python product_information.py
import os
import requests
response = requests.post(
"https://api.productinformationapi.com/v1/product-information",
headers={"Authorization": f"Bearer {os.environ['PIA_API_TOKEN']}"},
json={"productUrl": "https://shop.example/p/123"},
timeout=150,
)
data = response.json()
if not response.ok:
error = data["error"]
raise SystemExit(f"{response.status_code} {error['code']}: {error['message']} (request {error['requestId']})")
info = data.get("productInformation") or {}
print({
"title": info.get("title"),
"brand": info.get("brand"),
"images": len(info.get("images") or []),
"categoryPath": info.get("categoryPath"),
})Response fields
Exact fields depend on the endpoint, the product page, and the store's coverage.
Use cases
Typical jobs teams build on these endpoints.
Add product details from supported product page URLs to internal catalog records.
Pair product records with stock and offer signals for product operations.
Start review workflows from a product page URL instead of manual field entry.
Compare required fields and coverage before committing to a larger integration.
Limitations
Coverage is enabled by supported retailer, marketplace, and product page URL.
Polling cadence belongs to the client integration and is discussed during onboarding.
The API is not an official marketplace partner API and does not promise unlimited collection.
FAQ
Answers to the questions teams ask before they integrate.
No. Callers send productUrl for single requests or items[].productUrl for bulk requests. Internal identifiers are derived by the API when the URL is supported.
Use product-stock for availability and offers, and product-information for catalog details.
Yes. Dedicated stock and information bulk endpoints accept arrays of product page URLs and return per-item results.
Share target retailers or marketplaces, expected volume, required fields, and sample product URLs during onboarding.