---
title: "Get Shopify OAuth connect URL"
method: GET
path: "/v1/connect/shopify"
tags: ["Connect"]
---

# Get Shopify OAuth connect URL

`GET /v1/connect/shopify`

Initiate the Shopify OAuth flow for a store. Shopify is a connect-only
platform: the connected account does not publish social posts, it powers
the Blogs API (`/v1/accounts/{accountId}/blogs`). Returns an `authUrl`
to redirect the merchant to; after they approve the install, Shopify
redirects their browser to Zernio's callback, the account is created on
the profile (platform `shopify`), and the browser is redirected to
`redirect_url` (or the Zernio dashboard when omitted). Requested scopes
are `read_content` and `write_content` (content only; no customer or
order data). Connecting the same profile to a store again refreshes the
stored token in place.

## Query parameters

- `profileId` string, required
- `shop` string, required
- `redirect_url` string, uri

## Response `200`

OAuth authorization URL to redirect the merchant to

- object
  - `authUrl` string, uri — URL to redirect your user to for OAuth authorization
  - `state` string — State parameter for security (handled automatically)

## Other responses

- `400` — Invalid `profileId` format, `shop` is not a myshopify.com store domain, or `redirect_url` uses a script-executing scheme.
- `401` — Unauthorized
- `402` — Payment method or enterprise contract required. The authenticated account hit a billing gate before the connection could proceed. Three reasons: - `free_tier_exceeded`: the team has connected more accounts than the free tier allows. Add a payment method on the dashboard to continue (the user will be billed per additional connected account). - `twitter_passthrough`: connecting an X (Twitter) account requires a card on file from day one because X API calls incur real per-call pass-through costs. Applies to the 1st X account, not just the 3rd+. - `enterprise_required`: the team is on an enterprise contract with a negotiated connected-account cap and has reached it. Self-service teams have NO connection cap (the $1/account rate continues at any scale), so this reason can only fire for teams whose contract sets an explicit limit. `dashboard_url` deep-links to the enterprise contact page rather than the billing tab. The end-user already has a card on file; this gate is about contract terms, not card collection. SDK consumers should switch on `reason` to render the right prompt. For `free_tier_exceeded` and `twitter_passthrough`, redirect the end-user to `dashboard_url` to add a payment method via Zernio's hosted Stripe Setup Checkout. For `enterprise_required`, redirect to `dashboard_url` (the enterprise contact form) to adjust the contract's limit.
- `403` — API key does not have access to this profile.
- `404` — Profile not found or access denied.
- `500` — Shopify API not configured (missing credentials).

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/19fd2b70854e/schema)
