# Introduction (/docs)
PayNowPro is a modern, developer-focused payment platform built by the team at
[Particular Presence Technologies](https://particularpresence.com/) to simplify online commerce for businesses across the Caribbean.
It provides a powerful and intuitive REST API that serves as a modern layer on top of the robust
[Powertranz](https://powertranz.com/) (Formerly known as First Atlantic Commerce (FAC)) payment gateway.
Our platform offers a comprehensive suite of tools to handle everything from one-time charges using
our Payment Intents API to complex recurring billing with our automated Subscriptions engine.
As a team based in Jamaica, our mission is to empower regional businesses with world-class tools.
PayNowPro abstracts away the complexities of direct gateway integration, letting you focus on building
your application and growing your business instead of reinventing the wheel.
***
## AI tooling
### LLMs.txt
PayNowPro exposes an `LLMs.txt` that helps AI models understand how to integrate and interact with your application.
{/* TODO: Update with production DNS */}
See it at [https://paynowpro.com/llms-full.txt](/llms-full.txt).
# Pagination (/docs/api/pagination)
All top-level API resources that return a list of objects, such as `GET /customers` or `GET /products`, are paginated. Pagination helps you manage large sets of data by returning them in smaller, more manageable chunks.
PayNowPro uses **cursor-based pagination**, which is a highly efficient method for browsing large datasets.
## Query Parameters
You can control pagination for list endpoints using the following query parameters.
* **limit** `integer`
Controls the maximum number of items returned in a single response.
* **Default:** `10`
* **Maximum:** `100`
* **cursor** `string`
The pagination cursor used to fetch the next page of results. The cursor is an opaque, base64 encoded string that points to the next item in the dataset. You should not attempt to construct or interpret this string yourself.
* **order** `string`
Determines the sort order of the results.
* **Values:** `asc` for ascending, `desc` for descending.
* **Default:** `desc` (newest items first).
***
## How It Works: An Example
Let's walk through an example of fetching a list of customers, two at a time.
### 1. The Initial Request
To get the first page of results, you make a request to the list endpoint. You can optionally include a `limit`.
```bash
curl "https://api.paynowpro.com/api/v1/customers?limit=2&tenantAlias=YOUR_TENANT_ALIAS" \
-H "api-key: YOUR_API_KEY"
```
### 2. The First Response
The API will return a list of customers in the `data` array. If there are more customers to fetch, the response will
also include a `nextCursor` field.
```json
{
"data": [
{
"id": "cust_abc123",
"firstName": "John",
"createdAt": "2025-10-10T12:00:00.000Z"
},
{
"id": "cust_def456",
"firstName": "Jane",
"createdAt": "2025-10-09T11:00:00.000Z"
}
],
"nextCursor": "eyJsYXN0S2V5Ijp7InBrIjoiVEVOQU5UI0...="
}
```
### 3. Fetching the Next Page
To fetch the next page, take the value from the `nextCursor` field and use it as the `cursor` parameter in your next request.
```bash
curl "https://api.paynowpro.com/api/v1/customers?limit=2&cursor=eyJsYXN0S2V5Ijp7InBrIjoiVEVOQU5UI0...%3D&tenantAlias=YOUR_TENANT_ALIAS" \
-H "api-key: YOUR_API_KEY"
```
Note: Remember to URL-encode the cursor string when using it in a URL.
### 4. The Final page
You continue this process until you receive a response where the `nextCursor` field is `null`. This indicates that you
have reached the end of the list and there are no more pages to fetch.
```json
{
"data": [
{
"id": "cust_xyz789",
"firstName": "Peter",
"createdAt": "2025-10-08T10:00:00.000Z"
}
],
"nextCursor": null
}
```
# API Usage & Authentication (/docs/api/usage)
This page covers the foundational rules for interacting with the PayNowPro REST API, including the base URL, authentication, and how to interpret response codes.
### Base URL
All API requests should be made to the following base URL. All endpoint paths documented in this reference are relative to this URL.
```
https://api.paynowpro.com/api/v1
```
For example, to access the customers endpoint, you would make a request to:
`https://api.paynowpro.com/api/v1/customers`
***
### Authentication
The PayNowPro API uses an API Key to authenticate requests. You must include your key in every request by providing it in the **`api-key`** HTTP header.
You can manage your API Keys from the [Developer section](https://dashboard.paynowpro.com/developers) of your PayNowPro Dashboard.
```bash
curl "https://api.paynowpro.com/api/v1/customers" \
-H "api-key: YOUR_API_KEY"
```
**Keep Your Keys Secure!**
Your API keys carry significant privileges. Be sure to keep them secure and treat them like passwords.
Do not expose your secret API keys in publicly accessible areas such as client-side code, public repositories,
or mobile applications.
***
### HTTP Response Codes
PayNowPro uses conventional HTTP response codes to indicate the success or failure of an API request.
In general: codes in the `2xx` range indicate success, `4xx` codes indicate an error with the request you sent,
and `5xx` codes indicate an error on our servers.
| code | description |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200 OK | The request was successful. |
| 201 Creeated | The resource was successfully created in response to a `POST` request. |
| 400 Bad Request | The request was malformed. This can be due to missing required parameters, invalid data formats, or breaking a validation rule. The response body will contain more details. |
| 401 Unauthorized | The request was not authenticated. Check that your API key is correct and included in the `api-key` header. |
| 404 Not Found | The requested resource could not be found. |
| 500 Internal Server Error | Something went wrong on PayNowPro's end. These are rare, but if you receive one, please check our status page or contact support if the problem persists. |
#### Error Responses
When an API request results in a `4xx` or `5xx` error, the body of the response will be a JSON
object containing specific details about what went wrong.
```json
{
"body": {
"code": 400,
"reason": "A customer with the provided associatedId already exists."
}
}
```
# Customers (/docs/concepts/customers)
The **Customer** object is the logical representation of your end-users within the PayNowPro ecosystem.
By creating Customer objects, you can store reusable payment information, track payment history, and manage
subscriptions for individuals. Each Customer object in PayNowPro should map directly to a user record in
your own system's database.
Creating a **Customer** is a required first step before you can use the modern **[Subscriptions API](/docs/concepts/subscriptions)**.
## The Associated ID
When creating a Customer, you must provide an `associatedId`. This ID is a unique identifier from **your own system**
—for example, the primary key or UUID of the user from your application's database.
This allows you to easily link and verify the PayNowPro Customer object with your internal user records. When you need
to fetch or update customer data, you can use this `associatedId` to ensure you're retrieving information for the correct user.
### Key Distinction: `associatedId` vs. `customerId`
It is crucial to understand the difference between these two identifiers:
* **`associatedId`**: An identifier provided **by you**. It is the unique ID for a user as they exist *in your application*.
* **`customerId`**: An identifier generated **by PayNowPro**. It is the unique ID for the object once it has been created
*in our system*. You will receive this ID in the API response after creating a customer.
## Why Use Customer Objects?
Effectively using Customer objects is foundational to leveraging the full power of PayNowPro:
* **Subscription Management:** Customer objects are required to attach recurring subscription plans to your users.
* **Payment History:** You can easily view all historical transactions for a specific user in one place.
***
## Next Steps
Now that you understand how to represent your users, learn how to attach recurring plans to them.
# Payment Intents (/docs/concepts/payment-intent)
A **Payment Intent** is an object that represents your intention to collect a payment from a customer.
Think of it as a detailed instruction manual for a single transaction; it tracks the entire lifecycle of a payment, from its creation to its completion.
Creating a **Payment Intent** is the first step in any payment process. You must create one before you can
collect funds. This object contains crucial information that guides PayNowPro on how to handle the transaction, including (but not limited to):
* The amount to be collected and the currency.
* The customer's name.
* The reason for the purchase.
* Whether the payment is a one-time charge or part of a recurring subscription.
## The Payment Lifecycle
Once a **Payment Intent** is created, it initiates a secure, three-step process designed to make payment collection simple and safe.
1. **Create the Intent on Your Server** You begin by making an API call from your server to PayNowPro,
providing all the necessary details for the transaction (amount, customer info, etc.). PayNowPro will
respond with a unique `intentId`.
2. **Redirect the Customer to PayNowPro** Using the `intentId` from the previous step, you redirect
your customer to a secure payment page hosted by PayNowPro. This means you don't have to handle or
store sensitive credit card details directly, greatly simplifying your PCI compliance.
3. **Process Payment & Return to Your Site** On the PayNowPro page, the customer enters their credit
card and billing information to complete the payment. After the transaction is successfully processed,
we will redirect the customer back to the `redirectUrl` you specified when creating the intent.
This is typically a success or order confirmation page on your website.
***
## A Note on Your Tenant Alias
When you sign up for a PayNowPro account, you are assigned a unique identifier called a **Tenant Alias**.
This alias represents your business or application within our system.
It is essential to include your **Tenant Alias** whenever you interact with the PayNowPro API. It tells
us which merchant account is making the request, ensuring your data and transactions are securely routed
and managed. You must provide it when creating Payment Intents and in all other API calls.
# Prices (/docs/concepts/prices)
The **Price** object represents how much and how often to charge for a [Product](/docs/concepts/products).
Each Price object contains details like the `amount`, `currency`, and whether the price is for a one-time
purchase or a recurring subscription.
Every Price must be associated with a Product.
## Types of Prices
### Non-Recurring (One-Time) Prices
These represent a single, one-off charge for a product. They are defined by an `amount` and a `currency`.
### Recurring Prices
These are used for subscriptions and include a `recurring` object that specifies a `frequency` (e.g., `monthly`, `annually`)
in addition to the `amount` and `currency`.
***
## Rules within a Product Group
When you organize [Products](/docs/concepts/products) into a [Product Group](/docs/concepts/product-groups), PayNowPro
enforces the following validation rules on their prices to ensure your offerings are consistent and unambiguous.
### 1. Uniform Currency
All prices for all products within a single Product Group **must** use the same currency. You cannot mix currencies within a group.
> **Example:** If you have a "Hosting Plans" group and your "Starter Plan" product has a price in JMD, you cannot add a "Pro Plan"
> product with a price in USD to that same group. The entire group is locked to the currency of the first price that was added.
### 2. Unique Recurring Prices
Within a Product Group, you cannot have duplicate recurring prices. A duplicate is defined as having the same `frequency` and `amount`
combination. This rule ensures that every billing option across all products in the group is distinct.
> **Example:** Consider a "Subscription Tiers" group:
>
> * The "Basic Tier" product has a `monthly` price of **$2,000 JMD**.
> * The "Premium Tier" product has a `monthly` price of **$4,000 JMD**.
>
> In this scenario, you **cannot** add another product to this group that also has a `monthly` price of **$2,000 JMD**, because that
> specific frequency-amount combination already exists on the "Basic Tier".
***
## Next Steps
# Product Groups (/docs/concepts/product-groups)
**Product Groups** are containers used to organize related [Products](/docs/concepts/products), primarily for
creating a subscription hierarchy or "ladder." Think of a group as the overall service you offer (e.g., "My SaaS Platform"),
while the products within it represent the different tiers available to your customers (e.g., "Basic Plan," "Pro Plan," "Enterprise Plan").
While they can contain any product, Product Groups are most powerful and useful when managing **products with recurring prices**.
## Automatic Hierarchy & Tiering
You do not need to manually define the order or "tier" of products within a group. PayNowPro automatically infers the hierarchy
based on the product's price.
For any given recurring `frequency` (e.g., `monthly`), the product with the higher price `amount` is automatically considered a
higher tier. This automated ranking is the foundation for managing subscription upgrades and downgrades.
### Example: SaaS Tiers
Imagine you create a Product Group called "SaaS Plans" and add the following products and their monthly prices:
* **Product:** "Basic Plan" - **Price:** $1,000 JMD / month
* **Product:** "Pro Plan" - **Price:** $2,500 JMD / month
* **Product:** "Enterprise Plan" - **Price:** $5,000 JMD / month
Based on these prices, PayNowPro establishes the following hierarchy, from highest to lowest:
1. Enterprise Plan
2. Pro Plan
3. Basic Plan
***
## Group Validation Rules
As detailed in the [Prices](/docs/concepts/prices) documentation, all products and their associated prices within a group
must adhere to two key rules to ensure consistency:
1. **Uniform Currency:** All prices in the group must use the same currency.
2. **Unique Recurring Prices:** You cannot have two products in the same group with the identical frequency and amount combination.
***
## Next Steps
# Products (/docs/concepts/products)
The **Product** object is the logical representation of a specific good or service you offer to your customers.
It acts as the core of your business's catalog within PayNowPro, storing fundamental details like its `name` and `description`.
While a Product defines what you are selling, its actual cost and billing frequency are managed through one or
more associated **[Price](/docs/concepts/prices)** objects.
## Product Pricing Models
A single Product on PayNowPro can be configured with one of two distinct pricing models. It's important to decide
which model fits your offering, as a Product cannot mix one-time and recurring prices.
### One-Time Purchase Model
A Product can have **exactly one** non-recurring (one-time) price. This model is ideal for goods or services that
are sold as a single, standalone purchase.
**Example:** A `Product` named "Company T-Shirt" could have a single `Price` of $25.00 JMD.
### Subscription Tier Model
Alternatively, a Product can have **one or more** recurring prices, provided each price has a unique frequency.
This model is designed for subscription-based services where you offer different billing cycles for the same tier of service.
**Example:** A `Product` named "Pro Membership" could have two Prices attached:
* One `Price` of $1,500 JMD with a `Monthly` frequency.
* Another `Price` of $15,000 JMD with an `Annually` frequency.
***
## Next Steps
The price is a critical, and separate, part of defining your product. Dive deeper into how prices work.
# Recurring Payments (/docs/concepts/recurring-payments)
> ⚠️ **Legacy Feature**
>
> This page describes a legacy method for handling recurring payments that was previously associated with a Payment Intent.
> For all new integrations and for a more robust, flexible way to manage recurring revenue, please use the
> **[Subscriptions API](/docs/concepts/subscriptions)** instead.
A **Recurring Payment** is an object that defines a payment schedule based on a set frequency and a specific number of payment cycles.
## Parameters
Recurring Payments are controlled by two main parameters: `frequency` and `period`.
### Frequency
The `frequency` determines the interval or delay between charges. The available frequencies are:
* `Daily`
* `Weekly`
* `Fortnightly` (every 2 weeks)
* `Monthly`
* `Bimonthly` (every 2 months)
* `Quarterly` (every 3 months)
* `Annually`
### Period
The `period` defines the total number of times the payment should be collected before the schedule automatically stops.
For example, if a recurring payment has a `period` of `2` and a `frequency` of `monthly`, the customer will be charged
once per month for two months, and then the payments will cease.
***
## Next Steps
To implement modern recurring billing, explore our Subscriptions API.
# Subscriptions (/docs/concepts/subscriptions)
The **Subscription** is the object that ties everything together for recurring revenue. It connects a specific
[Customer](/docs/concepts/customers) to a recurring [Price](/docs/concepts/prices) on a [Product](/docs/concepts/products),
and automatically manages the entire billing cycle.
This is the modern and recommended way to handle all recurring payments on PayNowPro.
## Creating & Managing Subscriptions
Subscriptions are managed through their own dedicated intent endpoint, which simplifies the process of signing up a customer
for a recurring plan.
Where Subscriptions truly become powerful is in their ability to automatically handle plan changes. When your products are
organized in a [Product Group](/docs/concepts/product-groups), PayNowPro uses the group's price-based hierarchy to seamlessly manage upgrades and downgrades for you.
### Upgrades & Proration
When a customer upgrades to a higher-priced tier within the same Product Group, the change is **immediate**. PayNowPro
automatically calculates a proration to ensure fair billing. We credit the customer for the unused time on their old
plan and apply it toward the cost of the new plan.
> **Proration Example:**
>
> 1. A customer is on your "Basic Plan" at **$1,000 JMD / month**.
> 2. Exactly halfway through the billing period, they decide to upgrade to the "Pro Plan" at **$2,500 JMD / month**.
> 3. At this point, they have **$500 JMD** worth of unused time on the Basic Plan.
> 4. PayNowPro applies this as a credit to the immediate charge for the new plan.
> 5. **Immediate Charge:** `$2,500 (Pro Plan) - $500 (Unused Credit) = $2,000`.
>
> The customer's billing cycle resets, and they will be charged the full $2,500 JMD one month from the date of the upgrade.
### Downgrades
When a customer downgrades to a lower-priced tier, the change is **delayed**. The customer continues on their current,
higher-priced plan until the end of the billing period they've already paid for.
At the start of the next billing cycle, the subscription is automatically switched to the lower-priced plan, and the
customer is charged the new, lower amount.
***
## You've Mastered the Concepts!
You now have a complete overview of the core concepts in PayNowPro. You're ready to start building.
# Event Traces (/docs/concepts/traces)
## Overview
Event traces provide a detailed audit trail of actions taken within the PayNowPro system. When a manual action is performed, traces capture every automatic action the system executes to complete that operation in its entirety.
## What are Event Traces?
An event trace is a chronological record that documents the cascade of events triggered by a single action. Each trace consists of:
* **Trace ID**: A unique identifier linking related events together
* **Event ID**: A unique identifier for each individual event within the trace
* **Timestamp**: When the event occurred
* **Executor ID**: Who or what triggered the event (user ID or "system")
* **Activity Type**: The type of event that occurred
* **Payload**: Event-specific data relevant to the action
* **Parent ID**: Links child events to their parent event (optional)
## Event Types
The system tracks the following event types:
### Payment Events
* **PaymentEvent**: Tracks payment processing with payment intent, product, price, and customer details
### Subscription Events
* **SubscriptionCreationEvent**: Records new subscription creation
* **SubscriptionCancellationEvent**: Tracks subscription cancellations
* **SubscriptionDeletionEvent**: Records subscription deletions
* **SubscriptionScheduledChangeEvent**: Tracks scheduled upgrades or downgrades
### Recurring Payment Events
* **RecurringPaymentCancellationEvent**: Records cancellation of recurring payments
### Product & Price Events
* **ProductDeletionEvent**: Tracks product deletions
* **ProductExpiryEvent**: Records product expiration
* **PriceDeletionEvent**: Tracks price deletions
* **PriceUpdateEvent**: Records price updates
### Customer Events
* **CustomerDeletionEvent**: Tracks customer deletions
## Trace Structure
Each event trace contains:
* **tenantAlias**: The tenant identifier
* **traceId**: Links all related events
* **eventId**: Unique identifier for this specific event
* **executorId**: User ID or "system"
* **parentId**: Links to parent event (if applicable)
* **isRoot**: Boolean indicating if this is the root event
* **activityType**: The type of event
* **payload**: Event-specific data
* **createdAt**: ISO timestamp
## Data Enrichment
The system automatically enriches trace data by fetching related entities when needed. If customer, product, or price information is missing from the payload, the tracer will retrieve it from the database based on the event type's requirements.
## Use Cases
* **Audit Trails**: Track who did what and when
* **Debugging**: Trace the complete flow of a failed operation
* **Analytics**: Analyze user behavior and system patterns
* **Compliance**: Maintain records of all system activities
* **Troubleshooting**: Identify where in a multi-step process an issue occurred
# Create Customer (/docs/api/customers/CreateCustomer)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Creates a new customer record.
Validates tenant authorization and prevents duplicate customers by checking associatedId.
# Delete Customer (/docs/api/customers/DeleteCustomer)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Permanently deletes a customer record.
# Get Customer (/docs/api/customers/GetCustomer)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a single customer by ID.
# Get Customers (/docs/api/customers/GetCustomers)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a paginated list of customers for a tenant.
Supports cursor-based pagination with configurable limit and ordering.
# Update Customer (/docs/api/customers/UpdateCustomer)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Updates an existing customer's information.
Only allows updating firstName, lastName, and metadata fields.
# Create Product Group (/docs/api/groups/CreateProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Creates a new product group.
# Delete Product Group (/docs/api/groups/DeleteProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Permanently deletes a product group and all associated products and prices.
# Get Product Group (/docs/api/groups/GetProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a single product group by ID with its associated products.
# Get Product Groups (/docs/api/groups/GetProductGroups)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a paginated list of product groups for a tenant.
# Remove Product From Group (/docs/api/groups/RemoveProductFromGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Product Group (/docs/api/groups/UpdateProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Updates an existing product group's information.
# Create Intent (/docs/api/intent/CreateIntent)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Create Product Prices (/docs/api/prices/CreateProductPrices)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Creates new prices for an existing product.
# Delete Product Price (/docs/api/prices/DeleteProductPrice)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Permanently deletes a price from a product.
# Get Product Price (/docs/api/prices/GetProductPrice)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a specific price for a product.
# Get Product Prices (/docs/api/prices/GetProductPrices)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves all prices for a specific product.
# Update Product Price (/docs/api/prices/UpdateProductPrice)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Updates an existing price for a product.
# Cancel Subscription (/docs/api/subscriptions/CancelSubscription)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Cancels an active subscription.
# Create Subscription Intent (/docs/api/subscriptions/CreateSubscriptionIntent)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Creates a new subscription payment intent.
Validates customer, product, and price before creating a payment intent for subscription.
# Get Active Subscriptions (/docs/api/subscriptions/GetActiveSubscriptions)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves active subscriptions for a customer.
# Get Subscription (/docs/api/subscriptions/GetSubscription)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a single subscription by ID.
# Get Subscription Changes (/docs/api/subscriptions/GetSubscriptionChanges)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Get Subscription History (/docs/api/subscriptions/GetSubscriptionHistory)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves subscription history for a customer.
# Get Activities By Time Frame (/docs/api/traces/GetActivitiesByTimeFrame)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Queries activities within a specific time frame.
# Get Activities By Type (/docs/api/traces/GetActivitiesByType)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Queries all activities of a specific type.
# Get Activities By User (/docs/api/traces/GetActivitiesByUser)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Queries all activities performed by a specific user.
# Get Trace (/docs/api/traces/GetTrace)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Gets all events for a complete trace, sorted by timestamp.
# Get Trace By Id (/docs/api/traces/GetTraceById)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Gets a specific event trace by its exact identifiers.
# Create Product (/docs/api/products/CreateProduct)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Creates a new product with optional prices.
# Create Product Group (/docs/api/products/CreateProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Creates a new product group.
# Create Product Prices (/docs/api/products/CreateProductPrices)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Creates new prices for an existing product.
# Delete Product (/docs/api/products/DeleteProduct)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Permanently deletes a product and all associated prices.
# Delete Product Group (/docs/api/products/DeleteProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Permanently deletes a product group and all associated products and prices.
# Delete Product Price (/docs/api/products/DeleteProductPrice)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Permanently deletes a price from a product.
# Get Product (/docs/api/products/GetProduct)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a single product by ID.
# Get Product Group (/docs/api/products/GetProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a single product group by ID with its associated products.
# Get Product Groups (/docs/api/products/GetProductGroups)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a paginated list of product groups for a tenant.
# Get Product Price (/docs/api/products/GetProductPrice)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a specific price for a product.
# Get Product Prices (/docs/api/products/GetProductPrices)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves all prices for a specific product.
# Get Products (/docs/api/products/GetProducts)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Retrieves a paginated list of products for a tenant.
# Remove Product From Group (/docs/api/products/RemoveProductFromGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
# Update Product (/docs/api/products/UpdateProduct)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Updates an existing product's information.
# Update Product Group (/docs/api/products/UpdateProductGroup)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Updates an existing product group's information.
# Update Product Price (/docs/api/products/UpdateProductPrice)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Updates an existing price for a product.
# Customer Created (/docs/api/webhooks/customers/customer.create)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a customer was successfully created.
# Customer Deleted (/docs/api/webhooks/customers/customer.delete)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a customer was successfully deleted.
# Customer Updated (/docs/api/webhooks/customers/customer.update)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a customer was successfully updated.
# Product Created (/docs/api/webhooks/products/product.create)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product was successfully created.
# Product Deleted (/docs/api/webhooks/products/product.delete)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product was successfully deleted.
# Product Expired (/docs/api/webhooks/products/product.expiry)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product has expired.
# Product Updated (/docs/api/webhooks/products/product.update)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product was successfully updated.
# Subscription Cancelled (/docs/api/webhooks/subscriptions/subscription.cancel)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a subscription was successfully cancelled.
# Subscription Created (/docs/api/webhooks/subscriptions/subscription.create)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a subscription was successfully created.
# Subscription Downgraded (/docs/api/webhooks/subscriptions/subscription.downgrade)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a customer has downgraded their subscription.
# Subscription Upgraded (/docs/api/webhooks/subscriptions/subscription.upgrade)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a customer has upgraded their subscription.
# Collect (/docs/api/webhooks/transactions/collect)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Sent when a previously authorized payment has been captured
# Recurring Transaction (/docs/api/webhooks/transactions/recurringtransaction)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Webhook event for Recurring Transaction.
# Reversal (/docs/api/webhooks/transactions/reversal)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Sent when a previously authorized payment has been reversed/voided
# Standard Transaction (/docs/api/webhooks/transactions/standardtransaction)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Webhook event for Standard Transaction.
# Product Group Created (/docs/api/webhooks/products/groups/product.group.create)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product group was successfully created.
# Product Group Deleted (/docs/api/webhooks/products/groups/product.group.delete)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product group was successfully deleted.
# Product Group Removal (/docs/api/webhooks/products/groups/product.group.removal)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product was successfully removed from a product group.
# Product Group Currency Updated (/docs/api/webhooks/products/groups/product.group.update.currency)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product group's currency was successfully updated.
# Product Group Updated (/docs/api/webhooks/products/groups/product.group.update)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product group was successfully updated.
# Product Prices Created (/docs/api/webhooks/products/prices/product.price.create)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when product prices were successfully created.
# Product Price Deleted (/docs/api/webhooks/products/prices/product.price.delete)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product price was successfully deleted.
# Product Price Updated (/docs/api/webhooks/products/prices/product.price.update)
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Triggered when a product price was successfully updated.