angelokh
angelokh

Reputation: 9428

Stripe preview invoice without an active subscription

Can we query Stripe with the subscription_items and a quantity to preview the incoming invoice without an active subscription with the Preview API https://api.stripe.com/v1/invoices/upcoming?

We tried to set subscription_items to preview an invoice without an active subscription. Its response contains a subscription and subscription_item. But when we query the subscription or subscription_item specifically, it threw an error Invalid subscription_item.

Eg, When calling /v1/invoices/upcoming with subscription_items

curl --location -g --request GET 'https://api.stripe.com/v1/invoices/upcoming?customer=cus_MIjwgFDqhg8uBf&subscription_items[0][price]=price_1LDx6JL3XoZTtiHnl5wAWtkg&subscription_items[0][quantity]=1' \
--header 'Authorization: Basic xxxxxx'
{
    "object": "invoice",
    "lines": {
        "object": "list",
        "data": [
            {
                "subscription": "sub_1LeoDVL3XoZTtiHn998jF9zp",
                "subscription_item": "si_MNZM3MetxDd9Gu"
            }
        ]
    }
}

Then when we query the subscription or subscription_item with /v1/subscription_items/si_MNZM3MetxDd9Gu, it shows Invalid subscription_item:

{
    "error": {
        "message": "Invalid subscription_item id: si_MNZM3MetxDd9Gu",
        "type": "invalid_request_error"
    }
}

Upvotes: 1

Views: 848

Answers (2)

trueinViso
trueinViso

Reputation: 1394

I also needed to be able to display a preview of a price for a new non-stripe user. It looks like Stripe has a resource called Quote that you can use for this purpose, customer ID is optional, i.e.:

quote = Stripe::Quote.create({ line_items: [{ price: "gateway_price_id" }] })

You can view the documentation for it here:

https://stripe.com/docs/api/quotes/create?lang=curl

Upvotes: 0

alex
alex

Reputation: 2784

When you are viewing an upcoming invoice, you are simply viewing a preview – the invoice and subscription has not yet been created. So you cannot query the subscription or subscription item in the response from the upcoming invoice API.

https://stripe.com/docs/api/invoices/upcoming does not require an active Subscription. subscription is an optional parameter. The Stripe docs mention :

The identifier of the subscription for which you’d like to retrieve the upcoming invoice. If not provided, but a subscription_items is provided, you will preview creating a subscription with those items....

The below Node.js example code previews creating a subscription :

const invoice = await stripe.invoices.retrieveUpcoming({
  customer: 'cus_...',
  subscription_items: [
    {
      price : `price_...`,
      quantity : 2
    }
  ]
});

Upvotes: 0

Related Questions