LeafLink Marketplace V2 API

The legacy LeafLink Marketplace V2 REST API, currently at release 2.39.0. 66 paths and 111 operations for brands and retailers: orders received, buyer orders, line items, order payments and event logs, products and product batches, customers, customer statuses and tiers, credits, licenses, retailer inventory, strains, reports and promo codes. Token/App-key auth, limit/offset paging, dynamic responses via include_children and fields_include/fields_exclude.

OpenAPI Specification

leaflink-marketplace-v2-openapi-original.yml Raw ↑
openapi: 3.0.0
info:
  title: LeafLink Marketplace V2 API
  description: '# Introduction

    ## HTTP Request Notes

    All endpoints covered in this document are preceded by `https://{{domain}}/api/v2/` unless otherwise noted.


    Available domains


    - `app.leaflink.com` - production environment


    - `www.sandbox.leaflink.com` - sandbox environment


    - `www.leaflink-integrations.leaflink.com` - integrations sandbox environment


    [Learn more about sandbox environments](https://developer.leaflink.com/brands/api/authorization/#sandbox-environments)



    Request paths must end in a slash character (''/''). Those that do not will return a 400 (Bad Request) response.


    ## Dynamic Responses

    Some of our API endpoints support dynamic responses. These

    are responses that vary in content and/or object level payload size

    according to request path or query parameters.


    Available parameters are listed beneath endpoint definitions.

    '
  termsOfService: https://leaflink.com/terms-and-conditions/
  contact:
    email: support@leaflink.com
  version: ''
security:
- Token: []
paths:
  /activity-entries/:
    get:
      operationId: activity-entries_list
      summary: List
      description: "List all `CompanyActivityEntry` objects of companies the requester has\n    CRM management access for."
      parameters:
      - name: date__lt
        in: query
        description: Filter by entered activity datetime, less than.
        required: false
        schema:
          type: string
      - name: date__lte
        in: query
        description: Filter by entered activity datetime, less than or equal to.
        required: false
        schema:
          type: string
      - name: date__gt
        in: query
        description: Filter by entered activity datetime, greater than.
        required: false
        schema:
          type: string
      - name: date__gte
        in: query
        description: Filter by entered activity datetime, greater than or equal to.
        required: false
        schema:
          type: string
      - name: entry
        in: query
        description: Filter by activity entry descriptions.
        required: false
        schema:
          type: string
      - name: entry__in
        in: query
        description: Filter by entry__in
        required: false
        schema:
          type: string
      - name: entry__startswith
        in: query
        description: Filter by entry__startswith
        required: false
        schema:
          type: string
      - name: modified__lt
        in: query
        description: Filter by the datetime the object was last modified, less than.
        required: false
        schema:
          type: string
      - name: modified__lte
        in: query
        description: Filter by the datetime the object was last modified, less than or equal to.
        required: false
        schema:
          type: string
      - name: modified__gt
        in: query
        description: Filter by the datetime the object was last modified, greater than.
        required: false
        schema:
          type: string
      - name: modified__gte
        in: query
        description: Filter by the datetime the object was last modified, greater than or equal to.
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: Filter by id
        required: false
        schema:
          type: number
      - name: created_on__lt
        in: query
        description: Filter by created_on datetime, less than.
        required: false
        schema:
          type: string
      - name: created_on__lte
        in: query
        description: Filter by created_on datetime, less than or equal to.
        required: false
        schema:
          type: string
      - name: created_on__gt
        in: query
        description: Filter by created_on datetime, greater than.
        required: false
        schema:
          type: string
      - name: created_on__gte
        in: query
        description: Filter by created_on datetime, greater than or equal to.
        required: false
        schema:
          type: string
      - name: owner
        in: query
        description: Filter by owner ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: owner_id
        in: query
        description: Filter by owner ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: author
        in: query
        description: Filter by author ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: author_id
        in: query
        description: Filter by author ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: company
        in: query
        description: Filter by associated company ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: company_id
        in: query
        description: Filter by associated company ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: customer
        in: query
        description: Filter by associated customer ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: customer_id
        in: query
        description: Filter by associated customer ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: staff
        in: query
        description: Filter by associated staff ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: staff_id
        in: query
        description: Filter by associated staff ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: type
        in: query
        description: Filter by activity type (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: brand
        in: query
        description: Filter by associated brand ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: brand_id
        in: query
        description: Filter by associated brand ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: contact
        in: query
        description: Filter by associated contact ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: contact_id
        in: query
        description: Filter by associated contact ID (supports multiple values, comma-separated).
        required: false
        schema:
          type: string
      - name: company_slug
        in: query
        description: Filter by Company slug
        required: false
        schema:
          type: string
      - name: delete
        in: query
        description: Filter by deleted or non-deleted entries.
        required: false
        schema:
          type: boolean
      - name: is_deleted
        in: query
        description: Filter by deleted or non-deleted entries (alternative to delete parameter).
        required: false
        schema:
          type: boolean
      - name: fields_include
        in: query
        description: Include only specific fields in the response, separated by commas.
        required: false
        schema:
          type: string
      - name: fields_exclude
        in: query
        description: Exclude specific fields in the response, separated by commas.
        required: false
        schema:
          type: string
      - name: fields_add
        in: query
        description: Include additional fields in the response. Available values include `created_by` and `last_changed_by`
        required: false
        schema:
          type: string
      - name: search
        in: query
        description: Search by entry field
        required: false
        schema:
          type: string
      - name: ordering
        in: query
        description: 'Order results by field (prefix with ''-'' for descending). Available fields: customer__nickname, customer__name'
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                required:
                - count
                - results
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/CompanyActivityEntry'
      tags:
      - activity-entries
    post:
      operationId: activity-entries_create
      summary: Create
      description: "Create a new `CompanyActivityEntry` object for a company you have CRM\n    management access for."
      requestBody:
        $ref: '#/components/requestBodies/CompanyActivityEntry'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyActivityEntry'
      tags:
      - activity-entries
    parameters: []
  /activity-entries/{id}/:
    get:
      operationId: activity-entries_read
      summary: Read
      description: Get a `CompanyActivityEntry` by ID.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyActivityEntry'
      tags:
      - activity-entries
    patch:
      operationId: activity-entries_partial_update
      summary: Update
      description: Update an individual `CompanyActivityEntry` by ID.
      requestBody:
        $ref: '#/components/requestBodies/CompanyActivityEntry'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyActivityEntry'
      tags:
      - activity-entries
    delete:
      operationId: activity-entries_delete
      summary: Delete
      description: "Set the `delete` flag on a `CompanyActivityEntry` to true. These can\n    be filtered out in list requests."
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyActivityEntry'
      tags:
      - activity-entries
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this company activity entry.
      required: true
      schema:
        type: integer
  /batch-documents/:
    get:
      operationID: batch-documents_list
      summary: List batch documents
      description: List all batch documents.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/BatchDocumentNew'
      tags:
      - batch-documents
    post:
      operationID: batch-documents_create
      summary: Upload a batch document
      description: Upload a new batch document.
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  description: uri for the file
                  type: string
                  format: binary
                batch:
                  description: id for the Batch to attach this document to.
                  type: integer
                summary:
                  description: Additional information about the document.
                  type: string
                  maxLength: 350
              required:
              - document
              - batch
        required: true
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchDocumentNew'
      tags:
      - batch-documents
  /batch-documents/{id}/:
    get:
      operationId: batch-documents_read
      summary: Retrieve a batch document
      description: Retrieve an individual batch document.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchDocumentNew'
      tags:
      - batch-documents
    delete:
      operationId: batch-documents_delete
      summary: Delete a batch document
      description: Delete a batch document.
      responses:
        '204':
          description: ''
      tags:
      - batch-documents
    parameters:
    - name: id
      in: path
      description: The id for the batch document.
      required: true
      schema:
        type: integer
  /batches/:
    get:
      operationId: batches_list
      summary: List batches
      description: List all batches. <br /> <br /> For legacy auth, retrieved per company with the owner query parameter or
        with the following path parameter, /companies/{company_id}/batches/
      parameters:
      - name: batch_date__lt
        in: query
        description: Filter by batch_date__lt
        required: false
        schema:
          type: string
      - name: batch_date__lte
        in: query
        description: Filter by batch_date__lte
        required: false
        schema:
          type: string
      - name: batch_date__gt
        in: query
        description: Filter by batch_date__gt
        required: false
        schema:
          type: string
      - name: batch_date__gte
        in: query
        description: Filter by batch_date__gte
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: Filter by one or multiple batch ids, separated by commas.
        required: false
        schema:
          type: number
      - name: owner
        in: query
        description: Filter by one or multiple company ids, separated by commas.
        required: false
        schema:
          type: number
      - name: company_slug
        in: query
        description: Filter by owner company slug.
        required: false
        schema:
          type: string
      - name: production_batch_number
        in: query
        description: Filter by one or multiple production_batch_numbers, separated by commas.
        required: false
        schema:
          type: string
      - name: products
        in: query
        description: Filter by one or multiple product ids, separated by commas.
        required: false
        schema:
          type: number
      - name: thc
        in: query
        description: Filter by a range of THC percent.
        required: false
        schema:
          type: string
      - name: thca
        in: query
        description: Filter by a range of THCa percent.
        required: false
        schema:
          type: string
      - name: total_thc
        in: query
        description: Filter by a range of total THC percent.
        required: false
        schema:
          type: string
      - name: cbd
        in: query
        description: Filter by a range of CBD percent.
        required: false
        schema:
          type: string
      - name: cbda
        in: query
        description: Filter by a range of CBDa percent.
        required: false
        schema:
          type: string
      - name: cbg
        in: query
        description: Filter by a range of CBG percent.
        required: false
        schema:
          type: string
      - name: cbn
        in: query
        description: Filter by a range of CBN percent.
        required: false
        schema:
          type: string
      - name: total_cannabinoids
        in: query
        description: Filter by a range of total cannabinoids percent.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/BatchResponse'
      tags:
      - batches
    post:
      operationId: batches_create
      summary: Create a batch
      description: Create a new batch.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchCreate'
        required: true
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponse'
      tags:
      - batches
    parameters: []
  /batches/{id}/:
    get:
      operationId: batches__read
      summary: Retrieve a batch
      description: Retrieve an individual batch.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponse'
      tags:
      - batches
    patch:
      operationId: batches__partial_update
      summary: Update a batch
      description: Update an existing batch.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchUpdate'
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponse'
      tags:
      - batches
    delete:
      operationId: batches__delete
      summary: Delete a batch
      description: Delete a batch.
      responses:
        '204':
          description: ''
      tags:
      - batches
    parameters:
    - name: id
      description: The id for the batch.
      in: path
      required: true
      schema:
        type: string
  /inventory/items/:
    get:
      operationId: inventory-items_list
      summary: List
      description: "List all inventory items. By default this returns non-archived items - you can query for archived items\
        \ by \nincluding the \"include_archived\" query parameter.\n\n__⚠️ WARNING - BETA FEATURE:__ This API is in active\
        \ development and is subject to change.\n"
      parameters:
      - name: include_archived
        in: query
        description: Filter by archived status
        required: false
        schema:
          type: boolean
      - name: product
        in: query
        description: Filter by product ID
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/InventoryItem'
      tags:
      - inventory-items
    post:
      operationId: inventory-items_create
      summary: Create
      description: 'Create an inventory item.


        __NOTE__: If a non-archived inventory item is found with the same product and facility but no batch,

        it will be marked as "archived" and a new inventory item will be created. As a result, subsequent GET

        requests will no longer return the old inventory item. As mentioned in the GET method description, you can query

        for archived items by including the "include_archived" query parameter.


        __⚠️ WARNING - BETA FEATURE:__ This API is in active development and is subject to change.

        '
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InventoryItemCreate'
        required: true
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryItem'
      tags:
      - inventory-items
    parameters: []
  /inventory/items/{id}/:
    get:
      operationId: inventory-items_read
      summary: Read
      description: 'Get inventory item by ID.


        __⚠️ WARNING - BETA FEATURE:__ This API is in active development and is subject to change.

        '
      parameters:
      - name: id
        in: path
        description: A unique integer value identifying this inventory item.
        required: true
        schema:
          type: integer
      - name: include_archived
        in: query
        description: Filter by the archived status. (False by default.)
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryItem'
      tags:
      - inventory-items
    patch:
      operationId: inventory-items_partial_update
      summary: Update
      description: 'Update an existing inventory item by ID.


        __⚠️ WARNING - BETA FEATURE:__ This API is in active development and is subject to change.

        '
      parameters:
      - name: id
        in: path
        description: A unique integer value identifying this inventory item.
        required: true
        schema:
          type: integer
      - name: include_archived
        in: query
        description: Filter by the archived status. (False by default.)
        required: false
        schema:
          type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InventoryItemUpdate'
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryItem'
      tags:
      - inventory-items
  /inventory/facilities/:
    get:
      operationId: facilities_list
      summary: List
      description: 'List all facilities.


        __⚠️ WARNING - BETA FEATURE:__ This API is in active development and is subject to change.

        '
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/Facility'
      tags:
      - facilities
  /inventory/facilities/{id}/:
    get:
      operationId: facilities_read
      summary: Read
      description: 'Get facility by ID.


        __⚠️ WARNING - BETA FEATURE:__ This API is in active development and is subject to change.

        '
      parameters:
      - name: id
        in: path
        description: A unique integer value identifying this facility.
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Facility'
      tags:
      - facilities
  /brands/:
    get:
      operationId: brands_list
      summary: List brands
      description: List all brands. <br /> <br /> Retrieved per company with the company query parameter or with the following
        path parameter, /companies/{company_id}/brands/
      parameters:
      - name: company__in
        in: query
        description: Filter by a list of company ids.
        required: false
        schema:
          type: string
      - name: company
        in: query
        description: Filter by company id.
        required: false
        schema:
          type: string
      - name: company_slug
        in: query
        description: Filter by a company slug.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/BrandResponse'
      tags:
      - brands
    parameters: []
  /brands/{id}/:
    get:
      operationId: brands_read
      summary: Retrieve a brand
      description: Retrieve an individual brand.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandResponse'
      tags:
      - brands
    parameters:
    - name: id
      in: path
      description: The id for the brand.
      required: true
      schema:
        type: integer
  /companies/:
    get:
      operationId: companies_list
      summary: List companies
      description: List companies the requesting user is a staff member of.
      parameters:
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/CompanyResponse'
      tags:
      - companies
    parameters: []
  /companies/{id}/:
    get:
      operationId: companies_read
      summary: Retrieve a company
      description: Retrieve an individual company.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyResponse'
      tags:
      - companies
    parameters:
    - name: id
      in: path
      description: The id for the company.
      required: true
      schema:
        type: integer
  /company-staff/:
    get:
      operationId: company-staff_list
      summary: List staff members
      description: List all staff members.
      parameters:
      - name: company
        in: query
        description: Filter by company id
        required: false
        schema:
          type: string
      - name: is_admin
        in: query
        description: Filter by admin status, `true` or `false`
        required: false
        schema:
          type: string
      - name: is_active
        in: query
        description: Filter by active status, `true` or `false`
        required: false
        schema:
          type: string
      - name: company_slug
        in: query
        description: Filter by company slug
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    format: uri
                    nullable: true
                  previous:
                    type: string
                    format: uri
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/CompanyStaffResponse'
      tags:
      - company-staff
    parameters: []
  /company-staff/{id}/:
    get:
      operationId: company-staff_read
      summary: Retrieve a staff member
      description: Retrieve an individual staff member.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyStaffResponse'
      tags:
      - company-staff
    parameters:
    - name: id
      in: path
      description: The staff member id.
      required: true
      schema:
        type: integer
  /contacts/:
    get:
      operationId: contacts_list
      summary: List
      description: 'List all contacts for all active companies

# --- truncated at 32 KB (361 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leaflink/refs/heads/main/openapi/leaflink-marketplace-v2-openapi-original.yml