Skip to main content

Overview

Paw & Care integrates with external systems to streamline workflows, sync data, and extend functionality. The platform provides built-in integrations, REST APIs, and webhooks for custom connections.
Coming Soon: Most integrations are planned for future releases. Current focus is core platform functionality. This guide outlines the integration roadmap and API architecture.

Integration Architecture

API-First Design

Paw & Care is built with API-first architecture:

REST API

Base URL: https://api.paw-and-care.com/v1Authentication: Bearer token (JWT)Rate Limits:
  • Standard: 100 requests/minute
  • Bulk operations: 10 requests/minute
  • Webhooks: 1000 events/hour
Documentation: OpenAPI 3.0 specification at /api/docs

Real-Time Sync

Technology: Supabase Realtime (WebSocket)Events: Database changes broadcast instantlyUse Cases:
  • Multi-device sync
  • Live dashboard updates
  • Collaborative editing
  • Push notifications
Latency: Less than 3 seconds end-to-end

Authentication

All API requests require authentication:
1

Obtain API Key

Navigate to Settings \u2192 API Access (Practice Manager only)Generate API Key:
  1. Tap Create New API Key button
  2. Enter key name (e.g., “QuickBooks Integration”)
  3. Select permissions scope:
    • Read-only (safe for analytics)
    • Read/Write (full access)
    • Specific resources (appointments, records, billing)
  4. Set expiration (30 days, 90 days, 1 year, never)
  5. Tap Generate Key
Key Format: pk_live_1234567890abcdef1234567890abcdef
Security: API key shown once. Copy and store securely. Treat like password. Rotate keys every 90 days.
2

Authenticate Requests

Include API key in request header:
curl https://api.paw-and-care.com/v1/appointments \
  -H "Authorization: Bearer pk_live_1234567890abcdef"
Response Codes:
  • 200 OK: Success
  • 401 Unauthorized: Invalid or missing API key
  • 403 Forbidden: Valid key but insufficient permissions
  • 429 Too Many Requests: Rate limit exceeded
3

Revoke Keys

If key compromised:
  1. Navigate to Settings \u2192 API Access
  2. Find key in active keys list
  3. Tap Revoke button
  4. Immediate: All requests with that key fail
  5. Generate new key for legitimate integrations
Audit Log: All API key usage logged for security monitoring

Built-In Integrations

Email Services

SMS Services

Configuration: Settings \u2192 Integrations \u2192 SMSSetup:
  1. Create Twilio account
  2. Purchase phone number ($1/month)
  3. Generate API credentials (Account SID, Auth Token)
  4. Enter credentials in Paw & Care
  5. Test SMS send
Features:
  • Bulk SMS campaigns
  • Two-way SMS (receive replies)
  • Delivery confirmations
  • International SMS support
  • Opt-out handling
Cost:
  • US/Canada: $0.0075 per SMS
  • Example: 1000 SMS = $7.50
  • No monthly minimum

Payment Processing

Use Case: In-person and online paymentsConfiguration: Settings \u2192 Integrations \u2192 PaymentsSetup:
  1. Create Square account
  2. Connect Square to Paw & Care (OAuth)
  3. Map payment types to invoice line items
  4. Enable automatic invoice sync
Features:
  • Credit card processing (in-person with reader, online)
  • Invoice generation and email
  • Payment links (send via SMS/email)
  • Automatic payment reconciliation
  • Transaction history sync to Paw & Care
Fees:
  • In-person: 2.6% + $0.10
  • Online: 2.9% + $0.30
  • No monthly fees

Accounting Software

Configuration: Settings \u2192 Integrations \u2192 AccountingSync:
  • Invoices: Paw & Care \u2192 QuickBooks
  • Payments: Automatic reconciliation
  • Clients: Sync as customers
  • Chart of accounts: Map revenue categories
Setup:
  1. Connect QuickBooks account (OAuth)
  2. Map accounts:
    • Revenue accounts (Services, Products)
    • Asset accounts (Accounts Receivable)
    • Payment methods (Cash, Credit Card, Check)
  3. Enable automatic sync (daily or real-time)
  4. Initial data import (existing clients/invoices)
Sync Frequency:
  • Real-time: Immediate (for new invoices)
  • Daily: Batch sync at midnight
  • Manual: On-demand sync button
Cost: QuickBooks subscription required ($30+/month)

API Endpoints

Core Resources

List Appointments:
GET /v1/appointments
Query Parameters:
  • date: Filter by date (YYYY-MM-DD)
  • status: Filter by status (scheduled, completed, etc.)
  • vet_id: Filter by veterinarian
  • limit: Results per page (default: 50, max: 100)
  • offset: Pagination offset
Response:
{
  "data": [
    {
      "id": "apt_123",
      "pet_id": "pet_456",
      "pet_name": "Bella",
      "owner_id": "own_789",
      "owner_name": "Sarah Miller",
      "vet_id": "vet_001",
      "scheduled_date": "2026-03-12",
      "scheduled_time": "10:00",
      "type": "wellness",
      "triage_level": "routine",
      "status": "scheduled",
      "duration_minutes": 30,
      "created_at": "2026-03-05T14:30:00Z"
    }
  ],
  "pagination": {
    "total": 150,
    "limit": 50,
    "offset": 0,
    "has_more": true
  }
}
Create Appointment:
POST /v1/appointments
Body:
{
  "pet_id": "pet_456",
  "owner_id": "own_789",
  "vet_id": "vet_001",
  "scheduled_date": "2026-03-15",
  "scheduled_time": "14:00",
  "type": "dental",
  "duration_minutes": 90,
  "reason": "Dental cleaning",
  "notes": "Owner reports bad breath"
}
Update Appointment:
PATCH /v1/appointments/{id}
Delete (Cancel) Appointment:
DELETE /v1/appointments/{id}

Webhook Events

Subscribe to real-time events:
1

Register Webhook Endpoint

Navigate to Settings \u2192 WebhooksCreate Webhook:
  1. Tap Add Webhook button
  2. Enter endpoint URL (your server)
  3. Select events to subscribe:
    • appointment.created
    • appointment.updated
    • appointment.cancelled
    • patient.created
    • patient.updated
    • record.finalized
    • invoice.created
    • invoice.paid
    • call.completed
    • emergency.detected
  4. Enter webhook secret (for signature verification)
  5. Tap Create Webhook
Testing: Send test event to verify endpoint working
2

Receive Webhook Events

When event occurs, POST request sent to your endpoint:Example: appointment.created
POST https://your-server.com/webhooks/paw-and-care

Headers:
  X-Webhook-Signature: sha256=abc123...
  Content-Type: application/json

Body:
{
  "event": "appointment.created",
  "timestamp": "2026-03-15T14:30:00Z",
  "data": {
    "id": "apt_new123",
    "pet_name": "Max",
    "owner_name": "John Smith",
    "scheduled_date": "2026-03-20",
    "scheduled_time": "10:00",
    "type": "wellness"
  }
}
Your Server Response:
  • Status Code: 200 OK (success)
  • Any other status: Paw & Care will retry (exponential backoff)
  • Max retries: 3 attempts over 24 hours
3

Verify Webhook Signature

Security: Verify requests from Paw & Care, not attackerSignature Calculation (HMAC SHA-256):
import hmac
import hashlib

def verify_webhook(request, secret):
    signature = request.headers.get('X-Webhook-Signature')
    body = request.body
    
    expected = hmac.new(
        secret.encode(),
        body,
        hashlib.sha256
    ).hexdigest()
    
    expected_signature = f"sha256={expected}"
    
    return hmac.compare_digest(signature, expected_signature)
Reject if signature doesn’t match (prevents replay attacks)

Third-Party Integrations

Laboratory Services

Use Case: In-house and reference lab integrationFeatures:
  • Order lab tests from Paw & Care
  • Automatic result import to medical record
  • Abnormal value flagging
  • Historical trends graphing
Setup:
  • IDEXX account required
  • API credentials from IDEXX
  • Map test codes to Paw & Care templates
Workflow:
  1. Vet orders “Complete Blood Count” in Paw & Care
  2. Order sent to IDEXX system
  3. Technician runs test on IDEXX equipment
  4. Results automatically imported to Paw & Care
  5. Vet notified when results available
  6. Results embedded in medical record

Prescription Services

Use Case: Client home delivery of medicationsFeatures:
  • Send prescription directly to Chewy
  • Client receives medications at home
  • Automatic refill reminders
  • Competitive pricing
Benefits:
  • Client convenience
  • Practice still gets commission (10-15%)
  • Reduces practice inventory burden

Marketing Tools

Custom Integrations

Use Cases

Practice Management Software

Scenario: Migrating from legacy PMS, need to coexistIntegration:
  • Sync patient data (Paw & Care \u2194 Legacy PMS)
  • One-way sync appointments (Legacy \u2192 Paw & Care)
  • Gradual migration over 6 months
API Usage:
  • POST /v1/patients (bulk import)
  • POST /v1/appointments (sync bookings)
  • Webhook: appointment.created (update legacy PMS)

Client Portal

Scenario: Build custom client-facing websiteFeatures:
  • Clients view own pet records
  • Clients book appointments online
  • Clients view invoices, pay online
  • Clients receive test results
API Usage:
  • GET /v1/patients?owner_id={id}
  • GET /v1/appointments?owner_id={id}
  • POST /v1/appointments (online booking)
  • GET /v1/billing/invoices?owner_id={id}
  • POST /v1/billing/invoices/{id}/payments

Business Intelligence

Scenario: Advanced analytics in Tableau/Power BIIntegration:
  • Daily export of all data
  • Load into data warehouse
  • Build custom dashboards
  • Predictive analytics (churn prediction, revenue forecasting)
API Usage:
  • GET /v1/export/full (full database export)
  • Schedule: Daily cron job at 2 AM
  • Format: CSV or JSON

Telemedicine Platform

Scenario: Add video consultationsIntegration:
  • Integrate with Zoom, Doxy.me, or custom
  • Schedule video appointments in Paw & Care
  • Link video room to appointment
  • Capture video consultation notes
API Usage:
  • POST /v1/appointments (create video appt)
  • PATCH /v1/appointments/{id} (add video URL)
  • POST /v1/medical-records (document visit)

Example Integration: Slack Notifications

Use Case: Get Slack notifications for important events
1

Create Slack Incoming Webhook

  1. Go to Slack App Directory
  2. Create “Incoming Webhooks” app
  3. Add to your Slack workspace
  4. Copy webhook URL: https://hooks.slack.com/services/T00/B00/XXX
2

Set Up Paw & Care Webhook

Settings \u2192 Webhooks \u2192 Add WebhookConfiguration:
  • URL: Your middleware server (not directly Slack)
  • Events: emergency.detected, appointment.cancelled
  • Secret: Generate random string
3

Build Middleware

Simple server to translate Paw & Care webhooks to Slack:
from flask import Flask, request
import requests
import hmac
import hashlib

app = Flask(__name__)

WEBHOOK_SECRET = "your_secret_here"
SLACK_WEBHOOK = "https://hooks.slack.com/services/..."

@app.route('/webhook', methods=['POST'])
def handle_webhook():
    # Verify signature
    signature = request.headers.get('X-Webhook-Signature')
    expected = f"sha256={hmac.new(WEBHOOK_SECRET.encode(), request.data, hashlib.sha256).hexdigest()}"
    
    if not hmac.compare_digest(signature, expected):
        return "Invalid signature", 401
    
    data = request.json
    event = data['event']
    
    # Format Slack message
    if event == 'emergency.detected':
        message = f":rotating_light: EMERGENCY: {data['data']['pet_name']} - {data['data']['symptoms']}"
    elif event == 'appointment.cancelled':
        message = f":x: Appointment cancelled: {data['data']['pet_name']} on {data['data']['scheduled_date']}"
    else:
        message = f"Event: {event}"
    
    # Send to Slack
    requests.post(SLACK_WEBHOOK, json={"text": message})
    
    return "OK", 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
4

Deploy and Test

Deploy middleware to cloud (Heroku, AWS, etc.)Test by triggering event in Paw & CareVerify Slack notification appears in channel

Integration Security

Best Practices

API Key Rotation

Frequency: Every 90 days minimumProcess:
  1. Generate new API key
  2. Update integration to use new key
  3. Test integration working
  4. Revoke old key
Automation: Set calendar reminder for rotation

Least Privilege

Principle: Grant minimum permissions neededExample:
  • Analytics integration: Read-only access
  • Booking widget: Appointments only (not medical records)
  • Billing sync: Invoices only (not patient data)
Review: Quarterly audit of API key permissions

IP Whitelisting

Configuration: Settings \u2192 API Access \u2192 IP RestrictionsRestrict API Access:
  • Enter allowed IP addresses
  • Requests from other IPs blocked
  • Use for server-to-server integrations
Example: QuickBooks integration only from your accounting server IP

Rate Limit Monitoring

Monitor Usage:
  • Dashboard shows API requests per day
  • Alert when approaching limits
  • Identify abnormal spikes (potential abuse)
Increase Limits:
  • Contact support for higher limits
  • Enterprise plans: Custom rate limits

Compliance Considerations

HIPAA-Equivalent: Veterinary records not covered by HIPAA, but Paw & Care follows similar standards for data protection.
1

Data Encryption

In Transit: All API requests over HTTPS (TLS 1.3)At Rest: Data encrypted in database (AES-256)Verify: Check for padlock icon in browser, https:// in API URLs
2

Data Minimization

Principle: Only share data necessary for integrationExample:
  • Accounting sync: Invoice data, not medical records
  • Marketing: Client email, not medical history
  • Analytics: Aggregate metrics, not individual patient details
API: Use query parameters to filter fields returned
3

Audit Logging

All API Access Logged:
  • Timestamp
  • API key used
  • Resource accessed
  • Action performed (read, create, update, delete)
  • Result (success or error)
Review: Settings \u2192 Audit Log \u2192 Filter: API AccessRetention: 1 year minimum for compliance
4

Third-Party Vendor Review

Before Integration:
  • Review vendor security policies
  • Confirm data encryption
  • Verify compliance certifications (SOC 2, ISO 27001)
  • Check data retention and deletion policies
Business Associate Agreement: Required for any vendor accessing patient data

Troubleshooting

Symptom: All API requests return 401 errorCauses:
  • Invalid API key
  • Expired API key
  • Revoked API key
  • Missing Authorization header
Solutions:
  1. Verify API key format: pk_live_... or pk_test_...
  2. Check API key status: Settings \u2192 API Access
  3. Regenerate key if expired/revoked
  4. Verify header: Authorization: Bearer YOUR_KEY
  5. Test with curl:
    curl -H "Authorization: Bearer pk_live_..." \
      https://api.paw-and-care.com/v1/appointments
    
Symptom: Events occurring but webhook not triggeredCauses:
  • Endpoint URL unreachable
  • Endpoint returning non-200 status
  • Firewall blocking Paw & Care IPs
  • Webhook disabled or deleted
Solutions:
  1. Test endpoint manually: Send POST request from Postman
  2. Check webhook status: Settings \u2192 Webhooks
  3. View webhook logs: Shows delivery attempts and errors
  4. Verify endpoint returns 200 OK
  5. Check server logs for incoming requests
  6. Whitelist Paw & Care IPs if firewall enabled
  7. Use webhook testing tool: https://webhook.site
Symptom: 429 Too Many Requests errorCauses:
  • Too many API requests in short time
  • Bulk import without rate limiting
  • Infinite loop in integration code
Solutions:
  1. Implement exponential backoff:
    import time
    
    for attempt in range(5):
        response = requests.get(url, headers=headers)
        if response.status_code == 429:
            wait = 2 ** attempt  # 1s, 2s, 4s, 8s, 16s
            time.sleep(wait)
        else:
            break
    
  2. Batch requests: Use bulk endpoints where available
  3. Cache data: Don’t request same data repeatedly
  4. Request limit increase: Contact support for higher limits
Symptom: Changes in Paw & Care not appearing in integrated systemCauses:
  • Integration credentials expired
  • Mapping configuration incorrect
  • API permissions insufficient
  • Integration paused or disabled
Solutions:
  1. Check integration status: Settings \u2192 Integrations
  2. Reconnect integration: Re-authorize OAuth
  3. Verify field mappings: Ensure fields aligned
  4. Check API key permissions: Read/Write access
  5. Review error logs: Settings \u2192 Integration Logs
  6. Manual sync: Trigger sync button to test

Next Steps

API Documentation

Complete API reference with endpoint details and examples

Reporting

Use integrated data for advanced analytics and reporting

Bulk Operations

Automate bulk operations using API and webhooks

Support

Contact support for integration assistance and custom development

Build docs developers (and LLMs) love