Developer Guide: Build, Price, and Bill with Paid
At‑a‑Glance
Step 1: Sign up
Go to app.paid.ai, and register with your work e‑mail. During sign‑up you’ll set the organisation name and details
Step 2: Creating an API Key
API keys are your credentials to authenticate with the Paid.ai API.
- Sign in to your Paid.ai dashboard at app.paid.ai
- Navigate to your organization settings
- Go to the API Keys section
- Click “Create New API Key”
- Give your key a descriptive name
- Copy the generated secret key immediately - you won’t be able to see it again!
Security Best Practices
- Never commit API keys to your repository
- Store keys in environment variables or a secure secret manager
- Rotate keys regularly
- Use different keys for different environments (development, staging, production)
Step 3: Agent Creation
Create Your First Agent
For the purpose of this example, we are going to use AI SDR agent as a reference, and create data related to that.
- Go to ‘Agents’.
- Click ‘Add Agent’: Give your Agent a name that you’d recognize (e.g., “AI SDR Agent”). This name will appear on invoices.
- Describe the Agent’s Purpose: Provide a short description of what this Agent does (e.g., “Automates SDR activities”).
- Add your Agent Code: Use an agent code for reference. Eg. AG-001
- Click ‘Add Signals’
Tip: If you have multiple Agents (sales chatbot, service chatbot, etc.), create each one here so they can be tracked and billed separately.
Configure Signals
Signals represent the individual activities or events you want to track and monetize.
- Click ‘Add Signals’ and fill the details
- Name: Name of your signal (e.g.,
Send an email
orBook a Meeting
). - Value (optional): The approximate human-equivalent cost or effort (e.g., $150 to book a meeting).
- Type: Choose ‘Activity’ or ‘Outcome’. For example,
Send an email
might be an Activity, whileBook a Meeting
is an Outcome.
- Name: Name of your signal (e.g.,
- Click ‘Pricing’
Tip: Keep Signals granular enough to capture precise usage but not so granular that they become cumbersome to track.
Set Up Pricing Rules
After defining your Signals, you can configure various billing options in Paid. In the Pricing section, you’ll see multiple toggles to combine different fee structures:
-
Setup Fee (Fixed, One-Time)
A one-time charge for onboarding or initial configuration.
-
Platform Fee (Fixed, Recurring)
A recurring flat fee for ongoing platform access or maintenance.
-
Seat-Based (Variable, Recurring)
A per-user or “seat” cost that recurs regularly (e.g., monthly).
-
Activity-Based (Usage, Variable, Recurring)
A usage-based fee tied to activity Signals (e.g., each email sent, each message processed).
-
Outcome-Based (Usage, Variable, Recurring)
A usage-based fee tied to outcome Signals (e.g., each booked meeting or qualified lead).
Enable the relevant toggles, configure the pricing when prompted, and click ‘Save’.
Copy the “agent-id” displayed on the browser when you view this agent. We would need this in the following steps
Step 4: Integrate Accounts / Contacts / Orders
Your platform already lets new customers sign up, choose a plan, and start using your agents. Paid needs to see the same objects—Accounts, Contacts, and Orders—so it can price usage, generate invoices, and collect payments.
This section walks through a complete, end‑to‑end example. Copy, paste, and adapt these calls to wire Paid into your onboarding flow in minutes.
Scenario
John Doe, VP of Sales at Acme Ltd, signs up for your AI SDR – Pro plan on 1 June 2025.
In your database you will create:
- Account → Acme Ltd
- Contact → John Doe
- Order → their paid subscription to AI SDR Agent (Pro)
We will mirror those three objects inside Paid with the API.
Prerequisites
Python
Node.js
Go
Ruby
1: Create the Account
Python
Node.js
Go
Ruby
Returns
Returns the Account
object upon successful creation. Save the returned id
—we’ll need it in the next two calls.
2: Create the Contact
Python
Node.js
Go
Ruby
Returns
Returns the Contact
object upon successful creation. It’s recommended to store the returned contact ID in your own system for future reference and operations. The contact is now linked to the account inside Paid.
3: Create an Order
Python
Node.js
Go
Ruby
Returns
Returns the Order
object upon successful creation. It’s recommended to store the returned order ID in your own system for future reference and operations.
Step 4: Stream Agent Signals (AI SDR Edition)
Paid measures how each AI SDR is used through signals—immutable events you emit in real time. Every signal links back to the Order you created (for example, Acme Ltd’s Annual subscription for AI SDR – Pro plan), so Paid can measure all your agent activities against it, and can also price the event and invoice it if you charge your customers on outcome.
We’ll switch to an AI SDR example and stream signals for common SDR activities: sending outbound emails, making calls, logging replies, and booking meetings.
When should I send a signal?
Only instrument activities and outcomes that mean something to your customers.
Python
Go
Ruby
Node.js
Sending Signals Within Traces
A more reliable and streamlined way to send signals is from within traces. This automatically links the signal to the active trace, meaning you no longer need to specify customer_id
and agent_id
manually. It also benefits from OpenTelemetry for reliable delivery.
This should be used in combination with tracing funcitonality. Tracing should be initialized first. Then, the signal should be sent from within the callback provided to trace()
. The example is below.
Python
Go
Ruby
Node.js
Error Handling
The API uses conventional HTTP response codes to indicate the success or failure of requests:
2xx
range indicates success4xx
range indicates an error that failed given the information provided5xx
range indicates an error with Paid’s servers
Error Response Format
Need Help?
- Email: support@paid.ai.
- Community: join
#paid‑developers
on Slack.