# `Stripe.Services.CreditNoteService`
[🔗](https://github.com/jeffhuen/tiger_stripe/blob/main/lib/stripe/services/credit_note_service.ex#L2)

CreditNote

Issue a credit note to adjust an invoice's amount after the invoice is finalized.

Related guide: [Credit notes](https://docs.stripe.com/billing/invoices/credit-notes)

# `create`

```elixir
@spec create(Stripe.Client.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Create a credit note

Issue a credit note to adjust the amount of a finalized invoice. A credit note will first reduce the invoice’s `amount_remaining` (and `amount_due`), but not below zero.
This amount is indicated by the credit note’s `pre_payment_amount`. The excess amount is indicated by `post_payment_amount`, and it can result in any combination of the following:

* Refunds: create a new refund (using `refund_amount`) or link existing refunds (using `refunds`).
* Customer balance credit: credit the customer’s balance (using `credit_amount`) which will be automatically applied to their next invoice when it’s finalized.
* Outside of Stripe credit: record the amount that is or will be credited outside of Stripe (using `out_of_band_amount`).

The sum of refunds, customer balance credits, and outside of Stripe credits must equal the `post_payment_amount`.

You may issue multiple credit notes for an invoice. Each credit note may increment the invoice’s `pre_payment_credit_notes_amount`,
`post_payment_credit_notes_amount`, or both, depending on the invoice’s `amount_remaining` at the time of credit note creation.

# `list`

```elixir
@spec list(Stripe.Client.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

List all credit notes

Returns a list of credit notes.

# `preview`

```elixir
@spec preview(Stripe.Client.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Preview a credit note

Get a preview of a credit note without creating it.

# `retrieve`

```elixir
@spec retrieve(Stripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Retrieve a credit note

Retrieves the credit note object with the given identifier.

# `update`

```elixir
@spec update(Stripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Update a credit note

Updates an existing credit note.

# `void_credit_note`

```elixir
@spec void_credit_note(Stripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Void a credit note

Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
