Skip to main content

Get product offers (single)

Returns a single product with up to 3 cheapest available offers, optionally narrowed by minimum total quantity and maximum price. Use this endpoint to inspect the current offer landscape for a specific product before placing an order — especially when you want to identify the cheapest offer or find offers within a budget.

Typical use cases:

  • Check current offers and prices for a known product before purchase.
  • Find the offer ID to use as offerId in a manual order item.

Endpoint: GET /export/v1/product-offers/{productId}

Headers

HeaderRequiredDescription
AuthorizationYesBearer token obtained from the OAuth2 token endpoint. Format: Bearer <access_token>. See Authentication.

Path parameters

ParameterTypeRequiredDescription
productIdstringYesProduct identifier. Must be exactly 14 digits and numeric (e.g. 10000004439009).

Query parameters

ParameterTypeRequiredDescription
totalQuantityintegerNoFilter offers by minimum total quantity — only offers where the combined available stock is greater than or equal to this value are returned. Must be between 1 and 1000000.
maxPricestring (decimal)NoFilter offers by maximum unit price — only offers with a price at or below this value are returned. Maximum two decimal places (e.g. 30.00). Range: 0.0199999999999.99.

Example requests

Cheapest offers for a product (up to 3)

GET /export/v1/product-offers/10000004439009

Offers within a price and quantity budget

GET /export/v1/product-offers/10000004439009?totalQuantity=5&maxPrice=30.00

Sandbox

curl --location 'https://sandboxapi.g2a.com/export/v1/product-offers/10000000258278' \
--header 'Authorization: Bearer rfC3vIi6zoVqZSHAlhTXslTfvMZYwWPZ'

Success response (200)

{
"data": {
"id": "10000004439009",
"name": "Grand Theft Auto San Andreas Steam Key GLOBAL",
"totalQuantity": 156,
"offers": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"price": "1.49",
"quantity": 50
},
{
"id": "660e8400-e29b-41d4-a716-446655440001",
"price": "1.89",
"quantity": 106
}
],
"updatedAt": "2026-03-20T10:00:00Z",
"currency": "EUR"
}
}

Response fields

FieldTypeDescription
data.idstringProduct identifier (e.g. 10000004439009)
data.namestringProduct name
data.totalQuantityintegerTotal quantity of all available items across all offers, unfiltered regardless of totalQuantity/maxPrice params
data.offersarrayUp to 3 cheapest offers matching the requested filters, sorted by price ascending. Empty array if no offers match.
data.offers[].idstring (UUID)Offer identifier — use this as offerId in a manual order item
data.offers[].pricestring (decimal)Price per unit for this offer (e.g. 12.20)
data.offers[].quantityintegerNumber of items available from this offer
data.updatedAtstring (ISO 8601)UTC timestamp of the last offer update
data.currencystringCurrency code for all prices. Always "EUR".

Error responses

StatusDescriptionPossible error codes
400Bad requestvalidation-error — one or more parameters failed validation; see message for details
401Unauthorizedunauthorized — missing or invalid Bearer token
400Not foundproduct-not-found — no product with the given productId exists in the offers catalog
500Internal server errorinternal-server-error — unexpected server-side error; contact your Key Account Manager and include the traceId from the response

validation-error (400) — the message field identifies the specific parameter and problem. Possible causes:

productId path parameter:

  • Not exactly 14 characters long
  • Not numeric
  • Below the minimum value (10000000000000)

totalQuantity query parameter:

  • Not a valid integer
  • Less than 1
  • Greater than 1000000

maxPrice query parameter:

  • Not a valid number
  • More than one decimal point
  • More than 2 decimal places
  • Less than 0.01
  • Greater than 99999999999.99

Example — invalid productId:

{
"error": {
"code": "validation-error",
"message": "productId 123 must have exactly 14 characters",
"status": 400
}
}

Example — invalid totalQuantity:

{
"error": {
"code": "validation-error",
"message": "totalQuantity must be at least 1",
"status": 400
}
}

Example — invalid maxPrice:

{
"error": {
"code": "validation-error",
"message": "maxPrice can have at most 2 decimal places",
"status": 400
}
}

Example — product not found (400):

{
"error": {
"code": "product-not-found",
"message": "Product not found or no offers available for the specified parameters",
"status": 400
}
}