Skip to main content
You can run magazine subscriptions in Firmhouse with the prepaid plans capabilities. This article describes how to set up typical magazine subscription setups where:
  • You have an edition coming out every 1 or 2 months, but people can pay annually. Or an edition comes out weekly and customers pay monthly or per 4 weeks.
  • You can set up delivery/shipment anchors so that orders are always generated on fixed days of the week, month, or year, regardless of when people start their subscription. The order will then always be generated on the billing moment, but the fulfillment date will be correctly set on any of the configured anchors.
  • You can add actual magazine edition SKUs to the future scheduled fulfillments and also show those in the Firmhouse account portal. This is done via API and Shopify Flow.

Enable the Prepaid plans feature

Before you can set up magazine subscriptions with prepaid plans, you need to enable this feature in your Firmhouse Portal:
  1. Log in to your Firmhouse Portal.
  2. Navigate to the New Features page from the main menu.
  3. Find the Prepaid plans toggle in the list of available features.
  4. Enable the toggle to activate prepaid plans for your project.
Once enabled, you will have access to the prepaid plan options when creating subscription plans.

Create a product for your magazine in Shopify

In Shopify, create a Product that can serve as the subscription product for your magazine subscription. Tag the product with FIRMHOUSE_SUBSCRIPTION as per our regular setup guides so that the product is synced to Firmhouse. For example you could have a product “Magazine” which has its own Product Detail Page, potentially with a different template in Shopify so you can make a distinct page from other products on your store. If you want to disable regular one time purchases for this project, you can do so after assigning it to a plan group (see next step). This way the product can then only be sold through a subscription.

Set up the magazine product, and subscription plans with delivery anchors

In the Firmhouse Portal, go to Plans and create a Plan Group and give it a name, such as “Magazine Subscription”. Through the Manage Products button, select the Magazine product you just created so that your magazine product is assigned to that plan group. Create a Plan in the Plan Group for each option you want to offer. For example:
  • Name: Annual
  • Pricing strategy: Fixed price
  • Fixed price: €96
  • Plan mode: Prepaid plan
  • Plan type: Recurring charge
  • Billing cycle:
    • Recurring charge moment: every 1 year
    • Delivery cycle: every 2 months
  • Prepaid commitment: Renew for the next billing cycle
In the Plan Anchors section add any delivery anchors that you want to set. If you have an edition of your magazine coming out every 2 months, and editions always go out on the 5th of the month, you can add the anchors:
  • 5 January
  • 5 March
  • 5 May
  • 5 July
  • 5 September
  • 5 November
This ensures that when someone signs up for their subscription, their orders are always “locked” to the anchors on this date. Optionally, you can set up a number of “cut off days”. For example, if you set that to 3 days it would mean that someone that signs up on the 3rd of January, would automatically get their first magazine the 5th of March. But if they sign up 30th of December, they would get their first magazine on January 5th.

Set up the Subscription Options theme block on your product detail page

In the Shopify theme editor, you can add the standard Subscription Options theme block from the Firmhouse app to your product page, to show the various plans you configured. Your customers can add a subscription option to their cart, and pay for their subscription via Shopify Checkout. For detailed instructions on adding the theme block, see the Quick install on Shopify guide.

What happens after Checkout: A scheduled order and fulfillment for each edition

When customers sign up for a prepaid subscription and you’ve set up a bunch of delivery anchors, then after Checkout Firmhouse and Shopify will automatically generate all the orders for the duration of the subscription period. So if someone signs up for the annual plan as configured in the above samples, Firmhouse will generate 6 scheduled orders and will put the fulfillment date on the appropriate delivery anchors, starting with the closest delivery anchor that was available, taking the cutoff days into account.

Scheduling the actual edition SKU on future orders

When checking out an annual subscription with a prepaid plan, Firmhouse and Shopify generate all the fulfillment up front. These fulfillments all have the “generic” magazine product SKU included that someone put in their cart at signup. If you work with actual edition SKUs that need to be shipped, then you’ll want to schedule those in the future as well. Either just in time before an order or fulfillment is due, or load up all future scheduled orders with the right edition SKUs (or placeholders of them) periodically or automatically whenever someone signs up for a subscription. The added benefit of pre-loading all scheduled orders/fulfillments for a subscription with (placeholder) SKUs is that they will also be visible in the Firmhouse Subscription Management Portal for your customers.

Update scheduled orders in Firmhouse with the right SKU

To update future scheduled orders with the appropriate SKU you can perform two steps via the Firmhouse API: First, fetch all the OrderLine objects from all scheduled orders in the Firmhouse API for a given date range:
curl https://portal.firmhouse.com/graphql \
-H "Content-Type: application/json" \
-H "X-Project-Access-Token: YOUR_PROJECT_ACCESS_TOKEN" \
-d '{"query": "
query GetScheduledOrderLineIds(
  $from: ISO8601Date!,
  $to: ISO8601Date!
) {
  orders(
    shipmentDateFrom: $from,
    shipmentDateTo: $to,
    first:50
  ) {
    pageInfo {
      hasNextPage
      endCursor
    }
    nodes {
      orderLines {
        id
      }
    }
  }
}
","variables":{"from":"2026-03-01","to":"2026-03-31"}}'
Then, per page of these results update all the returned order lines in bulk:
curl https://portal.firmhouse.com/graphql \
-H "Content-Type: application/json" \
-H "X-Project-Access-Token: YOUR_PROJECT_ACCESS_TOKEN" \
-d '{"query": "
mutation BulkUpdateOrderLines(
  $orderLines:[OrderLineUpdateInput!]!
) {
  bulkUpdateOrderLines(
    input:{ orderLines: $orderLines }
  ) {
    orderLines {
      id
      product {
        id
      }
    }
    errors {
      message
      attribute
    }
  }
}
","variables":{"orderLines":[{"id": "ORDER_LINE_ID_1","productId": "NEW_PRODUCT_ID"},{"id": "ORDER_LINE_ID_2","productId": "NEW_PRODUCT_ID"}]}}'

How the updated SKU gets added to Shopify orders

How the edition-specific SKU gets added to your Shopify fulfillment orders depends on the payment method used by your customers.

SEPA/Local Payment Method subscriptions (automatic)

For subscriptions paid via SEPA or other local payment methods, Firmhouse entirely manages the order creation. When a scheduled fulfillment is due, Firmhouse will generate an order in Shopify just in time on the fulfillment date, with the right specific edition SKU already included as an order line. No additional setup is required.

Native Shopify Subscriptions (Credit Card and PayPal)

For native Shopify Subscription contracts paid via Credit Card or PayPal, you need to set up a Shopify Flow to add the edition-specific SKU to the order when a fulfillment is ready. The Shopify Flow should include the following steps:
  1. Trigger on the “Fulfillment order ready to fulfill” event.
  2. Use the “Send HTTP request” action to call the Firmhouse GraphQL API with the getOrderBy query (see sample below) to look up the scheduled order and get the shopifyVariantId of the edition SKU.
  3. Use the “Add order line item” action (included in default Shopify functionality) to add the product with the shopifyVariantId at €0 price to the prepaid Order.
  4. Shopify will include the product on the FulfillmentOrder for your warehouse to pick.

Looking up the scheduled order by Shopify Fulfillment Order ID

When the “fulfillment order ready to fulfill” event fires in Shopify, you receive the Shopify Fulfillment Order ID. You can use this ID to look up the corresponding scheduled order in Firmhouse using the getOrderBy query:
curl https://portal.firmhouse.com/graphql \
-H "Content-Type: application/json" \
-H "X-Project-Access-Token: YOUR_PROJECT_ACCESS_TOKEN" \
-d '{"query": "
query GetOrderByShopifyFulfillmentOrderId(
  $shopifyFulfillmentOrderId: String!
) {
  getOrderBy(
    shopifyFulfillmentOrderId: $shopifyFulfillmentOrderId
  ) {
    id
    status
    shipmentDate
    orderLines {
      id
      product {
        id
        title
        sku
        shopifyVariantId
      }
    }
  }
}
","variables":{"shopifyFulfillmentOrderId":"gid://shopify/FulfillmentOrder/1234567890"}}'