orb-billing
Version:
The official TypeScript library for the Orb API
224 lines (190 loc) • 7.2 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 { Page, type PageParams } from '../../pagination';
/**
* A customer is a buyer of your products, and the other party to the billing relationship.
*
* In Orb, customers are assigned system generated identifiers automatically, but it's often desirable to have these
* match existing identifiers in your system. To avoid having to denormalize Orb ID information, you can pass in an
* `external_customer_id` with your own identifier. See
* [Customer ID Aliases](/events-and-metrics/customer-aliases) for further information about how these
* aliases work in Orb.
*
* In addition to having an identifier in your system, a customer may exist in a payment provider solution like
* Stripe. Use the `payment_provider_id` and the `payment_provider` enum field to express this mapping.
*
* A customer also has a timezone (from the standard [IANA timezone database](https://www.iana.org/time-zones)), which
* defaults to your account's timezone. See [Timezone localization](/essentials/timezones) for
* information on what this timezone parameter influences within Orb.
*/
export class BalanceTransactions extends APIResource {
/**
* Creates an immutable balance transaction that updates the customer's balance and
* returns back the newly created transaction.
*/
create(
customerId: string,
body: BalanceTransactionCreateParams,
options?: Core.RequestOptions,
): Core.APIPromise<BalanceTransactionCreateResponse> {
return this._client.post(`/customers/${customerId}/balance_transactions`, { body, ...options });
}
/**
* ## The customer balance
*
* The customer balance is an amount in the customer's currency, which Orb
* automatically applies to subsequent invoices. This balance can be adjusted
* manually via Orb's webapp on the customer details page. You can use this balance
* to provide a fixed mid-period credit to the customer. Commonly, this is done due
* to system downtime/SLA violation, or an adhoc adjustment discussed with the
* customer.
*
* If the balance is a positive value at the time of invoicing, it represents that
* the customer has credit that should be used to offset the amount due on the next
* issued invoice. In this case, Orb will automatically reduce the next invoice by
* the balance amount, and roll over any remaining balance if the invoice is fully
* discounted.
*
* If the balance is a negative value at the time of invoicing, Orb will increase
* the invoice's amount due with a positive adjustment, and reset the balance to 0.
*
* This endpoint retrieves all customer balance transactions in reverse
* chronological order for a single customer, providing a complete audit trail of
* all adjustments and invoice applications.
*/
list(
customerId: string,
query?: BalanceTransactionListParams,
options?: Core.RequestOptions,
): Core.PagePromise<BalanceTransactionListResponsesPage, BalanceTransactionListResponse>;
list(
customerId: string,
options?: Core.RequestOptions,
): Core.PagePromise<BalanceTransactionListResponsesPage, BalanceTransactionListResponse>;
list(
customerId: string,
query: BalanceTransactionListParams | Core.RequestOptions = {},
options?: Core.RequestOptions,
): Core.PagePromise<BalanceTransactionListResponsesPage, BalanceTransactionListResponse> {
if (isRequestOptions(query)) {
return this.list(customerId, {}, query);
}
return this._client.getAPIList(
`/customers/${customerId}/balance_transactions`,
BalanceTransactionListResponsesPage,
{ query, ...options },
);
}
}
export class BalanceTransactionListResponsesPage extends Page<BalanceTransactionListResponse> {}
export interface BalanceTransactionCreateResponse {
/**
* A unique id for this transaction.
*/
id: string;
action:
| 'applied_to_invoice'
| 'manual_adjustment'
| 'prorated_refund'
| 'revert_prorated_refund'
| 'return_from_voiding'
| 'credit_note_applied'
| 'credit_note_voided'
| 'overpayment_refund'
| 'external_payment'
| 'small_invoice_carryover';
/**
* The value of the amount changed in the transaction.
*/
amount: string;
/**
* The creation time of this transaction.
*/
created_at: string;
credit_note: Shared.CreditNoteTiny | null;
/**
* An optional description provided for manual customer balance adjustments.
*/
description: string | null;
/**
* The new value of the customer's balance prior to the transaction, in the
* customer's currency.
*/
ending_balance: string;
invoice: Shared.InvoiceTiny | null;
/**
* The original value of the customer's balance prior to the transaction, in the
* customer's currency.
*/
starting_balance: string;
type: 'increment' | 'decrement';
}
export interface BalanceTransactionListResponse {
/**
* A unique id for this transaction.
*/
id: string;
action:
| 'applied_to_invoice'
| 'manual_adjustment'
| 'prorated_refund'
| 'revert_prorated_refund'
| 'return_from_voiding'
| 'credit_note_applied'
| 'credit_note_voided'
| 'overpayment_refund'
| 'external_payment'
| 'small_invoice_carryover';
/**
* The value of the amount changed in the transaction.
*/
amount: string;
/**
* The creation time of this transaction.
*/
created_at: string;
credit_note: Shared.CreditNoteTiny | null;
/**
* An optional description provided for manual customer balance adjustments.
*/
description: string | null;
/**
* The new value of the customer's balance prior to the transaction, in the
* customer's currency.
*/
ending_balance: string;
invoice: Shared.InvoiceTiny | null;
/**
* The original value of the customer's balance prior to the transaction, in the
* customer's currency.
*/
starting_balance: string;
type: 'increment' | 'decrement';
}
export interface BalanceTransactionCreateParams {
amount: string;
type: 'increment' | 'decrement';
/**
* An optional description that can be specified around this entry.
*/
description?: string | null;
}
export interface BalanceTransactionListParams extends PageParams {
'operation_time[gt]'?: string | null;
'operation_time[gte]'?: string | null;
'operation_time[lt]'?: string | null;
'operation_time[lte]'?: string | null;
}
BalanceTransactions.BalanceTransactionListResponsesPage = BalanceTransactionListResponsesPage;
export declare namespace BalanceTransactions {
export {
type BalanceTransactionCreateResponse as BalanceTransactionCreateResponse,
type BalanceTransactionListResponse as BalanceTransactionListResponse,
BalanceTransactionListResponsesPage as BalanceTransactionListResponsesPage,
type BalanceTransactionCreateParams as BalanceTransactionCreateParams,
type BalanceTransactionListParams as BalanceTransactionListParams,
};
}