LatticeStripe.Customer (LatticeStripe v0.2.0)

Copy Markdown View Source

Operations on Stripe Customer objects.

A Customer in Stripe represents a person or company you charge money from or send money to. Customers let you save payment methods, track charges, and associate subscriptions.

Usage

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

# Create a customer
{:ok, customer} = LatticeStripe.Customer.create(client, %{
  "email" => "user@example.com",
  "name" => "Jane Doe",
  "metadata" => %{"user_id" => "usr_123"}
})

# Retrieve a customer
{:ok, customer} = LatticeStripe.Customer.retrieve(client, customer.id)

# List customers with filters
{:ok, resp} = LatticeStripe.Customer.list(client, %{"limit" => "10"})
customers = resp.data.data  # [%Customer{}, ...]

# Search customers
{:ok, resp} = LatticeStripe.Customer.search(client, "email:'user@example.com'")

# Stream all customers lazily (auto-pagination)
client
|> LatticeStripe.Customer.stream!()
|> Stream.take(100)
|> Enum.each(&process_customer/1)

PII and Inspect

The Inspect implementation hides personally-identifiable information (email, name, phone, description, address, shipping). Only id, object, livemode, and deleted are shown in inspect output.

Stripe API Reference

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

Summary

Types

t()

A Stripe Customer object.

Functions

Deletes a Customer by ID.

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

Lists Customers with optional filters.

Retrieves a Customer by ID.

Searches Customers using Stripe's search query language.

Returns a lazy stream of all Customers matching the search query (auto-pagination).

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

Updates a Customer by ID.

Types

t()

@type t() :: %LatticeStripe.Customer{
  address: map() | nil,
  balance: integer() | nil,
  business_name: String.t() | nil,
  cash_balance: map() | nil,
  created: integer() | nil,
  currency: String.t() | nil,
  customer_account: map() | nil,
  default_source: String.t() | nil,
  deleted: boolean(),
  delinquent: boolean() | nil,
  description: String.t() | nil,
  discount: map() | nil,
  email: String.t() | nil,
  extra: map(),
  id: String.t() | nil,
  individual_name: String.t() | nil,
  invoice_credit_balance: map() | nil,
  invoice_prefix: String.t() | nil,
  invoice_settings: map() | nil,
  livemode: boolean() | nil,
  metadata: map() | nil,
  name: String.t() | nil,
  next_invoice_sequence: integer() | nil,
  object: String.t(),
  phone: String.t() | nil,
  preferred_locales: [String.t()] | nil,
  shipping: map() | nil,
  sources: map() | nil,
  subscriptions: map() | nil
}

A Stripe Customer object.

See the Stripe Customer 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 Customer.

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

Parameters

  • client - A %LatticeStripe.Client{} struct
  • params - Map of customer attributes (e.g., %{"email" => "...", "name" => "..."})
  • opts - Per-request overrides (e.g., [idempotency_key: "..."])

Returns

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

Example

{:ok, customer} = LatticeStripe.Customer.create(client, %{
  "email" => "user@example.com",
  "name" => "Jane Doe"
})

# Error handling
case LatticeStripe.Customer.create(client, %{"email" => "user@example.com"}) do
  {:ok, customer} -> customer.id
  {:error, %LatticeStripe.Error{type: :invalid_request_error} = err} -> handle_error(err)
  {:error, %LatticeStripe.Error{}} = err -> handle_error(err)
end

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 a Customer by ID.

Sends DELETE /v1/customers/:id and returns {:ok, %Customer{deleted: true}}.

Parameters

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

Returns

  • {:ok, %Customer{deleted: true}} 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()) :: t()

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

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

Example

customer = LatticeStripe.Customer.from_map(%{
  "id" => "cus_123",
  "email" => "user@example.com",
  "object" => "customer"
})

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

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

Lists Customers with optional filters.

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

Parameters

  • client - A %LatticeStripe.Client{} struct
  • params - Filter params (e.g., %{"limit" => "10", "email" => "user@example.com"})
  • opts - Per-request overrides

Returns

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

Example

{:ok, resp} = LatticeStripe.Customer.list(client, %{"limit" => "20"})
Enum.each(resp.data.data, &IO.inspect/1)

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 a Customer by ID.

Sends GET /v1/customers/:id and returns {:ok, %Customer{}}.

Parameters

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

Returns

  • {:ok, %Customer{}} 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.

search(client, query, opts \\ [])

Searches Customers using Stripe's search query language.

Sends GET /v1/customers/search with the query string and returns typed results. Note: search results have eventual consistency — newly created customers may not appear immediately.

Parameters

  • client - A %LatticeStripe.Client{} struct
  • query - Stripe search query string (e.g., "email:'user@example.com'")
  • opts - Per-request overrides

Returns

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

Example

{:ok, resp} = LatticeStripe.Customer.search(client, "email:'billing@company.com'")

search!(client, query, opts \\ [])

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

search_stream!(client, query, opts \\ [])

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

Returns a lazy stream of all Customers matching the search query (auto-pagination).

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

Parameters

  • client - A %LatticeStripe.Client{} struct
  • query - Stripe search query string
  • opts - Per-request overrides

Returns

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

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

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

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

Emits individual %Customer{} 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., %{"limit" => "100"})
  • opts - Per-request overrides

Returns

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

Example

client
|> LatticeStripe.Customer.stream!()
|> Stream.take(500)
|> Enum.to_list()

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

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

Updates a Customer by ID.

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

Parameters

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

Returns

  • {:ok, %Customer{}} 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.