Ellipse Gradient for Header
Shopify POS logo

Shopify POS Integration Guide

Integrate Shopify POS data with enterprise systems through Shopify Admin GraphQL APIs, selected webhooks, bulk operations, and secure OAuth authentication.

Shopify POS integration options at a glance

Shopify POS data is represented in the broader Shopify store model and is primarily accessed through the Admin GraphQL API. New integrations should generally use GraphQL queries and mutations for products, orders, customers, inventory, locations, and fulfillment, while the legacy REST Admin API remains relevant for existing applications or specific migration scenarios. Shopify supports webhook notifications for selected events, HMAC verification, cursor-based pagination, and asynchronous GraphQL bulk operations for large datasets. Martini can consume these APIs, receive and validate webhook requests, schedule reconciliation workflows, transform data, and expose controlled APIs for POS extensions or downstream applications. OAuth 2.0, access scopes, and offline tokens support secure background processing.

Integration pointSupported by Shopify POS?Common use casesHow Martini supports it
GraphQL Admin APIYesPreferred for new integrations involving Products, ProductVariants, Orders, Customers, Locations, InventoryLevels, fulfillment workflows, mutations, and bulk operations.Martini can consume Shopify GraphQL APIs, store credentials securely, map typed responses, call mutations, and orchestrate multi-step workflows.
REST Admin APILegacySupports existing applications, migration scenarios, and resources or operations that have not yet moved to GraphQL.Martini can call Shopify REST endpoints where required, while new workflows should prefer GraphQL when the operation is available.
Webhooks and outbound callbacksLimitedSelected order, product, customer, inventory, fulfillment, app lifecycle, and shop update events can notify an HTTPS endpoint.Martini can expose an API or webhook workflow, validate Shopify HMAC signatures, acknowledge promptly, retrieve the current resource, and process events idempotently.
Bulk and asynchronous operationsYesUseful for initial product loads, historical order exports, customer synchronization, and large inventory reconciliation processes.Martini can start asynchronous GraphQL bulk operations, poll their status, retrieve results, transform batches, and record checkpoints.
File and media APIsLimitedProduct images and other supported Shopify files or media can be created or synchronized; these APIs are not a general-purpose POS attachment store.Martini can orchestrate Shopify file and staged-upload operations and map media metadata to a target catalog or content process.
AuthenticationYesOAuth 2.0, access scopes, online or offline access tokens, custom app credentials, and HMAC webhook verification support app and background integrations.Martini can manage environment-specific secrets, send authenticated API requests, apply least-privilege configuration, and validate signed webhook requests.
Database accessNoShopify does not expose direct merchant database or JDBC access for store data.Martini should use Shopify APIs, webhooks, bulk operations, and supported exports rather than attempting direct database connectivity.

How Shopify POS exposes data and business events

Shopify GraphQL Admin API

The GraphQL Admin API is Shopify’s preferred interface for new Admin API integrations. It provides typed queries and mutations for products, orders, customers, inventory, locations, fulfillment, and other store data, and supports selecting only the fields required by a workflow.

Martini implementation pattern

Martini implementation pattern: a workflow or API calls the versioned Shopify GraphQL endpoint with securely managed OAuth credentials, validates the response, maps the selected fields into a canonical model, and invokes downstream APIs or persistence steps. Reusable Martini workflows can encapsulate queries, mutations, pagination, and business rules.

Implementation sequence

Authenticate with a scoped Shopify access token
Call the versioned GraphQL Admin API
Process the response and GraphQL errors
Follow cursor pagination when more results exist
Map Shopify objects into the target model
Apply business rules and write downstream results

Shopify Webhooks

Shopify provides webhook topics for selected order, product, customer, inventory, fulfillment, app lifecycle, and shop update events. Coverage is not universal for every object or state transition, and requests include an HMAC signature for verification.

Martini implementation pattern

Martini implementation pattern: expose a controlled REST endpoint or webhook-processing workflow, verify the Shopify HMAC before accepting the notification, persist the resource identifier, and retrieve the current Shopify object through the Admin API. The workflow then applies idempotency, transformation, and downstream delivery rules.

Implementation sequence

Receive the Shopify HTTPS webhook request
Validate the Shopify HMAC signature
Persist the event and resource identifier
Retrieve the current Shopify resource
Apply idempotency and business rules
Write the result and acknowledge or retry processing

Shopify Bulk Operations

Shopify GraphQL bulk operations execute large queries or mutations asynchronously and make results available after completion. They are suited to historical orders, initial product catalogs, customer synchronization, and large inventory reconciliation.

Martini implementation pattern

Martini implementation pattern: start a bulk operation, store its operation identifier, poll its status with controlled scheduling, retrieve the completed result, process records in batches, and save checkpoints so a failed batch can be retried without repeating completed work.

Implementation sequence

Submit the Shopify bulk operation
Store the bulk operation identifier
Poll operation status on a schedule
Retrieve the completed result
Transform and write result batches
Persist checkpoints and reconcile failures

Shopify REST Admin API

The REST Admin API exposes resources including products, orders, customers, inventory, locations, and fulfillment, but Shopify identifies it as legacy for new public app development. It remains relevant to existing applications and selected migration scenarios.

Martini implementation pattern

Martini implementation pattern: use REST only where an existing integration or required operation depends on it, configure the endpoint and authentication by environment, follow applicable pagination behavior, and plan migration to GraphQL where Shopify provides equivalent functionality.

Implementation sequence

Identify the legacy REST operation required
Authenticate with the approved Shopify token
Call the versioned REST Admin endpoint
Follow response pagination links where applicable
Map the REST resource to the canonical model
Track migration or compatibility requirements

Shopify File and Media APIs

Shopify supports file and product media operations, including supported file creation and staged-upload use cases. These capabilities are relevant to catalog media synchronization but are not a general-purpose store for arbitrary POS transaction attachments.

Martini implementation pattern

Martini implementation pattern: retrieve or receive source media, validate supported file characteristics, call the applicable Shopify GraphQL file or media operation, and store the resulting Shopify identifiers and status for catalog synchronization.

Implementation sequence

Identify the product media to synchronize
Validate file metadata and source availability
Upload or create the supported Shopify file
Associate media with the product where required
Persist Shopify media identifiers
Retry failed media operations safely

Common Shopify POS integration patterns

Pattern 1: Synchronize POS orders and customers

When to use this pattern

Use this pattern when completed or updated Shopify POS purchases must be reflected in an ERP, finance platform, CRM, or customer-support application. Shopify webhooks provide notification for selected order events, while the Admin API remains the authoritative source for the complete order and related objects.

Integration direction
Shopify POS
Martini
NetSuite
Example Mapping
Shopify POS FieldCanonical FieldTarget Field
Order.idexternalOrderIdexternal order reference
Order.createdAtorderDatetransaction date
Order.totalPriceSetgrossAmountorder total
Customer.emailcustomerEmailemail address
Martini implementation pattern

Martini receives and verifies the webhook, retrieves the current Order with Customer, LineItems, Transactions, and Fulfillment data, then maps the result to the target model. It applies customer matching, financial-state rules, and idempotency using Shopify identifiers before writing downstream. Failed calls are retried with controlled backoff and sent to reconciliation when they remain unresolved.

Martini capabilities used
  • workflows
  • API consumption
  • webhook handling
  • data mapping
  • business rules
  • error handling

Pattern 2: Reconcile inventory across POS locations

When to use this pattern

Use this pattern when Shopify POS locations must share inventory with an ERP, warehouse, marketplace, or another commerce platform. Location-aware quantities and the distinction between available, committed, and unavailable stock must be defined before synchronization.

Integration direction
Shopify POS
Martini
NetSuite
Example Mapping
Shopify POS FieldCanonical FieldTarget Field
InventoryLevel.inventoryItem.idinventoryItemIditem identifier
InventoryLevel.location.idlocationIdwarehouse or store
InventoryLevel.availableavailableQuantityavailable stock
ProductVariant.skuskuitem SKU
Martini implementation pattern

A scheduled Martini workflow queries InventoryLevels with cursor pagination and supplements event-driven updates where available. It joins product, variant, inventory item, and location identifiers, applies ownership and quantity rules, writes changes to the target, and stores a watermark or checkpoint. Periodic reconciliation detects missed notifications and corrects drift.

Martini capabilities used
  • scheduled workflows
  • GraphQL API consumption
  • pagination
  • data transformation
  • conditional routing
  • durable state

Pattern 3: Synchronize catalog and prices

When to use this pattern

Use this pattern when products, variants, options, media, or prices must be synchronized between Shopify POS and an ERP, catalog platform, or marketplace. Bulk operations are appropriate for initial loads, while webhooks or timestamp-based reads support incremental changes where available.

Integration direction
NetSuite
Martini
Shopify POS
Example Mapping
Shopify POS FieldCanonical FieldTarget Field
Product.idproductIdShopify product identifier
ProductVariant.skuskuvariant SKU
ProductVariant.priceunitPriceprice
Product.optionsvariantOptionsoption values
Martini implementation pattern

Martini reads source catalog data, normalizes variants and option structures, validates required fields, and uses Shopify GraphQL mutations to create or update products. Initial or large synchronization can use bulk processing, while incremental workflows use selected notifications or scheduled reads. Validation failures are isolated and reported without stopping unrelated products.

Martini capabilities used
  • workflows
  • GraphQL API consumption
  • bulk orchestration
  • mapping
  • validation
  • retry handling

Pattern 4: Orchestrate a POS extension request

When to use this pattern

Use this pattern when a Shopify POS extension or related application needs a controlled service for customer eligibility, external inventory, fulfillment status, loyalty, returns, or another cross-system action. The extension interaction model and permissions remain governed by Shopify’s POS extension framework.

Integration direction
Shopify POS
Martini
Salesforce
Example Mapping
Shopify POS FieldCanonical FieldTarget Field
customer.idshopifyCustomerIdcustomer reference
order.idshopifyOrderIdorder reference
order.fulfillmentStatusfulfillmentStatusservice status
request.actionrequestedOperationworkflow route
Martini implementation pattern

Martini exposes a secured REST API, validates the incoming request, applies authorization and business rules, calls Shopify’s Admin GraphQL API and any downstream application APIs, and returns a normalized response. Correlation identifiers, timeouts, retries, and durable processing state protect the extension from duplicate or partial operations.

Martini capabilities used
  • API exposure
  • workflow orchestration
  • authentication and authorization
  • business rules
  • data mapping
  • error handling

Applications commonly integrated with Shopify POS

Shopify POS data can be coordinated with named finance, ERP, customer, fulfillment, support, and marketplace applications. These integrations typically combine Shopify APIs and webhook notifications with application-specific APIs, with Martini providing the workflow orchestration, mapping, validation, and operational controls.

Application Scenario Direction Martini Pattern
NetSuite Synchronize Shopify POS orders, products, customers, inventory, tax data, and fulfillment with ERP and financial processes. Shopify POS → Martini → NetSuite Martini receives Shopify order notifications or runs scheduled GraphQL synchronization, retrieves authoritative order and transaction data, maps it to NetSuite records, and applies idempotency and retry rules. Reverse workflows can publish approved products, prices, and inventory from NetSuite to Shopify.
Salesforce Associate POS purchases with customer profiles, account activity, campaigns, or service processes. Shopify POS → Martini → Salesforce A Martini workflow consumes Shopify Customers and Orders, normalizes identity and purchase data, applies matching rules, and writes customer activity to Salesforce. Salesforce-triggered lookups can call a Martini API to retrieve current Shopify order or fulfillment information.
Klaviyo Use customer, order, and product activity for marketing segmentation and lifecycle campaigns. Shopify POS → Martini → Klaviyo Martini consumes selected Shopify webhooks or scheduled changes, transforms Shopify customer and order structures into Klaviyo’s required event or profile model, and routes rejected or incomplete payloads for review.
ShipStation Send orders for fulfillment and return processing, then synchronize shipment status back to Shopify. Shopify POS → Martini → ShipStation → Shopify POS Martini retrieves eligible Shopify Orders, maps line items and addresses to ShipStation, records the external shipment identifier, and processes ShipStation status callbacks or scheduled reads to update Shopify fulfillment information.
Zendesk Provide support teams with Shopify customer, order, refund, and fulfillment context. Shopify POS → Martini → Zendesk Martini synchronizes Shopify customer and order changes into Zendesk context or ticket workflows. A Zendesk-triggered API request can invoke Martini to retrieve current Shopify information without copying every field into the support platform.
Amazon Seller Central Coordinate catalog, inventory, orders, and fulfillment information across Shopify and Amazon sales channels. Shopify POS → Martini → Amazon Seller Central Martini orchestrates bidirectional synchronization using Shopify GraphQL operations and Amazon’s applicable APIs, with explicit authority rules for products, inventory, and order status. Bulk processing and reconciliation workflows handle larger channel datasets.
QuickBooks Online Post sales, refunds, fees, and settlement information into accounting workflows. Shopify POS → Martini → QuickBooks Online Martini retrieves Shopify Orders and Transactions, applies merchant-specific accounting and tax rules, transforms them into QuickBooks Online structures, and maintains durable external identifiers for reconciliation and duplicate prevention.

How to build a Shopify POS integration in Martini

Objective

Establish Shopify access using the scopes and token type required by the workflow, with separate configuration for each store and environment.

Instructions in Martini

  • Configure Shopify OAuth 2.0 or approved custom-app credentials
  • Request only the product, order, customer, inventory, location, or fulfillment scopes required
  • Store tokens and shared webhook verification secrets in Martini environment configuration
  • Pin the Shopify API version used by each workflow

Objective

Select an event-driven, scheduled, or API-led entry point based on the required Shopify event coverage and processing latency.

Instructions in Martini

  • Use a Shopify webhook for a confirmed event topic
  • Expose a Martini API when an extension or external application initiates the process
  • Use a scheduler when no suitable webhook exists or when reconciliation is required
  • Treat webhook notifications as triggers rather than complete resource payloads

Objective

Read the authoritative Shopify resource and related objects required to complete the business process.

Instructions in Martini

  • Call the GraphQL Admin API for new integrations
  • Use REST only for existing or required legacy operations
  • Follow cursor pagination until all pages are processed
  • Use bulk operations for large initial loads or historical synchronization

Objective

Coordinate validation, enrichment, branching, downstream calls, and durable state in a maintainable Martini workflow.

Instructions in Martini

  • Validate webhook HMAC signatures before processing
  • Retrieve related Customers, Transactions, Fulfillments, InventoryLevels, or Locations as needed
  • Assign correlation identifiers and persist synchronization checkpoints
  • Route validation failures and downstream failures separately

Objective

Convert Shopify’s typed, location-aware, and sometimes nested data into the canonical model required by the target system.

Instructions in Martini

  • Map stable Shopify IDs to external keys
  • Normalize monetary, tax, discount, address, and timestamp fields
  • Separate Products, ProductVariants, InventoryLevels, and Locations
  • Represent order payment and fulfillment states without collapsing distinct semantics

Objective

Apply merchant-specific authority, privacy, accounting, inventory, and duplicate-prevention rules before writing data.

Instructions in Martini

  • Define which system owns products, prices, inventory, and fulfillment status
  • Use Order, Product, Customer, InventoryItem, Location, and Fulfillment IDs for idempotency
  • Request and process customer data only within approved access scopes
  • Validate required fields and isolate rejected records for review

Common Shopify POS data objects used in integrations

ObjectTypical UseCommon target systemsMartini handling
OrdersRepresent completed or partially completed purchases, line items, discounts, taxes, payments, refunds, and fulfillment information.NetSuite, Salesforce, QuickBooks Online, ShipStation, ZendeskMartini retrieves the authoritative Order after a notification, expands related data as needed, maps financial and fulfillment semantics, and uses the Shopify Order ID for idempotency.
ProductsDefine merchandise, product options, variants, media, and product status for the POS catalog.NetSuite, Amazon Seller Central, marketplaces, catalog platformsMartini queries or mutates Products and ProductVariants, transforms option and pricing structures, and uses bulk operations for initial loads or large reconciliations.
InventoryLevelRepresent quantity for an inventory item at a specific Shopify location.NetSuite, warehouse platforms, Amazon Seller Central, other commerce systemsMartini joins InventoryLevel data with InventoryItem and Location identifiers, applies quantity semantics and authority rules, and schedules reconciliation where events are incomplete.
LocationsIdentify physical stores, warehouses, and other inventory locations.NetSuite, warehouse platforms, reporting systemsMartini maps stable Location identifiers, validates location status and ownership, and uses locations to route inventory and fulfillment updates.
CustomersStore customer profiles, contact details, addresses, and purchase history associations.Salesforce, Klaviyo, Zendesk, NetSuite, QuickBooks OnlineMartini normalizes identity fields, applies matching and privacy rules, maps customer changes, and prevents duplicate downstream profiles.
TransactionsRepresent payment, authorization, capture, refund, and void activity associated with Orders.NetSuite, QuickBooks Online, finance and reconciliation platformsMartini processes Transactions separately from the parent Order where required, applies accounting rules, and preserves transaction identifiers for reconciliation.

Authentication and security considerations

OAuth and access scopes

Shopify supports OAuth 2.0 authorization for installed apps, with access scopes controlling permissions for products, orders, customers, inventory, locations, and fulfillment. Offline access tokens are suited to scheduled and background workflows, while online tokens are associated with user-context operations.

Secrets and webhook verification

Store Shopify tokens and application secrets in Martini environment configuration rather than workflow payloads. Shopify webhook requests include an HMAC value that Martini should validate before accepting or processing the notification.

Least privilege

  • Request only the Shopify scopes required by each integration.
  • Use encrypted transport for API and webhook traffic.
  • Restrict access to customer and order data and avoid unnecessary sensitive logging.
  • Separate credentials and configuration across stores, environments, and deployment stages.

Operational considerations for Shopify POS integrations

Rate limits and pagination

Shopify applies API usage limits: GraphQL usage is measured by query cost and REST uses request-based limits. Select only necessary fields, control concurrency, honor throttling guidance, use cursor pagination, and prefer bulk operations for large datasets.

Webhook reliability

Webhook delivery should be treated as at-least-once notification rather than a guaranteed single delivery. Acknowledge promptly after validation, retrieve the current resource through the API, persist event state, and run periodic reconciliation for delayed or missed events.

Versioning and schema changes

Pin Shopify API versions and test upgrades before deployment. GraphQL fields, mutations, enum values, and REST resources can evolve, so mappings should tolerate optional fields and record unknown or rejected values.

Data semantics and testing

  • Do not assume every POS action has a separate POS-only object or webhook.
  • Model Orders, Transactions, refunds, discounts, taxes, and Fulfillments separately where required.
  • Define inventory ownership and distinguish available, committed, and unavailable quantities.
  • Test duplicate webhooks, throttling, pagination boundaries, partial failures, and reconciliation scenarios.

Why use Martini instead of scripts or point-to-point integrations?

Orchestration instead of isolated scripts

Martini provides a maintainable workflow layer for combining Shopify APIs, webhook triggers, scheduled reconciliation, bulk processing, downstream APIs, and durable integration state. This avoids duplicating authentication, pagination, transformation, and retry logic across separate scripts.

Reusable integration assets

Teams can expose controlled APIs, reuse workflow logic, map Shopify objects to canonical models, and apply consistent validation and business rules across stores and target applications.

Operational control

  • Centralize error handling, retries, logging, checkpoints, and correlation identifiers.
  • Separate vendor capabilities from business-specific transformation and routing logic.
  • Support event-driven, scheduled, bulk, and API-led processing in one integration design.
  • Extend workflows with custom logic when Shopify data or downstream requirements need additional processing.

Frequently asked questions

How can Shopify POS be integrated with enterprise systems?

Shopify POS data is represented in the Shopify store and can be integrated through the Admin GraphQL API, selected webhook topics, asynchronous GraphQL bulk operations, and OAuth-based authentication. The legacy REST Admin API remains relevant for existing integrations or specific migration scenarios. Enterprise workflows commonly synchronize Orders, Customers, Products, InventoryLevel, Locations, Transactions, and Fulfillment data.

Can Martini integrate with Shopify POS?

Yes. Martini can consume Shopify’s Admin GraphQL API, use the legacy REST Admin API where required, receive and validate selected Shopify webhook notifications, run scheduled reconciliation workflows, process bulk operations, and expose APIs for POS extensions or related applications.

Do I need a connector to integrate Shopify POS with Martini?

No. A dedicated Shopify POS connector is not required. Martini can integrate using Shopify’s confirmed native mechanisms, including the Admin GraphQL API, legacy REST Admin API, webhook endpoints, bulk operations, OAuth 2.0 credentials, access scopes, and HMAC webhook verification.

Is there any extra Lonti cost to integrate Shopify POS with Martini?

Lonti does not charge an additional per-connector or per-vendor fee to integrate Shopify POS with Martini. The integration is subject to the provisioned capacity of the Martini environment. Separate costs may apply from Shopify, cloud infrastructure, or other third-party systems depending on subscription, usage, and deployment model.

Should a new Shopify POS integration use GraphQL or REST?

The Shopify GraphQL Admin API is the recommended choice for new integrations and supports typed queries, mutations, and bulk operations. Shopify identifies the REST Admin API as legacy for new public app development, although REST may remain necessary for an existing application or an operation not yet migrated.

Can Martini receive Shopify POS events and webhooks?

Martini can receive Shopify HTTPS webhook requests through an exposed API or webhook-processing workflow. Shopify provides topics for selected orders, products, customers, inventory, fulfillment, app lifecycle, and shop events, but coverage is not universal. The workflow should verify the HMAC, retrieve the current resource, and use scheduled polling or reconciliation when no suitable topic exists.

How does Martini synchronize Shopify POS data and prevent duplicates?

Martini can combine webhook triggers, GraphQL reads, cursor pagination, bulk operations, and scheduled reconciliation. Shopify identifiers such as Order ID, Product ID, Customer ID, InventoryItem ID, Location ID, and Fulfillment ID can serve as external keys. Durable processing state, checkpoints, validation, controlled retries, and idempotent writes help prevent duplicate downstream records.

Can Martini expose an API for a Shopify POS extension?

Yes. Martini can expose a secured REST API that a Shopify POS extension or related application can call. The API can validate requests, apply business rules, call Shopify Admin APIs and downstream systems, and return a normalized response. The extension’s supported interaction model and permissions remain governed by Shopify’s POS extension framework.