ShootProof Orders API

Print/product orders, order items, lab shipments, and payments (beta).

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/shootproof-orders-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

shootproof-orders-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: ShootProof Studio API (Curated Subset) Clients Orders API
  description: Curated subset of ShootProof's public Studio Panel API, covering the Studios/Brands, Events & Galleries, Photos, Clients (Contacts), Orders, and Contracts resources. Endpoints, methods, and paths below are drawn directly from ShootProof's live OpenAPI 3.0 document (https://developer.shootproof.com/oas/studio.json), which as of the review date defines 157 paths and 181 schemas across Brands, Contacts, Contracts, Email, Events, Invoices, Music, Orders, Price Sheets, and more. This file is a representative curated subset for cataloging purposes, not a full mirror - fetch the live document for the complete, authoritative spec. The API is RESTful and hypermedia-driven (HAL-style `links` objects on every response) and secured with three-legged OAuth 2.0; not all resources are exposed identically across every scope.
  version: '1.0'
  contact:
    name: ShootProof
    url: https://developer.shootproof.com/
    email: support@shootproof.com
  termsOfService: https://www.shootproof.com/legal/terms-of-use
servers:
- url: https://api.shootproof.com/studio
  description: ShootProof Studio API (production)
security:
- shootProofAuth:
  - studio
tags:
- name: Orders
  description: Print/product orders, order items, lab shipments, and payments (beta).
paths:
  /brand/{brandId}/order:
    parameters:
    - $ref: '#/components/parameters/BrandId'
    get:
      operationId: listOrders
      tags:
      - Orders
      summary: Returns a list of all orders for the current brand
      responses:
        '200':
          description: A collection of orders.
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOrder
      tags:
      - Orders
      summary: Creates a new order for the current brand
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderInput'
      responses:
        '200':
          description: The created order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /brand/{brandId}/order/{orderId}:
    parameters:
    - $ref: '#/components/parameters/BrandId'
    - $ref: '#/components/parameters/OrderId'
    get:
      operationId: getOrder
      tags:
      - Orders
      summary: Returns a single order by ID
      responses:
        '200':
          description: The requested order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteOrder
      tags:
      - Orders
      summary: Removes an order by changing its status to deleted
      responses:
        '200':
          description: Deletion confirmation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /brand/{brandId}/order/{orderId}/item:
    parameters:
    - $ref: '#/components/parameters/BrandId'
    - $ref: '#/components/parameters/OrderId'
    get:
      operationId: listOrderItems
      tags:
      - Orders
      summary: Returns a list of all order items for the current order
      responses:
        '200':
          description: A collection of order items.
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/OrderItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOrderItem
      tags:
      - Orders
      summary: Adds new order items for each photo ID provided in the request
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderItemInput'
      responses:
        '200':
          description: The created order item(s).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /brand/{brandId}/order/{orderId}/email:
    parameters:
    - $ref: '#/components/parameters/BrandId'
    - $ref: '#/components/parameters/OrderId'
    post:
      operationId: sendOrderEmail
      tags:
      - Orders
      summary: Transmits an order receipt email with transaction details
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasicEmailMessage'
      responses:
        '200':
          description: Email send confirmation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /brand/{brandId}/order/{orderId}/lab-shipment:
    parameters:
    - $ref: '#/components/parameters/BrandId'
    - $ref: '#/components/parameters/OrderId'
    post:
      operationId: createLabShipment
      tags:
      - Orders
      summary: Generates lab shipment records for order fulfillment
      responses:
        '200':
          description: The created lab shipment record(s).
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /brand/{brandId}/order/{orderId}/payment:
    parameters:
    - $ref: '#/components/parameters/BrandId'
    - $ref: '#/components/parameters/OrderId'
    get:
      operationId: listOrderPayments
      tags:
      - Orders
      summary: Lists all client payment records associated with an order
      responses:
        '200':
          description: A collection of payments.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    OrderInput:
      type: object
      required:
      - eventId
      properties:
        eventId:
          type: string
        contactId:
          type: string
    DeleteResponse:
      type: object
      properties:
        id:
          type: string
        deleted:
          type: boolean
    OrderItem:
      type: object
      properties:
        id:
          type: string
        orderId:
          type: string
        photoId:
          type: string
        priceSheetItemId:
          type: string
        quantity:
          type: integer
    BasicEmailMessage:
      type: object
      required:
      - subject
      - body
      properties:
        subject:
          type: string
        body:
          type: string
        recipients:
          type: array
          items:
            type: string
            format: email
    Links:
      type: object
      additionalProperties: true
    Order:
      type: object
      properties:
        id:
          type: string
        eventId:
          type: string
        contactId:
          type: string
        status:
          type: string
          enum:
          - open
          - completed
          - deleted
        total:
          type: number
          format: float
        links:
          $ref: '#/components/schemas/Links'
    OrderItemInput:
      type: object
      required:
      - photoIds
      properties:
        photoIds:
          type: array
          items:
            type: string
        priceSheetItemId:
          type: string
        quantity:
          type: integer
    Error:
      type: object
      description: RFC 7807 problem-details error format used across the Studio API.
      properties:
        type:
          type: string
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        info:
          type: object
          description: ShootProof extension carrying field-level validation errors.
          additionalProperties: true
  parameters:
    OrderId:
      name: orderId
      in: path
      required: true
      description: The ID of the order.
      schema:
        type: string
    BrandId:
      name: brandId
      in: path
      required: true
      description: The ID of the brand.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing, invalid, or expired OAuth 2.0 Bearer token.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    shootProofAuth:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://auth.shootproof.com/oauth2/authorization/new
          tokenUrl: https://auth.shootproof.com/oauth2/authorization/token
          refreshUrl: https://auth.shootproof.com/oauth2/authorization/token
          scopes:
            studio: read and write access to your Studio Panel data
            studio.brand.read-only: read access to your Studio Panel Brand data
            studio.info.read-only: read access to your Studio Panel account data
            studio.order.lab-shipment.read-write: read and write access to your Studio Panel Order shipment data
            studio.order.read-write: read and write access to your Studio Panel Order data