Fourthwall Memberships API
Platform API (BETA) for recurring memberships - list membership tiers, list members, and get an individual member. Subscription lifecycle changes are surfaced through webhooks (SUBSCRIPTION_PURCHASED / EXPIRED / CHANGED).
Platform API (BETA) for recurring memberships - list membership tiers, list members, and get an individual member. Subscription lifecycle changes are surfaced through webhooks (SUBSCRIPTION_PURCHASED / EXPIRED / CHANGED).
openapi: 3.1.0
info:
title: Fourthwall API
description: >-
Representative OpenAPI description of Fourthwall's public creator commerce
APIs. Fourthwall exposes two HTTP surfaces: a public Storefront API
(authenticated with a storefront token) for building headless shops, and a
Platform / Open API (authenticated with a shop API key via HTTP Basic Auth,
or OAuth 2.0 for multi-shop apps) for managing orders, products,
collections, promotions, gifting, memberships, and webhooks. This document
is a faithful, representative subset for cataloging; consult
https://docs.fourthwall.com for the complete, authoritative reference.
termsOfService: https://fourthwall.com/terms-of-service
contact:
name: Fourthwall
url: https://fourthwall.com
version: v1
servers:
- url: https://storefront-api.fourthwall.com
description: Storefront API (public storefront token)
- url: https://api.fourthwall.com
description: Platform / Open API (shop API key or OAuth)
tags:
- name: Storefront Products
- name: Storefront Collections
- name: Storefront Shop
- name: Storefront Carts
- name: Orders
- name: Products
- name: Collections
- name: Promotions
- name: Gifting
- name: Giveaways
- name: Memberships
- name: Webhooks
paths:
/v1/products/{slug}:
get:
operationId: getStorefrontProduct
tags:
- Storefront Products
summary: Get a product by slug
security:
- storefrontToken: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
- name: storefront_token
in: query
required: true
schema:
type: string
responses:
'200':
description: The product (offer).
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
/v1/collections:
get:
operationId: getStorefrontCollections
tags:
- Storefront Collections
summary: Get all collections
security:
- storefrontToken: []
parameters:
- name: storefront_token
in: query
required: true
schema:
type: string
responses:
'200':
description: A list of collections.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Collection'
/v1/collections/{slug}:
get:
operationId: getStorefrontCollection
tags:
- Storefront Collections
summary: Get a collection
security:
- storefrontToken: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
- name: storefront_token
in: query
required: true
schema:
type: string
responses:
'200':
description: The collection.
content:
application/json:
schema:
$ref: '#/components/schemas/Collection'
/v1/collections/{slug}/products:
get:
operationId: getStorefrontCollectionProducts
tags:
- Storefront Collections
summary: Get products (offers) in a collection
security:
- storefrontToken: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
- name: storefront_token
in: query
required: true
schema:
type: string
responses:
'200':
description: Products in the collection.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Product'
/v1/shop:
get:
operationId: getStorefrontShop
tags:
- Storefront Shop
summary: Get shop information
security:
- storefrontToken: []
parameters:
- name: storefront_token
in: query
required: true
schema:
type: string
responses:
'200':
description: Shop information.
content:
application/json:
schema:
$ref: '#/components/schemas/Shop'
/v1/carts:
post:
operationId: createCart
tags:
- Storefront Carts
summary: Create cart
security:
- storefrontToken: []
parameters:
- name: storefront_token
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CartCreateRequest'
responses:
'200':
description: The created cart.
content:
application/json:
schema:
$ref: '#/components/schemas/Cart'
/v1/carts/{cartId}:
get:
operationId: getCart
tags:
- Storefront Carts
summary: Get cart by id
security:
- storefrontToken: []
parameters:
- name: cartId
in: path
required: true
schema:
type: string
- name: storefront_token
in: query
required: true
schema:
type: string
responses:
'200':
description: The cart.
content:
application/json:
schema:
$ref: '#/components/schemas/Cart'
/v1/carts/{cartId}/add:
post:
operationId: addToCart
tags:
- Storefront Carts
summary: Add to cart
security:
- storefrontToken: []
parameters:
- name: cartId
in: path
required: true
schema:
type: string
- name: storefront_token
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CartItemsRequest'
responses:
'200':
description: The updated cart.
content:
application/json:
schema:
$ref: '#/components/schemas/Cart'
/v1/carts/{cartId}/change:
post:
operationId: changeCartItems
tags:
- Storefront Carts
summary: Change cart items quantity
security:
- storefrontToken: []
parameters:
- name: cartId
in: path
required: true
schema:
type: string
- name: storefront_token
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CartItemsRequest'
responses:
'200':
description: The updated cart.
content:
application/json:
schema:
$ref: '#/components/schemas/Cart'
/v1/carts/{cartId}/remove:
post:
operationId: removeFromCart
tags:
- Storefront Carts
summary: Remove from cart
security:
- storefrontToken: []
parameters:
- name: cartId
in: path
required: true
schema:
type: string
- name: storefront_token
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CartItemsRequest'
responses:
'200':
description: The updated cart.
content:
application/json:
schema:
$ref: '#/components/schemas/Cart'
/open-api/v1.0/order:
get:
operationId: getOrders
tags:
- Orders
summary: Get all orders
security:
- basicAuth: []
- oauth: [order_read]
responses:
'200':
description: A paginated list of orders.
content:
application/json:
schema:
$ref: '#/components/schemas/OrderList'
/open-api/v1.0/order/{orderId}:
get:
operationId: getOrder
tags:
- Orders
summary: Get order by id
security:
- basicAuth: []
- oauth: [order_read]
parameters:
- name: orderId
in: path
required: true
schema:
type: string
responses:
'200':
description: The order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
/open-api/v1.0/order/by-friendly-id/{friendlyId}:
get:
operationId: getOrderByFriendlyId
tags:
- Orders
summary: Get order by friendly id
security:
- basicAuth: []
- oauth: [order_read]
parameters:
- name: friendlyId
in: path
required: true
schema:
type: string
responses:
'200':
description: The order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
/open-api/v1.0/order/{orderId}/downloaded:
put:
operationId: markOrderDownloaded
tags:
- Orders
summary: Mark digital download as downloaded
security:
- basicAuth: []
- oauth: [order_write]
parameters:
- name: orderId
in: path
required: true
schema:
type: string
responses:
'200':
description: Updated.
/open-api/v1.0/products:
get:
operationId: getProducts
tags:
- Products
summary: Get all products (offers)
security:
- basicAuth: []
- oauth: [offer_read]
responses:
'200':
description: A paginated list of products.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Product'
post:
operationId: createProduct
tags:
- Products
summary: Create a product
security:
- basicAuth: []
- oauth: [offer_write]
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created product.
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
/open-api/v1.0/products/{productId}:
get:
operationId: getProduct
tags:
- Products
summary: Get product (offer) by id
security:
- basicAuth: []
- oauth: [offer_read]
parameters:
- name: productId
in: path
required: true
schema:
type: string
responses:
'200':
description: The product.
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
delete:
operationId: archiveProduct
tags:
- Products
summary: Archive a product (offer)
security:
- basicAuth: []
- oauth: [offer_write]
parameters:
- name: productId
in: path
required: true
schema:
type: string
responses:
'200':
description: Archived.
/open-api/v1.0/products/{productId}/inventory:
get:
operationId: getProductInventory
tags:
- Products
summary: Get product (offer) inventory by id
security:
- basicAuth: []
- oauth: [offer_read]
parameters:
- name: productId
in: path
required: true
schema:
type: string
responses:
'200':
description: Inventory levels.
/open-api/v1.0/collections:
get:
operationId: getCollections
tags:
- Collections
summary: Get all collections
security:
- basicAuth: []
- oauth: [offer_read]
responses:
'200':
description: A list of collections.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Collection'
post:
operationId: createCollection
tags:
- Collections
summary: Create a new collection
security:
- basicAuth: []
- oauth: [offer_write]
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created collection.
content:
application/json:
schema:
$ref: '#/components/schemas/Collection'
/open-api/v1.0/collections/{collectionIdOrSlug}:
get:
operationId: getCollectionByIdOrSlug
tags:
- Collections
summary: Get collection by ID or slug
security:
- basicAuth: []
- oauth: [offer_read]
parameters:
- name: collectionIdOrSlug
in: path
required: true
schema:
type: string
responses:
'200':
description: The collection.
content:
application/json:
schema:
$ref: '#/components/schemas/Collection'
/open-api/v1.0/collections/{collectionId}/products:
get:
operationId: getCollectionProducts
tags:
- Collections
summary: Get products in a collection
security:
- basicAuth: []
- oauth: [offer_read]
parameters:
- name: collectionId
in: path
required: true
schema:
type: string
responses:
'200':
description: Products in the collection.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Product'
put:
operationId: setCollectionProducts
tags:
- Collections
summary: Set collection products
security:
- basicAuth: []
- oauth: [offer_write]
parameters:
- name: collectionId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Updated.
/open-api/v1.0/promotions:
get:
operationId: getPromotions
tags:
- Promotions
summary: Get all promotions
security:
- basicAuth: []
- oauth: [promotions_read]
responses:
'200':
description: A list of promotions.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Promotion'
post:
operationId: createPromotion
tags:
- Promotions
summary: Create a promotion
security:
- basicAuth: []
- oauth: [promotions_write]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Promotion'
responses:
'200':
description: The created promotion.
content:
application/json:
schema:
$ref: '#/components/schemas/Promotion'
/open-api/v1.0/promotions/{promotionId}:
get:
operationId: getPromotion
tags:
- Promotions
summary: Get a promotion by id
security:
- basicAuth: []
- oauth: [promotions_read]
parameters:
- name: promotionId
in: path
required: true
schema:
type: string
responses:
'200':
description: The promotion.
content:
application/json:
schema:
$ref: '#/components/schemas/Promotion'
put:
operationId: updatePromotion
tags:
- Promotions
summary: Update a promotion
security:
- basicAuth: []
- oauth: [promotions_write]
parameters:
- name: promotionId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Promotion'
responses:
'200':
description: The updated promotion.
content:
application/json:
schema:
$ref: '#/components/schemas/Promotion'
/open-api/v1.0/gifting/config:
get:
operationId: getGiftingConfig
tags:
- Gifting
summary: Get gifting config
security:
- basicAuth: []
- oauth: [offer_read]
responses:
'200':
description: The gifting configuration.
put:
operationId: updateGiftingConfig
tags:
- Gifting
summary: Update gifting config
security:
- basicAuth: []
- oauth: [offer_write]
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Updated.
/open-api/v1.0/gifting/checkout:
post:
operationId: createGiftingCheckout
tags:
- Gifting
summary: Create a gifting checkout
security:
- basicAuth: []
- oauth: [offer_write]
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created gifting checkout.
/open-api/v1.0/gifting/draw/{id}:
get:
operationId: getGiftDraw
tags:
- Gifting
summary: Get draw
security:
- basicAuth: []
- oauth: [offer_read]
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: The draw.
/open-api/v1.0/gifting/draw/{id}/finish:
put:
operationId: finishGiftDraw
tags:
- Gifting
summary: Finish draw
security:
- basicAuth: []
- oauth: [offer_write]
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Finished.
/open-api/v1.0/giveaways/giveaways:
post:
operationId: createGiveaway
tags:
- Giveaways
summary: Create a new giveaway
security:
- basicAuth: []
- oauth: [giveaway_write]
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created giveaway.
/open-api/v1.0/memberships/tiers:
get:
operationId: listMembershipTiers
tags:
- Memberships
summary: List membership tiers
security:
- basicAuth: []
- oauth: [memberships_read]
responses:
'200':
description: A list of membership tiers.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/MembershipTier'
/open-api/v1.0/memberships/members:
get:
operationId: listMembers
tags:
- Memberships
summary: List members
security:
- basicAuth: []
- oauth: [memberships_read]
responses:
'200':
description: A list of members.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Member'
/open-api/v1.0/memberships/members/{id}:
get:
operationId: getMember
tags:
- Memberships
summary: Get member
security:
- basicAuth: []
- oauth: [memberships_read]
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: The member.
content:
application/json:
schema:
$ref: '#/components/schemas/Member'
/open-api/v1.0/webhooks:
get:
operationId: getWebhooks
tags:
- Webhooks
summary: Get webhooks
security:
- basicAuth: []
- oauth: [webhook_read]
responses:
'200':
description: A list of webhook configurations.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WebhookConfiguration'
post:
operationId: createWebhook
tags:
- Webhooks
summary: Create a webhook
security:
- basicAuth: []
- oauth: [webhook_write]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookConfigurationCreateRequest'
responses:
'200':
description: The created webhook configuration.
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookConfiguration'
/open-api/v1.0/webhooks/{webhookConfigurationId}:
get:
operationId: getWebhook
tags:
- Webhooks
summary: Get a webhook
security:
- basicAuth: []
- oauth: [webhook_read]
parameters:
- name: webhookConfigurationId
in: path
required: true
schema:
type: string
responses:
'200':
description: The webhook configuration.
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookConfiguration'
put:
operationId: updateWebhook
tags:
- Webhooks
summary: Update a webhook
security:
- basicAuth: []
- oauth: [webhook_write]
parameters:
- name: webhookConfigurationId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookConfigurationCreateRequest'
responses:
'200':
description: The updated webhook configuration.
delete:
operationId: deleteWebhook
tags:
- Webhooks
summary: Delete a webhook
security:
- basicAuth: []
- oauth: [webhook_write]
parameters:
- name: webhookConfigurationId
in: path
required: true
schema:
type: string
responses:
'204':
description: Deleted.
/open-api/v1.0/webhook-events:
get:
operationId: getWebhookEvents
tags:
- Webhooks
summary: Get webhook events
security:
- basicAuth: []
- oauth: [webhook_read]
responses:
'200':
description: A list of delivered webhook events.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WebhookEvent'
components:
securitySchemes:
storefrontToken:
type: apiKey
in: query
name: storefront_token
description: >-
Public storefront token obtained from Settings > For Developers, passed
as the storefront_token query parameter on Storefront API requests.
basicAuth:
type: http
scheme: basic
description: >-
Shop API key used with HTTP Basic Authentication against the Platform
(Open) API.
oauth:
type: oauth2
description: OAuth 2.0 for multi-shop platform apps.
flows:
authorizationCode:
authorizationUrl: https://auth.fourthwall.com/auth/realms/Fourthwall/protocol/openid-connect/auth
tokenUrl: https://api.fourthwall.com/open-api/v1.0/platform/token
scopes:
order_read: Read orders
order_write: Write orders and fulfillments
offer_read: Read products, collections, and gifting
offer_write: Write products, collections, and gifting
promotions_read: Read promotions
promotions_write: Write promotions
giveaway_read: Read giveaways
giveaway_write: Write giveaways
memberships_read: Read memberships
memberships_write: Write memberships
webhook_read: Read webhooks
webhook_write: Write webhooks
donation_read: Read donations
shop_read: Read shop information
schemas:
Shop:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
Product:
type: object
description: A Fourthwall product (offer).
properties:
id:
type: string
name:
type: string
slug:
type: string
description:
type: string
state:
type: string
variants:
type: array
items:
$ref: '#/components/schemas/Variant'
Variant:
type: object
properties:
id:
type: string
name:
type: string
sku:
type: string
price:
$ref: '#/components/schemas/Money'
Collection:
type: object
properties:
id:
type: string
name:
type: string
slug:
type: string
description:
type: string
Cart:
type: object
properties:
id:
type: string
items:
type: array
items:
$ref: '#/components/schemas/CartItem'
CartItem:
type: object
properties:
variantId:
type: string
quantity:
type: integer
CartCreateRequest:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/CartItem'
CartItemsRequest:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/CartItem'
Order:
type: object
properties:
id:
type: string
friendlyId:
type: string
status:
type: string
email:
type: string
total:
$ref: '#/components/schemas/Money'
OrderList:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/Order'
paging:
type: object
Promotion:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
status:
type: string
MembershipTier:
type: object
properties:
id:
type: string
name:
type: string
price:
$ref: '#/components/schemas/Money'
Member:
type: object
properties:
id:
type: string
email:
type: string
tierId:
type: string
status:
type: string
Money:
type: object
properties:
value:
type: number
currency:
type: string
WebhookConfiguration:
type: object
properties:
id:
type: string
url:
type: string
allowedTypes:
type: array
items:
$ref: '#/components/schemas/WebhookEventType'
WebhookConfigurationCreateRequest:
type: object
required:
- url
- allowedTypes
properties:
url:
type: string
allowedTypes:
type: array
items:
$ref: '#/components/schemas/WebhookEventType'
WebhookEvent:
type: object
properties:
id:
type: string
type:
$ref: '#/components/schemas/WebhookEventType'
payload:
type: object
WebhookEventType:
type: string
enum:
- ORDER_PLACED
- ORDER_UPDATED
- GIFT_PURCHASE
- PRODUCT_CREATED
- PRODUCT_UPDATED
- DONATION
- SUBSCRIPTION_PURCHASED
- SUBSCRIPTION_EXPIRED
- SUBSCRIPTION_CHANGED
- NEWSLETTER_SUBSCRIBED
- THANK_YOU_SENT
- GIFT_DRAW_STARTED
- GIFT_DRAW_ENDED
- PROMOTION_CREATED
- PROMOTION_UPDATED
- PROMOTION_STATUS_CHANGED
- PLATFORM_APP_DISCONNECTED
- MEMBERSHIP_POST_UPSERTED
- MEMBERSHIP_SERIES_UPSERTED
- MEMBERSHIP_SERIES_DELETED
- MEMBERSHIP_TAG_CREATED
- MEMBERSHIP_TAG_UPDATED
- MEMBERSHIP_TAG_DELETED
- MEMBERSHIP_TIER_UPSERTED
- MEMBERSHIP_TIER_DELETED
- COLLECTION_UPDATED
- CART_ABANDONED_1H
- CART_ABANDONED_24H
- CART_ABANDONED_72H