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

# Create pass image upload

> Request an upload URL for a per-pass image override. Send the PNG or JPEG bytes to the returned URL with the declared Content-Type, then pass the uploadId as templateOverrides.images.{slot} when creating or updating a pass. You can also skip this step and pass a public HTTPS sourceUrl on the pass request directly. Unused uploads expire after 24 hours.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/passes/image-uploads
openapi: 3.0.1
info:
  title: Stell API
  description: >-
    Create and manage passes for Apple Wallet and Google Wallet. One API for
    loyalty programs, membership cards, tickets, and more.
  termsOfService: https://getstell.com/terms
  contact:
    name: Stell API Support
    url: https://getstell.com/about?topic=Technical%20Support#contact
    email: hello@getstell.com
  version: '2026-08-09T18:16:19Z'
servers:
  - url: https://api.platform.getstell.com
    description: Production API
security:
  - StellApiAuthorizer: []
tags:
  - name: Companies
    description: Manage companies at the top of your tenant hierarchy.
  - name: Merchants
    description: Manage brands and business units within companies.
  - name: Stores
    description: Manage store locations and customer touchpoints.
  - name: Programs
    description: Configure pass programs for loyalty, membership, tickets, and more.
  - name: Pass Templates
    description: Define pass design and field layouts.
  - name: Passes
    description: Issue and manage customer passes for Apple and Google Wallet.
  - name: Terminals
    description: Configure terminals for tap-to-scan functionality.
  - name: Transactions
    description: Track pass usage, purchases, and redemptions.
  - name: Engagement
    description: Geofences, notifications, and location-based engagement features.
  - name: System
    description: Health checks and service monitoring.
paths:
  /v1/passes/image-uploads:
    post:
      tags:
        - Passes
      summary: Create pass image upload
      description: >-
        Request an upload URL for a per-pass image override. Send the PNG or
        JPEG bytes to the returned URL with the declared Content-Type, then pass
        the uploadId as templateOverrides.images.{slot} when creating or
        updating a pass. You can also skip this step and pass a public HTTPS
        sourceUrl on the pass request directly. Unused uploads expire after 24
        hours.
      operationId: createPassImageUpload
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePassImageUploadModel'
        required: true
      responses:
        '201':
          description: 201 response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PassImageUploadResponseModel'
        '400':
          description: 400 response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400Model'
        '401':
          description: 401 response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401Model'
        '403':
          description: 403 response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error403Model'
        '404':
          description: 404 response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error404Model'
        '500':
          description: 500 response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500Model'
      security:
        - StellApiAuthorizer: []
components:
  schemas:
    CreatePassImageUploadModel:
      title: Create Pass Image Upload Request
      required:
        - contentType
      type: object
      properties:
        contentType:
          type: string
          description: >-
            MIME type the upload PUT will send. Only PNG and JPEG images are
            accepted.
          enum:
            - image/png
            - image/jpeg
      additionalProperties: false
    PassImageUploadResponseModel:
      title: Pass Image Upload Response
      required:
        - data
        - requestId
      type: object
      properties:
        data:
          required:
            - expiresAt
            - uploadId
            - uploadUrl
          type: object
          properties:
            uploadUrl:
              type: string
              description: >-
                Upload URL. Send the image bytes with a PUT request and the
                declared Content-Type header.
              format: uri
            uploadId:
              type: string
              description: >-
                Opaque upload identifier to reference as
                templateOverrides.images.{slot}.uploadId on pass create or
                update.
            expiresAt:
              type: string
              description: >-
                When the upload URL expires (15 minutes). Staged uploads not
                promoted within 24 hours are deleted.
              format: date-time
          additionalProperties: false
          description: Upload slot details
        requestId:
          pattern: ^[0-9A-Z]{26}$
          type: string
          description: Unique request identifier for debugging
      additionalProperties: false
    Error400Model:
      title: Error400Model
      required:
        - error
        - requestId
      type: object
      properties:
        requestId:
          pattern: ^[0-9A-Z]{26}$
          type: string
          description: Unique request identifier for debugging
        error:
          required:
            - code
            - message
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code
              enum:
                - BAD_REQUEST
            details:
              type: object
              additionalProperties: true
              description: Additional error context
            message:
              type: string
              description: Human-readable error message
              default: Invalid request parameters
          description: Error information
      description: Bad request with validation details.
    Error401Model:
      title: Error401Model
      required:
        - error
        - requestId
      type: object
      properties:
        requestId:
          pattern: ^[0-9A-Z]{26}$
          type: string
          description: Unique request identifier for debugging
        error:
          required:
            - code
            - message
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code
              enum:
                - UNAUTHORIZED
            details:
              type: object
              additionalProperties: true
              description: Additional error context
            message:
              type: string
              description: Human-readable error message
              default: Authentication required
          description: Error information
      description: Authentication failed.
    Error403Model:
      title: Error403Model
      required:
        - error
        - requestId
      type: object
      properties:
        requestId:
          pattern: ^[0-9A-Z]{26}$
          type: string
          description: Unique request identifier for debugging
        error:
          required:
            - code
            - message
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code
              enum:
                - FORBIDDEN
            details:
              type: object
              additionalProperties: true
              description: Additional error context
            message:
              type: string
              description: Human-readable error message
              default: Access denied to this resource
          description: Error information
      description: Access denied.
    Error404Model:
      title: Error404Model
      required:
        - error
        - requestId
      type: object
      properties:
        requestId:
          pattern: ^[0-9A-Z]{26}$
          type: string
          description: Unique request identifier for debugging
        error:
          required:
            - code
            - message
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code
              enum:
                - NOT_FOUND
            details:
              type: object
              additionalProperties: true
              description: Additional error context
            message:
              type: string
              description: Human-readable error message
              default: Resource not found
          description: Error information
      description: Resource not found.
    Error500Model:
      title: Error500Model
      required:
        - error
        - requestId
      type: object
      properties:
        requestId:
          pattern: ^[0-9A-Z]{26}$
          type: string
          description: Unique request identifier for debugging
        error:
          required:
            - code
            - message
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code
              enum:
                - INTERNAL_ERROR
            details:
              type: object
              additionalProperties: true
              description: Additional error context
            message:
              type: string
              description: Human-readable error message
              default: An internal server error occurred
          description: Error information
      description: Internal server error.
  securitySchemes:
    StellApiAuthorizer:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: |-
        API key authentication. Include your API key as a Bearer token.

        Example: `Bearer sk_prod_xxxxxx`

        Get your API key from the Stell Dashboard.

````