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_here

3. Test your connection

curl -H "Authorization: Bearer pck_your_key_here" \
  https://paychasers.com/api/v1/me

Response:

{
  "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

GET/api/v1/clients

Create a client

POST/api/v1/clients
{
  "name": "Acme Corp",
  "email": "billing@acme.com",
  "notes": "Net 30 terms"
}

Chases

List chases (with optional filters)

GET/api/v1/chases
GET /api/v1/chases
GET /api/v1/chases?status=OVERDUE
GET /api/v1/chases?status=SENT&limit=10

Statuses: SENT, PROMISED, OVERDUE, PAID

Create a chase

POST/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)

POST/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

PATCH/api/v1/chases/:id/paid

Follow-ups

Send a follow-up

POST/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:

TriggerWhen it firesExample use
New Chase CreatedA chase is created (via dashboard or API)Log new chases to a Google Sheet
Chase Marked as PaidA chase status changes to PAIDSend a Slack message to your team
Follow-Up SentA follow-up email is sentTrack follow-up activity in Airtable
Chase OverdueA chase passes its due dateCreate a task in Todoist to call the client

Actions

These let other apps create activity in PayChasers:

ActionWhat it doesExample use
Create ChaseCreates a new payment chaseNew Google Sheets row creates a chase
Create ClientAdds a new clientTypeform submission adds a client
Mark Chase as PaidMarks a chase as paidStripe payment marks the chase as paid
Send Follow-UpSends a follow-up with a chosen toneScheduled 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

FeatureFreeProPro+
API accessYesYesYes
Chase creationLimited to free plan quotaUnlimitedUnlimited
Delivery channelEmail onlyEmail onlyEmail, WhatsApp, or Both
Follow-up rate limit10/hour10/hour10/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 CodeMeaning
400Bad request (invalid data, chase already paid)
401Invalid or missing API key
403Plan limit reached
404Resource not found
429Rate limit exceeded
503Database temporarily unavailable