orb-billing
Version:
The official TypeScript library for the Orb API
171 lines (143 loc) • 5.85 kB
text/typescript
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
import { APIResource } from '../../resource';
import { isRequestOptions } from '../../core';
import * as Core from '../../core';
import * as Shared from '../shared';
import * as SubscriptionsAPI from './subscriptions';
import { SubscriptionListParams, Subscriptions } from './subscriptions';
import { Page, type PageParams } from '../../pagination';
/**
* A coupon represents a reusable discount configuration that can be applied either as a fixed or percentage amount to an invoice or subscription. Coupons are activated using a redemption code, which applies the discount to a subscription or invoice. The duration of a coupon determines how long it remains available for use by end users.
*/
export class Coupons extends APIResource {
subscriptions: SubscriptionsAPI.Subscriptions = new SubscriptionsAPI.Subscriptions(this._client);
/**
* This endpoint allows the creation of coupons, which can then be redeemed at
* subscription creation or plan change.
*/
create(body: CouponCreateParams, options?: Core.RequestOptions): Core.APIPromise<Coupon> {
return this._client.post('/coupons', { body, ...options });
}
/**
* This endpoint returns a list of all coupons for an account in a list format.
*
* The list of coupons is ordered starting from the most recently created coupon.
* The response also includes `pagination_metadata`, which lets the caller retrieve
* the next page of results if they exist. More information about pagination can be
* found in the Pagination-metadata schema.
*/
list(query?: CouponListParams, options?: Core.RequestOptions): Core.PagePromise<CouponsPage, Coupon>;
list(options?: Core.RequestOptions): Core.PagePromise<CouponsPage, Coupon>;
list(
query: CouponListParams | Core.RequestOptions = {},
options?: Core.RequestOptions,
): Core.PagePromise<CouponsPage, Coupon> {
if (isRequestOptions(query)) {
return this.list({}, query);
}
return this._client.getAPIList('/coupons', CouponsPage, { query, ...options });
}
/**
* This endpoint allows a coupon to be archived. Archived coupons can no longer be
* redeemed, and will be hidden from lists of active coupons. Additionally, once a
* coupon is archived, its redemption code can be reused for a different coupon.
*/
archive(couponId: string, options?: Core.RequestOptions): Core.APIPromise<Coupon> {
return this._client.post(`/coupons/${couponId}/archive`, options);
}
/**
* This endpoint retrieves a coupon by its ID. To fetch coupons by their redemption
* code, use the [List coupons](list-coupons) endpoint with the redemption_code
* parameter.
*/
fetch(couponId: string, options?: Core.RequestOptions): Core.APIPromise<Coupon> {
return this._client.get(`/coupons/${couponId}`, options);
}
}
export class CouponsPage extends Page<Coupon> {}
/**
* A coupon represents a reusable discount configuration that can be applied either
* as a fixed or percentage amount to an invoice or subscription. Coupons are
* activated using a redemption code, which applies the discount to a subscription
* or invoice. The duration of a coupon determines how long it remains available
* for use by end users.
*/
export interface Coupon {
/**
* Also referred to as coupon_id in this documentation.
*/
id: string;
/**
* An archived coupon can no longer be redeemed. Active coupons will have a value
* of null for `archived_at`; this field will be non-null for archived coupons.
*/
archived_at: string | null;
discount: Shared.PercentageDiscount | Shared.AmountDiscount;
/**
* This allows for a coupon's discount to apply for a limited time (determined in
* months); a `null` value here means "unlimited time".
*/
duration_in_months: number | null;
/**
* The maximum number of redemptions allowed for this coupon before it is
* exhausted; `null` here means "unlimited".
*/
max_redemptions: number | null;
/**
* This string can be used to redeem this coupon for a given subscription.
*/
redemption_code: string;
/**
* The number of times this coupon has been redeemed.
*/
times_redeemed: number;
}
export interface CouponCreateParams {
discount: CouponCreateParams.NewCouponPercentageDiscount | CouponCreateParams.NewCouponAmountDiscount;
/**
* This string can be used to redeem this coupon for a given subscription.
*/
redemption_code: string;
/**
* This allows for a coupon's discount to apply for a limited time (determined in
* months); a `null` value here means "unlimited time".
*/
duration_in_months?: number | null;
/**
* The maximum number of redemptions allowed for this coupon before it is
* exhausted;`null` here means "unlimited".
*/
max_redemptions?: number | null;
}
export namespace CouponCreateParams {
export interface NewCouponPercentageDiscount {
discount_type: 'percentage';
percentage_discount: number;
}
export interface NewCouponAmountDiscount {
amount_discount: string;
discount_type: 'amount';
}
}
export interface CouponListParams extends PageParams {
/**
* Filter to coupons matching this redemption code.
*/
redemption_code?: string | null;
/**
* Show archived coupons as well (by default, this endpoint only returns active
* coupons).
*/
show_archived?: boolean | null;
}
Coupons.CouponsPage = CouponsPage;
Coupons.Subscriptions = Subscriptions;
export declare namespace Coupons {
export {
type Coupon as Coupon,
CouponsPage as CouponsPage,
type CouponCreateParams as CouponCreateParams,
type CouponListParams as CouponListParams,
};
export { Subscriptions as Subscriptions, type SubscriptionListParams as SubscriptionListParams };
}