StoreConnect API

StoreConnect API allows external applications to interact with an online store. In short, it provides a set of endpoints to:

  • Submit Orders:
  • The /orders endpoint lets you create new orders. You provide customer details, billing and shipping addresses, a list of order items, and optionally a collection point and a flag to finalize the order.
  • Submit Payments:
  • The /payments endpoint is used to register a new payment against an order. It requires details like the order ID, payment amount, and a reference, along with optional source information.
  • Retrieve Products:
  • The /products endpoint retrieves a paginated list of master products with basic information, while /products/{id} fetches extended details for a specific product.
  • Get Store Details:
  • The /store endpoint provides information about the store itself, including currency, locale, logo, name, and timezone.

Additionally, the specification includes comprehensive data models (schemas) for addresses, customers, orders, payments, product details, and more. This structured approach ensures that both successful and error responses (like unauthorized access or validation errors) are well defined.

The API feature is designed to support key e-commerce operations, enabling seamless order management, payment processing, product catalog browsing, and access to store configuration details.

Open https://editor-next.swagger.io/ and paste the following API Specs to access the documentation.

---
openapi: 3.0.1
info:
  title: StoreConnect API
  version: v1
paths:
  "/orders":
    post:
      summary: Submits a new order
      parameters: []
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/Order"
        '401':
          description: Unauthorized
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/Error"
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/CreateOrderPayload"
  "/payments":
    post:
      summary: Submits a new payment
      parameters: []
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/Payment"
        '401':
          description: Unauthorized
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/Error"
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/CreatePaymentPayload"
  "/products":
    get:
      summary: Returns a list of master products
      parameters:
      - name: page
        in: query
        required: false
        schema:
          type: integer
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Ok
          headers:
            X-Pagination-Per-Page:
              schema:
                type: integer
                example: 5
                default: 25
            X-Pagination-Current-Page:
              schema:
                type: integer
                example: 3
            X-Pagination-Total-Records:
              schema:
                type: integer
                example: 100
          content:
            application/json:
              schema:
                type: array
                items:
                  "$ref": "#/components/schemas/ProductBasic"
        '401':
          description: Unauthorized
  "/products/{id}":
    get:
      summary: Returns extended details of a single product
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/ProductExtended"
        '404':
          description: Not Found
        '401':
          description: Unauthorized
  "/store":
    get:
      summary: Returns details for the store
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/Store"
        '401':
          description: Unauthorized
components:
  schemas:
    Address:
      type: object
      properties:
        street:
          type: string
          example: 123 Main St
        city:
          type: string
          example: Sydney
        state:
          type: string
          example: NSW
          format: ISO 3166-2
        country:
          type: string
          example: AU
          format: ISO 3166-1 alpha-2
        postal_code:
          type: string
          example: 2000
    Category:
      type: object
      required:
      - id
      - name
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        name:
          type: string
          example: Clothing
    CollectionPoint:
      description: A collection point defines a physical location that an order can
        be picked up from
      type: object
      required:
      - id
      - name
      - geo
      - lead_time_duration
      - lead_time_units
      - description
      - phone
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        name:
          type: string
          example: Members Pavilion
        geo:
          "$ref": "#/components/schemas/LatLong"
        lead_time_duration:
          type: integer
          nullable: true
          example: 20
        lead_time_units:
          type: string
          nullable: true
          enum:
          - days
          - hours
          - minutes
          example: minutes
        description:
          type: string
          nullable: true
          example: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
            eiusmod tempor incididunt ut labore et dolore magna aliqua.
        phone:
          type: string
          nullable: true
          example: "(555) 123 456"
    CreateOrderPayload:
      type: object
      required:
      - customer
      - items
      - billing_address
      - shipping_address
      properties:
        customer:
          "$ref": "#/components/schemas/Customer"
        billing_address:
          "$ref": "#/components/schemas/Address"
        shipping_address:
          "$ref": "#/components/schemas/Address"
        items:
          type: array
          items:
            "$ref": "#/components/schemas/OrderItemPayload"
        collection_point_id:
          type: string
          example: 123456789-ABCDEFG
        finalise_order:
          type: boolean
          example: false
    CreatePaymentPayload:
      type: object
      required:
      - order_id
      - amount
      - reference
      properties:
        order_id:
          type: string
          example: 123456789-ABCDEFG
        amount:
          type: number
          format: decimal
          example: 99.0
        reference:
          type: string
          example: 123456789-ABCDEFG
        source:
          type: string
          example: Your App Name
    Currency:
      description: An object defining elements related to a Currency
      type: object
      required:
      - code
      - symbol
      properties:
        code:
          type: string
          example: AUD
        symbol:
          type: string
          example: "$"
    Customer:
      description: The contact details for a Customer
      type: object
      required:
      - first_name
      - last_name
      - email
      properties:
        first_name:
          type: string
          example: Roger
        last_name:
          type: string
          example: Ramjet
        email:
          "$ref": "#/components/schemas/Email"
        phone:
          type: string
          example: "(555) 123 456"
    Email:
      description: A valid email address
      type: string
      example: person@example.com
    Error:
      description: An API Error
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - type
          - details
          properties:
            type:
              type: string
              enum:
              - invalid
              - missing
              - not_found
              - request
            details:
              type: object
              example:
                param: quantity
                in:
                - root
                - items
                - 1
    Image:
      description: image data including various urls for different sizes
      type: object
      required:
      - id
      - sizes
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        sizes:
          type: object
          properties:
            original:
              "$ref": "#/components/schemas/Url"
            16x16:
              "$ref": "#/components/schemas/Url"
            32x32:
              "$ref": "#/components/schemas/Url"
            50x50:
              "$ref": "#/components/schemas/Url"
            100x100:
              "$ref": "#/components/schemas/Url"
            240x240:
              "$ref": "#/components/schemas/Url"
            480x480:
              "$ref": "#/components/schemas/Url"
            640x640:
              "$ref": "#/components/schemas/Url"
            1024x1024:
              "$ref": "#/components/schemas/Url"
            2048x2048:
              "$ref": "#/components/schemas/Url"
    LatLong:
      description: Provides a pair of latitude and longitude coordinates
      required:
      - latitude
      - longitude
      type: object
      properties:
        latitude:
          type: number
          nullable: true
          format: float
          example: -33.891034
        longitude:
          type: number
          nullable: true
          format: float
          example: 151.224045
    OrderItemPayload:
      type: object
      required:
      - product_id
      - quantity
      properties:
        product_id:
          type: string
          example: 123456789-ABCDEFG
        quantity:
          type: integer
          example: 3
    OrderItem:
      type: object
      required:
      - id
      - name
      - quantity
      - price
      - total
      - tax
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        name:
          type: string
          example: My Product
        quantity:
          type: number
          format: decimal
          example: 3
        price:
          type: number
          format: decimal
        total:
          type: number
          format: decimal
        tax:
          type: number
          format: decimal
    Order:
      type: object
      required:
      - id
      - reference
      - status
      - total_amount
      - total_tax
      - total_paid
      - total_payable
      - customer
      - items
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        reference:
          type: string
          example: 169af09d8226
        status:
          type: string
          example: Ready for pickup
        total_amount:
          type: number
          format: decimal
        total_tax:
          type: number
          format: decimal
        total_paid:
          type: number
          format: decimal
        total_payable:
          type: number
          format: decimal
        customer:
          "$ref": "#/components/schemas/Customer"
        items:
          type: array
          items:
            "$ref": "#/components/schemas/OrderItem"
        collection_point_id:
          type: string
          example: 123456789-ABCDEFG
    Payment:
      description: Payment details
      type: object
      required:
      - id
      - amount
      - order_id
      - paid_at
      - reference
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        order_id:
          type: string
          example: 123456789-ABCDEFG
        amount:
          type: number
          format: decimal
          example: 99.0
        reference:
          type: string
          example: 123456789-ABCDEFG
        paid_at:
          type: string
          format: iso-8601
          example: '2025-02-24T05:37:33Z'
    ProductBasic:
      description: basic information about a product
      allOf:
      - "$ref": "#/components/schemas/ProductCommon"
      type: object
      required:
      - variants
      properties:
        variants:
          type: array
          items:
            "$ref": "#/components/schemas/ProductVariant"
    ProductCommon:
      description: common product details
      type: object
      required:
      - id
      - code
      - images
      - name
      - pricing
      - stock
      - summary
      - tags
      - taxes
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        code:
          type: string
          example: 1234ABCD
        images:
          type: array
          items:
            "$ref": "#/components/schemas/Image"
        name:
          type: string
          example: My Product
        pricing:
          "$ref": "#/components/schemas/ProductPricing"
        stock:
          "$ref": "#/components/schemas/ProductStock"
        summary:
          "$ref": "#/components/schemas/RichText"
        tags:
          type: array
          items:
            "$ref": "#/components/schemas/Tag"
        taxes:
          type: array
          items:
            "$ref": "#/components/schemas/Tax"
    ProductExtended:
      description: extended product details
      allOf:
      - "$ref": "#/components/schemas/ProductCommon"
      type: object
      required:
      - master_id
      - content
      - variants
      properties:
        master_id:
          type: string
          example: 123456789-ABCDEFG
          nullable: true
        content:
          type: object
          example:
            Features: Lorem ipsum...
            Warranty: Lorem ipsum...
        variants:
          type: array
          items:
            "$ref": "#/components/schemas/ProductVariant"
    ProductPricing:
      description: pricing information for a product
      type: object
      required:
      - original
      - current
      - tax_inclusive
      properties:
        original:
          type: number
          format: decimal
          description: the original price for a product
          example: 12.95
        current:
          type: number
          format: decimal
          description: the current price for a product
          example: 9.95
        tax_inclusive:
          type: boolean
          description: Indicates whether the tax is already included in this price
      example: true
    ProductStockLevel:
      description: Details of stock levels for a product
      type: object
      required:
      - id
      - available_to_sell
      - collection_points
      - online_fulfillment_options
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        available_to_sell:
          type: integer
          nullable: true
          example: 24
        collection_points:
          type: array
          items:
            "$ref": "#/components/schemas/CollectionPoint"
        online_fulfillment_options:
          type: string
          enum:
          - no_online_fulfillment
          - shipping_only
          - click_and_collect_only
          - shipping_with_click_and_collect
    ProductStock:
      description: Stock information for a product
      type: object
      required:
      - total_available_to_sell
      - stock_levels
      properties:
        total_available_to_sell:
          type: integer
          nullable: true
          example: 24
        stock_levels:
          type: array
          items:
            "$ref": "#/components/schemas/ProductStockLevel"
    ProductVariant:
      description: product variant details
      type: object
      required:
      - id
      - variant_options
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        variant_options:
          type: object
          example:
            Color: Red
            Size: Small
    RichText:
      description: text that may contain html
      type: string
      example: "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
    Store:
      description: Store details
      type: object
      required:
      - currency
      - locale
      - logo
      - name
      - timezone
      properties:
        currency:
          "$ref": "#/components/schemas/Currency"
        locale:
          type: string
          example: en-AU
        logo:
          "$ref": "#/components/schemas/Image"
        name:
          type: string
          example: My Store
        timezone:
          type: string
          example: Australia/Sydney
    Tag:
      description: an object that defines a tag
      type: object
      required:
      - id
      - type
      - value
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        type:
          type: string
          description: define what type of tag this is - can be used to target different
            tags in different contexts
          example: sale
        value:
          type: string
          description: the text to display for this tag
          example: Sale
    Tax:
      description: an object that defines a tax rate
      type: object
      required:
      - id
      - name
      - rate
      - effective_from
      - effective_to
      - zone
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        name:
          type: string
          description: the name of the tax rate
          example: GST
        rate:
          type: number
          format: decimal
          description: the tax rate as a percentage
          example: 11.3
        effective_from:
          type: string
          format: iso-8601
          description: the date at which this rate became effective
          example: '2020-03-01'
        effective_to:
          type: string
          nullable: true
          format: iso-8601
          description: the date at which this rate is no-longer effective
          example: '2022-07-01'
        zone:
          "$ref": "#/components/schemas/Zone"
    Url:
      description: A fully qualified URL
      type: string
      example: https://example.com
    Zone:
      description: a Zone is made up a multiple Countries/States/Postcodes
      type: object
      required:
      - id
      - name
      - includes
      properties:
        id:
          type: string
          example: 123456789-ABCDEFG
        name:
          type: string
          description: a human-readable name for the Zone
          example: Asia-Pacific
        includes:
          description: a list of codes that are included in the Zone
          type: array
          items:
            required:
            - name
            - country
            properties:
              name:
                type: string
                description: a human-readable name for the codes in the Zone
                example: MELBOURNE, VICTORIA, AUSTRALIA
              postcode:
                type: string
                description: a postal/zip code that is in the Zone
                example: '3000'
              state:
                type: string
                description: an ISO 3166-2 code for a State/Province that is in the
                  Zone, without the country code prefix
                example: VIC
              country:
                type: string
                description: an ISO 3166-1 code for a Country that is in the Zone,
                  in alpha-3 format
                example: AUS
            example:
            - name: MELBOURNE, VICTORIA, AUSTRALIA
              postcode: '3000'
              state: VIC
              country: AUS
            - name: NEW ZEALAND
              country: NZL
  securitySchemes:
    bearer_auth:
      type: http
      scheme: bearer
servers:
- url: https://api.{domain}/{version}
  variables:
    domain:
      default: example.com
    version:
      default: v1
security:
- bearer_auth: []