openapi: 3.0.3 info: title: Unofficial MyPOS Connect API description version: "2.0" contact: name: MyPOS Connect service support (third party) email: support@tricityretail.com description: | Unofficial, independently maintained OpenAPI description derived from the "MyPOS Connect API V2" document version 1.4. This repository does not operate, own, or license the MyPOS Connect API, and this description is not represented as an official specification from the service owner. The API uses JWT bearer tokens for most calls. Tokens are obtained from `POST /auth/token` and are valid for 120 minutes. All POST and PUT request bodies are JSON. servers: - url: https://api.myposconnect.com/api/v2 description: Third-party production endpoint tags: - name: Auth description: Authenticate API users and obtain short-lived JWT bearer tokens. - name: Customers description: Create, retrieve, and update local and global customers. - name: Inventory description: Reserve inventory and inspect quantities committed to web orders. - name: Products description: Retrieve general, store-specific, and serialized product data. - name: Rewards description: Reserve or reverse customer reward points before sale processing. - name: Sales description: Insert completed sales or cancel quantities committed to an order. - name: Stores description: Discover stores used by product, inventory, and sale operations. security: - bearerAuth: [] paths: /auth/token: post: operationId: authTokensCreate tags: - Auth summary: Get an API token description: | Authenticate with API user email and password to obtain a JWT bearer token. The API guide documents HTTP Basic authentication and says the token is valid for 120 minutes. The referenced Figure 1 request payload and the token response body are absent from the available source material, so neither body shape is asserted here. security: - basicAuth: [] responses: "200": description: Token returned. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /naproducts: get: operationId: productsList tags: - Products summary: List general product data description: | Returns general/static product details such as descriptions, notes, classification and related product fields. Pagination is recommended for large result sets. parameters: - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/FieldList" - $ref: "#/components/parameters/ProductSortKey" - $ref: "#/components/parameters/WebProductFilter" - $ref: "#/components/parameters/ActiveFilter" - $ref: "#/components/parameters/StyleCodeFilter" responses: "200": description: Product list returned. content: application/json: schema: $ref: "#/components/schemas/ProductListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /naproducts/{ProductCode}: get: operationId: productsRetrieve tags: - Products summary: Get general details for a single product parameters: - $ref: "#/components/parameters/ProductCode" - $ref: "#/components/parameters/FieldList" responses: "200": description: Product returned. content: application/json: schema: $ref: "#/components/schemas/Product" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /naproducts/~{LastEditDate}: get: operationId: productsListChanged tags: - Products summary: List general products changed since a date parameters: - $ref: "#/components/parameters/ProductChangedSinceDate" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/FieldList" - $ref: "#/components/parameters/ProductSortKey" responses: "200": description: Changed products returned. content: application/json: schema: $ref: "#/components/schemas/ProductListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /products: get: operationId: productsListAlternate deprecated: true tags: - Products summary: List products description: | Product listing endpoint shown in the source document for active product filtering. Most product examples use `/naproducts`, the companion workbook does not include this path, and the endpoint returned HTTP 403 during a production smoke test. Prefer `/naproducts` unless the service provider confirms this endpoint is enabled for the target database. parameters: - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/FieldList" - $ref: "#/components/parameters/ProductSortKey" - $ref: "#/components/parameters/WebProductFilter" - $ref: "#/components/parameters/ActiveFilter" - $ref: "#/components/parameters/StyleCodeFilter" responses: "200": description: Product list returned. content: application/json: schema: $ref: "#/components/schemas/ProductListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /productspq/~{StoreCode}~{LastEditDate}: get: operationId: productsStoreDataListChanged tags: - Products summary: List store product price, cost, quantity and tax changes description: | Returns price, cost, quantity available and tax for all products modified after the specified UTC date/time. The documented path uses two `~` separators. parameters: - $ref: "#/components/parameters/StoreCode" - $ref: "#/components/parameters/StoreProductChangedSinceDate" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Page" responses: "200": description: Store product data returned. content: application/json: schema: $ref: "#/components/schemas/StoreProductListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /productspq/{StoreCode}~{ProductCode}: get: operationId: productsStoreDataRetrieve tags: - Products summary: Get store price and quantity for a product parameters: - $ref: "#/components/parameters/StoreCode" - $ref: "#/components/parameters/ProductCode" responses: "200": description: Store product data returned. content: application/json: schema: $ref: "#/components/schemas/StoreProductListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /productspqo/~{StoreCode}~{LastEditDate}: get: operationId: productsStoreDataListChangedWithOnOrder tags: - Products summary: List store product changes including quantity on order description: | Returns price, cost, quantity available, tax and quantity on order for all products modified after the specified UTC date/time. parameters: - $ref: "#/components/parameters/StoreCode" - $ref: "#/components/parameters/StoreProductChangedSinceDate" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Page" responses: "200": description: Store product data returned. content: application/json: schema: $ref: "#/components/schemas/StoreProductWithOnOrderListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /productspqo/{StoreCode}~{ProductCode}: get: operationId: productsStoreDataRetrieveWithOnOrder tags: - Products summary: Get store price, quantity, tax and quantity on order for a product parameters: - $ref: "#/components/parameters/StoreCode" - $ref: "#/components/parameters/ProductCode" responses: "200": description: Store product data returned. content: application/json: schema: $ref: "#/components/schemas/StoreProductWithOnOrderListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /ProductSerial/{StoreCode}~{ProductCode}~{SerialNumber}: get: operationId: productsSerialNumbersRetrieveStatus tags: - Products summary: Get product serial number status description: | Serial number status values: `-1` Not Found, `0` Available, `1` Sold, `2` Transferred Out, `3` Returned, `4` Deleted, `5` In Limbo. parameters: - $ref: "#/components/parameters/StoreCode" - $ref: "#/components/parameters/ProductCode" - name: SerialNumber in: path required: true schema: type: string responses: "200": description: Serial number status returned. content: application/json: schema: $ref: "#/components/schemas/SerialNumberStatusResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /naCustomers: post: operationId: customersCreate tags: - Customers summary: Create a customer requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/CustomerCreateRequest" responses: "200": description: Customer created. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /naCustomers/{CustomerCode}: get: operationId: customersRetrieve tags: - Customers summary: Get a customer description: | Customers are looked up by customer code by default. A database can be configured to look up this value as an email address instead. parameters: - $ref: "#/components/parameters/CustomerCode" responses: "200": description: Customer returned. content: application/json: schema: $ref: "#/components/schemas/Customer" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" put: operationId: customersUpdate tags: - Customers summary: Update a customer parameters: - $ref: "#/components/parameters/CustomerCode" requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/CustomerUpdateRequest" responses: "200": description: Customer updated. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /globalcustomers/{EmailAddress}: get: operationId: customersGlobalRetrieve tags: - Customers summary: Get a global customer parameters: - $ref: "#/components/parameters/EmailAddress" responses: "200": description: Global customer returned. content: application/json: schema: $ref: "#/components/schemas/GlobalCustomerListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" put: operationId: customersGlobalUpdate tags: - Customers summary: Update a global customer description: Global Customers support a limited set of fields for update. parameters: - $ref: "#/components/parameters/EmailAddress" requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/GlobalCustomerUpdateRequest" responses: "200": description: Global customer updated. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /Stores: get: operationId: storesList tags: - Stores summary: List stores parameters: - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Page" responses: "200": description: Store list returned. content: application/json: schema: $ref: "#/components/schemas/StoreListResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /CommitQty: post: tags: - Inventory operationId: inventoryCommitmentsCreate summary: Insert committed quantities description: | Reserves inventory for a web order before the sale is finalized. Negative commit values can reverse individual committed quantities. requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/CommitQuantityRequest" responses: "200": description: Committed quantities inserted. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /CommitQty/{OrderNumber}: get: tags: - Inventory operationId: inventoryCommitmentsRetrieve summary: View committed quantities for an order parameters: - $ref: "#/components/parameters/OrderNumber" responses: "200": description: | Committed quantities returned. The available guides do not include a response-body sample for this operation. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /CommitPts: post: tags: - Rewards operationId: rewardsCommitmentsCreate summary: Commit or reverse customer reward points description: | Reserve reward points before final sale processing. Send negative `Points` values to commit points and positive values to reverse a previous point commitment, as documented by API guide version 1.4. The older sample-call spreadsheet version 1.3 describes the signs in the opposite direction. Version 1.4 is used here because it is newer, but the sign convention still requires provider or live-API confirmation before production use. requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/CommitPointsRequest" examples: commit: summary: Commit reward points value: CommittedPoints: - StoreCode: STORE-001 OrderNumber: ORDER-EXAMPLE-001 EmailAddress: ada.lovelace@example.com Points: -400 reverse: summary: Reverse committed reward points value: CommittedPoints: - StoreCode: STORE-001 OrderNumber: ORDER-EXAMPLE-001 EmailAddress: ada.lovelace@example.com Points: 400 responses: "200": description: Points committed or reversed. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" /Sale: post: operationId: salesCreate tags: - Sales summary: Insert a sale or cancel committed quantities description: | Inserts sales with billing customer, shipping customer, items, taxes and optional discounts. Customers are located by email address; missing customers are created and changed customer name/address details are updated. To cancel all committed quantities associated with an order that will not be processed, send a sale record with the order number, store code and a sale total of `0.00`, as shown in the source document. requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/SaleRequest" examples: cancelCommittedQuantities: summary: Cancel all committed quantities for an order value: Sales: - SaleDate: "2020-11-19" OrderNumber: ORDER-EXAMPLE-002 StoreCode: STORE-001 SaleTotal: "0.00" rewardPointsSale: summary: Sale paid partly with reward points value: Sales: - SaleDate: "2020-07-30T18:00:00" OrderNumber: ORDER-EXAMPLE-003 StoreCode: STORE-001 OrderComment: Order Comments go here RewardPointsSpent: 400 CustomerBillTo: FirstName: Ada LastName: Lovelace CompanyName: "" Address: 123 Example Street City: Example City Region: Example Province PostalCode: A1A 1A1 Country: Canada EmailAddress: ada.lovelace@example.com Items: - ProductCode: SKU-EXAMPLE-001 Quantity: "1" Description: Example Lavender Soap UnitPrice: "10.00" TaxName: HST TaxRate: "13.00" TaxAmount: "1.30" LineNumber: "1" Subtotal: "10.00" Taxes: - TaxName: HST TaxRate: "13.00" TaxTotal: "1.30" TaxTotal: "1.30" SaleTotal: "11.30" refund: summary: Refund a sale with a unique order number value: Sales: - SaleDate: "2019-08-07T18:00:00" OrderNumber: ORDER-EXAMPLE-003-R StoreCode: STORE-001 OrderComment: Order Comments go here RewardPointsSpent: -400 CustomerBillTo: FirstName: Ada LastName: Lovelace EmailAddress: ada.lovelace@example.com Items: - ProductCode: SKU-EXAMPLE-001 Quantity: "-1" Description: Example Lavender Soap UnitPrice: "10.00" TaxName: HST TaxRate: "13.00" TaxAmount: "-1.30" LineNumber: "1" SerialNumber: SERIAL-EXAMPLE-001 Subtotal: "-10.00" Taxes: - TaxName: HST TaxRate: "13.00" TaxTotal: "-1.30" TaxTotal: "-1.30" SaleTotal: "-11.30" responses: "200": description: Sale inserted. content: application/json: schema: $ref: "#/components/schemas/UnverifiedJSONResponse" "4XX": $ref: "#/components/responses/ClientError" "5XX": $ref: "#/components/responses/ServerError" components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT basicAuth: type: http scheme: basic parameters: PageSize: name: liPageSize in: query description: Number of records to return per page. schema: type: integer minimum: 1 example: 10 Page: name: liPage in: query description: Page number to return. schema: type: integer minimum: 1 example: 1 FieldList: name: sFieldList in: query description: Comma-separated list of fields to return. schema: type: string example: productCode,longDescription ProductSortKey: name: sSortKey in: query description: Sort column immediately followed by ASC or DESC, without whitespace. schema: type: string pattern: ^([Aa]ctive|[Cc]reationDate|[Cc]reationDeviceName|[Cc]reationUserName|[Ll]astEditDate|[Ll]astEditDeviceName|[Ll]astEditUserName|[Ll]ongDescription|[Pp]rice01|[Pp]roductCode|[Pp]roductReportingClass|[Pp]roductType|[Ss]hortDescription|[Ss]tockControl)(ASC|DESC)$ example: productCodeASC WebProductFilter: name: filt_webproduct_bool in: query description: Filter products by Web Product flag. schema: type: boolean example: true ActiveFilter: name: filt_active_bool in: query description: Filter products by Active flag. schema: type: boolean example: true StyleCodeFilter: name: filt_stylecode_str in: query description: Filter products by style code. schema: type: string example: STY001 ProductCode: name: ProductCode in: path required: true schema: type: string StoreCode: name: StoreCode in: path required: true schema: type: string example: "001" ProductChangedSinceDate: name: LastEditDate in: path required: true description: Date used to retrieve general products changed since that day. schema: type: string pattern: '^\d{4}-\d{2}-\d{2}$' example: "2020-11-16" StoreProductChangedSinceDate: name: LastEditDate in: path required: true description: | UTC date/time in the companion workbook's 24-hour `YYYY-MM-DD HH:MM:SS.fff` format. The client percent-encodes the space when placing the value in the URL path. schema: type: string pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}$' example: "2020-11-16 13:45:00.000" CustomerCode: name: CustomerCode in: path required: true description: Customer code, or email address when database lookup is configured that way. schema: type: string example: ada.lovelace@example.com EmailAddress: name: EmailAddress in: path required: true schema: type: string format: email example: ada.lovelace@example.com OrderNumber: name: OrderNumber in: path required: true schema: type: string example: "1008" responses: ClientError: description: The request was rejected by the API. content: application/json: schema: $ref: "#/components/schemas/Error" ServerError: description: The API could not complete the request. content: application/json: schema: $ref: "#/components/schemas/Error" schemas: UnverifiedJSONResponse: description: | JSON response whose shape is not present in the available API guide or sample-call spreadsheet. This schema is intentionally unconstrained until a sanitized capture or sandbox response is available. Error: description: | Error payload shape is not documented by the available source material. Consumers must not depend on particular error properties until sanitized error fixtures have been verified. UnknownJSONValue: description: A value whose non-null JSON type is not established by the samples. UUID: type: string format: uuid readOnly: true NullableUUID: type: string format: uuid nullable: true readOnly: true NullableString: type: string nullable: true TimestampString: type: string description: Timestamp returned without a UTC offset in the supplied samples. pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?$' readOnly: true example: "2020-08-25T13:02:16.967" NullableTimestampString: type: string nullable: true description: Timestamp returned without a UTC offset, or null. pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?$' readOnly: true SaleDateString: type: string description: Date, or date and 24-hour time, as accepted by the sale API. pattern: '^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?)?$' example: "2019-08-07T18:00:00" CompletedSaleDateString: type: string description: Date and 24-hour time used by completed and refund sale examples. pattern: '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?$' example: "2019-08-07T18:00:00" DecimalString: type: string description: Decimal value represented as a JSON string by the sample calls. pattern: '^-?(?:\d+(?:\.\d+)?|\.\d+)$' example: "10.00" ProductListResponse: type: array description: | Product collection. Pagination metadata is returned on each product as `customSortRowNumber` and `liTotalCount` in the supplied list sample. items: $ref: "#/components/schemas/Product" example: - customSortRowNumber: 1 liTotalCount: 2 productId: 00000000-0000-4000-8000-000000000001 productCode: STYLE02 longDescription: STYLE 02 productSize: XS styleCode: STY001 productColour: GREEN active: true Product: type: object description: | General/static product data. The properties returned can be narrowed by `sFieldList`, and installations may expose additional fields; known sample fields are typed while additional response fields remain open. properties: customSortRowNumber: type: integer readOnly: true description: One-based record position in a list response. liTotalCount: type: integer readOnly: true description: Total records matching the request, repeated on list items. productId: $ref: "#/components/schemas/UUID" productCode: type: string readOnly: true shortDescription: type: string longDescription: type: string buttonText: type: string description: Casing returned by the single-product sample. buttontext: type: string description: Casing returned by the style-list sample. brand: type: string fullDescription: type: string barcode: type: string productSize: type: string styleCode: type: string styleDescription: type: string productColour: type: string productType: type: string description: Product type code documented by the sample-call spreadsheet. enum: - A - B - E - H - K - M - Q - S - U - W - Z rewardPoints: type: integer description: Additional reward points associated with the product. allowDiscounts: type: boolean productNotes: type: string stockControl: type: string active: type: boolean binLocation: type: string imageFilename: type: string productClass1: $ref: "#/components/schemas/NullableString" productClass2: $ref: "#/components/schemas/NullableString" productClass3: $ref: "#/components/schemas/NullableString" productClass4: $ref: "#/components/schemas/NullableString" supplierName: type: string productTitle: $ref: "#/components/schemas/UnknownJSONValue" productWeight: $ref: "#/components/schemas/UnknownJSONValue" webHoldback: type: number format: double webOrders: type: boolean lastModified: $ref: "#/components/schemas/NullableTimestampString" unpackedFrom: $ref: "#/components/schemas/UnknownJSONValue" packedInto: $ref: "#/components/schemas/UnknownJSONValue" otherProductClasses: type: array items: type: string cC_001: $ref: "#/components/schemas/NullableString" cC_002: $ref: "#/components/schemas/NullableString" cC_003: $ref: "#/components/schemas/NullableString" cC_004: $ref: "#/components/schemas/NullableString" cC_005: $ref: "#/components/schemas/NullableString" cC_006: $ref: "#/components/schemas/NullableString" cC_007: $ref: "#/components/schemas/NullableString" cC_008: $ref: "#/components/schemas/NullableString" cC_009: $ref: "#/components/schemas/NullableString" cC_010: $ref: "#/components/schemas/NullableString" lastEditUser: type: string readOnly: true creationUser: type: string readOnly: true lastEditDevice: type: string readOnly: true creationDevice: type: string readOnly: true lastEditDate: $ref: "#/components/schemas/TimestampString" creationDate: $ref: "#/components/schemas/TimestampString" additionalProperties: true example: productId: 00000000-0000-4000-8000-000000000002 productCode: SKU-EXAMPLE-001 shortDescription: Example Lavender Soap longDescription: Example Lavender Soap, 500 mL buttonText: Example Lavender Soap brand: Example Brand barcode: BARCODE-EXAMPLE-001 styleCode: STYLE-EXAMPLE-001 productType: S rewardPoints: 0 allowDiscounts: true stockControl: Y active: true productClass1: Example Class productClass2: Example Subclass webHoldback: 0 webOrders: false otherProductClasses: - Environmentally Friendly - Natural lastEditDate: "2020-08-25T13:02:16.967" creationDate: "2020-08-25T13:02:16.96" StoreProductListResponse: type: array items: $ref: "#/components/schemas/StoreProduct" example: - customSortRowNumber: 1 liTotalCount: 1 storeCode: STORE-001 productCode: SKU-EXAMPLE-001 quantity: 0 webPrice: 20 price01: 20 price02: 0 price03: 0 price04: 0 price05: 0 price06: 0 price07: 0 price08: 0 price09: 0 price10: 0 taxGroup: Sales Tax saleEnabled1: false salePrice1: null saleStartDate1: null saleEndDate1: null saleEnabled2: false salePrice2: null saleStartDate2: null saleEndDate2: null webHoldback: 0 StoreProduct: type: object description: | Store-specific quantity, price, tax and sale data. The guide also says changed-product responses include cost, but the cost property name and value are absent from the supplied JSON sample and are not invented here. properties: customSortRowNumber: type: integer readOnly: true liTotalCount: type: integer readOnly: true storeCode: type: string productCode: type: string quantity: type: number format: double webPrice: type: number format: double deprecated: true description: Backward-compatible alias for `price01`. price01: type: number format: double price02: type: number format: double price03: type: number format: double price04: type: number format: double price05: type: number format: double price06: type: number format: double price07: type: number format: double price08: type: number format: double price09: type: number format: double price10: type: number format: double taxGroup: type: string saleEnabled1: type: boolean salePrice1: type: number format: double nullable: true saleStartDate1: type: string nullable: true saleEndDate1: type: string nullable: true saleEnabled2: type: boolean salePrice2: type: number format: double nullable: true saleStartDate2: type: string nullable: true saleEndDate2: type: string nullable: true webHoldback: type: number format: double additionalProperties: true StoreProductWithOnOrderListResponse: type: array items: $ref: "#/components/schemas/StoreProductWithOnOrder" example: - customSortRowNumber: 1 liTotalCount: 1 storeCode: STORE-001 productCode: SKU-EXAMPLE-001 quantity: 4 webPrice: 20 price01: 20 price02: 0 price03: 0 price04: 0 price05: 0 price06: 0 price07: 0 price08: 0 price09: 0 price10: 0 taxGroup: Sales Tax saleEnabled1: false salePrice1: null saleStartDate1: null saleEndDate1: null saleEnabled2: false salePrice2: null saleStartDate2: null saleEndDate2: null quantityOnOrder: 0 webHoldback: 0 StoreProductWithOnOrder: allOf: - $ref: "#/components/schemas/StoreProduct" - type: object required: - quantityOnOrder properties: quantityOnOrder: type: number format: double SerialNumberStatusResponse: type: array items: $ref: "#/components/schemas/SerialNumberStatus" example: - serialNumberStatus: 0 SerialNumberStatus: type: object required: - serialNumberStatus properties: serialNumberStatus: type: integer readOnly: true enum: - -1 - 0 - 1 - 2 - 3 - 4 - 5 additionalProperties: false Customer: type: object description: Single-database customer response using upstream lower-camel-case names. properties: customerId: $ref: "#/components/schemas/UUID" customerCode: type: string readOnly: true description: Assigned by MyPOS Connect; it cannot be supplied when creating a customer. customerName: type: string address: type: string city: type: string region: type: string postalCode: type: string country: type: string phoneNumber: type: string faxNumber: type: string emailAddress: type: string format: email webSite: type: string creditLimit: type: number format: double notes: type: string active: type: boolean customerType: type: string rewardsCollector: type: boolean rewardsNumber: type: string rewardsValue: type: number format: double description: Total customer reward-points value returned by the API. firstSaledate: $ref: "#/components/schemas/UnknownJSONValue" lastSaledate: $ref: "#/components/schemas/UnknownJSONValue" allowMailing: type: boolean allowDataShare: type: boolean firstName: type: string lastName: type: string bankSortCode: $ref: "#/components/schemas/UnknownJSONValue" bankAccount: $ref: "#/components/schemas/UnknownJSONValue" bankAccountName: $ref: "#/components/schemas/UnknownJSONValue" correspondenceEmail: type: boolean correspondencePaper: type: boolean discountPercent: type: number format: double priceBand: type: integer balance: type: number format: double cC_001: $ref: "#/components/schemas/NullableString" cC_002: $ref: "#/components/schemas/NullableString" cC_003: $ref: "#/components/schemas/NullableString" cC_004: $ref: "#/components/schemas/NullableString" cC_005: $ref: "#/components/schemas/NullableString" cC_006: $ref: "#/components/schemas/NullableString" cC_007: $ref: "#/components/schemas/NullableString" cC_008: $ref: "#/components/schemas/NullableString" cC_009: $ref: "#/components/schemas/NullableString" cC_010: $ref: "#/components/schemas/NullableString" lastEditUser: type: string readOnly: true creationUser: type: string readOnly: true lastEditDevice: type: string readOnly: true creationDevice: type: string readOnly: true lastEditDate: $ref: "#/components/schemas/TimestampString" creationDate: $ref: "#/components/schemas/TimestampString" additionalProperties: true example: customerId: 00000000-0000-4000-8000-000000000003 customerCode: CUSTOMER-EXAMPLE-001 customerName: "" address: 123 Example Street city: Example City region: Example Province postalCode: A1A 1A1 country: Canada phoneNumber: +1-555-0100 faxNumber: +1-555-0101 emailAddress: ada.lovelace@example.com webSite: "" creditLimit: 0 notes: "" active: true customerType: Adult rewardsCollector: false rewardsNumber: "" rewardsValue: 65 firstSaledate: null lastSaledate: null allowMailing: true allowDataShare: false firstName: Ada lastName: Lovelace correspondenceEmail: false correspondencePaper: false discountPercent: 0 priceBand: 1 balance: 0 lastEditDate: "2020-08-21T12:47:18.177" creationDate: "2020-07-28T12:31:47.417" CustomerCreateRequest: type: object required: - Customers properties: Customers: type: array minItems: 1 writeOnly: true items: $ref: "#/components/schemas/CustomerCreateInput" additionalProperties: false example: Customers: - customerName: Example Company firstName: Grace lastName: Hopper address: 456 Sample Avenue city: Sample City region: ON postalCode: N2L 5V4 country: Canada phoneNumber: +1-555-0110 faxNumber: +1-555-0111 emailAddress: grace.hopper@example.com webSite: "" rewardsCollector: true allowMailing: true allowDataShare: true discountPercent: 10 notes: "" CustomerCreateInput: type: object required: - emailAddress properties: customerName: type: string firstName: type: string lastName: type: string address: type: string city: type: string region: type: string postalCode: type: string country: type: string phoneNumber: type: string faxNumber: type: string emailAddress: type: string format: email webSite: type: string rewardsCollector: type: boolean allowMailing: type: boolean allowDataShare: type: boolean discountPercent: type: number format: double notes: type: string additionalProperties: false CustomerUpdateRequest: type: object required: - Customers properties: Customers: type: array minItems: 1 writeOnly: true items: $ref: "#/components/schemas/CustomerUpdateInput" additionalProperties: false example: Customers: - LastName: Brown Region: NY CustomerUpdateInput: type: object description: | Partial customer update. The spreadsheet demonstrates `LastName` and `Region` with this casing and says other available fields must be discovered from a customer GET response, so unverified update fields remain open rather than being normalized or invented. properties: LastName: type: string Region: type: string additionalProperties: true GlobalCustomerListResponse: type: array description: | Wrapper shown by the global-customer spreadsheet sample. That sample is truncated immediately after `value`, so possible wrapper metadata is intentionally left open. items: $ref: "#/components/schemas/GlobalCustomerResponseEnvelope" example: - value: - active: true companyName: "" address: 456 Sample Avenue city: Sample City region: Example Province postalCode: N2L 5V4 country: "" phoneNumber: "" mobileNumber: "+1-555-0120" emailAddress: katherine.johnson@example.com rewardsValue: 656 firstName: Katherine lastName: Johnson totalGlobalSpend: 656 creationDate: "2018-11-20T11:50:34.727" creationDateUTC: "2018-11-20T16:50:30.61" lastEditDate: "2019-06-11T09:42:41.873" lastEditDateUTC: "2019-06-11T14:00:00.473" GlobalCustomerResponseEnvelope: type: object required: - value properties: value: type: array readOnly: true items: $ref: "#/components/schemas/GlobalCustomer" additionalProperties: true GlobalCustomer: type: object properties: active: type: boolean companyName: type: string address: type: string city: type: string region: type: string postalCode: type: string country: type: string phoneNumber: type: string mobileNumber: type: string emailAddress: type: string format: email rewardsValue: type: number format: double firstName: type: string lastName: type: string totalGlobalSpend: type: number format: double creationDate: $ref: "#/components/schemas/TimestampString" creationDateUTC: $ref: "#/components/schemas/TimestampString" lastEditDate: $ref: "#/components/schemas/TimestampString" lastEditDateUTC: $ref: "#/components/schemas/TimestampString" additionalProperties: true GlobalCustomerUpdateRequest: type: object required: - GlobalCustomers properties: GlobalCustomers: type: array minItems: 1 writeOnly: true items: $ref: "#/components/schemas/GlobalCustomerUpdateInput" additionalProperties: false example: GlobalCustomers: - PhoneNumber: +1-555-0130 firstName: Grace lastName: Hopper Region: ON FaxNumber: "" GlobalCustomerUpdateInput: type: object description: | Partial global-customer update. Only the fields and casing shown in the spreadsheet are named; the guide says the supported update set is limited but does not enumerate it. properties: PhoneNumber: type: string firstName: type: string lastName: type: string Region: type: string FaxNumber: type: string additionalProperties: true StoreListResponse: type: array items: $ref: "#/components/schemas/StoreResponseEnvelope" example: - value: - storeId: 00000000-0000-4000-8000-000000000004 storeCode: STORE-001 storeName: Example Store 001 address: 456 Sample Avenue city: Sample City region: ON postalCode: N2L 5E7 country: Canada phoneNumber: +1-555-0140 faxNumber: "" emailAddress: store-001@example.com webSite: https://example.com/stores/001 taxRateId: 00000000-0000-4000-8000-000000000005 vatTaxRateId: 00000000-0000-4000-8000-000000000005 currencyId: 00000000-0000-4000-8000-000000000006 priceListId: null active: true zoneAreaId: 00000000-0000-4000-8000-000000000007 lastEditDate: "2018-07-25T11:52:19.533" creationDate: "2014-03-10T08:08:13.633" creationDateUTC: null lastEditDateUTC: "2018-07-25T15:52:19.53" visibilityId: null formatters: [] contentTypes: [] declaredType: null statusCode: 200 StoreResponseEnvelope: type: object required: - value - statusCode properties: value: type: array readOnly: true items: $ref: "#/components/schemas/Store" formatters: type: array readOnly: true items: {} contentTypes: type: array readOnly: true items: {} declaredType: $ref: "#/components/schemas/UnknownJSONValue" statusCode: type: integer readOnly: true additionalProperties: true Store: type: object properties: storeId: $ref: "#/components/schemas/UUID" storeCode: type: string readOnly: true storeName: type: string address: type: string city: type: string region: type: string postalCode: type: string country: type: string phoneNumber: type: string faxNumber: type: string emailAddress: type: string format: email webSite: type: string taxRateId: $ref: "#/components/schemas/UUID" vatTaxRateId: $ref: "#/components/schemas/UUID" currencyId: $ref: "#/components/schemas/UUID" priceListId: $ref: "#/components/schemas/NullableUUID" active: type: boolean zoneAreaId: $ref: "#/components/schemas/NullableUUID" cC_001: $ref: "#/components/schemas/NullableString" cC_002: $ref: "#/components/schemas/NullableString" cC_003: $ref: "#/components/schemas/NullableString" cC_004: $ref: "#/components/schemas/NullableString" cC_005: $ref: "#/components/schemas/NullableString" cC_006: $ref: "#/components/schemas/NullableString" cC_007: $ref: "#/components/schemas/NullableString" cC_008: $ref: "#/components/schemas/NullableString" cC_009: $ref: "#/components/schemas/NullableString" cC_010: $ref: "#/components/schemas/NullableString" lastEditUser: type: string readOnly: true creationUser: type: string readOnly: true lastEditDevice: type: string readOnly: true creationDevice: type: string readOnly: true lastEditDate: $ref: "#/components/schemas/TimestampString" creationDate: $ref: "#/components/schemas/TimestampString" creationDateUTC: $ref: "#/components/schemas/NullableTimestampString" lastEditDateUTC: $ref: "#/components/schemas/NullableTimestampString" visibilityId: $ref: "#/components/schemas/UnknownJSONValue" additionalProperties: true CommitQuantityRequest: type: object required: - OrderedQuantities properties: OrderedQuantities: type: array minItems: 1 writeOnly: true items: $ref: "#/components/schemas/CommittedQuantityOrder" additionalProperties: false example: OrderedQuantities: - StoreCode: STORE-001 OrderNumber: ORDER-EXAMPLE-004 Items: - ProductCode: SKU-EXAMPLE-001 Quantity: "1" LineNumber: "1" - ProductCode: SKU-EXAMPLE-001 Quantity: "2" LineNumber: "2" - StoreCode: STORE-001 OrderNumber: ORDER-EXAMPLE-005 Items: - ProductCode: SKU-EXAMPLE-002 Quantity: "1" LineNumber: "1" CommittedQuantityOrder: type: object required: - StoreCode - OrderNumber - Items properties: StoreCode: type: string OrderNumber: type: string Items: type: array minItems: 1 items: $ref: "#/components/schemas/CommittedQuantityItem" additionalProperties: false CommittedQuantityItem: type: object required: - ProductCode - Quantity - LineNumber properties: ProductCode: type: string Quantity: allOf: - $ref: "#/components/schemas/DecimalString" description: Positive values commit stock; negative values reverse it. LineNumber: type: string additionalProperties: false CommitPointsRequest: type: object required: - CommittedPoints properties: CommittedPoints: type: array minItems: 1 writeOnly: true items: $ref: "#/components/schemas/CommittedPoints" additionalProperties: false CommittedPoints: type: object required: - StoreCode - OrderNumber - EmailAddress - Points properties: StoreCode: type: string OrderNumber: type: string EmailAddress: type: string format: email Points: type: integer description: | Negative values commit points and positive values reverse committed points according to guide version 1.4. Spreadsheet version 1.3 conflicts with this direction; provider confirmation is pending. additionalProperties: false SaleRequest: type: object required: - Sales properties: Sales: type: array minItems: 1 writeOnly: true items: $ref: "#/components/schemas/Sale" additionalProperties: false Sale: description: | A completed/refund sale or the special zero-total request used to cancel all inventory committed to an order. oneOf: - $ref: "#/components/schemas/CompletedSale" - $ref: "#/components/schemas/CommittedQuantityCancellation" CompletedSale: type: object required: - SaleDate - OrderNumber - StoreCode - SaleTotal - CustomerBillTo - Items - Taxes properties: SaleDate: $ref: "#/components/schemas/CompletedSaleDateString" OrderNumber: type: string description: Must be unique; refunds require a new order number. StoreCode: type: string SaleTotal: $ref: "#/components/schemas/DecimalString" OrderComment: type: string RewardPointsSpent: type: integer description: Omit when unused; use a negative value when refunding spent points. CustomerBillTo: $ref: "#/components/schemas/SaleBillingCustomer" CustomerShipTo: $ref: "#/components/schemas/SaleCustomer" Items: type: array minItems: 1 items: $ref: "#/components/schemas/SaleItem" Subtotal: $ref: "#/components/schemas/DecimalString" Discount: $ref: "#/components/schemas/SaleDiscount" Taxes: type: array items: $ref: "#/components/schemas/SaleTax" TaxTotal: $ref: "#/components/schemas/DecimalString" additionalProperties: false CommittedQuantityCancellation: type: object description: | Cancels all quantities committed to an order that will not be processed. The source guide requires a zero sale total and no completed-sale detail. required: - SaleDate - OrderNumber - StoreCode - SaleTotal properties: SaleDate: $ref: "#/components/schemas/SaleDateString" OrderNumber: type: string StoreCode: type: string SaleTotal: type: string enum: - "0.00" additionalProperties: false SaleCustomer: type: object properties: FirstName: type: string LastName: type: string CompanyName: type: string Address: type: string City: type: string Region: type: string Country: type: string PostalCode: type: string PhoneNumber: type: string FaxNumber: type: string EmailAddress: type: string format: email EmailVerified: type: string description: String flag shown as `1` by the supplied sale samples. OKToEmail: type: string description: String flag shown as `1` by the supplied sale samples. additionalProperties: false SaleBillingCustomer: allOf: - $ref: "#/components/schemas/SaleCustomer" - type: object required: - EmailAddress properties: EmailAddress: type: string format: email description: Billing customer; the API locates or creates this customer by email. SaleItem: type: object required: - ProductCode - Quantity - Description - UnitPrice - TaxName - TaxRate - TaxAmount - LineNumber properties: ProductCode: type: string Quantity: allOf: - $ref: "#/components/schemas/DecimalString" description: Use a negative quantity for a refund. Description: type: string UnitPrice: allOf: - $ref: "#/components/schemas/DecimalString" description: Discounted unit price when a line discount applies. TaxName: type: string description: Non-taxable items use `NONE`. TaxRate: $ref: "#/components/schemas/DecimalString" TaxAmount: allOf: - $ref: "#/components/schemas/DecimalString" description: Unrounded line tax; use a negative value for a refund. LineNumber: type: string SerialNumber: type: string description: Optional product serial number. additionalProperties: false SaleTax: type: object required: - TaxName - TaxRate - TaxTotal properties: TaxName: type: string TaxRate: $ref: "#/components/schemas/DecimalString" TaxTotal: allOf: - $ref: "#/components/schemas/DecimalString" description: Rounded tax total; use a negative value for a refund. additionalProperties: false SaleDiscount: type: object description: Sale-level discount that acts like a payment and does not change tax. required: - Amount - Name properties: Amount: type: number format: double Name: type: string additionalProperties: false example: Amount: -1 Name: General Discount