Skip to content

Retrieving subscriptions ​

Sails Pay provides methods to retrieve and inspect subscription details from your payment provider.

Adapter support

Getting a subscription ​

The sails.pay.subscription.get() method retrieves details about a specific subscription by its ID.

Basic usage ​

js
const subscription = await sails.pay.subscription.get({
  id: '12345'
})

The method returns the full subscription object from the payment provider.

Example in an action ​

Here's a complete example using Actions2:

js
module.exports = {
  friendlyName: 'Get subscription',

  description: 'Retrieve subscription details by ID.',

  inputs: {
    subscriptionId: {
      type: 'string',
      required: true,
      description: 'The subscription ID to retrieve.'
    }
  },

  exits: {
    success: {
      description: 'Subscription details retrieved successfully.'
    },
    notFound: {
      description: 'Subscription not found.',
      responseType: 'notFound'
    }
  },

  fn: async function ({ subscriptionId }) {
    try {
      const subscription = await sails.pay.subscription.get({
        id: subscriptionId
      })

      return subscription
    } catch (error) {
      sails.log.error('Error retrieving subscription:', error)
      throw 'notFound'
    }
  }
}

Parameters ​

ParameterTypeRequiredDescription
idStringYesThe ID of the subscription to get
apiKeyStringNoOverride the configured API key

Response ​

The response contains the full subscription object from Lemon Squeezy. Here's an example of the data structure:

js
{
  data: {
    type: 'subscriptions',
    id: '12345',
    attributes: {
      store_id: 1,
      customer_id: 1,
      order_id: 1,
      order_item_id: 1,
      product_id: 1,
      variant_id: 1,
      product_name: 'Pro Plan',
      variant_name: 'Monthly',
      user_name: 'John Doe',
      user_email: '[email protected]',
      status: 'active',
      status_formatted: 'Active',
      card_brand: 'visa',
      card_last_four: '4242',
      pause: null,
      cancelled: false,
      trial_ends_at: null,
      billing_anchor: 1,
      renews_at: '2024-02-01T00:00:00.000000Z',
      ends_at: null,
      created_at: '2024-01-01T00:00:00.000000Z',
      updated_at: '2024-01-01T00:00:00.000000Z',
      test_mode: false
    }
  }
}

Common use cases ​

Check subscription status ​

js
module.exports = {
  friendlyName: 'Check subscription status',

  inputs: {
    subscriptionId: {
      type: 'string',
      required: true
    }
  },

  exits: {
    success: {
      description: 'Returns the subscription status.'
    }
  },

  fn: async function ({ subscriptionId }) {
    const subscription = await sails.pay.subscription.get({
      id: subscriptionId
    })

    const status = subscription.data.attributes.status

    return {
      isActive: status === 'active',
      status,
      renewsAt: subscription.data.attributes.renews_at
    }
  }
}

Verify user has active subscription ​

js
module.exports = {
  friendlyName: 'Verify subscription',

  description: 'Check if a user has an active subscription.',

  inputs: {
    userId: {
      type: 'number',
      required: true
    }
  },

  exits: {
    success: {
      description: 'Returns subscription verification result.'
    }
  },

  fn: async function ({ userId }) {
    // Get the user's subscription ID from your database
    const user = await User.findOne({ id: userId })

    if (!user.subscriptionId) {
      return { hasActiveSubscription: false }
    }

    try {
      const subscription = await sails.pay.subscription.get({
        id: user.subscriptionId
      })

      const status = subscription.data.attributes.status
      const isActive = ['active', 'on_trial'].includes(status)

      return {
        hasActiveSubscription: isActive,
        status,
        plan: subscription.data.attributes.variant_name
      }
    } catch (error) {
      sails.log.error('Subscription check failed:', error)
      return { hasActiveSubscription: false }
    }
  }
}

Additional resources ​

All open source projects are released under the MIT License.