REST API v1

Proxiant API

Build integrations, automate workflows, and connect Proxiant to your existing systems. Our REST API gives you full programmatic access to jobs, clients, attempts, affidavits, and more.

Quickstart

Get up and running in three steps. You'll have live data in under two minutes.

Generate an API key

Go to Settings → API → New Key. Give it a name, select the scopes your integration needs, and copy it — it's only shown once.

Make your first request

Pass your key in the Authorization header on every request:

bash
curl https://api.proxiant.co/v1/jobs \
  -H "Authorization: Bearer prx_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json"

Receive a paginated response

The response envelope wraps your data with metadata for pagination:

json
{
  "data": [
    {
      "id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
      "job_number": "FH-2025-04812",
      "status": "in_progress",
      "recipient_name": "James R. Thornton"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 50,
    "total": 243
  }
}

Base URL & Versioning

All API requests use this base URL:

base url
https://api.proxiant.co/v1

The current version is v1. We follow a conservative versioning policy:

  • Breaking changes — increment the version (v1 → v2). You get advance notice and a migration guide.
  • Non-breaking additions — new fields, new endpoints, new event types — are added without a version bump.
💡
Write code defensively — ignore unknown JSON fields rather than erroring on them, and your integration will survive non-breaking additions without changes.

Authentication

The Proxiant API uses bearer token authentication. Include your API key in the Authorization header of every request. Keys are firm-scoped — a key can only access data belonging to the firm it was created for.

bash
Authorization: Bearer prx_live_xxxxxxxxxxxxxxxxxxxx

Keys use the prefix prx_live_ for production. Sandbox keys (fh_test_) are coming soon. See the Authentication reference for full details on key management, permission scopes, and security best practices.

Request Format

A few conventions apply to all requests and responses:

ConventionDetails
Content-TypeAll requests with a body must include Content-Type: application/json
Response formatAll responses are JSON, always wrapped in a data envelope
Dates & timestampsISO 8601 format: 2025-04-16T14:30:00Z
IDsUUID v4 strings, e.g. 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Null vs. absentOptional fields not set are returned as null, not omitted
BooleanJSON true / false, never strings

Pagination

All list endpoints are paginated. Use page and per_page query parameters to navigate through results. The default page size is 50; the maximum is 100.

bash
# Fetch page 3, 25 results per page
curl "https://api.proxiant.co/v1/jobs?page=3&per_page=25" \
  -H "Authorization: Bearer prx_live_xxxxxxxxxxxx"

Every paginated response includes a meta object:

json
{
  "data": [ /* ... results ... */ ],
  "meta": {
    "page":     3,
    "per_page": 25,
    "total":    243    // total records matching your filters
  }
}

To detect the last page: (page - 1) * per_page + data.length >= total, or when data is empty.

Errors

Errors follow a consistent envelope. The HTTP status code communicates the category; the error.code field gives the specific machine-readable reason.

jsonExample error response
{
  "error": {
    "code":    "unprocessable",
    "message": "Validation failed",
    "details": {
      "recipient_name": ["can't be blank"],
      "service_address.zip": ["is invalid"]
    }
  }
}
StatusCodeMeaning
400bad_requestInvalid request body or query parameters
401unauthorizedMissing or invalid API key
403forbiddenValid key but insufficient scope for this action
404not_foundResource doesn't exist or is outside your firm's scope
409conflictDuplicate or conflicting operation (e.g., already exists)
422unprocessableValidation failed — details contains field-level errors
429rate_limitedExceeded 1,000 requests/minute for this key
500server_errorSomething went wrong on our end — retry with backoff

Rate Limits

Each API key is limited to 1,000 requests per minute. Rate limit state is included on every response:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per minute (always 1000)
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets

When you exceed the limit, you receive a 429 rate_limited response. Wait until X-RateLimit-Reset before retrying. For bulk operations, consider adding a small delay between batches to stay well under the limit.

Resources

The API is organized around these primary resources. Each has its own reference page with full endpoint documentation, parameter tables, and example requests and responses.

ResourceDescriptionKey Endpoints
Jobs Service jobs — the core work unit in Proxiant GET /jobs · POST /jobs · GET /jobs/:id · PATCH /jobs/:id
Attempts Individual service attempts against a job GET /jobs/:id/attempts · POST /jobs/:id/attempts
Clients Law firm and client records GET /clients · POST /clients · PATCH /clients/:id
Courts Court records (read-only) GET /courts · GET /courts/:id
Invoices Client invoices and billing records GET /invoices · GET /invoices/:id
Affidavits Generated affidavits of service GET /affidavits · GET /affidavits/:id/download
Webhooks Event subscriptions for real-time notifications GET /webhooks · POST /webhooks · DELETE /webhooks/:id