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 emailorBook 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 emailmight be an Activity, whileBook a Meetingis 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 via OTEL Traces
A more reliable and user-friendly way to send signals is to send them via OTEL tracing.
This allows you to send signals with less arguments and boilerplate as the information is available in the tracing context.
The arguments take in signal name, optional data, and a flag that attaches costs from the same trace.
Paid.signal() has to be called within a tracing context. Tracing context is created with Paid.trace().
Python
Go
Ruby
Node.js
Error Handling
The API uses conventional HTTP response codes to indicate the success or failure of requests:
2xxrange indicates success4xxrange indicates an error that failed given the information provided5xxrange indicates an error with Paid’s servers
Error Response Format
Need Help?
- Email: support@paid.ai.
- Community: join
#paid‑developerson Slack.