LatticeStripe.InvoiceItem (LatticeStripe v1.7.5)

Copy Markdown View Source

Operations on Stripe InvoiceItem objects.

An InvoiceItem is a billable line that you create explicitly and attach to an invoice before it is finalized. InvoiceItems live at /v1/invoiceitems and are mutatable while the target invoice is in draft status.

InvoiceItem vs Invoice Line Item

InvoiceItem (this module) is a standalone resource you create explicitly at /v1/invoiceitems. Mutatable while the target invoice is in draft status.

Invoice Line Item (LatticeStripe.Invoice.LineItem) is a read-only rendered row on a finalized invoice, accessed via Invoice.list_line_items/4. Invoice line items have il_... IDs; InvoiceItems have ii_... IDs.

InvoiceItems can only be added to invoices in draft status. Once finalized, line items are locked.

Operations not supported by the Stripe API

  • search — The /v1/invoiceitems/search endpoint does not exist. Use list/2 with filters for discovery.

Usage

client = LatticeStripe.Client.new!(api_key: "sk_live_...", finch: MyApp.Finch)

# Create an InvoiceItem and attach it to a draft invoice
{:ok, item} = LatticeStripe.InvoiceItem.create(client, %{
  "customer" => "cus_123",
  "invoice" => "in_123",
  "amount" => 5000,
  "currency" => "usd",
  "description" => "Professional services"
})

# Retrieve an InvoiceItem
{:ok, item} = LatticeStripe.InvoiceItem.retrieve(client, item.id)

# List InvoiceItems for a customer
{:ok, resp} = LatticeStripe.InvoiceItem.list(client, %{"customer" => "cus_123"})

Stripe API Reference

See the Stripe InvoiceItem API for the full object reference and available parameters.

Summary

Types

t()

A Stripe InvoiceItem object.

Functions

Creates a new InvoiceItem.

Deletes an InvoiceItem by ID.

Converts a decoded Stripe API map to a %InvoiceItem{} struct.

Lists InvoiceItems with optional filters.

Retrieves an InvoiceItem by ID.

Returns a lazy stream of all InvoiceItems matching the given params (auto-pagination).

Updates an InvoiceItem by ID.

Types

t()

@type t() :: %LatticeStripe.InvoiceItem{
  amount: integer() | nil,
  currency: String.t() | nil,
  customer: LatticeStripe.Customer.t() | String.t() | nil,
  date: integer() | nil,
  deleted: boolean(),
  description: String.t() | nil,
  discountable: boolean() | nil,
  discounts: list() | nil,
  extra: map(),
  id: String.t() | nil,
  invoice: LatticeStripe.Invoice.t() | String.t() | nil,
  livemode: boolean() | nil,
  metadata: map() | nil,
  object: String.t(),
  period: LatticeStripe.InvoiceItem.Period.t() | nil,
  plan: map() | nil,
  price: map() | nil,
  proration: boolean() | nil,
  proration_details: map() | nil,
  quantity: integer() | nil,
  subscription: LatticeStripe.Subscription.t() | String.t() | nil,
  subscription_item: String.t() | nil,
  tax_rates: list() | nil,
  test_clock: String.t() | nil,
  unit_amount: integer() | nil,
  unit_amount_decimal: String.t() | nil,
  unit_amount_excluding_tax: String.t() | nil
}

A Stripe InvoiceItem object.

See the Stripe InvoiceItem API for field definitions.

Functions

create(client, params \\ %{}, opts \\ [])

@spec create(LatticeStripe.Client.t(), map(), keyword()) ::
  {:ok, t()} | {:error, LatticeStripe.Error.t()}

Creates a new InvoiceItem.

Sends POST /v1/invoiceitems with the given params and returns {:ok, %InvoiceItem{}}.

Only applicable to draft invoices. Once an invoice is finalized, its line items are locked.

Parameters

  • client - A %LatticeStripe.Client{} struct
  • params - Map of InvoiceItem attributes. Common params:
    • "customer" - Customer ID (required)
    • "amount" - Amount in smallest currency unit
    • "currency" - Three-letter ISO currency code
    • "invoice" - Invoice ID to attach to (must be in draft status)
    • "description" - Human-readable description
  • opts - Per-request overrides (e.g., [idempotency_key: "..."])

Returns

  • {:ok, %InvoiceItem{}} on success
  • {:error, %LatticeStripe.Error{}} on failure

create!(client, params \\ %{}, opts \\ [])

@spec create!(LatticeStripe.Client.t(), map(), keyword()) :: t()

Like create/3 but raises LatticeStripe.Error on failure.

delete(client, id, opts \\ [])

@spec delete(LatticeStripe.Client.t(), String.t(), keyword()) ::
  {:ok, t()} | {:error, LatticeStripe.Error.t()}

Deletes an InvoiceItem by ID.

Sends DELETE /v1/invoiceitems/:id and returns {:ok, %InvoiceItem{}}.

Only applicable to draft invoices. Once an invoice is finalized, its line items are locked.

Parameters

  • client - A %LatticeStripe.Client{} struct
  • id - The InvoiceItem ID string
  • opts - Per-request overrides

Returns

  • {:ok, %InvoiceItem{}} on success
  • {:error, %LatticeStripe.Error{}} on failure

delete!(client, id, opts \\ [])

@spec delete!(LatticeStripe.Client.t(), String.t(), keyword()) :: t()

Like delete/3 but raises LatticeStripe.Error on failure.

from_map(map)

@spec from_map(map() | nil) :: t() | nil

Converts a decoded Stripe API map to a %InvoiceItem{} struct.

Maps all known Stripe InvoiceItem fields. Any unrecognized fields are collected into the extra map so no data is silently lost.

Parses the period field into a %LatticeStripe.InvoiceItem.Period{} struct.

Example

item = LatticeStripe.InvoiceItem.from_map(%{
  "id" => "ii_123",
  "amount" => 5000,
  "currency" => "usd",
  "customer" => "cus_123",
  "object" => "invoiceitem"
})

list(client, params \\ %{}, opts \\ [])

@spec list(LatticeStripe.Client.t(), map(), keyword()) ::
  {:ok, LatticeStripe.Response.t()} | {:error, LatticeStripe.Error.t()}

Lists InvoiceItems with optional filters.

Sends GET /v1/invoiceitems and returns {:ok, %Response{data: %List{}}} with typed %InvoiceItem{} items.

Parameters

  • client - A %LatticeStripe.Client{} struct
  • params - Filter params (e.g., %{"customer" => "cus_123", "invoice" => "in_123"})
  • opts - Per-request overrides

Returns

  • {:ok, %Response{data: %List{data: [%InvoiceItem{}, ...]}}} on success
  • {:error, %LatticeStripe.Error{}} on failure

list!(client, params \\ %{}, opts \\ [])

Like list/3 but raises LatticeStripe.Error on failure.

retrieve(client, id, opts \\ [])

@spec retrieve(LatticeStripe.Client.t(), String.t(), keyword()) ::
  {:ok, t()} | {:error, LatticeStripe.Error.t()}

Retrieves an InvoiceItem by ID.

Sends GET /v1/invoiceitems/:id and returns {:ok, %InvoiceItem{}}.

Parameters

  • client - A %LatticeStripe.Client{} struct
  • id - The InvoiceItem ID string (e.g., "ii_123")
  • opts - Per-request overrides

Returns

  • {:ok, %InvoiceItem{}} on success
  • {:error, %LatticeStripe.Error{}} on failure

retrieve!(client, id, opts \\ [])

@spec retrieve!(LatticeStripe.Client.t(), String.t(), keyword()) :: t()

Like retrieve/3 but raises LatticeStripe.Error on failure.

stream!(client, params \\ %{}, opts \\ [])

@spec stream!(LatticeStripe.Client.t(), map(), keyword()) :: Enumerable.t()

Returns a lazy stream of all InvoiceItems matching the given params (auto-pagination).

Emits individual %InvoiceItem{} structs, fetching additional pages as needed. Raises LatticeStripe.Error if any page fetch fails.

Parameters

  • client - A %LatticeStripe.Client{} struct
  • params - Filter params (e.g., %{"customer" => "cus_123"})
  • opts - Per-request overrides

Returns

An Enumerable.t() of %InvoiceItem{} structs.

update(client, id, params, opts \\ [])

@spec update(LatticeStripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, t()} | {:error, LatticeStripe.Error.t()}

Updates an InvoiceItem by ID.

Sends POST /v1/invoiceitems/:id with the given params and returns {:ok, %InvoiceItem{}}.

Only applicable to draft invoices. Once an invoice is finalized, its line items are locked.

Parameters

  • client - A %LatticeStripe.Client{} struct
  • id - The InvoiceItem ID string
  • params - Map of fields to update
  • opts - Per-request overrides

Returns

  • {:ok, %InvoiceItem{}} on success
  • {:error, %LatticeStripe.Error{}} on failure

update!(client, id, params, opts \\ [])

@spec update!(LatticeStripe.Client.t(), String.t(), map(), keyword()) :: t()

Like update/4 but raises LatticeStripe.Error on failure.