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

# List Labels

> Retrieves the **shipping labels** of one or more Shipments — the
documents listing pre-filtered to `type` `shipping_label` (pdf/zpl/png)
and `shipping_label_qr` (png/jpg/pdf). Labels are generated by the
Create Booking endpoint.

Identify Shipments with **either** `shipment_uuids` **or**
`shipment_ids` (comma-joined, no spaces, up to **10**). Each label's
`download_url` lasts **1 hour** and is regenerated per call; there is
no Base64 content here — use Retrieve a Document for that. No matching
labels returns HTTP 200 with empty `data`.



## OpenAPI

````yaml /specs/public-api-v5.yaml get /v5/shipments/documents/labels/
openapi: 3.1.0
info:
  title: Perform.AI Public API (v5)
  version: 5.0.0
  description: |-
    The Perform.AI Public API lets you create and manage shipments, returns,
    bookings, tracking events, and documents, and retrieve reference data such
    as PUDO locations and carrier configurations.

    All endpoints accept HTTPS connections only and are secured with OAuth 2.0.
    Generate a Bearer access token with your API credentials (Client ID and
    Client Secret, from **Integrations > API** in your account), then send it in
    the `Authorization` header of every request.

    This specification covers the following endpoints:
    - `POST /auth/oauth/token/`
    - `POST /v5/shipment/`
    - `POST /v5/shipment/update/`
    - `POST /v5-2-0/shipment/update/`
    - `GET /v5/shipment/list/`
    - `GET /v5/shipment/details/`
    - `GET /v5-2-0/shipment/details/`
    - `POST /v5/events/create/`
    - `POST /v5/return/`
    - `POST /v5/return/update/`
    - `GET /v5/shipments/documents/`
    - `GET /v5/shipments/documents/{document_uuid}/`
    - `GET /v5/shipments/documents/labels/`
    - `POST /v5/booking/`
    - `GET /v5/pudo-locations/`
    - `GET /v5/carrier-configs/`
servers:
  - url: https://api.perform.ai
security:
  - BearerAuth: []
tags:
  - name: Authentication
    description: Generate the Bearer access token used by every other endpoint.
  - name: Shipments
    description: Create, update, search, and retrieve Shipments.
  - name: Events
    description: Add manual tracking events to Shipments.
  - name: Returns
    description: Create and update Returns and their Return Shipments.
  - name: Documents
    description: Retrieve documents attached to Shipments.
  - name: Booking
    description: Book Open Shipments with carriers and provision shipping labels.
  - name: PUDO locations
    description: Search pick-up/drop-off locations across your configured carriers.
  - name: Carrier configurations
    description: Discover the carriers configured in your account.
  - name: Webhooks
    description: Shipment update payloads Perform.AI pushes to your endpoint.
paths:
  /v5/shipments/documents/labels/:
    get:
      tags:
        - Documents
      summary: List Labels
      description: |-
        Retrieves the **shipping labels** of one or more Shipments — the
        documents listing pre-filtered to `type` `shipping_label` (pdf/zpl/png)
        and `shipping_label_qr` (png/jpg/pdf). Labels are generated by the
        Create Booking endpoint.

        Identify Shipments with **either** `shipment_uuids` **or**
        `shipment_ids` (comma-joined, no spaces, up to **10**). Each label's
        `download_url` lasts **1 hour** and is regenerated per call; there is
        no Base64 content here — use Retrieve a Document for that. No matching
        labels returns HTTP 200 with empty `data`.
      operationId: get-v5-shipments-documents-labels
      parameters:
        - name: shipment_uuids
          in: query
          schema:
            type: string
          description: >-
            Up to 10 Shipment UUIDs, comma-joined. Required if `shipment_ids`
            absent.
        - name: shipment_ids
          in: query
          schema:
            type: string
          description: >-
            Up to 10 of your Shipment IDs, comma-joined. Required if
            `shipment_uuids` absent.
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 25
            maximum: 100
            default: 25
          description: Labels per page.
        - name: page
          in: query
          schema:
            type: integer
            default: 1
          description: Page number.
      responses:
        '200':
          description: Matching labels (empty `data` when none).
          content:
            application/json:
              schema:
                type: object
                properties:
                  api_response:
                    type: string
                  status:
                    type: string
                  message:
                    type: string
                  total_pages:
                    type: integer
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/DocumentRecord'
        '400':
          description: Both `shipment_uuids` and `shipment_ids` were provided.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FieldValidationError'
        '403':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/Throttled'
        '500':
          $ref: '#/components/responses/SystemError'
components:
  schemas:
    DocumentRecord:
      type: object
      description: A document with its Shipment context and download link.
      properties:
        shipment_uuid:
          type: string
          format: uuid
        shipment_id:
          type:
            - string
            - 'null'
        tracking_number:
          type:
            - string
            - 'null'
        document_uuid:
          type: string
          format: uuid
        document_id:
          type:
            - string
            - 'null'
        name:
          type: string
        type:
          type: string
          description: E.g. `shipping_label`, `shipping_label_qr`, `invoice`.
        file_format:
          type: string
          description: E.g. `pdf`, `zpl`, `png`.
        download_url:
          type: string
          format: uri
          description: Valid for 1 hour; regenerated on every call.
        created_date:
          type: string
        additional_info:
          type: object
          description: E.g. label size (A6, 4x6) or format specifics (ZPL II).
    FieldValidationError:
      type: object
      description: >-
        HTTP 400 — one or more fields failed validation; nothing was persisted.
        For fields inside arrays, errors are keyed by the item's position as a
        string ("0", "1", …), then the field name.
      required:
        - api_response
        - message
        - errors
      properties:
        api_response:
          type: string
          description: Always `"4030"`.
        message:
          type: string
          description: Always `validation_error`.
        errors:
          type: object
          description: >-
            Affected field → array of error messages (or a nested object for
            array items).
    GatewayError:
      type: object
      description: >-
        An error generated at the API gateway — authorization (`403`) or
        throttling (`429`). Note `api_response` is a number here, unlike
        application-level responses where it is a string.
      required:
        - api_response
        - message
      properties:
        api_response:
          type: integer
          description: '`403` or `429`.'
        message:
          type: string
          description: E.g. `Key not authorized`, `Quota exceeded`, `Throttled`.
    RequestError:
      type: object
      description: >-
        A request-level error such as `4000` (invalid request format), `4041`
        (no results found), or a `5XX` system error.
      required:
        - api_response
        - message
      properties:
        api_response:
          type: string
          description: Error code as a string, e.g. `"4000"`, `"4041"`, `"500"`.
        message:
          type: string
  responses:
    Unauthorized:
      description: >-
        The Bearer token is expired, invalid, or missing — or the account lacks
        access.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GatewayError'
          example:
            api_response: 403
            message: Key not authorized
    Throttled:
      description: Rate limit exceeded (40 requests per second per account).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GatewayError'
          example:
            api_response: 429
            message: Throttled
    SystemError:
      description: Internal system error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RequestError'
          example:
            api_response: '500'
            message: System error
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Used by every functional endpoint. Generate the token with `POST
        /auth/oauth/token/` and send it as `Authorization: Bearer {token}`.

````