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 email. During sign-up you’ll set the organization name and details.
Step 2: Creating an API Key
API keys are your credentials to authenticate with the Paid API.
- Sign in to your Paid 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: Product Creation
Create Your First Product
For the purpose of this example, we are going to use an AI SDR product as a reference.
- Navigate to Products in the sidebar
- Click Create
- Fill in the product details:
- Product name (required): A recognizable name (e.g., “AI SDR”). This name will appear on invoices.
- Description: What this Product does (e.g., “Automates SDR activities”).
- External ID: Your internal identifier for API integration (e.g.,
ai-sdr-001). - Product code: Identifier for accounting purposes (e.g.,
PROD-001).
Tip: If you have multiple AI agents (sales chatbot, service chatbot, etc.), create a separate Product for each so they can be tracked and billed separately.
Configure Pricing
After entering product details, add pricing using the Add pricing dropdown. You can combine multiple pricing types:
-
One-time fee
A single charge when a customer signs up or onboards.
-
Platform fee
A recurring flat fee (monthly/annual) for ongoing platform access.
-
Per seat
A recurring charge per user or seat.
-
Usage pricing
Variable charges based on activity Signals—the event name you specify here (e.g.,
email_sent) will be matched against Signals you send via API. -
Outcome pricing
Variable charges based on outcome Signals—successful results (e.g.,
meeting_booked,lead_qualified).
Example Configuration
For an AI SDR agent, you might add:
- Platform fee: $500/month base access
- Usage pricing: $0.10 per
email_sentsignal - Outcome pricing: $50 per
meeting_bookedsignal
Click Finish to create the product, or Save as draft to continue later.
Copy the Product ID from the URL or product details page. You’ll need this for API integration.
Step 4: Integrate Accounts / Contacts / Orders
Your platform already lets new customers sign up, choose a plan, and start using your products. 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.
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 (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 Customer 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 5: Stream Signals (AI SDR Edition)
Paid measures how each Product 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 product activities against it, and can also price the event and invoice it if you charge your customers on outcome.
We’ll use 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 OpenTelemetry 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