swagger: "2.0"
host: "vendor-gw.fabric.tnxs.net:8080"
securityDefinitions:
  ApiKeyAuth:
    type: apiKey
    in: header
    name: X-API-Key
security:
  - ApiKeyAuth: []
basePath: "/v1"
schemes:
  - "http"
info:
  version: 1.3.0
  title: "vendor-gw"
  contact:
    email: "noc@taxnexus.net"
  license:
    name: "Proprietary - Copyright (c) 2018-2021 by Taxnexus, Inc."
  termsOfService: "https://www.taxnexus.com/terms/"
  description: |
    # Taxnexus Vendor Gateway
consumes:
  - "application/json"
produces:
  - "application/json"
parameters:
  itemNumberPath:
    description: The Item Number
    in: path
    name: item
    required: true
    type: string
  itemNumberQuery:
    description: The Item Number
    in: query
    name: item
    required: false
    type: string
  lastModifiedEndQuery:
    description: The last modified end timestamp
    in: query
    name: endDate
    required: false
    type: string
  lastModifiedStartQuery:
    description: The last modified start timestamp
    in: query
    name: startDate
    required: false
    type: string
  licenseNumberQuery:
    description: The Licnese Number for the query
    in: query
    name: license
    required: false
    type: string
  limitQuery:
    description: "How many objects to return at one time"
    format: int64
    in: query
    name: limit
    required: false
    type: integer
  nameQuery:
    description: The Name of the Object
    in: query
    name: name
    required: false
    type: string
  offsetQuery:
    description: How many objects to skip
    format: int64
    in: query
    name: offset
    required: false
    type: integer
  partnerKeyQuery:
    description: The Partner Key
    in: query
    name: partner
    required: false
    type: string
  poIdQuery:
    description: The ID Purchase Order to be retrieved
    in: query
    name: poId
    required: false
    type: string
  stateCodeQuery:
    description: The 2-character State Code
    in: query
    name: state
    required: true
    type: string
  taxnexusUserQuery:
    description: Taxnexus User Account Number (T0000001)
    in: query
    name: user
    required: true
    type: string
  userKeyQuery:
    description: The Taxnexus User's Key on the Vendor API
    in: query
    name: user
    required: true
    type: string
  vendorQuery:
    description: The name of the Vendor Gateway to be used
    enum:
      - blaze
      - metrc
    in: query
    name: vendor
    required: false
    type: string
responses:
  AccessForbidden:
    description: Access forbidden, account lacks access
    schema:
      $ref: "#/definitions/Error"
  Conflict:
    description: Conflict
    schema:
      $ref: "#/definitions/Error"
  InvalidDataError:
    description: Invalid data was sent
    schema:
      $ref: "#/definitions/InvalidError"
  InvoiceResponse:
    description: An array of Invoice (full) objects
    schema:
      $ref: "#/definitions/InvoiceResponse"
  AccountResponse:
    description: An array of AccountBasic objects
    schema:
      $ref: "#/definitions/AccountResponse"
  NotFound:
    description: Resource was not found
    schema:
      $ref: "#/definitions/Error"
  PurchaseOrderResponse:
    description: An array of Purchase Order objects
    schema:
      $ref: "#/definitions/PurchaseOrderResponse"
  ServerError:
    description: Server Internal Error
    schema:
      $ref: "#/definitions/Error"
  Unauthorized:
    description: Access unauthorized, invalid API-KEY was used
    schema:
      $ref: "#/definitions/Error"
  UnprocessableEntity:
    description: Unprocessable Entity, likely a bad parameter
    schema:
      $ref: "#/definitions/Error"
paths:
  /accounts:
    get:
      tags:
        - Accounts
      operationId: getAccounts
      description:
        Get the Stores, Accounts or other entities that correspond to
        locations
      parameters:
        - $ref: "#/parameters/licenseNumberQuery"
        - $ref: "#/parameters/partnerKeyQuery"
        - $ref: "#/parameters/stateCodeQuery"
        - $ref: "#/parameters/userKeyQuery"
        - $ref: "#/parameters/vendorQuery"
      responses:
        "200":
          $ref: "#/responses/AccountResponse"
        "401":
          $ref: "#/responses/Unauthorized"
        "403":
          $ref: "#/responses/AccessForbidden"
        "404":
          $ref: "#/responses/NotFound"
        "422":
          $ref: "#/responses/UnprocessableEntity"
        "500":
          $ref: "#/responses/ServerError"
      summary: Get Accounts for this User
  /invoices:
    get:
      summary: Get a list of Invoices
      operationId: getInvoices
      description: Return a list of available Taxnexus Invoices
      tags:
        - Invoices
      parameters:
        - $ref: "#/parameters/itemNumberQuery"
        - $ref: "#/parameters/lastModifiedEndQuery"
        - $ref: "#/parameters/lastModifiedStartQuery"
        - $ref: "#/parameters/licenseNumberQuery"
        - $ref: "#/parameters/limitQuery"
        - $ref: "#/parameters/offsetQuery"
        - $ref: "#/parameters/partnerKeyQuery"
        - $ref: "#/parameters/stateCodeQuery"
        - $ref: "#/parameters/userKeyQuery"
        - $ref: "#/parameters/vendorQuery"
      responses:
        "200":
          description:
            A list of Invoices for this User was retrieved successfully
          schema:
            $ref: "#/definitions/InvoiceResponse"
        "401":
          $ref: "#/responses/Unauthorized"
        "403":
          $ref: "#/responses/AccessForbidden"
        "404":
          $ref: "#/responses/NotFound"
        "422":
          $ref: "#/responses/UnprocessableEntity"
        "500":
          $ref: "#/responses/ServerError"
  /pos:
    get:
      summary: Get a list of Purchase Orders
      operationId: getPos
      description: Return a list of available Purchase Orders
      tags:
        - PurchaseOrders
      parameters:
        - $ref: "#/parameters/lastModifiedEndQuery"
        - $ref: "#/parameters/lastModifiedStartQuery"
        - $ref: "#/parameters/licenseNumberQuery"
        - $ref: "#/parameters/limitQuery"
        - $ref: "#/parameters/offsetQuery"
        - $ref: "#/parameters/partnerKeyQuery"
        - $ref: "#/parameters/poIdQuery"
        - $ref: "#/parameters/stateCodeQuery"
        - $ref: "#/parameters/userKeyQuery"
        - $ref: "#/parameters/vendorQuery"
      responses:
        "200":
          $ref: "#/responses/PurchaseOrderResponse"
        "401":
          $ref: "#/responses/Unauthorized"
        "403":
          $ref: "#/responses/AccessForbidden"
        "404":
          $ref: "#/responses/NotFound"
        "422":
          $ref: "#/responses/UnprocessableEntity"
        "500":
          $ref: "#/responses/ServerError"
definitions:
  AccountBasic:
    properties:
      AccountNumber:
        description: Account Number
        type: string
      BillingAddress:
        $ref: "#/definitions/Address"
      BillingContact:
        $ref: "#/definitions/ContactBasic"
      ID:
        description: Taxnexus Record Id Only; not used in POST
        type: string
      License:
        $ref: "#/definitions/LicenseBasic"
      Name:
        description: Account Name
        type: string
      ParentFK:
        description:
          UUID Reference the master record that owns this item
        type: string
      Phone:
        description: Phone number
        type: string
      Ref:
        description: "Source System identifier for this record, if any"
        type: string
      ShippingAddress:
        $ref: "#/definitions/Address"
      ShippingContact:
        $ref: "#/definitions/ContactBasic"
      Type:
        description: Account Type
        type: string
      UUID:
        description: Unique Taxnexus ID
        type: string
      Website:
        description: Account Website
        type: string
    type: object
  AccountResponse:
    properties:
      data:
        items:
          $ref: "#/definitions/AccountBasic"
        type: array
      meta:
        $ref: "#/definitions/ResponseMeta"
    type: object
  Address:
    properties:
      City:
        description: City
        type: string
      Country:
        description: Country full name
        type: string
      CountryCode:
        description: Country Code
        type: string
      Postalcode:
        description: Postal Code
        type: string
      State:
        description: State full name
        type: string
      StateCode:
        description: State Code
        type: string
      Street:
        description: Street number and name
        type: string
    type: object
  ContactBasic:
    properties:
      AccountID:
        description: Contact Account Id
        type: string
      Email:
        description: Email
        type: string
      ID:
        description: Taxnexus Record Id Only; not used in POST
        type: string
      MailingAddress:
        $ref: "#/definitions/Address"
      MobilePhone:
        description: Mobile
        type: string
      Name:
        description: Name
        type: string
      ParentFK:
        description:
          UUID Reference the master record that owns this item
        type: string
      Ref:
        description: Source System identifier for this record, if any
        type: string
      UUID:
        description: Unique Taxnexus ID
        type: string
    type: object
  Error:
    properties:
      error:
        type: string
      status:
        maximum: 600
        minimum: 100
        type: integer
    type: object
  InvalidError:
    allOf:
      - $ref: "#/definitions/Error"
      - properties:
          details:
            items:
              type: string
            type: array
        type: object
  InvoiceBasic:
    properties:
      AccountID:
        description:
          Account Identifier from Source System; copied to the Tax
          Transaction result records
        type: string
      AccountName:
        description:
          Account Name from source system (not used in tax calculations)
        type: string
      Amount:
        description: Invoice Amount; ignored in tax calculation
        format: double
        type: number
      AmountDue:
        description: Amount Due; ignored in tax calculations
        format: double
        type: number
      BusinessAddress:
        $ref: "#/definitions/Address"
      CustomerID:
        description:
          The Customer ID linked to this invoice from the source system
        type: string
      EstimatedAmount:
        description: Invoice Total from source system
        format: double
        type: number
      EstimatedCannabisTax:
        description: Cannabis Tax from source system
        format: double
        type: number
      EstimatedCOGS:
        description: Cost of Goods Sold from source system
        type: number
        format: double
      EstimatedDiscount:
        description:
          An amount the Invoice is discounted in source Invoice
        format: double
        type: number
      EstimatedBusinessTax:
        description: Business Tax from source system
        format: double
        type: number
      EstimatedSalesTax:
        description: Sales Tax from source system
        format: double
        type: number
      EstimatedSubtotal:
        description: Subtotal from source system
        format: double
        type: number
      JobID:
        description: Taxnexus Job ID
        type: string
      ID:
        description: Taxnexus Record Id Only; not used in POST
        type: string
      InvoiceDate:
        description:
          Invoice Date; should be date only or correct time zone if in
          time notation
        type: string
      InvoiceNumber:
        description:
          Source System Customer-Facing Invoice Number; ignored in tax
          calculation
        type: string
      Items:
        description: The items associated with this Invoice
        items:
          $ref: "#/definitions/ItemBasic"
        type: array
      ParentFK:
        description:
          UUID Reference to a master record that owns this item
        type: string
      Ref:
        description:
          Source System identifier for this record, if any; copied to
          invoiceid in Tax Transaction result records
        type: string
      SalesRegulation:
        description:
          Sales Regulation Type; must be one of the listed values
        type: string
      ShippingHandling:
        description:
          The total amount of shipping and delivery charges on this
          invoice from the source system
        format: double
        type: number
      Status:
        description:
          Status used by for Billing Balances; ignored in tax
          calculation
        type: string
      Subtotal:
        description: Subtotal (not used in tax calculation)
        format: double
        type: number
      Type:
        description: Invoice Type (not used in tax calculation)
        type: string
      UUID:
        description: Unique Taxnexus Id assigned during ingest
        type: string
    type: object
  InvoiceResponse:
    properties:
      data:
        items:
          $ref: "#/definitions/InvoiceBasic"
        type: array
      meta:
        $ref: "#/definitions/ResponseMeta"
    type: object
  ItemBasic:
    properties:
      COGS:
        description: Cost of Goods Sold for this Item
        example: 0
        type: number
      Description:
        description: Line Item Description (not used in tax calculation)
        example: string
        type: string
      ID:
        description: Taxnexus Record Id Only; not used in POST
        example: string
        type: string
      InvoiceID:
        description: Source System Parent Foreign Key to Invoice
        example: string
        type: string
      ListPrice:
        description: The pre-discount price of the item
        example: 0
        type: number
      MRCInterval:
        description: The pre-discount price of the item
        example: 0
        format: int64
        type: number
      ParentFK:
        description:
          UUID Reference the master record that owns this item
        example: string
        type: string
      ProductCode:
        description: Product Code (not used in tax calculation)
        example: string
        type: string
      Quantity:
        description: Quantity
        example: 0
        type: number
      Ref:
        description:
          "Source System identifier for this record, if any; copied to
          invoiceitemid in Tax Transaction result records"
        example: string
        type: string
      SalesRegulation:
        description: Sales Regulation Type
        example: string
        type: string
      ShippingHandling:
        description: Shipping & Handling and Delivery Fees for this Item
        example: 0
        type: number
      Subtotal:
        description: Subtotal (not used in tax calculation)
        example: 0
        type: number
      TaxnexusCode:
        description: Taxnexus Code
        example: string
        type: string
      UnitPrice:
        description: Unit Price
        example: 0
        type: number
      Units:
        description: The Unit of Measure for this item
        type: string
      UUID:
        description: Unique Taxnexus ID
        example: string
        type: string
    type: object
  LicenseBasic:
    properties:
      DateIssued:
        description: Date Issued
        type: string
      ExpirationDate:
        description: Expiration Date
        type: string
      ID:
        description: Taxnexus Record Id
        type: string
      IsCanceled:
        description: Is Canceled?
        type: boolean
      IsRevoked:
        description: Is Revoked?
        type: boolean
      LicenseType:
        description: License State and Type
        type: string
      Name:
        description: License Number
        type: string
      ParentFK:
        description:
          UUID Reference the master record that owns this item
        type: string
      Ref:
        description: Source System identifier for this record, if any
        type: string
      Status:
        description: License Status
        type: string
      UUID:
        description: Unique Taxnexus ID
        type: string
    type: object
  Pagination:
    properties:
      next_link:
        type: string
      p_limit:
        format: int64
        type: integer
      p_offset:
        format: int64
        type: integer
      page_size:
        format: int64
        type: integer
      set_size:
        format: int64
        type: integer
    type: object
  PurchaseOrderBasic:
    properties:
      AccountID:
        description: Account ID
        type: string
      Amount:
        description: Purchase Order Amount
        format: float64
        type: number
      AmountDue:
        description: Amount Due
        type: number
      BusinessAddress:
        $ref: "#/definitions/Address"
      ID:
        description: Order Id
        type: string
      Items:
        items:
          $ref: "#/definitions/ItemBasic"
        type: array
      ParentFK:
        description:
          UUID Reference the master record that owns this item
        type: string
      PODate:
        description: Purcahse Order Date
        type: string
      PONumber:
        description: Purchase Order Number
        type: string
      Ref:
        description: Source System identifier for this record, if any
        type: string
      SalesRegulation:
        description: Sales Regulation Type
        type: string
      Status:
        description: Status
        type: string
      Subtotal:
        description: Subtotal
        format: float64
        type: number
      Type:
        description: Type
        type: string
      UUID:
        description: Unique Taxnexus ID
        type: string
    type: object
  PurchaseOrderResponse:
    properties:
      data:
        items:
          $ref: "#/definitions/PurchaseOrderBasic"
        type: array
      meta:
        $ref: "#/definitions/ResponseMeta"
    type: object
  ResponseMeta:
    properties:
      Contact:
        description: Microservice Contact Info
        type: string
      Copyright:
        description: Copyright Info
        type: string
      License:
        description: License Information and Restrictions
        type: string
      OperationID:
        description: Operation ID
        type: string
      Pagination:
        $ref: "#/definitions/Pagination"
      RequestIP:
        description: Request IP Address
        type: string
      RequestType:
        description: Request Type
        type: string
      RequestURL:
        description: Request URL
        type: string
      ServerInfo:
        description: Data Server Info
        type: string
      ServerResponseTime:
        description: Data Server Response Time (ms)
        type: string
      ServerTimeStamp:
        description: Backend Server Timestamp
        type: string
      TaxnexusAccount:
        description:
          Taxnexus Account Number used for recording transactions
        type: string
    type: object
