API endpoints for integrating enforcifyPRO waiver management with ePRO parking system
How to Map ePRO Clients to enforcifyPRO:
Each Client record in enforcifyPRO now has an optional epro_client_id field:
API Usage:
When ePRO calls the APIs, they'll use their epro_client_id value. The API will look up the corresponding enforcifyPRO Client record to access quotas, locations, and settings.
Note: If the epro_client_id field is empty, ePRO can still use the enforcifyPRO client_id directly in API calls.
The Challenge:
Clients need to manage both:
Why Use ePRO as Single Login Portal:
1. ePRO is Source of Truth for Parking Rules
2. Better User Experience
3. Logical Workflow Integration
4. Simpler for Operators
How It Works:
Multi-Source Architecture:
This integration is source-agnostic for violations:
The waiver APIs only need violation_id and client_id - they don't care about the violation source. This means ePRO can manage permits while enforcifyPRO handles waivers for violations captured by ANY system.
Technical Benefits:
Base URL
https://enforcify-pro-213b978b.base44.appAuthentication
Credentials
Pre-configured in enforcifyPRO secrets: EPRO_API_USERNAME / EPRO_API_PASSWORD
/api/clientPortalQuotaCheck a client's waiver quota and usage for the current month.
Query Parameters:
client_id (required) - The enforcifyPRO Client ID (or ePRO Client ID if mapped)cURL Example:
curl -u "username:password" \ "https://enforcify-pro-213b978b.base44.app/api/clientPortalQuota?client_id=abc123"
/api/clientPortalWaiverRequestSubmit a waiver request for a violation. Auto-approves if within quota or during grace period.
Request Body:
{
"client_id": "abc123",
"violation_id": "violation_xyz",
"reason": "Guest of hotel - checked in at reception",
"evidence_urls": [
"https://example.com/proof.jpg"
]
}cURL Example:
curl -u "username:password" \
-X POST \
-H "Content-Type: application/json" \
-d '{...}' \
"https://enforcify-pro-213b978b.base44.app/api/clientPortalWaiverRequest"/api/clientPortalWaiverRequestsGet a list of waiver requests for a client.
Query Parameters:
client_id (required) - The enforcifyPRO Client ID (or ePRO Client ID if mapped)status (optional) - Filter by status (pending_approval, approved, denied)limit (optional) - Max results (default: 50)cURL Example:
curl -u "username:password" \ "https://enforcify-pro-213b978b.base44.app/api/clientPortalWaiverRequests?client_id=abc123&status=pending_approval&limit=20"
/api/clientPortalWaiverStatusGet detailed status of a specific waiver request.
Query Parameters:
waiver_request_id (required) - The waiver request IDcURL Example:
curl -u "username:password" \ "https://enforcify-pro-213b978b.base44.app/api/clientPortalWaiverStatus?waiver_request_id=waiver_124"
Check Quota (optional)
Show user if they have quota remaining before submitting waiver.
Submit Waiver Request
POST to /api/clientPortalWaiverRequest with violation details and evidence.
Show Result
If auto_approved: "Waiver approved!" | If pending: "Awaiting approval - Fee: $X"
Poll for Updates (for pending waivers)
GET /api/clientPortalWaiverStatus periodically until status changes.
Auto-Approval Logic: Waivers are auto-approved if within monthly quota or during grace period. Over-quota waivers require admin approval (unless configured otherwise).
Violation Status: When waiver is approved, violation status changes to "waived" and won't appear in payment portal or escalate to collections.
Time Zones: All timestamps are in UTC (ISO 8601 format). Monthly quota resets on 1st of month at 00:00 UTC.
Rate Limits: 100 requests per minute per IP, with burst support of 10 requests per second.
Full API Specification
Complete markdown documentation with all response examples and error codes