orb-billing
Version:
The official TypeScript library for the Orb API
219 lines (194 loc) • 5.81 kB
text/typescript
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
import { APIResource } from '../core/resource';
import { APIPromise } from '../core/api-promise';
import { Page, type PageParams, PagePromise } from '../core/pagination';
import { RequestOptions } from '../internal/request-options';
import { path } from '../internal/utils/path';
/**
* The Item resource represents a sellable product or good. Items are associated with all line items, billable metrics,
* and prices and are used for defining external sync behavior for invoices and tax calculation purposes.
*/
export class Items extends APIResource {
/**
* This endpoint is used to create an [Item](/core-concepts#item).
*
* @example
* ```ts
* const item = await client.items.create({
* name: 'API requests',
* });
* ```
*/
create(body: ItemCreateParams, options?: RequestOptions): APIPromise<Item> {
return this._client.post('/items', { body, ...options });
}
/**
* This endpoint can be used to update properties on the Item.
*
* @example
* ```ts
* const item = await client.items.update('item_id');
* ```
*/
update(itemID: string, body: ItemUpdateParams, options?: RequestOptions): APIPromise<Item> {
return this._client.put(path`/items/${itemID}`, { body, ...options });
}
/**
* This endpoint returns a list of all Items, ordered in descending order by
* creation time.
*
* @example
* ```ts
* // Automatically fetches more pages as needed.
* for await (const item of client.items.list()) {
* // ...
* }
* ```
*/
list(
query: ItemListParams | null | undefined = {},
options?: RequestOptions,
): PagePromise<ItemsPage, Item> {
return this._client.getAPIList('/items', Page<Item>, { query, ...options });
}
/**
* Archive item
*
* @example
* ```ts
* const item = await client.items.archive('item_id');
* ```
*/
archive(itemID: string, options?: RequestOptions): APIPromise<Item> {
return this._client.post(path`/items/${itemID}/archive`, options);
}
/**
* This endpoint returns an item identified by its item_id.
*
* @example
* ```ts
* const item = await client.items.fetch('item_id');
* ```
*/
fetch(itemID: string, options?: RequestOptions): APIPromise<Item> {
return this._client.get(path`/items/${itemID}`, options);
}
}
export type ItemsPage = Page<Item>;
/**
* The Item resource represents a sellable product or good. Items are associated
* with all line items, billable metrics, and prices and are used for defining
* external sync behavior for invoices and tax calculation purposes.
*/
export interface Item {
/**
* The Orb-assigned unique identifier for the item.
*/
id: string;
/**
* The time at which the item was created.
*/
created_at: string;
/**
* A list of external connections for this item, used to sync with external
* invoicing and tax systems.
*/
external_connections: Array<Item.ExternalConnection>;
/**
* User specified key-value pairs for the resource. If not present, this defaults
* to an empty dictionary. Individual keys can be removed by setting the value to
* `null`, and the entire metadata mapping can be cleared by setting `metadata` to
* `null`.
*/
metadata: { [key: string]: string };
/**
* The name of the item.
*/
name: string;
/**
* The time at which the item was archived. If null, the item is not archived.
*/
archived_at?: string | null;
}
export namespace Item {
/**
* Represents a connection between an Item and an external system for invoicing or
* tax calculation purposes.
*/
export interface ExternalConnection {
/**
* The name of the external system this item is connected to.
*/
external_connection_name:
| 'stripe'
| 'quickbooks'
| 'bill.com'
| 'netsuite'
| 'taxjar'
| 'avalara'
| 'anrok'
| 'numeral'
| 'stripe_tax';
/**
* The identifier of this item in the external system.
*/
external_entity_id: string;
}
}
export interface ItemCreateParams {
/**
* The name of the item.
*/
name: string;
/**
* User-specified key/value pairs for the resource. Individual keys can be removed
* by setting the value to `null`, and the entire metadata mapping can be cleared
* by setting `metadata` to `null`.
*/
metadata?: { [key: string]: string | null } | null;
}
export interface ItemUpdateParams {
external_connections?: Array<ItemUpdateParams.ExternalConnection> | null;
/**
* User-specified key/value pairs for the resource. Individual keys can be removed
* by setting the value to `null`, and the entire metadata mapping can be cleared
* by setting `metadata` to `null`.
*/
metadata?: { [key: string]: string | null } | null;
name?: string | null;
}
export namespace ItemUpdateParams {
/**
* Represents a connection between an Item and an external system for invoicing or
* tax calculation purposes.
*/
export interface ExternalConnection {
/**
* The name of the external system this item is connected to.
*/
external_connection_name:
| 'stripe'
| 'quickbooks'
| 'bill.com'
| 'netsuite'
| 'taxjar'
| 'avalara'
| 'anrok'
| 'numeral'
| 'stripe_tax';
/**
* The identifier of this item in the external system.
*/
external_entity_id: string;
}
}
export interface ItemListParams extends PageParams {}
export declare namespace Items {
export {
type Item as Item,
type ItemsPage as ItemsPage,
type ItemCreateParams as ItemCreateParams,
type ItemUpdateParams as ItemUpdateParams,
type ItemListParams as ItemListParams,
};
}