Squarespace · Authentication Profile

Squarespace Authentication

Authentication

Squarespace Commerce APIs accept two credential types over one wire format. Every request carries `Authorization: Bearer `, where the token is either a merchant-generated API key or an OAuth 2.0 access token. The published OpenAPI collapses both into a single `http bearer` scheme named `Authorization`, so the machine-readable contract cannot distinguish them — the split is documented only in prose, and it matters, because several behaviours differ by credential type (the Create Order rate limit, and the OAuth-only Webhook Subscriptions API).

Squarespace secures its APIs with http and oauth2 across 2 declared security schemes, as derived from its OpenAPI definitions.

CommerceE-CommerceMarketingPaymentsRetailWebsite BuilderWebhook
Methods: http, oauth2 Schemes: 2 OAuth flows: API key in:

Security Schemes

Authorization http
scheme: bearer
oauth2 oauth2

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
source: https://developers.squarespace.com/commerce-apis/authentication-and-permissions
docs: https://developers.squarespace.com/commerce-apis/authentication-and-permissions
derived_from:
  - openapi/squarespace-commerce-api-v2-openapi.json
  - openapi/squarespace-inventory-api-openapi.yml
  - openapi/squarespace-orders-api-openapi.yml
  - openapi/squarespace-products-api-openapi.yml
  - openapi/squarespace-profiles-api-openapi.yml
  - openapi/squarespace-site-api-openapi.yml
  - openapi/squarespace-transactions-api-openapi.yml
  - openapi/squarespace-webhook-subscriptions-api-openapi.yml
description: >-
  Squarespace Commerce APIs accept two credential types over one wire format. Every request carries
  `Authorization: Bearer <token>`, where the token is either a merchant-generated API key or an
  OAuth 2.0 access token. The published OpenAPI collapses both into a single `http bearer` scheme
  named `Authorization`, so the machine-readable contract cannot distinguish them — the split is
  documented only in prose, and it matters, because several behaviours differ by credential type
  (the Create Order rate limit, and the OAuth-only Webhook Subscriptions API).
summary:
  types:
    - http
    - oauth2
  machine_readable_types:
    - http
  note: >-
    oauth2 is fully documented but NOT declared in the OpenAPI. A tool reading only the spec will
    conclude Squarespace is bearer-token-only and will miss the entire Extensions/OAuth path.
schemes:
  - name: Authorization
    type: http
    scheme: bearer
    description: >-
      API key or OAuth access token. Documented header default in the reference is
      "Bearer YOUR_API_KEY_OR_OAUTH_TOKEN".
    sources:
      - openapi/squarespace-commerce-api-v2-openapi.json
      - openapi/squarespace-inventory-api-openapi.yml
      - openapi/squarespace-orders-api-openapi.yml
      - openapi/squarespace-products-api-openapi.yml
      - openapi/squarespace-profiles-api-openapi.yml
      - openapi/squarespace-site-api-openapi.yml
      - openapi/squarespace-transactions-api-openapi.yml
      - openapi/squarespace-webhook-subscriptions-api-openapi.yml
  - name: oauth2
    type: oauth2
    flow: authorizationCode
    declared_in_openapi: false
    authorizationUrl: https://login.squarespace.com/api/1/login/oauth/provider/authorize
    tokenUrl: https://login.squarespace.com/api/1/login/oauth/provider/tokens
    scopes_artifact: scopes/squarespace-scopes.yml
    description: >-
      OAuth 2.0 authorization code grant used by Squarespace Extensions. Client registration is
      manual and reviewed by Squarespace — there is no dynamic client registration and no
      self-service credential issuance for new clients beyond the registration form.
    sources:
      - https://developers.squarespace.com/oauth
credentials:
  - kind: api-key
    name: Developer API Key
    issuance: >-
      Self-service in the Squarespace admin: Settings > Advanced > Developer API Keys > GENERATE KEY.
      Requires the Squarespace Advanced (Commerce Advanced) plan.
    transport: Authorization Bearer header
    permission_model: >-
      Permission level (Read Only / Read and Write) selected per Commerce API at generation time.
      Permissions on an issued key CANNOT be modified — a new key must be generated.
    expiry: >-
      Keys never expire as long as the merchant site remains active. There is no documented rotation
      mechanism and no expiry-based forcing function.
    visibility: Shown once at generation; not retrievable afterwards.
    restrictions:
      - Not available for the Webhook Subscriptions API (OAuth only).
      - Subject to the stricter 100/hour Create Order limit that OAuth callers are exempt from.
    source: https://developers.squarespace.com/commerce-apis/authentication-and-permissions
  - kind: oauth-token
    name: OAuth 2.0 access token
    issuance: >-
      Authorization code grant after manual Squarespace review and issuance of client_id/client_secret.
    transport: Authorization Bearer header
    access_token_ttl: 30m
    refresh: grant_type=refresh_token, requires access_type=offline on the authorize call
    token_endpoint_auth: >-
      HTTP Basic — the client builds an Authorization header from its OAuth 2.0 credentials.
    permission_model: Comma-separated website.* scopes; see scopes/squarespace-scopes.yml
    restrictions:
      - Permissions cannot be changed on an existing grant; the merchant must re-initiate the connection.
    source: https://developers.squarespace.com/oauth
transport_requirements:
  - requirement: HTTPS only
    detail: All requests sent over HTTP instead of HTTPS are rejected.
  - requirement: User-Agent required
    detail: Requests without a User-Agent header are rejected; default client User-Agents may be rate-limited harder.
  - requirement: No CORS
    detail: >-
      Squarespace explicitly does not support browser-side calls and documents CORS as a security
      risk because it would expose the bearer token; a server-side proxy is the documented pattern.
    source: https://developers.squarespace.com/commerce-apis/faq
webhook_authentication:
  mechanism: HMAC-SHA256 request signature
  header: Squarespace-Signature
  secret: >-
    Returned only when creating a subscription or rotating a secret; a rotateSecret operation exists
    (POST /1.0/webhook_subscriptions/{subscriptionId}/actions/rotateSecret).
  source: https://developers.squarespace.com/webhooks/overview
auth_errors:
  - status: 401
    type: AUTHORIZATION_ERROR
    meaning: Missing Authorization header, or the token is invalid or expired.
  - status: 402
    type: WEBSITE_EXPIRED
    meaning: The website that owns the token is in an expired billing state.
  - status: 403
    subtype: MISSING_SCOPE / OAUTH_TOKEN_REQUIRED / FORBIDDEN_RESOURCE
    meaning: Token is valid but lacks the permission, or the endpoint requires OAuth rather than an API key.
gaps:
  - oauth2 is documented but absent from the OpenAPI securitySchemes.
  - No /.well-known/oauth-authorization-server or /.well-known/openid-configuration is served (404 on every host probed).
  - API keys never expire and have no documented rotation path.
evidence:
  - url: https://developers.squarespace.com/commerce-apis/authentication-and-permissions
    status: 200
  - url: https://developers.squarespace.com/oauth
    status: 200
  - url: https://developers.squarespace.com/commerce-apis/making-requests
    status: 200
  - url: https://www.squarespace.com/.well-known/oauth-authorization-server
    status: 404