140 lines
3.0 KiB
Markdown
140 lines
3.0 KiB
Markdown
# Creem.io API Reference
|
|
|
|
## Checkout Sessions
|
|
|
|
### Create Checkout Session
|
|
|
|
```javascript
|
|
// POST /v1/checkout/sessions
|
|
const session = await creem.checkout.sessions.create({
|
|
product_id: 'prod_xxx',
|
|
success_url: 'https://example.com/success',
|
|
cancel_url: 'https://example.com/cancel',
|
|
customer_email: 'user@example.com', // Optional
|
|
metadata: { order_id: '123' } // Optional
|
|
});
|
|
// Returns: { url: 'https://checkout.creem.io/xxx', id: 'cs_xxx' }
|
|
```
|
|
|
|
## Products
|
|
|
|
### Create Product
|
|
|
|
```javascript
|
|
// POST /v1/products
|
|
const product = await creem.products.create({
|
|
name: 'Pro Plan',
|
|
description: 'Full access to all features',
|
|
price: 2900, // Amount in cents
|
|
currency: 'usd',
|
|
recurring: { // Optional - for subscriptions
|
|
interval: 'month',
|
|
interval_count: 1
|
|
}
|
|
});
|
|
```
|
|
|
|
### Retrieve Product
|
|
|
|
```javascript
|
|
// GET /v1/products/:id
|
|
const product = await creem.products.retrieve('prod_xxx');
|
|
```
|
|
|
|
## Transactions
|
|
|
|
### Retrieve Transaction
|
|
|
|
```javascript
|
|
// GET /v1/transactions/:id
|
|
const transaction = await creem.transactions.retrieve('txn_xxx');
|
|
```
|
|
|
|
### List Transactions
|
|
|
|
```javascript
|
|
// GET /v1/transactions
|
|
const transactions = await creem.transactions.list({
|
|
customer_id: 'cus_xxx', // Optional filter
|
|
product_id: 'prod_xxx', // Optional filter
|
|
status: 'completed', // Optional filter
|
|
limit: 25,
|
|
starting_after: 'txn_xxx' // Pagination cursor
|
|
});
|
|
```
|
|
|
|
## Customers
|
|
|
|
### Retrieve Customer
|
|
|
|
```javascript
|
|
// GET /v1/customers/:id
|
|
const customer = await creem.customers.retrieve('cus_xxx');
|
|
|
|
// GET /v1/customers/email/:email
|
|
const customer = await creem.customers.retrieveByEmail('user@example.com');
|
|
```
|
|
|
|
### List Customers
|
|
|
|
```javascript
|
|
// GET /v1/customers
|
|
const customers = await creem.customers.list({
|
|
limit: 25,
|
|
starting_after: 'cus_xxx'
|
|
});
|
|
```
|
|
|
|
### Generate Portal Link
|
|
|
|
```javascript
|
|
// POST /v1/customers/:id/portal
|
|
const portal = await creem.customers.createPortalSession('cus_xxx');
|
|
// Returns: { url: 'https://portal.creem.io/xxx' }
|
|
```
|
|
|
|
## Discount Codes
|
|
|
|
### Create Discount
|
|
|
|
```javascript
|
|
// POST /v1/discounts
|
|
const discount = await creem.discounts.create({
|
|
code: 'LAUNCH20',
|
|
type: 'percentage', // or 'fixed'
|
|
value: 20, // 20% or 20 cents
|
|
expires_at: '2024-12-31T23:59:59Z',
|
|
max_redemptions: 100 // Optional
|
|
});
|
|
```
|
|
|
|
### Retrieve Discount
|
|
|
|
```javascript
|
|
// GET /v1/discounts/:code
|
|
const discount = await creem.discounts.retrieve('LAUNCH20');
|
|
```
|
|
|
|
### Delete Discount
|
|
|
|
```javascript
|
|
// DELETE /v1/discounts/:code
|
|
await creem.discounts.delete('LAUNCH20');
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
```javascript
|
|
try {
|
|
const session = await creem.checkout.sessions.create({...});
|
|
} catch (error) {
|
|
if (error.type === 'invalid_request_error') {
|
|
console.error('Invalid parameters:', error.message);
|
|
} else if (error.type === 'authentication_error') {
|
|
console.error('Invalid API key');
|
|
} else if (error.type === 'rate_limit_error') {
|
|
console.error('Rate limited, retry after:', error.retry_after);
|
|
}
|
|
}
|
|
```
|