Packages
stripity_stripe
3.0.0
3.3.2
3.3.1
3.2.0
3.1.1
3.1.0
3.0.0
2.17.3
2.17.2
2.17.1
2.17.0
2.16.0
2.15.1
2.15.0
2.14.1
2.14.0
2.13.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.3
2.2.2
2.2.1
2.2.0
2.1.0
2.0.1
2.0.0
2.0.0-alpha.11
2.0.0-alpha.10
2.0.0-alpha.9
2.0.0-alpha.8
2.0.0-alpha.7
2.0.0-alpha.6
2.0.0-alpha.5
2.0.0-alpha.4
2.0.0-alpha.3
2.0.0-alpha.2
2.0.0-alpha.1
1.6.2
1.6.1
1.6.0
1.4.0
1.3.0
1.2.0
1.1.0
0.5.0
0.4.0
0.3.0
0.2.0
A Stripe client for Elixir.
Current section
Files
Jump to
Current section
Files
lib/generated/coupon.ex
defmodule Stripe.Coupon do
use Stripe.Entity
@moduledoc "A coupon contains information about a percent-off or amount-off discount you\nmight want to apply to a customer. Coupons may be applied to [subscriptions](https://stripe.com/docs/api#subscriptions), [invoices](https://stripe.com/docs/api#invoices),\n[checkout sessions](https://stripe.com/docs/api/checkout/sessions), [quotes](https://stripe.com/docs/api#quotes), and more. Coupons do not work with conventional one-off [charges](https://stripe.com/docs/api#create_charge) or [payment intents](https://stripe.com/docs/api/payment_intents)."
(
defstruct [
:amount_off,
:applies_to,
:created,
:currency,
:currency_options,
:duration,
:duration_in_months,
:id,
:livemode,
:max_redemptions,
:metadata,
:name,
:object,
:percent_off,
:redeem_by,
:times_redeemed,
:valid
]
@typedoc "The `coupon` type.\n\n * `amount_off` Amount (in the `currency` specified) that will be taken off the subtotal of any invoices for this customer.\n * `applies_to` \n * `created` Time at which the object was created. Measured in seconds since the Unix epoch.\n * `currency` If `amount_off` has been set, the three-letter [ISO code for the currency](https://stripe.com/docs/currencies) of the amount to take off.\n * `currency_options` Coupons defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies).\n * `duration` One of `forever`, `once`, and `repeating`. Describes how long a customer who applies this coupon will get the discount.\n * `duration_in_months` If `duration` is `repeating`, the number of months the coupon applies. Null if coupon `duration` is `forever` or `once`.\n * `id` Unique identifier for the object.\n * `livemode` Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.\n * `max_redemptions` Maximum number of times this coupon can be redeemed, in total, across all customers, before it is no longer valid.\n * `metadata` Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.\n * `name` Name of the coupon displayed to customers on for instance invoices or receipts.\n * `object` String representing the object's type. Objects of the same type share the same value.\n * `percent_off` Percent that will be taken off the subtotal of any invoices for this customer for the duration of the coupon. For example, a coupon with percent_off of 50 will make a $ (or local equivalent)100 invoice $ (or local equivalent)50 instead.\n * `redeem_by` Date after which the coupon can no longer be redeemed.\n * `times_redeemed` Number of times this coupon has been applied to a customer.\n * `valid` Taking account of the above properties, whether this coupon can still be applied to a customer.\n"
@type t :: %__MODULE__{
amount_off: integer | nil,
applies_to: term,
created: integer,
currency: binary | nil,
currency_options: term,
duration: binary,
duration_in_months: integer | nil,
id: binary,
livemode: boolean,
max_redemptions: integer | nil,
metadata: term | nil,
name: binary | nil,
object: binary,
percent_off: term | nil,
redeem_by: integer | nil,
times_redeemed: integer,
valid: boolean
}
)
(
@typedoc "A hash containing directions for what this Coupon will apply discounts to."
@type applies_to :: %{optional(:products) => list(binary)}
)
(
@typedoc nil
@type created :: %{
optional(:gt) => integer,
optional(:gte) => integer,
optional(:lt) => integer,
optional(:lte) => integer
}
)
(
nil
@doc "<p>Returns a list of your coupons.</p>\n\n#### Details\n\n * Method: `get`\n * Path: `/v1/coupons`\n"
(
@spec list(
params :: %{
optional(:created) => created | integer,
optional(:ending_before) => binary,
optional(:expand) => list(binary),
optional(:limit) => integer,
optional(:starting_after) => binary
},
opts :: Keyword.t()
) ::
{:ok, Stripe.List.t(Stripe.Coupon.t())}
| {:error, Stripe.ApiErrors.t()}
| {:error, term()}
def list(params \\ %{}, opts \\ []) do
path = Stripe.OpenApi.Path.replace_path_params("/v1/coupons", [], [])
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:get)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>You can create coupons easily via the <a href=\"https://dashboard.stripe.com/coupons\">coupon management</a> page of the Stripe dashboard. Coupon creation is also accessible via the API if you need to create coupons on the fly.</p>\n\n<p>A coupon has either a <code>percent_off</code> or an <code>amount_off</code> and <code>currency</code>. If you set an <code>amount_off</code>, that amount will be subtracted from any invoice’s subtotal. For example, an invoice with a subtotal of <currency>100</currency> will have a final total of <currency>0</currency> if a coupon with an <code>amount_off</code> of <amount>200</amount> is applied to it and an invoice with a subtotal of <currency>300</currency> will have a final total of <currency>100</currency> if a coupon with an <code>amount_off</code> of <amount>200</amount> is applied to it.</p>\n\n#### Details\n\n * Method: `post`\n * Path: `/v1/coupons`\n"
(
@spec create(
params :: %{
optional(:amount_off) => integer,
optional(:applies_to) => applies_to,
optional(:currency) => binary,
optional(:currency_options) => map(),
optional(:duration) => :forever | :once | :repeating,
optional(:duration_in_months) => integer,
optional(:expand) => list(binary),
optional(:id) => binary,
optional(:max_redemptions) => integer,
optional(:metadata) => %{optional(binary) => binary} | binary,
optional(:name) => binary,
optional(:percent_off) => number,
optional(:redeem_by) => integer
},
opts :: Keyword.t()
) :: {:ok, Stripe.Coupon.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def create(params \\ %{}, opts \\ []) do
path = Stripe.OpenApi.Path.replace_path_params("/v1/coupons", [], [])
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:post)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>Retrieves the coupon with the given ID.</p>\n\n#### Details\n\n * Method: `get`\n * Path: `/v1/coupons/{coupon}`\n"
(
@spec retrieve(
coupon :: binary(),
params :: %{optional(:expand) => list(binary)},
opts :: Keyword.t()
) :: {:ok, Stripe.Coupon.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def retrieve(coupon, params \\ %{}, opts \\ []) do
path =
Stripe.OpenApi.Path.replace_path_params(
"/v1/coupons/{coupon}",
[
%OpenApiGen.Blueprint.Parameter{
in: "path",
name: "coupon",
required: true,
schema: %OpenApiGen.Blueprint.Parameter.Schema{
name: "coupon",
title: nil,
type: "string",
items: [],
properties: [],
any_of: []
}
}
],
[coupon]
)
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:get)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>Updates the metadata of a coupon. Other coupon details (currency, duration, amount_off) are, by design, not editable.</p>\n\n#### Details\n\n * Method: `post`\n * Path: `/v1/coupons/{coupon}`\n"
(
@spec update(
coupon :: binary(),
params :: %{
optional(:currency_options) => map(),
optional(:expand) => list(binary),
optional(:metadata) => %{optional(binary) => binary} | binary,
optional(:name) => binary
},
opts :: Keyword.t()
) :: {:ok, Stripe.Coupon.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def update(coupon, params \\ %{}, opts \\ []) do
path =
Stripe.OpenApi.Path.replace_path_params(
"/v1/coupons/{coupon}",
[
%OpenApiGen.Blueprint.Parameter{
in: "path",
name: "coupon",
required: true,
schema: %OpenApiGen.Blueprint.Parameter.Schema{
name: "coupon",
title: nil,
type: "string",
items: [],
properties: [],
any_of: []
}
}
],
[coupon]
)
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:post)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>You can delete coupons via the <a href=\"https://dashboard.stripe.com/coupons\">coupon management</a> page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can’t redeem the coupon. You can also delete coupons via the API.</p>\n\n#### Details\n\n * Method: `delete`\n * Path: `/v1/coupons/{coupon}`\n"
(
@spec delete(coupon :: binary(), opts :: Keyword.t()) ::
{:ok, Stripe.DeletedCoupon.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def delete(coupon, opts \\ []) do
path =
Stripe.OpenApi.Path.replace_path_params(
"/v1/coupons/{coupon}",
[
%OpenApiGen.Blueprint.Parameter{
in: "path",
name: "coupon",
required: true,
schema: %OpenApiGen.Blueprint.Parameter.Schema{
name: "coupon",
title: nil,
type: "string",
items: [],
properties: [],
any_of: []
}
}
],
[coupon]
)
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_method(:delete)
|> Stripe.Request.make_request()
end
)
)
end