> ## Documentation Index
> Fetch the complete documentation index at: https://socialquery.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Target Category

> Browse anonymous US Target category products, 24 per page. Native traversal stops at 50 pages/1,200 rows even when the total is larger. Category identity, page offset and default pricing-store context are source-corroborated. Rankings may shift between calls; deduplicate by TCIN. Unknown ratings and hidden prices remain null.

Browse a public US category using a native `category_id`, for example `hz89j` (Kitchen & Dining). Category IDs come from Target’s category directory and native `/c/.../-/N-<id>` URLs. This endpoint does not perform keyword search, apply compound facets or personalize a visitor session.

Each page returns up to **24 products** in Target’s featured order, with TCIN, canonical URL, brand, source image gallery, highlight bullets, specification text and native prices. HTML entities are decoded only after parsing the original JSON bytes, preserving inch marks and other quoted text. Missing ratings remain null. “See price in cart” and other supported hidden-price states return null amounts; no cart/account flow is followed. Customer tracking and fulfillment assertions are excluded.

Prices use Target’s published anonymous default **pricing store 3991**, exposed as `pricing_store_id`. They are not a national price guarantee and can differ at another location. Coupon/member promotions, taxes and shipping are not included. `availability` stays null.

Start with page 1, then send `data.next_cursor` alone. Cursors bind category and page for one hour. Native ranking changes can repeat products between pages; deduplicate by `product.id`. The cursor is not a frozen snapshot. Explicit `page` must agree with a supplied cursor.

Target’s native service rejects offsets above 1,199, so this adapter permits **pages 1–50**, covering at most 1,200 products. This is narrower than the original 100-page input plan. `total` remains the full source count; `total_pages` is the traversable page count. `pagination_capped` is true whenever the total exceeds 1,200, and `has_more` becomes false with a null cursor after page 50 even if additional products exist.

Fresh nonempty pages cost **5 credits**; source-confirmed empty pages, cache hits, errors and successful idempotent replays cost zero. Use `X-Max-Credits: 5`. Failed or malformed upstream responses never become empty success. Native HTTP 400 failures that do not distinguish nonexistent categories remain upstream errors.

The adapter uses the existing Firecrawl account to retrieve the exact public category JSON in its original byte format: basic transport only, one provider credit, a 40-second total timeout, a 2 MiB decoded-source limit and a shared 20-request/minute ceiling. The native display parameter is already published in Target’s public storefront; no Target user credential or account is created. This source and the existing trial allowance do not establish sustained production capacity.


## OpenAPI

````yaml GET /target/category
openapi: 3.1.0
info:
  title: SocialQuery API
  version: '2026-10-09'
  description: >-
    Documented requests for public-source records. Inspect accepted inputs and
    credit amounts, then verify the selected operation before integrating
    preview coverage.
servers:
  - url: https://socialquery.dev/v1
security:
  - apiKey: []
paths:
  /target/category:
    get:
      tags:
        - Target
      summary: Target Category
      description: >-
        Browse anonymous US Target category products, 24 per page. Native
        traversal stops at 50 pages/1,200 rows even when the total is larger.
        Category identity, page offset and default pricing-store context are
        source-corroborated. Rankings may shift between calls; deduplicate by
        TCIN. Unknown ratings and hidden prices remain null.
      operationId: get_target_category
      parameters:
        - name: category_id
          in: query
          required: false
          example: hz89j
          schema:
            type: string
            pattern: ^[a-z0-9]{5,20}$
          description: >-
            Native category node ID from Target categories, or omit when
            supplying a returned cursor. Compound facet expressions are not
            category IDs.
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 1
          description: >-
            One-based page, 1–50. Target rejects offsets above 1199; the last
            supported page starts at 1176. This is narrower than the planned
            100-page input. Must agree with a cursor.
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            One-hour category/page-bound token from data.next_cursor, accepted
            alone. Rankings are live and may repeat products across pages.
        - name: Cache-Control
          in: header
          required: false
          example: no-cache
          schema:
            type: string
        - name: Idempotency-Key
          in: header
          required: false
          example: 7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c
          schema:
            type: string
        - name: X-Max-Credits
          in: header
          required: false
          description: >-
            Optional nonnegative integer cap on the maximum request hold. A live
            request whose hold exceeds this cap returns 422
            CREDIT_BUDGET_EXCEEDED before spending. Metered holds use the
            requested limit; cache hits and successful idempotent replays cost
            zero.
          schema:
            type: integer
            minimum: 0
      responses:
        '200':
          description: >-
            Browse anonymous US Target category products, 24 per page. Native
            traversal stops at 50 pages/1,200 rows even when the total is
            larger. Category identity, page offset and default pricing-store
            context are source-corroborated. Rankings may shift between calls;
            deduplicate by TCIN. Unknown ratings and hidden prices remain null.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SocialQueryResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          items:
                            type: array
                            items:
                              type: object
                              properties:
                                product:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    url:
                                      type: string
                                    title:
                                      type: string
                                    brand:
                                      type:
                                        - string
                                        - 'null'
                                    price:
                                      type: object
                                      properties:
                                        current:
                                          type:
                                            - number
                                            - 'null'
                                          minimum: 0
                                        original:
                                          type:
                                            - number
                                            - 'null'
                                          minimum: 0
                                        currency:
                                          type: string
                                          const: USD
                                        hidden:
                                          type: boolean
                                        pricing_store_id:
                                          type: string
                                          const: '3991'
                                      required:
                                        - current
                                        - original
                                        - currency
                                        - hidden
                                        - pricing_store_id
                                    rating:
                                      type: object
                                      properties:
                                        average:
                                          type:
                                            - number
                                            - 'null'
                                          minimum: 0
                                        count:
                                          type:
                                            - integer
                                            - 'null'
                                          minimum: 0
                                      required:
                                        - average
                                        - count
                                    image_urls:
                                      type: array
                                      items:
                                        type: string
                                    highlights:
                                      type: array
                                      items:
                                        type: string
                                    attributes:
                                      type: array
                                      items:
                                        type: string
                                    availability:
                                      type: 'null'
                                  required:
                                    - id
                                    - url
                                    - title
                                    - brand
                                    - price
                                    - rating
                                    - image_urls
                                    - highlights
                                    - attributes
                                    - availability
                              required:
                                - product
                          returned_count:
                            type: integer
                            minimum: 0
                          total:
                            type: integer
                            minimum: 0
                          category:
                            type: object
                            properties:
                              id:
                                type: string
                              name:
                                type: string
                              url:
                                type: string
                            required:
                              - id
                              - name
                              - url
                          page:
                            type: integer
                            minimum: 1
                            maximum: 50
                          page_size:
                            type: integer
                            const: 24
                          total_pages:
                            type: integer
                            minimum: 0
                            maximum: 50
                          offset:
                            type: integer
                            minimum: 0
                          has_more:
                            type: boolean
                          next_cursor:
                            type:
                              - string
                              - 'null'
                          pagination_capped:
                            type: boolean
                          pricing_store_id:
                            type: string
                            const: '3991'
                          source:
                            type: string
                          coverage_note:
                            type: string
                        required:
                          - items
                          - returned_count
                          - total
                          - category
                          - page
                          - page_size
                          - total_pages
                          - offset
                          - has_more
                          - next_cursor
                          - pagination_capped
                          - pricing_store_id
                          - source
                          - coverage_note
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '402':
          $ref: '#/components/responses/Error402'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '405':
          $ref: '#/components/responses/Error405'
        '409':
          $ref: '#/components/responses/Error409'
        '422':
          $ref: '#/components/responses/Error422'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '502':
          $ref: '#/components/responses/Error502'
        '503':
          $ref: '#/components/responses/Error503'
        '504':
          $ref: '#/components/responses/Error504'
components:
  schemas:
    SocialQueryResponse:
      type: object
      required:
        - success
        - platform
        - endpoint
        - credits_used
        - credits_remaining
        - request_id
        - cached
        - data
      properties:
        success:
          type: boolean
          const: true
        platform:
          type: string
        endpoint:
          type: string
        credits_used:
          type: integer
          minimum: 0
        credits_remaining:
          type:
            - integer
            - 'null'
        request_id:
          type: string
        cached:
          type: boolean
        data:
          type: object
          additionalProperties: true
          description: >-
            The selected operation determines the resource fields in this
            object. Source data can omit a metric or report it as null.
    SocialQueryError:
      type: object
      required:
        - success
        - platform
        - endpoint
        - credits_used
        - credits_remaining
        - request_id
        - cached
        - error
      properties:
        success:
          type: boolean
          const: false
        platform:
          type: string
        endpoint:
          type: string
        credits_used:
          type: integer
          minimum: 0
        credits_remaining:
          type:
            - integer
            - 'null'
        request_id:
          type: string
        cached:
          type: boolean
        error:
          type: object
          required:
            - code
            - type
            - message
            - status
            - doc_url
          properties:
            code:
              type: string
            type:
              type: string
            message:
              type: string
            status:
              type: integer
            doc_url:
              type: string
              format: uri
  responses:
    Error400:
      description: Upstream rejected the request.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error401:
      description: Missing, expired, invalid, or revoked API key.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error402:
      description: Insufficient SocialQuery credits.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error403:
      description: Key scope or provider policy denied access.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error404:
      description: Endpoint or upstream resource not found.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error405:
      description: HTTP method is not supported.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error409:
      description: Idempotency conflict or request in progress.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error422:
      description: Invalid parameters.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error429:
      description: Request limit reached.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error500:
      description: Request processing failed.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error502:
      description: Upstream service failed.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error503:
      description: Provider or required service is unavailable.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
    Error504:
      description: Upstream service timed out.
      headers:
        X-Request-Id:
          schema:
            type: string
        X-Credits-Used:
          schema:
            type: integer
        X-Credits-Remaining:
          schema:
            type: string
        X-Cache:
          schema:
            type: string
            enum:
              - HIT
              - MISS
              - BYPASS
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SocialQueryError'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.