API Documentation
Automate payment follow-ups from the tools you already use. Connect Google Sheets, Airtable, Stripe, Typeform, and 8,000+ other apps to PayChasers.
Getting Started
1. Generate your API key
Go to Settings in your PayChasers dashboard and scroll to the API Key section. Click Generate API Key. You'll see a key starting with pck_ — copy it immediately. You won't be able to see it again.
2. Authenticate
Every API request needs your key in the Authorization header:
Authorization: Bearer pck_your_key_here3. Test your connection
curl -H "Authorization: Bearer pck_your_key_here" \
https://paychasers.com/api/v1/meResponse:
{
"id": "user_abc123",
"email": "you@example.com",
"name": "Your Name",
"plan": "PRO",
"currency": "ZAR"
}API Endpoints
Base URL: https://paychasers.com/api/v1
Clients
List your clients
/api/v1/clientsCreate a client
/api/v1/clients{
"name": "Acme Corp",
"email": "billing@acme.com",
"notes": "Net 30 terms"
}Chases
List chases (with optional filters)
/api/v1/chasesGET /api/v1/chases
GET /api/v1/chases?status=OVERDUE
GET /api/v1/chases?status=SENT&limit=10Statuses: SENT, PROMISED, OVERDUE, PAID
Create a chase
/api/v1/chases{
"clientEmail": "billing@acme.com",
"clientName": "Acme Corp",
"paymentName": "March retainer",
"amount": 5000,
"currency": "ZAR",
"dueDate": "2026-04-15",
"chaseType": "INVOICE",
"autoChase": true
}You can pass either clientId or clientEmail. When using clientEmail, PayChasers will find the existing client or create a new one automatically. The legacy field name invoiceName is still accepted as an alias for paymentName.
Chase types: INVOICE, CLIENT_PAYMENT, CONTRACT_MILESTONE, PERSONAL_DEBT, BUSINESS_PAYMENT, SUBSCRIPTION, CUSTOM
Create chases in bulk (Batch upload)
/api/v1/chases/bulk{
"batchId": "batch_9876",
"accounts": [
{
"clientEmail": "customer1@example.com",
"clientName": "John Doe",
"paymentName": "Loan Repayment #44",
"amount": 250
},
{
"clientEmail": "customer2@example.com",
"clientName": "Jane Smith",
"amount": 1050
}
]
}Push up to 500 accounts per batch. The system automatically deduplicates clients based on clientEmail. If you are on the Free tier, your total historical limit across batches is 50 chases.
Mark a chase as paid
/api/v1/chases/:id/paidFollow-ups
Send a follow-up
/api/v1/chases/:id/follow-up{
"tone": "friendly"
}Tones: friendly, due_today, overdue, firm
Rate limit: 10 follow-ups per hour.
Webhooks (Enterprise)
Connect PayChasers directly to your CRM or custom database. We fire real-time POST requests to your configured Listener URL whenever critical state changes occur within your account. Configure your URL and HMAC Secret in your dashboard Settings.
Available Events
chase.paid- Fired immediately when a chase is marked as PAID via the dashboard or API.
Cryptographic Validation
To prevent spoofing, every webhook contains an X-PayChasers-Signature HTTP header. This is an HMAC SHA-256 signature generated using your private Webhook Secret and the raw stringified JSON body.
// Example: Express.js signature validation
const crypto = require('crypto');
app.post('/paychasers-webhook', express.json(), (req, res) => {
const signature = req.headers['x-paychasers-signature'];
const payload = JSON.stringify(req.body);
const secret = process.env.PAYCHASERS_WEBHOOK_SECRET;
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
if (signature !== expectedSignature) {
return res.status(401).send('Invalid signature');
}
// Handle the event
console.log('Received valid event:', req.body.event);
res.status(200).send('OK');
});Zapier Integration
Connect PayChasers to 8,000+ apps with Zapier. No code required.
Triggers
These fire automatically when something happens in PayChasers:
| Trigger | When it fires | Example use |
|---|---|---|
| New Chase Created | A chase is created (via dashboard or API) | Log new chases to a Google Sheet |
| Chase Marked as Paid | A chase status changes to PAID | Send a Slack message to your team |
| Follow-Up Sent | A follow-up email is sent | Track follow-up activity in Airtable |
| Chase Overdue | A chase passes its due date | Create a task in Todoist to call the client |
Actions
These let other apps create activity in PayChasers:
| Action | What it does | Example use |
|---|---|---|
| Create Chase | Creates a new payment chase | New Google Sheets row creates a chase |
| Create Client | Adds a new client | Typeform submission adds a client |
| Mark Chase as Paid | Marks a chase as paid | Stripe payment marks the chase as paid |
| Send Follow-Up | Sends a follow-up with a chosen tone | Scheduled Zap sends weekly firm reminders |
Real-World Integrations
Stripe: Auto-chase failed payments
When a Stripe payment fails, PayChasers automatically creates a chase for that customer and begins following up.
- 1. Trigger: Failed Payment in Stripe
- 2. Action: Create Chase in PayChasers (Set Auto-Chase: Yes, Type: Subscription)
Google Sheets: Tracker to Automated Chase
When you add a row to your financial spreadsheet, PayChasers reads it and instantly generates a chase.
- 1. Trigger: New Spreadsheet Row in Google Sheets
- 2. Action: Create Chase in PayChasers
Slack: Recovery Notifications
When an overdue client finally pays, your entire operations team gets notified instantly.
- 1. Trigger: Chase Marked as Paid in PayChasers
- 2. Action: Send Channel Message in Slack
Plan Limits
| Feature | Free | Pro | Pro+ |
|---|---|---|---|
| API access | Yes | Yes | Yes |
| Chase creation | Limited to free plan quota | Unlimited | Unlimited |
| Delivery channel | Email only | Email only | Email, WhatsApp, or Both |
| Follow-up rate limit | 10/hour | 10/hour | 10/hour |
Free users get full API access. Chase limits follow your plan — the same limits that apply in the dashboard apply via the API.
Security
- •API keys are hashed with SHA-256 before storage. We never store your raw key.
- •Every request is scoped to your account. You can only access your own clients and chases.
- •Keys can be revoked instantly from Settings. Integrations using a revoked key stop immediately.
- •All API key creation and revocation is logged in the audit trail.
- •Follow-up sending is rate limited to prevent abuse.
Error Handling
All errors return JSON with an error field:
{ "error": "Chase not found" }| Status Code | Meaning |
|---|---|
| 400 | Bad request (invalid data, chase already paid) |
| 401 | Invalid or missing API key |
| 403 | Plan limit reached |
| 404 | Resource not found |
| 429 | Rate limit exceeded |
| 503 | Database temporarily unavailable |