0

Send Invoice

by
Published Oct 30, 2023

Email an open invoice to the customer. In test mode no email is sent. Only for `send_invoice` collection.

Script stripe Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 2 hours ago
1
//native
2

3
/**
4
 * Send Invoice
5
 * Email an open invoice to the customer. In test mode no email is sent. Only for `send_invoice` collection.
6
 */
7
export async function main(auth: RT.Stripe, invoice_id: string) {
8
  const response = await fetch(
9
    `https://api.stripe.com/v1/invoices/${invoice_id}/send`,
10
    {
11
      method: "POST",
12
      headers: {
13
        Authorization: `Bearer ${auth.token}`,
14
        Accept: "application/json",
15
        "Stripe-Version": "2025-03-31.basil",
16
      },
17
    }
18
  )
19

20
  if (!response.ok) {
21
    throw new Error(`${response.status} ${await response.text()}`)
22
  }
23

24
  return await response.json()
25
}
26

Other submissions
  • Submitted by hugo697 Typescript (fetch-only)
    Created 528 days ago
    1
    type Stripe = {
    2
      token: string;
    3
    };
    4
    /**
    5
     * Post invoices invoice send
    6
     * Stripe will automatically send invoices to customers according to your subscriptions settings. However, if you’d like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email.
    7
    
    
    8
    Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event.
    9
     */
    10
    export async function main(
    11
      auth: Stripe,
    12
      invoice: string,
    13
      body: { expand?: string[] }
    14
    ) {
    15
      const url = new URL(`https://api.stripe.com/v1/invoices/${invoice}/send`);
    16
    
    
    17
      const response = await fetch(url, {
    18
        method: "POST",
    19
        headers: {
    20
          "Content-Type": "application/x-www-form-urlencoded",
    21
          Authorization: "Bearer " + auth.token,
    22
        },
    23
        body: encodeParams(body),
    24
      });
    25
      if (!response.ok) {
    26
        const text = await response.text();
    27
        throw new Error(`${response.status} ${text}`);
    28
      }
    29
      return await response.json();
    30
    }
    31
    
    
    32
    function encodeParams(o: any) {
    33
      function iter(o: any, path: string) {
    34
        if (Array.isArray(o)) {
    35
          o.forEach(function (a) {
    36
            iter(a, path + "[]");
    37
          });
    38
          return;
    39
        }
    40
        if (o !== null && typeof o === "object") {
    41
          Object.keys(o).forEach(function (k) {
    42
            iter(o[k], path + "[" + k + "]");
    43
          });
    44
          return;
    45
        }
    46
        data.push(path + "=" + o);
    47
      }
    48
      const data: string[] = [];
    49
      Object.keys(o).forEach(function (k) {
    50
        if (o[k] !== undefined) {
    51
          iter(o[k], k);
    52
        }
    53
      });
    54
      return new URLSearchParams(data.join("&"));
    55
    }
    56