1. Follow the Quickstart guide

Follow the Quickstart guide to create a SaleSnip session.

2. Create a checkout session

Create a stripe coupon and checkout session from the SaleSnip negotiation session.

https://api.example.com/checkout
import Decimal from "decimal.js";
import Stripe from "stripe";
import axios from "axios";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, {
  apiVersion: "[YOUR_API_VERSION]",
});

const session = await axios.get(
  `https://api.salesnip.com/v1/sessions/${req.body.session}`,
  {
    headers: {
      "X-Api-Key": process.env.SALESNIP_API_KEY,
    },
  },
);

const totalDiscount = session.products.reduce((acc, product) => {
  const initial = new Decimal(product.price.initial);
  const current = new Decimal(product.price.current);

  return acc.plus(initial.minus(current));
}, new Decimal(0));

let coupon = null;

if (totalDiscount.gt(0)) {
  coupon = await stripe.coupons.create({
    name: `Negotiation Discount`,
    amount_off: totalDiscount.times(100).toNumber(),
    currency: session.currency.toLowerCase(),
    max_redemptions: 1,
  });
}

const checkout = await stripe.checkout.sessions.create({
  line_items: session.products.map((product) => ({
    price_data: {
      currency: session.currency.toLowerCase(),
      product_data: {
        name: product.name,
        images: [product.image],
      },
      unit_amount: product.price.current * 100,
      recurring: {
        interval: product.recurring.unit.toLowerCase(),
        interval_count: product.recurring.count,
      },
      // TODO: If you're using trial periods, you need to create the
      // subscriptions with stripe.subscriptions.create first and then
      // add the subscription id to the line items.
    },
    quantity: product.quantity.current,
  })),
  discounts: coupon ? [{ coupon: coupon.id }] : [],
  // Other options
});

res.status(200).json({ checkout: checkout.url });

3. Redirect the User

Call your checkout API route from the previous step and redirect the user to the checkout URL.