Skip to documentation

Device Details

Retrieve one published device, including its nested brand, specifications, variants and catalog revision.

GET/v1/devices/{slug}

Request

Run this on your server with SPECSPOOL_API_KEY set.

curl --request GET 'https://api.specspool.com/v1/devices/apple-iphone-16-pro-max' \
  --header "x-api-key: $SPECSPOOL_API_KEY"

Parameters

Required header: x-api-key.

Path parameters
FieldTypePresence
slugslugRequired
Query parameters
FieldTypePresence
generationstringOptional
  • Discover a real slug through Search devices. Slugs accept up to 200 lowercase letters, digits and hyphens, with no leading, trailing or consecutive hyphens.
  • A successful response includes X-Device-Generation. To pin a later read to the same content, pass that opaque UUID as generation. Do not interpret it as a timestamp.
  • If the supplied generation is no longer current, the API returns 409 device_changed. Read the device again without generation to receive its current details and X-Device-Generation value.
  • specs is an open JSON object. Groups and fields depend on the device and category; check that a field exists before using it. releasedAt is optional.
  • A full-spec device consumes one billable unit. On prepaid Standard that unit costs $0.03. Account-wide device limits use fixed UTC windows and apply across all API keys.

Response

200 OK, application/json. See Response schema for device, brand, variant and search-result fields.

All customer /v1 responses use Cache-Control: private, no-store. Free device-detail responses omit image URL fields. Image URLs are optional on paid plans too; check for their presence before rendering an image.

Show an example JSON response

Illustrative data; names, counts and specifications are examples.

200 OK
{
  "data": {
    "id": "00000000-0000-4000-8000-000000000001",
    "slug": "example-phone",
    "name": "Example Phone",
    "brand": {
      "id": "00000000-0000-4000-8000-000000000010",
      "slug": "example-brand",
      "name": "Example Brand",
      "deviceCount": 2
    },
    "brandSlug": "example-brand",
    "category": "phone",
    "summary": "An illustrative catalog entry.",
    "updatedAt": "2026-10-01T00:00:00.000Z",
    "revision": "example-revision",
    "specs": {
      "display": {
        "size_inches": 6.1,
        "panel_type": "OLED",
        "refresh_rate_hz": 120
      },
      "memory": {
        "variants": [
          {
            "storage_gb": 128,
            "ram_gb": 8
          }
        ]
      }
    },
    "variants": [],
    "releasedAt": "2026-01-01T00:00:00.000Z"
  }
}
Success response fields
FieldTypePresence
dataobjectRequired
data.idstring (uuid)Required
data.slugslugRequired
data.namestringRequired
data.brandBrandRequired
data.brandSlugslugRequired
data.categorycategoryRequired
data.summarystringRequired
data.specsobjectRequired
data.variantsVariant[]Required
data.releasedAtstring (datetime)Optional
data.updatedAtstring (datetime)Required
data.revisionstringRequired

Errors

Invalid supported parameters or malformed JSON can return 400 validation_error. Authentication and admission can return 401, 402, 403, 429 or 503; see authentication errors. Unexpected failures return 500 internal_error. Errors after admission remain counted.

404 DEVICE_NOT_FOUND

No published device matches the slug.

409 device_changed

The supplied generation no longer matches the current device.

503 device_changed

The returned device identity changed or its generation changed repeatedly during an unpinned lookup. Retry with backoff.

{
  "error": {
    "code": "validation_error",
    "message": "Invalid request parameters"
  }
}