MENU navbar-image

Introduction

A developer-first infrastructure layer for construction payment compliance. Manage organizations, projects, notices, waivers, pay applications, documents, and delivery orders through a versioned REST API.

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer Bearer {YOUR_BEARER_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Authenticate using a Sanctum personal access token. Include it as Authorization: Bearer <token>. Most endpoints also require organization context, supplied via the X-Organization-UUID header, which tells the API which organization's credits to draw from and which organization's data to scope the request to. Organization context is resolved in this order: (1) the org:<uuid> ability on the token, if the token was restricted to a single organization when it was created, (2) the X-Organization-UUID header, (3) the requesting user's first organization membership. If none of these resolve to an organization the user belongs to, the API returns a 422 error.

Audit Logs

Read-only record of who changed what.

List audit log entries

requires authentication

Paginated record of who changed what, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/audit-logs?organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&action=updated&auditable_type=notice&auditable_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/audit-logs"
);

const params = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "action": "updated",
    "auditable_type": "notice",
    "auditable_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "6d60b779-947b-4d7f-80e5-fe876825f03f",
            "organization_id": "4946c450-68b3-4330-918c-96c3142cb979",
            "user_id": null,
            "action": "created",
            "auditable_type": "App\\Domain\\Organizations\\Models\\Organization",
            "auditable_id": 681,
            "old_values": null,
            "new_values": {
                "name": "Cronin, Dare and Hauck"
            },
            "ip_address": "153.39.9.254",
            "user_agent": "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_8_5) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/83.0.4512.11 Safari/532.2 Edg/83.01091.24",
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "0442801b-3b2a-4ac2-96a0-ba7bdba05709",
            "organization_id": "37d6e971-b726-40ef-a5d0-a8cd28bbfbbc",
            "user_id": null,
            "action": "deleted",
            "auditable_type": "App\\Domain\\Organizations\\Models\\Organization",
            "auditable_id": 482,
            "old_values": null,
            "new_values": {
                "name": "Dibbert Inc"
            },
            "ip_address": "27.135.245.109",
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_7 rv:6.0) Gecko/20210106 Firefox/35.0",
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/audit-logs

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

action   string     

Filter by action (created, updated, deleted, ...). Example: updated

auditable_type   string     

Filter by the changed record type. Example: notice

auditable_id   string     

Filter by the changed record UUID. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Retrieve an audit log entry

requires authentication

Returns a single audit entry by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/audit-logs/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/audit-logs/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "2cc86c0b-23cd-44bc-a1fb-626296daba7b",
        "organization_id": "b8cf1083-8a52-4447-ae92-644c348c4e57",
        "user_id": null,
        "action": "created",
        "auditable_type": "App\\Domain\\Organizations\\Models\\Organization",
        "auditable_id": 681,
        "old_values": null,
        "new_values": {
            "name": "Cronin, Dare and Hauck"
        },
        "ip_address": "153.39.9.254",
        "user_agent": "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_8_5) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/83.0.4512.11 Safari/532.2 Edg/83.01091.24",
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/audit-logs/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Billing

Subscription plans and Stripe billing.

List billing plans

requires authentication

Available subscription plans with pricing and monthly credit grants.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/billing/plans" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/billing/plans"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "plans": [
        {
            "key": "growth",
            "label": "Growth",
            "monthly_credits": 250,
            "cls_eligible": true
        }
    ]
}
 

Request      

GET api/v1/billing/plans

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Create a billing setup intent

requires authentication

Returns a Stripe SetupIntent client secret so the client can save a card via Stripe Elements.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/billing/setup-intent" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/billing/setup-intent"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "organization_uuid": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "client_secret": "seti_..._secret_...",
    "publishable_key": "pk_..."
}
 

Request      

GET api/v1/billing/setup-intent

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Subscribe to a plan

requires authentication

Subscribes the organization to a monthly plan using a saved or supplied payment method.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/billing/subscribe" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"plan\": \"growth\",
    \"interval\": \"monthly\",
    \"payment_method\": \"pm_1Q1abcXyz\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/billing/subscribe"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "plan": "growth",
    "interval": "monthly",
    "payment_method": "pm_1Q1abcXyz"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "organization_uuid": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "plan": "growth",
    "status": "active",
    "active": true
}
 

Request      

POST api/v1/billing/subscribe

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

plan   string     

Plan key to subscribe the organization to (e.g. starter, growth, scale). Example: growth

Must be one of:
  • starter
  • growth
  • scale
interval   string  optional    

Billing interval. Defaults to monthly. Example: monthly

Must be one of:
  • monthly
  • annual
payment_method   string  optional    

Optional Stripe PaymentMethod id from Stripe Elements. Omit to use the org default payment method. Example: pm_1Q1abcXyz

Cancel the subscription

requires authentication

Cancels the active subscription at period end.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/billing/cancel" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/billing/cancel"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "organization_uuid": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "cancelled": true,
    "ends_at": "2026-10-01T00:00:00+00:00"
}
 

Request      

POST api/v1/billing/cancel

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Stripe billing callback

Inbound Stripe webhook. Signature-verified; not called by API clients.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/stripe" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/stripe"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "received": true
}
 

Request      

POST api/v1/webhooks/stripe

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Contacts

People attached to organizations and parties.

List contacts

requires authentication

Paginated contacts visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/contacts?organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&division_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&is_active=1&search=architecto&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/contacts"
);

const params = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "is_active": "1",
    "search": "architecto",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "00557cfc-01e0-4325-a697-7756508b6a8b",
            "organization_id": "f0be03f8-988d-4347-9272-c9794db598b7",
            "division_id": null,
            "first_name": "Audra",
            "last_name": "Crooks",
            "email": "gulgowski.asia@example.com",
            "phone": "6469808414",
            "title": null,
            "type": null,
            "is_active": true,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "54be3bea-f359-4953-86e5-63c2c631add6",
            "organization_id": "840b95ec-4bdb-4dbb-901b-01d6aa1f5713",
            "division_id": null,
            "first_name": "Roderick",
            "last_name": "Leffler",
            "email": "schultz.audrey@example.org",
            "phone": null,
            "title": null,
            "type": null,
            "is_active": true,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/contacts

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

division_id   string     

Filter to this division (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

is_active   boolean     

Filter by active state. Example: true

search   string     

Case-insensitive partial match on first name, last name and email. Example: architecto

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a contact

requires authentication

Creates a contact and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/contacts" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"first_name\": \"Jane\",
    \"last_name\": \"Smith\",
    \"email\": \"ops@example.com\",
    \"phone\": \"512-555-0100\",
    \"title\": \"Project Manager\",
    \"type\": \"primary\",
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/contacts"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "first_name": "Jane",
    "last_name": "Smith",
    "email": "ops@example.com",
    "phone": "512-555-0100",
    "title": "Project Manager",
    "type": "primary",
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "95b40a09-7be2-4fa7-b8ba-215e3f299ad5",
        "organization_id": "82164c53-36c8-44a1-800f-3e60f9730490",
        "division_id": null,
        "first_name": "Christelle",
        "last_name": "Bailey",
        "email": null,
        "phone": "6290005642",
        "title": "Geographer",
        "type": "primary",
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/contacts

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

division_id   string  optional    

Optional UUID of a division to scope this contact to. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

first_name   string     

Contact first name. Must not be greater than 255 characters. Example: Jane

last_name   string     

Contact last name. Must not be greater than 255 characters. Example: Smith

email   string  optional    

Contact email address. Must be a valid email address. Must not be greater than 255 characters. Example: ops@example.com

phone   string  optional    

Contact phone number. Must not be greater than 255 characters. Example: 512-555-0100

title   string  optional    

Job title. Must not be greater than 255 characters. Example: Project Manager

type   string  optional    

Contact role for routing correspondence. Example: primary

Must be one of:
  • primary
  • billing
  • legal
is_active   boolean  optional    

Whether the record is active. Defaults to true. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a contact

requires authentication

Returns a single contact by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/contacts/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/contacts/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "63004088-008e-4d17-923e-698133e66c64",
        "organization_id": "d517c34c-8020-48e3-a529-612d95b509d7",
        "division_id": null,
        "first_name": "Morgan",
        "last_name": "Hirthe",
        "email": "emelie.baumbach@example.net",
        "phone": "1607257447",
        "title": null,
        "type": null,
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/contacts/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a contact

requires authentication

Applies a partial update to a contact and returns it.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/contacts/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"first_name\": \"Jane\",
    \"last_name\": \"Smith\",
    \"email\": \"ops@example.com\",
    \"phone\": \"512-555-0100\",
    \"title\": \"Project Manager\",
    \"type\": \"primary\",
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/contacts/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "first_name": "Jane",
    "last_name": "Smith",
    "email": "ops@example.com",
    "phone": "512-555-0100",
    "title": "Project Manager",
    "type": "primary",
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "08a8a183-f686-4b63-b0e2-12037e76a415",
        "organization_id": "4ea63b38-5f87-4001-8dcb-d34cd3557b0a",
        "division_id": null,
        "first_name": "Christelle",
        "last_name": "Bailey",
        "email": null,
        "phone": "6290005642",
        "title": "Geographer",
        "type": "primary",
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/contacts/{uuid}

PATCH api/v1/contacts/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

division_id   string  optional    

Optional UUID of a division to scope this contact to. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

first_name   string  optional    

Contact first name. Must not be greater than 255 characters. Example: Jane

last_name   string  optional    

Contact last name. Must not be greater than 255 characters. Example: Smith

email   string  optional    

Contact email address. Must be a valid email address. Must not be greater than 255 characters. Example: ops@example.com

phone   string  optional    

Contact phone number. Must not be greater than 255 characters. Example: 512-555-0100

title   string  optional    

Job title. Must not be greater than 255 characters. Example: Project Manager

type   string  optional    

Contact role for routing correspondence. Example: primary

Must be one of:
  • primary
  • billing
  • legal
is_active   boolean  optional    

Whether the record is active. Defaults to true. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Delete a contact

requires authentication

Soft-deletes the contact.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/contacts/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/contacts/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Contact deleted."
}
 

Request      

DELETE api/v1/contacts/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Credits

Balance, price previews and ad-hoc credit purchases.

Get credit balance

requires authentication

Spendable balances (free, CLS-eligible) plus credits on hold -- set aside for a charge whose final amount is not known yet, such as full-service postage -- and what each hold is for. Held credits are not spendable; they are charged or returned when the work completes.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/credits/balance" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/credits/balance"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "organization_uuid": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "balance": {
        "total": 4,
        "free": 0,
        "cls_eligible": 4
    },
    "held": 36,
    "holds": [
        {
            "id": "5c1d…",
            "amount": 36,
            "description": "Postage for 3 recipients — Riverbend Medical Office",
            "event_type": "fulfillment_postage",
            "for": {
                "type": "fulfillment_request",
                "id": "7c9de01e-29ee-4814-a9c8-25527412f041"
            },
            "created_at": "2026-10-04T20:00:00+00:00"
        }
    ]
}
 

Request      

GET api/v1/credits/balance

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Preview an event price

requires authentication

Returns the credit cost of a billable event without charging it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/credits/price" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"event_type\": \"mail_sending\",
    \"state\": \"CA\",
    \"recipients\": 1,
    \"document_type\": \"notice\",
    \"fulfillment_scope\": \"research\",
    \"order_type\": \"mail\",
    \"mail_class\": \"certified\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/credits/price"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "event_type": "mail_sending",
    "state": "CA",
    "recipients": 1,
    "document_type": "notice",
    "fulfillment_scope": "research",
    "order_type": "mail",
    "mail_class": "certified"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "event_type": "mail_sending",
    "credits": 2,
    "cls_billable": true
}
 

Request      

POST api/v1/credits/price

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

event_type   string     

The billable event to price (e.g. document_generation, mail_sending, notice_research, document_order). Must not be greater than 100 characters. Example: mail_sending

state   string  optional    

Optional two-letter state code, for state-dependent pricing. Must be 2 characters. Example: CA

recipients   integer  optional    

Number of recipients, for per-recipient pricing (1 to 10000). Must be at least 1. Must not be greater than 10000. Example: 1

document_type   string  optional    

Optional document type, for type-dependent pricing. Must not be greater than 100 characters. Example: notice

fulfillment_scope   string  optional    

Optional fulfillment scope (e.g. research, full_service), for notice_research / fulfillment_notice_research pricing. Must not be greater than 50 characters. Example: research

order_type   string  optional    

Optional document order type (defaults to mail), for document_order pricing. Must not be greater than 50 characters. Example: mail

mail_class   string  optional    

Optional mail class (defaults to first_class), for mailed document_order pricing. Must not be greater than 50 characters. Example: certified

Purchase credits

requires authentication

Buys ad-hoc CLS-eligible credits (USD 1 = 1 credit) against the org default payment method.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/credits/purchase" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"credits\": 100
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/credits/purchase"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "credits": 100
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "purchased": 100,
    "balance": 350
}
 

Request      

POST api/v1/credits/purchase

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

credits   integer     

Number of credits to buy. Sold in whole-dollar increments (USD 1 = 1 credit). Must be at least 1. Must not be greater than 1000000. Example: 100

Divisions

Claimant identities. Every generated document is attributed to a division; the per-tier claimant cap applies here.

List divisions

requires authentication

Paginated divisions visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/divisions?organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&is_active=1&search=architecto&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/divisions"
);

const params = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "is_active": "1",
    "search": "architecto",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "fd897fec-58cf-46c7-b86a-82815e3a521e",
            "organization_id": "93943636-6427-426d-bc67-14600fdf8da1",
            "name": "eius et",
            "code": null,
            "description": "Et fugiat sunt nihil accusantium.",
            "address_line_1": "1582 Lexus Mount Apt. 498",
            "address_line_2": "Apt. 724",
            "city": "Lake Haven",
            "state": "LA",
            "zip": "19279",
            "zip_plus_4": "5744",
            "country_code": "US",
            "phone": "0591350525",
            "email": null,
            "license_number": "LIC-915066",
            "is_active": true,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "20df3f9e-f1ec-4165-8dd7-df4de2ba2ca6",
            "organization_id": "43095bdf-93d1-4081-a123-b7e411e4e5ad",
            "name": "est dignissimos",
            "code": null,
            "description": null,
            "address_line_1": "11084 Palma Stream Apt. 368",
            "address_line_2": null,
            "city": "Artborough",
            "state": "NV",
            "zip": "18607-5439",
            "zip_plus_4": null,
            "country_code": "US",
            "phone": "8474860372",
            "email": null,
            "license_number": null,
            "is_active": true,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/divisions

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

is_active   boolean     

Filter by active state. Example: true

search   string     

Case-insensitive partial match on name and code. Example: architecto

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a division

requires authentication

Creates a division and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/divisions" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"name\": \"Acme Mechanical, Northwest Division\",
    \"code\": \"NW\",
    \"description\": \"Eius et animi quos velit et.\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"v\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"zip_plus_4\": \"1234\",
    \"country_code\": \"US\",
    \"phone\": \"512-555-0100\",
    \"email\": \"ops@example.com\",
    \"license_number\": \"LIC-558231\",
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/divisions"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "name": "Acme Mechanical, Northwest Division",
    "code": "NW",
    "description": "Eius et animi quos velit et.",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "v",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "zip_plus_4": "1234",
    "country_code": "US",
    "phone": "512-555-0100",
    "email": "ops@example.com",
    "license_number": "LIC-558231",
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "1c8fda6d-3b76-4986-9c31-a7ae9474ad55",
        "organization_id": "54f60b87-43dc-4960-80b9-a0c9b66ec1f8",
        "name": "sunt nihil",
        "code": "DIV-841",
        "description": null,
        "address_line_1": "78142 Nick Field",
        "address_line_2": "Apt. 724",
        "city": "Lake Haven",
        "state": "LA",
        "zip": "19279",
        "zip_plus_4": "5744",
        "country_code": "US",
        "phone": "0591350525",
        "email": null,
        "license_number": "LIC-915066",
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/divisions

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

name   string     

Division / claimant legal name as it should appear on documents. Must not be greater than 255 characters. Example: Acme Mechanical, Northwest Division

code   string  optional    

Optional short internal code for the division. Must not be greater than 255 characters. Example: NW

description   string  optional    

Optional internal description. Must not be greater than 10000 characters. Example: Eius et animi quos velit et.

address_line_1   string     

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: v

city   string     

City. Must not be greater than 100 characters. Example: Austin

state   string     

Two-letter US state code. Must be 2 characters. Example: CA

zip   string     

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

zip_plus_4   string  optional    

Optional 4-digit ZIP+4 extension. Must not be greater than 4 characters. Example: 1234

country_code   string  optional    

Two-letter ISO country code. Defaults to US. Must be 2 characters. Example: US

phone   string  optional    

Contact phone number. Must not be greater than 20 characters. Example: 512-555-0100

email   string  optional    

Contact email address. Must be a valid email address. Must not be greater than 255 characters. Example: ops@example.com

license_number   string  optional    

Contractor license number for this claimant. Rendered on documents; cannot be overridden per-document. Must not be greater than 255 characters. Example: LIC-558231

is_active   boolean  optional    

Whether the record is active. Defaults to true. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a division

requires authentication

Returns a single division by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/divisions/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/divisions/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "44084e8c-b20c-42a3-95ab-03e83396d28b",
        "organization_id": "05fb656b-74f5-4a48-bdeb-54096eba65ac",
        "name": "aut adipisci",
        "code": "DIV-432",
        "description": null,
        "address_line_1": "38862 Ferne Locks Suite 058",
        "address_line_2": "Apt. 067",
        "city": "Lefflerhaven",
        "state": "TX",
        "zip": "58408-7043",
        "zip_plus_4": null,
        "country_code": "US",
        "phone": "6912823169",
        "email": "kconsidine@kshlerin.com",
        "license_number": null,
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/divisions/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a division

requires authentication

Applies a partial update to a division and returns it.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/divisions/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"name\": \"Acme Mechanical, Northwest Division\",
    \"code\": \"NW\",
    \"description\": \"Eius et animi quos velit et.\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"v\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"zip_plus_4\": \"1234\",
    \"country_code\": \"US\",
    \"phone\": \"512-555-0100\",
    \"email\": \"ops@example.com\",
    \"license_number\": \"LIC-558231\",
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/divisions/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "name": "Acme Mechanical, Northwest Division",
    "code": "NW",
    "description": "Eius et animi quos velit et.",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "v",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "zip_plus_4": "1234",
    "country_code": "US",
    "phone": "512-555-0100",
    "email": "ops@example.com",
    "license_number": "LIC-558231",
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "9e15853d-e4e0-418e-b0a6-a2f05a10055d",
        "organization_id": "a351b06e-881f-42ce-a061-c5bc3905a1c3",
        "name": "sunt nihil",
        "code": "DIV-841",
        "description": null,
        "address_line_1": "78142 Nick Field",
        "address_line_2": "Apt. 724",
        "city": "Lake Haven",
        "state": "LA",
        "zip": "19279",
        "zip_plus_4": "5744",
        "country_code": "US",
        "phone": "0591350525",
        "email": null,
        "license_number": "LIC-915066",
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/divisions/{uuid}

PATCH api/v1/divisions/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

name   string  optional    

Division / claimant legal name as it should appear on documents. Must not be greater than 255 characters. Example: Acme Mechanical, Northwest Division

code   string  optional    

Optional short internal code for the division. Must not be greater than 255 characters. Example: NW

description   string  optional    

Optional internal description. Must not be greater than 10000 characters. Example: Eius et animi quos velit et.

address_line_1   string  optional    

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: v

city   string  optional    

City. Must not be greater than 100 characters. Example: Austin

state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

zip   string  optional    

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

zip_plus_4   string  optional    

Optional 4-digit ZIP+4 extension. Must not be greater than 4 characters. Example: 1234

country_code   string  optional    

Two-letter ISO country code. Defaults to US. Must be 2 characters. Example: US

phone   string  optional    

Contact phone number. Must not be greater than 20 characters. Example: 512-555-0100

email   string  optional    

Contact email address. Must be a valid email address. Must not be greater than 255 characters. Example: ops@example.com

license_number   string  optional    

Contractor license number for this claimant. Rendered on documents; cannot be overridden per-document. Must not be greater than 255 characters. Example: LIC-558231

is_active   boolean  optional    

Whether the record is active. Defaults to true. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Delete a division

requires authentication

Deletes the division. A division that is a project claimant cannot be deleted (422).

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/divisions/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/divisions/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Division deleted."
}
 

Request      

DELETE api/v1/divisions/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Document Orders

Fulfillment orders (mail, filing, research, recording) with server-authoritative pricing.

List document orders

requires authentication

Paginated fulfillment orders visible to the caller.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/document-orders?status=architecto&billing_status=architecto&order_type=mail&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/document-orders"
);

const params = {
    "status": "architecto",
    "billing_status": "architecto",
    "order_type": "mail",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "f0f775ca-33d3-4d8e-8709-07ddbc456431",
            "status": "pending",
            "order_type": "mail",
            "billing": {
                "status": "pending",
                "method": "credit_balance",
                "amount_cents": 1288,
                "invoiced_at": null,
                "paid_at": null,
                "invoice_reference": null,
                "payment_reference": null
            },
            "tracking_number": null,
            "carrier": null,
            "mail_class": "first_class",
            "recipient": {
                "name": "Macey Rempel PhD",
                "address_line_1": "4529 Tillman Ridges Suite 142",
                "address_line_2": null,
                "city": "East Nickshire",
                "state": "MO",
                "zip": "33724"
            },
            "external_provider_id": null,
            "shipped_at": null,
            "delivered_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "1d8d3a1f-d666-490a-a3a1-805aaa81fbdd",
            "status": "pending",
            "order_type": "mail",
            "billing": {
                "status": "pending",
                "method": "credit_balance",
                "amount_cents": 1392,
                "invoiced_at": null,
                "paid_at": null,
                "invoice_reference": null,
                "payment_reference": null
            },
            "tracking_number": null,
            "carrier": null,
            "mail_class": "first_class",
            "recipient": {
                "name": "Prof. Juvenal O'Kon",
                "address_line_1": "6750 Alfonso Causeway",
                "address_line_2": null,
                "city": "East Danielaborough",
                "state": "DE",
                "zip": "95083"
            },
            "external_provider_id": null,
            "shipped_at": null,
            "delivered_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/document-orders

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

status   string     

Filter by lifecycle status. Example: architecto

billing_status   string     

Filter by billing status. Example: architecto

order_type   string     

Filter by order type: mail, filing, research or recording. Example: mail

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a document order

requires authentication

Orders fulfillment (mail / filing / research / recording) for a generated document. Price is computed server-side.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/document-orders" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"document_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"order_type\": \"mail\",
    \"billing_method\": \"credit_balance\",
    \"mail_class\": \"certified\",
    \"recipient_name\": \"Property Owner LLC\",
    \"recipient_address_line_1\": \"200 Main Street\",
    \"recipient_address_line_2\": \"b\",
    \"recipient_city\": \"Austin\",
    \"recipient_state\": \"TX\",
    \"recipient_zip\": \"78702\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/document-orders"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "document_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "order_type": "mail",
    "billing_method": "credit_balance",
    "mail_class": "certified",
    "recipient_name": "Property Owner LLC",
    "recipient_address_line_1": "200 Main Street",
    "recipient_address_line_2": "b",
    "recipient_city": "Austin",
    "recipient_state": "TX",
    "recipient_zip": "78702"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "dddaac1e-8a19-4a13-9a07-8b74f4a33096",
        "status": "pending",
        "order_type": "mail",
        "billing": {
            "status": "pending",
            "method": "credit_balance",
            "amount_cents": 1288,
            "invoiced_at": null,
            "paid_at": null,
            "invoice_reference": null,
            "payment_reference": null
        },
        "tracking_number": null,
        "carrier": null,
        "mail_class": "first_class",
        "recipient": {
            "name": "Macey Rempel PhD",
            "address_line_1": "4529 Tillman Ridges Suite 142",
            "address_line_2": null,
            "city": "East Nickshire",
            "state": "MO",
            "zip": "33724"
        },
        "external_provider_id": null,
        "shipped_at": null,
        "delivered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/document-orders

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

document_id   string     

UUID of the generated document to fulfill. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

organization_id   string  optional    

Optional UUID of the organization to bill. Defaults to the document organization. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

order_type   string  optional    

Fulfillment channel. Example: mail

Must be one of:
  • mail
  • filing
  • research
  • recording
billing_method   string  optional    

How the order is paid for. Example: credit_balance

Must be one of:
  • prepay
  • invoice
  • credit_balance
mail_class   string  optional    

USPS mail class (mailed orders only). Example: certified

Must be one of:
  • first_class
  • certified
  • priority
recipient_name   string     

Name of the party the document is sent to. Must not be greater than 255 characters. Example: Property Owner LLC

recipient_address_line_1   string     

Recipient street address, line 1. Must not be greater than 255 characters. Example: 200 Main Street

recipient_address_line_2   string  optional    

Recipient street address, line 2. Must not be greater than 255 characters. Example: b

recipient_city   string     

Recipient city. Must not be greater than 255 characters. Example: Austin

recipient_state   string     

Recipient two-letter US state code. Must be 2 characters. Example: TX

recipient_zip   string     

Recipient postal code. Must not be greater than 10 characters. Example: 78702

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a document order

requires authentication

Returns a single order by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "dc59e141-1854-4a8a-a966-e87b18d6c188",
        "status": "pending",
        "order_type": "mail",
        "billing": {
            "status": "pending",
            "method": "credit_balance",
            "amount_cents": 1118,
            "invoiced_at": null,
            "paid_at": null,
            "invoice_reference": null,
            "payment_reference": null
        },
        "tracking_number": null,
        "carrier": null,
        "mail_class": "first_class",
        "recipient": {
            "name": "Miss Pearl Hauck",
            "address_line_1": "99279 Kenyatta Knoll",
            "address_line_2": null,
            "city": "Careymouth",
            "state": "IA",
            "zip": "64310-6432"
        },
        "external_provider_id": null,
        "shipped_at": null,
        "delivered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/document-orders/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a document order

requires authentication

Edits recipient / mail-class details while the order is still editable.

Example request:
curl --request PATCH \
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"recipient_name\": \"Property Owner LLC\",
    \"recipient_address_line_1\": \"200 Main Street\",
    \"recipient_address_line_2\": \"b\",
    \"recipient_city\": \"Austin\",
    \"recipient_state\": \"TX\",
    \"recipient_zip\": \"78702\",
    \"mail_class\": \"certified\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "recipient_name": "Property Owner LLC",
    "recipient_address_line_1": "200 Main Street",
    "recipient_address_line_2": "b",
    "recipient_city": "Austin",
    "recipient_state": "TX",
    "recipient_zip": "78702",
    "mail_class": "certified"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "e9f1593a-3ad8-48e6-b32b-393e3c0d91d3",
        "status": "pending",
        "order_type": "mail",
        "billing": {
            "status": "pending",
            "method": "credit_balance",
            "amount_cents": 1288,
            "invoiced_at": null,
            "paid_at": null,
            "invoice_reference": null,
            "payment_reference": null
        },
        "tracking_number": null,
        "carrier": null,
        "mail_class": "first_class",
        "recipient": {
            "name": "Macey Rempel PhD",
            "address_line_1": "4529 Tillman Ridges Suite 142",
            "address_line_2": null,
            "city": "East Nickshire",
            "state": "MO",
            "zip": "33724"
        },
        "external_provider_id": null,
        "shipped_at": null,
        "delivered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

PATCH api/v1/document-orders/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

recipient_name   string  optional    

Name of the party the document is sent to. Must not be greater than 255 characters. Example: Property Owner LLC

recipient_address_line_1   string  optional    

Recipient street address, line 1. Must not be greater than 255 characters. Example: 200 Main Street

recipient_address_line_2   string  optional    

Recipient street address, line 2. Must not be greater than 255 characters. Example: b

recipient_city   string  optional    

Recipient city. Must not be greater than 255 characters. Example: Austin

recipient_state   string  optional    

Recipient two-letter US state code. Must be 2 characters. Example: TX

recipient_zip   string  optional    

Recipient postal code. Must not be greater than 10 characters. Example: 78702

mail_class   string  optional    

USPS mail class. Example: certified

Must be one of:
  • first_class
  • certified
  • priority
metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Cancel a document order

requires authentication

Cancels the order if it has not yet been dispatched.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed/cancel" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed/cancel"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "1da9bc80-752f-410b-aa92-35579cde1699",
        "status": "pending",
        "order_type": "mail",
        "billing": {
            "status": "pending",
            "method": "credit_balance",
            "amount_cents": 1118,
            "invoiced_at": null,
            "paid_at": null,
            "invoice_reference": null,
            "payment_reference": null
        },
        "tracking_number": null,
        "carrier": null,
        "mail_class": "first_class",
        "recipient": {
            "name": "Miss Pearl Hauck",
            "address_line_1": "99279 Kenyatta Knoll",
            "address_line_2": null,
            "city": "Careymouth",
            "state": "IA",
            "zip": "64310-6432"
        },
        "external_provider_id": null,
        "shipped_at": null,
        "delivered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/document-orders/{document_order_uuid}/cancel

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

document_order_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Record a document-order payment

requires authentication

Records a charge, refund, adjustment or applied-credit line against the order.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed/pay" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"type\": \"charge\",
    \"amount_cents\": 995,
    \"reference\": \"pi_3Q1abcXyz\",
    \"notes\": \"b\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed/pay"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "type": "charge",
    "amount_cents": 995,
    "reference": "pi_3Q1abcXyz",
    "notes": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "878a27d0-9793-4977-851f-69bcebcd5f00",
        "status": "pending",
        "order_type": "mail",
        "billing": {
            "status": "pending",
            "method": "credit_balance",
            "amount_cents": 1288,
            "invoiced_at": null,
            "paid_at": null,
            "invoice_reference": null,
            "payment_reference": null
        },
        "tracking_number": null,
        "carrier": null,
        "mail_class": "first_class",
        "recipient": {
            "name": "Macey Rempel PhD",
            "address_line_1": "4529 Tillman Ridges Suite 142",
            "address_line_2": null,
            "city": "East Nickshire",
            "state": "MO",
            "zip": "33724"
        },
        "external_provider_id": null,
        "shipped_at": null,
        "delivered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/document-orders/{document_order_uuid}/pay

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

document_order_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

type   string     

Payment kind. charge and credit_applied must be positive; refund must be negative; none may be zero. Example: charge

Must be one of:
  • charge
  • refund
  • adjustment
  • credit_applied
amount_cents   integer     

Signed amount in cents (sign is enforced per type). Must be between -100000000 and 100000000. Example: 995

reference   string  optional    

Optional external payment reference (e.g. a Stripe PaymentIntent id). Must not be greater than 255 characters. Example: pi_3Q1abcXyz

notes   string  optional    

Optional free-text note about the payment. Must not be greater than 1000 characters. Example: b

List document-order payments

requires authentication

Returns the payment ledger for the order.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed/payments" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/document-orders/6ff8f7f6-1eb3-3525-be4a-3932c805afed/payments"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "9bc483b6-af19-4172-9ef8-cc3a5be75da5",
            "type": "charge",
            "amount_cents": 1118,
            "reference": "TXN-35450949",
            "notes": "Commodi incidunt iure odit.",
            "recorded_at": "2026-10-05T15:49:20+00:00",
            "created_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "6bbd4a73-c2a8-4646-b82e-e094fc680458",
            "type": "charge",
            "amount_cents": 1047,
            "reference": "TXN-66214223",
            "notes": null,
            "recorded_at": "2026-10-05T15:49:20+00:00",
            "created_at": "2026-10-05T15:49:20+00:00"
        }
    ]
}
 

Request      

GET api/v1/document-orders/{document_order_uuid}/payments

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

document_order_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Documents

Generated PDFs: list, generate, download and revert.

List documents

requires authentication

Paginated generated documents visible to the caller.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/documents?type=architecto&status=architecto&is_preview=&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/documents"
);

const params = {
    "type": "architecto",
    "status": "architecto",
    "is_preview": "0",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "1e1311cc-be60-4bd0-8f05-0bf987f1c175",
            "type": "pay-application",
            "template": "documents.pay-application.default",
            "state": null,
            "file_name": "animi.pdf",
            "mime_type": "application/pdf",
            "file_size": 290549,
            "status": "completed",
            "is_preview": false,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "3a87d5de-f176-41a5-8bf9-51eca125090a",
            "type": "pay-application",
            "template": "documents.pay-application.default",
            "state": null,
            "file_name": "impedit.pdf",
            "mime_type": "application/pdf",
            "file_size": 80691,
            "status": "completed",
            "is_preview": false,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/documents

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

type   string     

Filter by type. Example: architecto

status   string     

Filter by lifecycle status. Example: architecto

is_preview   boolean     

Filter to preview / non-preview documents. Example: false

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Retrieve a document

requires authentication

Returns document metadata by UUID (not the PDF bytes).

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/documents/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/documents/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "b195331e-0576-4b04-a279-8a691955ba6e",
        "type": "pay-application",
        "template": "documents.pay-application.default",
        "state": null,
        "file_name": "quidem.pdf",
        "mime_type": "application/pdf",
        "file_size": 47583,
        "status": "completed",
        "is_preview": false,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/documents/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Generate a document

requires authentication

Renders a PDF for a notice, waiver, escalation or pay application. Runs the claimant / owner / GC preflight first. Pass preview=true for a no-charge draft.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/documents/generate" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"documentable_type\": \"notice\",
    \"documentable_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"type\": \"notice\",
    \"state\": \"CA\",
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"preview\": false
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/documents/generate"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "documentable_type": "notice",
    "documentable_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "notice",
    "state": "CA",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "preview": false
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "dc6c347b-a29d-4053-b237-29ef32be46af",
        "type": "pay-application",
        "template": "documents.pay-application.default",
        "state": null,
        "file_name": "et.pdf",
        "mime_type": "application/pdf",
        "file_size": 122326,
        "status": "completed",
        "is_preview": false,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/documents/generate

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

documentable_type   string     

The kind of record the PDF is generated from. Example: notice

Must be one of:
  • pay_application
  • waiver
  • escalation
  • notice
documentable_id   string     

UUID of the notice / waiver / escalation / pay_application to render. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string     

The specific document/template to produce (e.g. notice, g702, g703, or an escalation document type). Example: notice

Must be one of:
  • pay-application
  • waiver
  • escalation
  • notice
  • g702
  • g703
  • notice_of_intent
  • notice_of_claim
  • mechanics_lien
  • bond_claim
  • stop_notice
  • lien_release
state   string  optional    

Optional two-letter state override for template selection. Defaults to the record state. Must be 2 characters. Example: CA

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

preview   boolean  optional    

When true, render a draft without persisting it or charging a credit. Example: false

Revert a document

requires authentication

Marks the current generated document reverted so the source record can be regenerated.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/documents/6ff8f7f6-1eb3-3525-be4a-3932c805afed/revert" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/documents/6ff8f7f6-1eb3-3525-be4a-3932c805afed/revert"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Document reverted."
}
 

Request      

POST api/v1/documents/{document_uuid}/revert

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

document_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Download a document PDF

requires authentication

Streams the generated PDF (application/pdf).

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/documents/6ff8f7f6-1eb3-3525-be4a-3932c805afed/download" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/documents/6ff8f7f6-1eb3-3525-be4a-3932c805afed/download"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, The generated PDF, served as application/pdf with a Content-Disposition attachment header.):


<binary PDF stream>
 

Request      

GET api/v1/documents/{document_uuid}/download

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

document_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Entity Meta

Polymorphic key-value store attachable to any entity.

List entity metadata

requires authentication

All metadata keyvalue pairs stored on the given entity.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "key": "review_state",
            "value": "in_review",
            "type": "string"
        }
    ]
}
 

Request      

GET api/v1/{entityType}/{entityId}/meta

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

entityType   string     

Example: architecto

entityId   string     

Example: architecto

Get an entity metadata value

requires authentication

Returns one metadata entry by key.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta/architecto" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta/architecto"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "key": "review_state",
        "value": "in_review",
        "type": "string"
    }
}
 

Request      

GET api/v1/{entityType}/{entityId}/meta/{key}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

entityType   string     

Example: architecto

entityId   string     

Example: architecto

key   string     

Example: architecto

Set an entity metadata value

requires authentication

Creates or replaces the metadata entry at the given key.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta/architecto" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"value\": \"in_review\",
    \"type\": \"string\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta/architecto"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "value": "in_review",
    "type": "string"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "key": "review_state",
        "value": "in_review",
        "type": "string"
    }
}
 

Request      

PUT api/v1/{entityType}/{entityId}/meta/{key}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

entityType   string     

Example: architecto

entityId   string     

Example: architecto

key   string     

Example: architecto

Body Parameters

value   string     

The value to store. Scalars or a bounded JSON structure (max 32 KB, depth 6, 500 items). Example: in_review

type   string  optional    

How to cast the stored value on read. Example: string

Must be one of:
  • string
  • integer
  • boolean
  • json

Delete an entity metadata value

requires authentication

Removes the metadata entry at the given key.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta/architecto" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/architecto/architecto/meta/architecto"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Meta value deleted."
}
 

Request      

DELETE api/v1/{entityType}/{entityId}/meta/{key}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

entityType   string     

Example: architecto

entityId   string     

Example: architecto

key   string     

Example: architecto

Escalations

Demand and escalation documents, with transitions and mail orders.

List escalations

requires authentication

Paginated escalations visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/escalations?project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&type=architecto&status=architecto&state=CA&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/escalations"
);

const params = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "architecto",
    "status": "architecto",
    "state": "CA",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "c7b0e9e9-0da5-4e21-81e8-63a7e3b0b8ca",
            "project_id": "d0672308-15b0-4575-9f99-18feaf312965",
            "organization_id": "34cd7cf9-d69f-465b-bb84-0c9e496caeb7",
            "division_id": "a8c06a50-fb35-40e1-b696-4b43a10a8d85",
            "notice_id": null,
            "type": "lawsuit",
            "type_label": "Lawsuit",
            "status": "draft",
            "status_label": "Draft",
            "state": "RI",
            "escalation_date": "2026-02-22",
            "deadline_date": "2026-11-08",
            "claim_amount": "271817.20",
            "description": null,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "353e8c03-0d85-4bfc-8ba6-922905cc5bc2",
            "project_id": "88251d87-12a7-4185-a909-fc3598885e07",
            "organization_id": "b0f64a37-3efc-4363-9ff9-71381ec4e358",
            "division_id": "bcd8631a-3730-4984-8982-3bae1bb6ac59",
            "notice_id": null,
            "type": "lien_filing",
            "type_label": "Lien Filing",
            "status": "draft",
            "status_label": "Draft",
            "state": "ND",
            "escalation_date": "2026-06-18",
            "deadline_date": null,
            "claim_amount": null,
            "description": null,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/escalations

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

project_id   string     

Filter to this project (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string     

Filter by type. Example: architecto

status   string     

Filter by lifecycle status. Example: architecto

state   string     

Filter by two-letter US state code. Example: CA

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a escalation

requires authentication

Creates a escalation and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/escalations" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"project_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"notice_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"type\": \"demand_letter\",
    \"state\": \"CA\",
    \"escalation_date\": \"2026-05-24\",
    \"deadline_date\": \"2026-06-24\",
    \"claim_amount\": 50000,
    \"description\": \"Eius et animi quos velit et.\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/escalations"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "notice_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "demand_letter",
    "state": "CA",
    "escalation_date": "2026-05-24",
    "deadline_date": "2026-06-24",
    "claim_amount": 50000,
    "description": "Eius et animi quos velit et."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "f573c767-61c9-4ddc-ac75-eef0f61dac88",
        "project_id": "d4e0de47-0810-40d5-bb1f-b784a4c216b9",
        "organization_id": "fbe016f0-0d51-40d0-974b-8170e909b595",
        "division_id": "8985742a-c5e2-4f8c-be15-049aaa15fffd",
        "notice_id": null,
        "type": "lien_filing",
        "type_label": "Lien Filing",
        "status": "draft",
        "status_label": "Draft",
        "state": "ND",
        "escalation_date": "2025-12-23",
        "deadline_date": "2026-10-31",
        "claim_amount": null,
        "description": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/escalations

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

project_id   string     

UUID of the project. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

division_id   string  optional    

UUID of the claimant division. Optional: inherited from the project. Supplying a division other than the project one is rejected (422). Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

notice_id   string  optional    

Optional UUID of the notice this escalation follows from. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string     

Escalation type: demand_letter, lien_filing, bond_claim, or lawsuit. Example: demand_letter

Must be one of:
  • demand_letter
  • lien_filing
  • bond_claim
  • lawsuit
state   string     

Two-letter US state code. Must be 2 characters. Example: CA

escalation_date   string     

Date the escalation is issued (YYYY-MM-DD). Must be a valid date. Example: 2026-05-24

deadline_date   string  optional    

Optional statutory deadline; must be after escalation_date. Must be a valid date. Must be a date after escalation_date. Example: 2026-06-24

claim_amount   number  optional    

Amount claimed, in dollars. Must be at least 0. Example: 50000

description   string  optional    

Optional narrative included on the document. Must not be greater than 10000 characters. Example: Eius et animi quos velit et.

metadata   object  optional    

Free-form keyvalue bag (max 32 KB, depth 6, 500 items). Claimant-identity keys (claimant_name, claimant_address, claimant_license_number, ...) are rejected here (422): the claimant comes from the division. Supply metadata.owner.name / metadata.gc.name to satisfy the document preflight inline.

Retrieve a escalation

requires authentication

Returns a single escalation by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "54a2382d-e750-47ae-8ffc-c1930d58e7b0",
        "project_id": "da167f52-38c0-495d-b759-9ba220ebafbb",
        "organization_id": "e7b14d44-9801-40b9-8cf7-a9d04df680c5",
        "division_id": "1301e112-b499-4e40-a929-212fa930efd4",
        "notice_id": null,
        "type": "demand_letter",
        "type_label": "Demand Letter",
        "status": "draft",
        "status_label": "Draft",
        "state": "MO",
        "escalation_date": "2025-11-04",
        "deadline_date": "2027-02-03",
        "claim_amount": "370510.26",
        "description": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/escalations/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a escalation

requires authentication

Applies a partial update to a escalation and returns it.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"notice_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"type\": \"demand_letter\",
    \"state\": \"CA\",
    \"escalation_date\": \"2026-05-24\",
    \"deadline_date\": \"2026-06-24\",
    \"claim_amount\": 50000,
    \"description\": \"Eius et animi quos velit et.\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "notice_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "demand_letter",
    "state": "CA",
    "escalation_date": "2026-05-24",
    "deadline_date": "2026-06-24",
    "claim_amount": 50000,
    "description": "Eius et animi quos velit et."
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "0712a80f-f3f5-41db-97a4-39ebe89bb8d6",
        "project_id": "5d718586-9239-4f74-a80d-df31800cdedb",
        "organization_id": "06a4bc9c-e2df-470a-85fc-cd0d160292ec",
        "division_id": "248ca091-60e7-4dd7-9551-940c12c5f5f5",
        "notice_id": null,
        "type": "lien_filing",
        "type_label": "Lien Filing",
        "status": "draft",
        "status_label": "Draft",
        "state": "ND",
        "escalation_date": "2025-12-23",
        "deadline_date": "2026-10-31",
        "claim_amount": null,
        "description": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/escalations/{uuid}

PATCH api/v1/escalations/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

notice_id   string  optional    

Optional UUID of the notice this escalation follows from. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string  optional    

Escalation type. Example: demand_letter

Must be one of:
  • demand_letter
  • lien_filing
  • bond_claim
  • lawsuit
state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

escalation_date   string  optional    

Date the escalation is issued (YYYY-MM-DD). Must be a valid date. Example: 2026-05-24

deadline_date   string  optional    

Optional statutory deadline. Must be a valid date. Example: 2026-06-24

claim_amount   number  optional    

Amount claimed, in dollars. Must be at least 0. Example: 50000

description   string  optional    

Optional narrative included on the document. Must not be greater than 10000 characters. Example: Eius et animi quos velit et.

metadata   object  optional    

Free-form keyvalue bag (max 32 KB, depth 6, 500 items). Claimant-identity keys (claimant_name, claimant_address, claimant_license_number, ...) are rejected here (422): the claimant comes from the division. Supply metadata.owner.name / metadata.gc.name to satisfy the document preflight inline.

Delete a escalation

requires authentication

Soft-deletes the escalation.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Escalation deleted."
}
 

Request      

DELETE api/v1/escalations/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Transition an escalation

requires authentication

Moves the escalation to another workflow status.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed/transition" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"status\": \"sent\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed/transition"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "status": "sent"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "a0762252-a884-4970-8eee-481b8373bc11",
        "project_id": "4e8f79ae-a8cd-4baa-a7c1-012c2aca9d8c",
        "organization_id": "f3f23a00-19b6-4245-a4c8-1e54ff501acc",
        "division_id": "2655b3de-ddcf-4e85-955a-ed8c08054dc6",
        "notice_id": null,
        "type": "demand_letter",
        "type_label": "Demand Letter",
        "status": "draft",
        "status_label": "Draft",
        "state": "MO",
        "escalation_date": "2025-11-04",
        "deadline_date": "2027-02-03",
        "claim_amount": "370510.26",
        "description": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/escalations/{escalation_uuid}/transition

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

escalation_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

status   string     

Target status: draft, sent, filed, resolved, or cancelled. Example: sent

Must be one of:
  • draft
  • sent
  • filed
  • resolved
  • cancelled

Generate & mail an escalation

requires authentication

Generates the escalation document if needed, then creates a mail order for it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed/order" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"billing_method\": \"credit_balance\",
    \"amount_cents\": 27,
    \"mail_class\": \"certified\",
    \"recipient_name\": \"Property Owner LLC\",
    \"recipient_address_line_1\": \"200 Main Street\",
    \"recipient_address_line_2\": \"n\",
    \"recipient_city\": \"Austin\",
    \"recipient_state\": \"TX\",
    \"recipient_zip\": \"78702\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/escalations/6ff8f7f6-1eb3-3525-be4a-3932c805afed/order"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "billing_method": "credit_balance",
    "amount_cents": 27,
    "mail_class": "certified",
    "recipient_name": "Property Owner LLC",
    "recipient_address_line_1": "200 Main Street",
    "recipient_address_line_2": "n",
    "recipient_city": "Austin",
    "recipient_state": "TX",
    "recipient_zip": "78702"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "15a5d9dc-9993-4bc3-9a58-279d416ca402",
        "status": "pending",
        "order_type": "mail",
        "billing": {
            "status": "pending",
            "method": "credit_balance",
            "amount_cents": 4175,
            "invoiced_at": null,
            "paid_at": null,
            "invoice_reference": null,
            "payment_reference": null
        },
        "tracking_number": null,
        "carrier": null,
        "mail_class": "priority",
        "recipient": {
            "name": "Rowan Gulgowski",
            "address_line_1": "4529 Tillman Ridges Suite 142",
            "address_line_2": null,
            "city": "East Nickshire",
            "state": "MO",
            "zip": "33724"
        },
        "external_provider_id": null,
        "shipped_at": null,
        "delivered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/escalations/{escalation_uuid}/order

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

escalation_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

billing_method   string  optional    

How the order is paid for: prepay (debit credits now), invoice (bill later), or credit_balance. Example: credit_balance

Must be one of:
  • prepay
  • invoice
  • credit_balance
amount_cents   integer  optional    

Optional caller-declared amount in cents. The authoritative price is still computed server-side. Must be at least 0. Example: 27

mail_class   string  optional    

USPS mail class for the parcel. Example: certified

Must be one of:
  • first_class
  • certified
  • priority
recipient_name   string     

Name of the party the document is mailed to. Must not be greater than 255 characters. Example: Property Owner LLC

recipient_address_line_1   string     

Recipient street address, line 1. Must not be greater than 255 characters. Example: 200 Main Street

recipient_address_line_2   string  optional    

Recipient street address, line 2. Must not be greater than 255 characters. Example: n

recipient_city   string     

Recipient city. Must not be greater than 255 characters. Example: Austin

recipient_state   string     

Recipient two-letter US state code. Must be 2 characters. Example: TX

recipient_zip   string     

Recipient postal code. Must not be greater than 10 characters. Example: 78702

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Fulfillment Requests

Hand research to CLS staff, who fill in the blanks and materialise the records.

List fulfillment requests

requires authentication

Paginated CLS research requests visible to the caller.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests?type=notice_research&status=architecto&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests"
);

const params = {
    "type": "notice_research",
    "status": "architecto",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "6b8e2779-bf78-4b65-83fb-7863c5c70de3",
            "organization_id": "d4c2d0a6-01c4-463a-af95-1254c79c525a",
            "requested_by_user_id": null,
            "type": "notice_research",
            "status": "queued",
            "status_label": "Queued",
            "idempotency_key": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
            "source_kind": "project",
            "source_id": "c90237e9-ced5-3af6-88ea-84aeaa148878",
            "cls_resource_type": null,
            "cls_resource_id": null,
            "status_reason": null,
            "last_error": null,
            "retry_count": 0,
            "payload": {
                "fulfillment_scope": "research",
                "project": {
                    "external_id": "a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f",
                    "name": "Ernser Group",
                    "jobsite": {
                        "line_1": "5954 Schuster Lane Apt. 042",
                        "city": "Lyricberg",
                        "state": "MO",
                        "zip": "42170-0432"
                    }
                },
                "division_id": "3cb1f6c4-6159-4e94-8f09-74925602bd1f",
                "claimant_role": "sub-contractor"
            },
            "meta": null,
            "result": null,
            "postage": null,
            "payment_due": null,
            "submitted_at": null,
            "fulfilled_at": null,
            "failed_at": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "50ccc6a6-20b8-4565-a050-447b0786b141",
            "organization_id": "f635e347-d9f8-4d94-a54c-51c3c9348631",
            "requested_by_user_id": null,
            "type": "notice_research",
            "status": "queued",
            "status_label": "Queued",
            "idempotency_key": "128dddd1-af1b-310e-a6a4-c38c0253b195",
            "source_kind": "project",
            "source_id": "3dd3dce1-4b7c-321e-848a-0aab7c899d4a",
            "cls_resource_type": null,
            "cls_resource_id": null,
            "status_reason": null,
            "last_error": null,
            "retry_count": 0,
            "payload": {
                "fulfillment_scope": "research",
                "project": {
                    "external_id": "a6ed8703-1bb4-356c-b26b-3dab078a446c",
                    "name": "Grady Ltd",
                    "jobsite": {
                        "line_1": "368 Kendra Gardens",
                        "city": "Corwinchester",
                        "state": "NE",
                        "zip": "11087-1102"
                    }
                },
                "division_id": "4797f45d-f90d-4404-ba75-2c87255ee3af",
                "claimant_role": "sub-contractor"
            },
            "meta": null,
            "result": null,
            "postage": null,
            "payment_due": null,
            "submitted_at": null,
            "fulfilled_at": null,
            "failed_at": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/fulfillment-requests

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

type   string     

Filter by type (notice_research). Example: notice_research

status   string     

Filter by lifecycle status. Example: architecto

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a fulfillment request

requires authentication

Hands a notice-research job to CLS staff. Idempotent on idempotency_key. CLS materialises the project and notice back into your account.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"type\": \"notice_research\",
    \"idempotency_key\": \"fulfill-2026-05-24-0001\",
    \"source_kind\": \"api\",
    \"source_id\": \"job-8821\",
    \"payload\": {
        \"fulfillment_scope\": \"research_and_document\",
        \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
        \"claimant_role\": \"sub-contractor\",
        \"project\": {
            \"external_id\": \"job-8821\",
            \"name\": \"Riverside Medical Center\",
            \"furnished_description\": \"Electrical rough-in, wiring and light fixtures\",
            \"contract_amount\": 48250.75,
            \"first_furnishing_date\": \"2026-09-01\",
            \"last_furnishing_date\": \"2026-09-28\",
            \"date_contract\": \"2026-08-15\",
            \"project_type\": \"com-new-build\",
            \"jobsite\": {
                \"state\": \"TX\",
                \"line_1\": \"500 Riverside Dr\",
                \"line_2\": \"b\",
                \"city\": \"Austin\",
                \"zip\": \"78704\",
                \"county\": \"Travis\",
                \"description\": \"Et animi quos velit et fugiat.\",
                \"latitude\": 30.2672,
                \"longitude\": -97.7431
            }
        },
        \"parties\": [
            {
                \"company_name\": \"Skyline Builders Inc\",
                \"role\": \"owner-on-title\",
                \"address\": {
                    \"line_1\": \"12 Field Ave\",
                    \"line_2\": \"d\",
                    \"city\": \"Dallas\",
                    \"state\": \"TX\",
                    \"zip\": \"75201\"
                },
                \"phone\": \"l\",
                \"email\": \"idickens@example.org\",
                \"is_customer\": true
            }
        ]
    }
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "notice_research",
    "idempotency_key": "fulfill-2026-05-24-0001",
    "source_kind": "api",
    "source_id": "job-8821",
    "payload": {
        "fulfillment_scope": "research_and_document",
        "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
        "claimant_role": "sub-contractor",
        "project": {
            "external_id": "job-8821",
            "name": "Riverside Medical Center",
            "furnished_description": "Electrical rough-in, wiring and light fixtures",
            "contract_amount": 48250.75,
            "first_furnishing_date": "2026-09-01",
            "last_furnishing_date": "2026-09-28",
            "date_contract": "2026-08-15",
            "project_type": "com-new-build",
            "jobsite": {
                "state": "TX",
                "line_1": "500 Riverside Dr",
                "line_2": "b",
                "city": "Austin",
                "zip": "78704",
                "county": "Travis",
                "description": "Et animi quos velit et fugiat.",
                "latitude": 30.2672,
                "longitude": -97.7431
            }
        },
        "parties": [
            {
                "company_name": "Skyline Builders Inc",
                "role": "owner-on-title",
                "address": {
                    "line_1": "12 Field Ave",
                    "line_2": "d",
                    "city": "Dallas",
                    "state": "TX",
                    "zip": "75201"
                },
                "phone": "l",
                "email": "idickens@example.org",
                "is_customer": true
            }
        ]
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "63bc1a0c-7c31-4d17-aebc-708149ce6396",
        "organization_id": "94f918d5-2979-47bd-a116-34f5eb6fef3e",
        "requested_by_user_id": null,
        "type": "notice_research",
        "status": "queued",
        "status_label": "Queued",
        "idempotency_key": "5e4f00df-4238-35bd-9edc-0b98dc359c80",
        "source_kind": "project",
        "source_id": "3c85cf54-98c1-36ed-b65a-abaafdecdfa9",
        "cls_resource_type": null,
        "cls_resource_id": null,
        "status_reason": null,
        "last_error": null,
        "retry_count": 0,
        "payload": {
            "fulfillment_scope": "research",
            "project": {
                "external_id": "e2398df3-051c-3810-a269-3a15e327b316",
                "name": "Swift Inc",
                "jobsite": {
                    "line_1": "532 Leuschke Causeway",
                    "city": "McLaughlinstad",
                    "state": "MI",
                    "zip": "07365"
                }
            },
            "division_id": "921e7af0-0143-4db0-bd77-b4c0249e78d6",
            "claimant_role": "sub-contractor"
        },
        "meta": null,
        "result": null,
        "postage": null,
        "payment_due": null,
        "submitted_at": null,
        "fulfilled_at": null,
        "failed_at": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/fulfillment-requests

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string     

Fulfillment type. Only notice_research is available today. Example: notice_research

Must be one of:
  • notice_research
idempotency_key   string     

Caller-generated key; replaying the same key returns the existing request instead of creating a duplicate. Must not be greater than 100 characters. Example: fulfill-2026-05-24-0001

source_kind   string  optional    

Optional label for where this request originated. Must not be greater than 50 characters. Example: api

source_id   string  optional    

Optional caller-side id for the originating record. Must not be greater than 100 characters. Example: job-8821

payload   object     

The research request body (bounded: max 32 KB, depth 6, 500 items).

fulfillment_scope   string     

How far CLS should take it: research only, research_and_document, or full_service (research + document + mail). Example: research_and_document

Must be one of:
  • research
  • research_and_document
  • full_service
division_id   string     

UUID of the claimant division. Becomes the materialised project division and is_claimant party. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

claimant_role   string  optional    

Optional claimant role token (CLS vocabulary) for the materialised claimant party. Example: sub-contractor

Must be one of:
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
parties   object[]  optional    

Parties you already know about, forwarded to CLS so staff do not re-discover them. Must not have more than 50 items.

company_name   string  optional    

Party company / legal name. This field is required when payload.parties is present. Must not be greater than 250 characters. Example: Skyline Builders Inc

role   string  optional    

Party role in the CLS vocabulary. This field is required when payload.parties is present. Example: owner-on-title

Must be one of:
  • owner-on-title
  • owner-reputed-owner
  • reputed-owner
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
  • lender-beneficiary
  • surety-bond-company
  • architect
  • title-company
  • escrow-title-agency
  • developer
  • construction-manager
  • project-manager
  • owner-representative
  • project-owner
  • lessee
  • lessor
  • sub-lessee
  • home-owners-association
  • property-manager
  • trustee
  • insurance-agency
  • professional-services
  • copy-to
address   object  optional    

Party mailing address.

line_1   string  optional    

Party address, line 1. Must not be greater than 250 characters. Example: 12 Field Ave

line_2   string  optional    

Party address, line 2. Must not be greater than 250 characters. Example: d

city   string  optional    

Party address city. Must not be greater than 100 characters. Example: Dallas

state   string  optional    

Party address two-letter state code. Must be 2 characters. Example: TX

zip   string  optional    

Party address postal code. Must not be greater than 10 characters. Example: 75201

phone   string  optional    

Party phone number. Must not be greater than 50 characters. Example: l

email   string  optional    

Party email address. Must be a valid email address. Must not be greater than 255 characters. Example: idickens@example.org

is_customer   boolean  optional    

Marks the party that hired the claimant (your customer on this project). At most one party may set it. Example: true

project   object     

The project CLS should research and materialise.

external_id   string     

Your id for the project; echoed back on the materialised record. Must not be greater than 100 characters. Example: job-8821

name   string     

Project name. Must not be greater than 250 characters. Example: Riverside Medical Center

furnished_description   string     

The labor and/or materials the claimant furnished, as printed on the notice. Must not be greater than 10000 characters. Example: Electrical rough-in, wiring and light fixtures

contract_amount   number     

Estimated total price of the labor/materials furnished, or the amount owed where the state counts unpaid balance (greater than zero). Example: 48250.75

first_furnishing_date   string  optional    

First date labor/materials were furnished. Required when the jobsite state counts from it (see required_dates per state). Must be a valid date. Example: 2026-09-01

last_furnishing_date   string  optional    

Last date labor/materials were furnished. Required when the jobsite state counts from it. Must be a valid date. Must be a date after or equal to payload.project.first_furnishing_date. Example: 2026-09-28

date_contract   string  optional    

Date of the claimant's contract. Required for AK and NH jobsites. Must be a valid date. Example: 2026-08-15

project_type   string  optional    

CLS project type (same vocabulary as POST /projects). CLS researches it when omitted. Example: com-new-build

Must be one of:
  • com-new-build
  • com-tenant-improvement
  • com-apartments
  • res-spec-home
  • res-tract-home
  • res-condos
  • res-owner-occupied
  • res-restoration
  • gov-state
  • gov-federal
  • gov-education-public
  • gov-education-private
  • tribal
  • unknown
jobsite   object     

Where the work is performed.

state   string     

Jobsite two-letter state code. Must be 2 characters. Example: TX

line_1   string  optional    

Jobsite street address (required unless a description is given). This field is required when payload.project.jobsite.description is not present. Must not be greater than 250 characters. Example: 500 Riverside Dr

line_2   string  optional    

Jobsite address, line 2. Must not be greater than 250 characters. Example: b

city   string  optional    

Jobsite city (required with line_1). This field is required when payload.project.jobsite.line_1 is present. Must not be greater than 100 characters. Example: Austin

zip   string  optional    

Jobsite postal code (required with line_1). This field is required when payload.project.jobsite.line_1 is present. Must not be greater than 10 characters. Example: 78704

county   string  optional    

Jobsite county. Must not be greater than 100 characters. Example: Travis

description   string  optional    

Free-text site description, used when a street address is not known (required unless line_1 is given). This field is required when payload.project.jobsite.line_1 is not present. Must not be greater than 500 characters. Example: Et animi quos velit et fugiat.

latitude   number  optional    

Optional jobsite latitude (-90 to 90). Must be between -90 and 90. Example: 30.2672

longitude   number  optional    

Optional jobsite longitude (-180 to 180). Must be between -180 and 180. Example: -97.7431

claimant   string  optional    

Prohibited. The claimant identity is derived from payload.division_id and forwarded to CLS server-side.

meta   object  optional    

Optional bounded keyvalue bag stored with the request.

Retrieve a fulfillment request

requires authentication

Returns a single request, including status and any research result, by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "ba1bdec4-de6a-4ccc-be33-f54b906e31d2",
        "organization_id": "a80b3f51-fcbf-46cf-8499-28c036ff47ae",
        "requested_by_user_id": null,
        "type": "notice_research",
        "status": "queued",
        "status_label": "Queued",
        "idempotency_key": "bfc53181-d647-36b2-9080-f9c2b76006f4",
        "source_kind": "project",
        "source_id": "5d093e7f-5aae-3aa3-bece-f6e784dcbd67",
        "cls_resource_type": null,
        "cls_resource_id": null,
        "status_reason": null,
        "last_error": null,
        "retry_count": 0,
        "payload": {
            "fulfillment_scope": "research",
            "project": {
                "external_id": "445bd3f6-8f2c-38cb-aa04-2f4e1edb32bb",
                "name": "Baumbach Ltd",
                "jobsite": {
                    "line_1": "427 Predovic Ridge",
                    "city": "Baileemouth",
                    "state": "KS",
                    "zip": "32375-9947"
                }
            },
            "division_id": "761b6726-c71c-4166-8ab7-fb1ffcc8c6a1",
            "claimant_role": "sub-contractor"
        },
        "meta": null,
        "result": null,
        "postage": null,
        "payment_due": null,
        "submitted_at": null,
        "fulfilled_at": null,
        "failed_at": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/fulfillment-requests/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Cancel a fulfillment request

requires authentication

Cancels the request if CLS has not already completed it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/cancel" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"reason\": \"Duplicate request\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/cancel"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "reason": "Duplicate request"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "c45c6758-f10c-4ef8-babc-774a61b6c5cd",
        "organization_id": "8aadafae-38fd-440e-96d2-8585746e2929",
        "requested_by_user_id": null,
        "type": "notice_research",
        "status": "queued",
        "status_label": "Queued",
        "idempotency_key": "6ff8f7f6-1eb3-3525-be4a-3932c805afed",
        "source_kind": "project",
        "source_id": "6b72fe4a-5b40-307c-bc24-f79acf9a1bb9",
        "cls_resource_type": null,
        "cls_resource_id": null,
        "status_reason": null,
        "last_error": null,
        "retry_count": 0,
        "payload": {
            "fulfillment_scope": "research",
            "project": {
                "external_id": "977e5426-8d13-3824-86aa-b092f8ae52c5",
                "name": "O'Kon and Sons",
                "jobsite": {
                    "line_1": "80841 Mya Lane Apt. 042",
                    "city": "Lyricberg",
                    "state": "MO",
                    "zip": "42170-0432"
                }
            },
            "division_id": "0a6fd34b-6715-4cc3-8123-7e548702dd58",
            "claimant_role": "sub-contractor"
        },
        "meta": null,
        "result": null,
        "postage": null,
        "payment_due": null,
        "submitted_at": null,
        "fulfilled_at": null,
        "failed_at": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/fulfillment-requests/{fulfillment_request_uuid}/cancel

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

fulfillment_request_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

reason   string  optional    

Optional human-readable reason for cancelling the fulfillment request. Must not be greater than 500 characters. Example: Duplicate request

Retry a fulfillment request

requires authentication

Resubmits a failed request to CLS.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/retry" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"reason\": \"CLS asked us to resubmit\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/retry"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "reason": "CLS asked us to resubmit"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "c6df5f9c-ffa5-4ef1-b5d8-5a62b3c56920",
        "organization_id": "9ac9d519-464d-4ef7-8b62-7060be4a1f6c",
        "requested_by_user_id": null,
        "type": "notice_research",
        "status": "queued",
        "status_label": "Queued",
        "idempotency_key": "6ff8f7f6-1eb3-3525-be4a-3932c805afed",
        "source_kind": "project",
        "source_id": "6b72fe4a-5b40-307c-bc24-f79acf9a1bb9",
        "cls_resource_type": null,
        "cls_resource_id": null,
        "status_reason": null,
        "last_error": null,
        "retry_count": 0,
        "payload": {
            "fulfillment_scope": "research",
            "project": {
                "external_id": "977e5426-8d13-3824-86aa-b092f8ae52c5",
                "name": "O'Kon and Sons",
                "jobsite": {
                    "line_1": "80841 Mya Lane Apt. 042",
                    "city": "Lyricberg",
                    "state": "MO",
                    "zip": "42170-0432"
                }
            },
            "division_id": "70a2f55b-6581-479b-9898-bc50650d13f6",
            "claimant_role": "sub-contractor"
        },
        "meta": null,
        "result": null,
        "postage": null,
        "payment_due": null,
        "submitted_at": null,
        "fulfilled_at": null,
        "failed_at": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/fulfillment-requests/{fulfillment_request_uuid}/retry

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

fulfillment_request_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

reason   string  optional    

Optional human-readable reason for retrying the fulfillment request. Must not be greater than 500 characters. Example: CLS asked us to resubmit

Approve additional fulfillment charges

requires authentication

For a full-service request in payment_required: CLS research found more recipients than postage is held for. Holds the extra postage (payment_due.additional_credits) from your CLS-eligible credits and releases the ticket back to CLS. Responds 402 with the shortfall if your balance cannot cover it yet -- buy credits and call again.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/approve-charges" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/approve-charges"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "d8d9d58a-a2e1-492f-8028-aa2088a7e671",
        "organization_id": "f08d29f2-0ccf-45b0-978d-6076b2a1872e",
        "requested_by_user_id": null,
        "type": "notice_research",
        "status": "queued",
        "status_label": "Queued",
        "idempotency_key": "bfc53181-d647-36b2-9080-f9c2b76006f4",
        "source_kind": "project",
        "source_id": "5d093e7f-5aae-3aa3-bece-f6e784dcbd67",
        "cls_resource_type": null,
        "cls_resource_id": null,
        "status_reason": null,
        "last_error": null,
        "retry_count": 0,
        "payload": {
            "fulfillment_scope": "research",
            "project": {
                "external_id": "445bd3f6-8f2c-38cb-aa04-2f4e1edb32bb",
                "name": "Baumbach Ltd",
                "jobsite": {
                    "line_1": "427 Predovic Ridge",
                    "city": "Baileemouth",
                    "state": "KS",
                    "zip": "32375-9947"
                }
            },
            "division_id": "59effae1-659e-4347-aa46-210a57cb448b",
            "claimant_role": "sub-contractor"
        },
        "meta": null,
        "result": null,
        "postage": null,
        "payment_due": null,
        "submitted_at": null,
        "fulfilled_at": null,
        "failed_at": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/fulfillment-requests/{fulfillment_request_uuid}/approve-charges

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

fulfillment_request_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Download a fulfillment file

requires authentication

Streams a file CLS attached to the fulfilled ticket (research documents, jobsite files), from our own copy. Files are listed under files on the fulfillment request once copied.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/files/6ff8f7f6-1eb3-3525-be4a-3932c805afed/download" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/fulfillment-requests/6ff8f7f6-1eb3-3525-be4a-3932c805afed/files/6ff8f7f6-1eb3-3525-be4a-3932c805afed/download"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/fulfillment-requests/{fulfillment_request_uuid}/files/{file_uuid}/download

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

fulfillment_request_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

file_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Jobsites

Physical work locations for a project.

List jobsites

requires authentication

Paginated jobsites visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/jobsites?project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&is_primary=1&search=architecto&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/jobsites"
);

const params = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "is_primary": "1",
    "search": "architecto",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "6166e83a-ef90-402f-b62b-650c560f4c67",
            "project_id": "48b4d02e-478d-4f5d-ad95-009bd77ce550",
            "name": "eius et Site",
            "address": {
                "line_1": "764 Ernser Parkways Suite 841",
                "line_2": null,
                "city": "Cecilburgh",
                "state": "WI",
                "zip": "02042",
                "county": null
            },
            "apn": null,
            "legal_description": "Adipisci quidem nostrum qui commodi incidunt iure.",
            "is_primary": false,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "edeaaf87-31fe-48dc-a4e8-8881be01f149",
            "project_id": "40f27878-da1b-4fe7-bb85-ae9b2598c000",
            "name": "ratione iure Site",
            "address": {
                "line_1": "441 Swaniawski Roads Apt. 721",
                "line_2": null,
                "city": "Brianneborough",
                "state": "AL",
                "zip": "84131-2753",
                "county": "error"
            },
            "apn": null,
            "legal_description": null,
            "is_primary": false,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/jobsites

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

project_id   string     

Filter to this project (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

is_primary   boolean     

Filter by primary flag. Example: true

search   string     

Case-insensitive partial match on name and address. Example: architecto

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a jobsite

requires authentication

Creates a jobsite and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/jobsites" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"project_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"name\": \"Main Site\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"b\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"county\": \"Travis\",
    \"apn\": \"123-456-789\",
    \"legal_description\": \"Lot 5, Block 2, Example Subdivision\",
    \"is_primary\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/jobsites"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "name": "Main Site",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "b",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "county": "Travis",
    "apn": "123-456-789",
    "legal_description": "Lot 5, Block 2, Example Subdivision",
    "is_primary": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "445809ee-1be8-447d-aeb1-37371eb63b1d",
        "project_id": "9a60bab2-64b8-4692-a3b6-3f0ebfffbf9e",
        "name": "eius et Site",
        "address": {
            "line_1": "764 Ernser Parkways Suite 841",
            "line_2": null,
            "city": "Cecilburgh",
            "state": "WI",
            "zip": "02042",
            "county": null
        },
        "apn": null,
        "legal_description": "Adipisci quidem nostrum qui commodi incidunt iure.",
        "is_primary": false,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/jobsites

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

project_id   string     

UUID of the project. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

name   string     

Label for the jobsite. Must not be greater than 255 characters. Example: Main Site

address_line_1   string     

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: b

city   string     

City. Must not be greater than 255 characters. Example: Austin

state   string     

Two-letter US state code. Must be 2 characters. Example: CA

zip   string     

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

county   string  optional    

County name. Must not be greater than 255 characters. Example: Travis

apn   string  optional    

Assessor parcel number. Must not be greater than 255 characters. Example: 123-456-789

legal_description   string  optional    

Full legal description of the property. Must not be greater than 10000 characters. Example: Lot 5, Block 2, Example Subdivision

is_primary   boolean  optional    

Whether this is the project primary jobsite. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a jobsite

requires authentication

Returns a single jobsite by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/jobsites/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/jobsites/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "79633fc6-3644-4e14-ab18-21b87d751294",
        "project_id": "db5e3d6b-0f33-4e6e-8693-1332c8a98b2d",
        "name": "aut adipisci Site",
        "address": {
            "line_1": "41881 Leo Pine Apt. 627",
            "line_2": null,
            "city": "South Isidrostad",
            "state": "WV",
            "zip": "17091-7515",
            "county": "non"
        },
        "apn": "584-087-043",
        "legal_description": null,
        "is_primary": false,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/jobsites/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a jobsite

requires authentication

Applies a partial update to a jobsite and returns it.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/jobsites/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"name\": \"Main Site\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"b\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"county\": \"Travis\",
    \"apn\": \"123-456-789\",
    \"legal_description\": \"Lot 5, Block 2, Example Subdivision\",
    \"is_primary\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/jobsites/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "name": "Main Site",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "b",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "county": "Travis",
    "apn": "123-456-789",
    "legal_description": "Lot 5, Block 2, Example Subdivision",
    "is_primary": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "fb8b9edd-04dd-441d-a19a-fcecf8eb53a4",
        "project_id": "4b8120d3-fba0-4415-83c5-db1220762d62",
        "name": "eius et Site",
        "address": {
            "line_1": "764 Ernser Parkways Suite 841",
            "line_2": null,
            "city": "Cecilburgh",
            "state": "WI",
            "zip": "02042",
            "county": null
        },
        "apn": null,
        "legal_description": "Adipisci quidem nostrum qui commodi incidunt iure.",
        "is_primary": false,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/jobsites/{uuid}

PATCH api/v1/jobsites/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

name   string  optional    

Label for the jobsite. Must not be greater than 255 characters. Example: Main Site

address_line_1   string  optional    

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: b

city   string  optional    

City. Must not be greater than 255 characters. Example: Austin

state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

zip   string  optional    

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

county   string  optional    

County name. Must not be greater than 255 characters. Example: Travis

apn   string  optional    

Assessor parcel number. Must not be greater than 255 characters. Example: 123-456-789

legal_description   string  optional    

Full legal description of the property. Must not be greater than 10000 characters. Example: Lot 5, Block 2, Example Subdivision

is_primary   boolean  optional    

Whether this is the project primary jobsite. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Delete a jobsite

requires authentication

Soft-deletes the jobsite.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/jobsites/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/jobsites/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Jobsite deleted."
}
 

Request      

DELETE api/v1/jobsites/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Notices

Preliminary notices, amendments, state transitions and accountable mail orders.

List notices

requires authentication

Paginated notices visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/notices?project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&type=architecto&status=architecto&state=CA&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/notices"
);

const params = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "architecto",
    "status": "architecto",
    "state": "CA",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "87a78e82-e91a-4bfa-8442-a07d1562d7f6",
            "notice_number": "N-260222-C6P001",
            "project_id": "00b6aa9b-f819-4c5a-aecf-ac40e507f589",
            "organization_id": "068f1505-1d36-4b04-93f5-cd294b487e6e",
            "division_id": "845ad3bb-e734-45a9-83de-c4d13e05bcb8",
            "type": "bond_claim",
            "type_label": "Bond Claim",
            "status": "draft",
            "status_label": "Draft",
            "state": "RI",
            "notice_date": "2026-02-22",
            "deadline_date": "2026-11-08",
            "deadline_source": null,
            "first_furnishing_date": "2026-02-11",
            "last_furnishing_date": "2026-09-10",
            "deadline_rule": {
                "required": null,
                "basis": "not_applicable",
                "days": null,
                "deadline": null,
                "rolling_lookback_days": null,
                "explanation": "Serve-by deadlines are only calculated for preliminary notices.",
                "source": null,
                "verified": false
            },
            "claim_amount": "280415.85",
            "original_claim_amount": null,
            "description": "Accusantium harum mollitia modi deserunt aut ab.",
            "is_amendment": false,
            "parent_notice_id": null,
            "amendment_reason": null,
            "amendment_reason_label": null,
            "amendment_sequence": 1,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "bba7d89a-fd55-4afa-863b-d47e7e56b952",
            "notice_number": "N-260902-K66001",
            "project_id": "7ab1a274-abc6-4a72-b974-18ec78e7899e",
            "organization_id": "1ded52c3-268c-4404-8d73-bc0014f16781",
            "division_id": "ef8f65c7-32e0-4e91-9861-527be667a14f",
            "type": "lien",
            "type_label": "Lien Notice",
            "status": "draft",
            "status_label": "Draft",
            "state": "CT",
            "notice_date": "2026-09-02",
            "deadline_date": null,
            "deadline_source": null,
            "first_furnishing_date": "2026-07-11",
            "last_furnishing_date": "2026-10-03",
            "deadline_rule": {
                "required": null,
                "basis": "not_applicable",
                "days": null,
                "deadline": null,
                "rolling_lookback_days": null,
                "explanation": "Serve-by deadlines are only calculated for preliminary notices.",
                "source": null,
                "verified": false
            },
            "claim_amount": "448226.98",
            "original_claim_amount": null,
            "description": "Rem ea ut aut deserunt.",
            "is_amendment": false,
            "parent_notice_id": null,
            "amendment_reason": null,
            "amendment_reason_label": null,
            "amendment_sequence": 1,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/notices

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

project_id   string     

Filter to this project (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string     

Filter by type. Example: architecto

status   string     

Filter by lifecycle status. Example: architecto

state   string     

Filter by two-letter US state code. Example: CA

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a notice

requires authentication

Creates a notice and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/notices" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"project_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"type\": \"preliminary\",
    \"state\": \"CA\",
    \"notice_date\": \"2026-05-24\",
    \"deadline_date\": \"2026-06-24\",
    \"first_furnishing_date\": \"2026-09-15\",
    \"last_furnishing_date\": \"2026-10-20\",
    \"claim_amount\": 50000,
    \"original_claim_amount\": 27,
    \"parent_notice_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"amendment_reason\": \"corrected_amount\",
    \"description\": \"Electrical rough-in, wiring and light fixtures\",
    \"metadata\": {
        \"party_grid_max\": 8,
        \"mail_pack\": true,
        \"service_method\": \"n\",
        \"service_date\": \"2026-10-05T15:49:19\"
    }
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/notices"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "preliminary",
    "state": "CA",
    "notice_date": "2026-05-24",
    "deadline_date": "2026-06-24",
    "first_furnishing_date": "2026-09-15",
    "last_furnishing_date": "2026-10-20",
    "claim_amount": 50000,
    "original_claim_amount": 27,
    "parent_notice_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "amendment_reason": "corrected_amount",
    "description": "Electrical rough-in, wiring and light fixtures",
    "metadata": {
        "party_grid_max": 8,
        "mail_pack": true,
        "service_method": "n",
        "service_date": "2026-10-05T15:49:19"
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "44d02522-5bd1-4ed5-a127-82cfb48d2afd",
        "notice_number": "N-260518-7DQ001",
        "project_id": "0d7cf48b-0214-4dc9-8fc8-9ca13bb172ef",
        "organization_id": "44bc4702-7e7d-451a-9473-12de34c1e46a",
        "division_id": "f2fb3327-0194-4877-a51d-2b8aaafbb12d",
        "type": "lien",
        "type_label": "Lien Notice",
        "status": "draft",
        "status_label": "Draft",
        "state": "IL",
        "notice_date": "2026-05-18",
        "deadline_date": null,
        "deadline_source": null,
        "first_furnishing_date": "2026-02-11",
        "last_furnishing_date": "2026-09-10",
        "deadline_rule": {
            "required": null,
            "basis": "not_applicable",
            "days": null,
            "deadline": null,
            "rolling_lookback_days": null,
            "explanation": "Serve-by deadlines are only calculated for preliminary notices.",
            "source": null,
            "verified": false
        },
        "claim_amount": "280415.85",
        "original_claim_amount": null,
        "description": "Accusantium harum mollitia modi deserunt aut ab.",
        "is_amendment": false,
        "parent_notice_id": null,
        "amendment_reason": null,
        "amendment_reason_label": null,
        "amendment_sequence": 1,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/notices

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

project_id   string     

UUID of the project. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

division_id   string  optional    

UUID of the claimant division. Optional: inherited from the project. Supplying a division other than the project one is rejected (422). Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string     

Notice type: preliminary, stop_payment, lien, or bond_claim. Example: preliminary

Must be one of:
  • preliminary
  • stop_payment
  • lien
  • bond_claim
state   string     

Two-letter US state code. Must be 2 characters. Example: CA

notice_date   string     

Date the notice is issued (YYYY-MM-DD). Must be a valid date. Example: 2026-05-24

deadline_date   string  optional    

Serve-by deadline. Omit it to have it calculated for preliminary notices from the state rule and furnishing dates (see deadline_rule in the response); send null on update to switch back to the calculated date. Must be a valid date. Must be a date after notice_date. Example: 2026-06-24

first_furnishing_date   string  optional    

First date the claimant furnished labor or materials. Drives the calculated serve-by deadline in most states; required for a preliminary notice in states that count from it (see required_dates per state). Must be a valid date. Example: 2026-09-15

last_furnishing_date   string  optional    

Last date the claimant furnished labor or materials (used where the state counts from last furnishing); required for a preliminary notice in those states. Must be a valid date. Must be a date after or equal to first_furnishing_date. Example: 2026-10-20

claim_amount   number     

Amount claimed, in dollars (greater than zero). On a preliminary notice this is the estimated total price of the labor/materials furnished, or the amount owed where the state counts unpaid balance. Example: 50000

original_claim_amount   number  optional    

For an amendment, the claim amount on the notice being amended. Must be at least 0. Example: 27

parent_notice_id   string  optional    

UUID of the notice this one amends. Presence makes this an amendment. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

amendment_reason   string  optional    

Why the parent notice is being amended. Required when parent_notice_id is set. This field is required when parent_notice_id is present. Example: corrected_amount

Must be one of:
  • amount_changed
  • scope_changed
  • party_correction
  • other
description   string     

The labor and/or materials furnished, printed on the notice. Must not be greater than 10000 characters. Example: Electrical rough-in, wiring and light fixtures

metadata   object  optional    

Free-form keyvalue bag (max 32 KB, depth 6, 500 items). Claimant-identity keys (claimant_name, claimant_address, claimant_license_number, ...) are rejected here (422): the claimant comes from the division. Supply metadata.owner.name / metadata.gc.name to satisfy the document preflight inline. metadata.party_grid_max (4 or 8, default 8) caps the party boxes on the first page of a preliminary notice; the rest are listed on an Exhibit A page. metadata.mail_pack=true adds a cover page per served party (acknowledgment of receipt, or a proof-of-service affidavit in CA; metadata.service_method / metadata.service_date fill the affidavit). metadata.months_work_performed (string or list) prints the month(s) covered, e.g. on a Texas monthly notice.

party_grid_max   integer  optional    

Example: 8

Must be one of:
  • 4
  • 8
mail_pack   boolean  optional    

Example: true

service_method   string  optional    

Must not be greater than 120 characters. Example: n

service_date   string  optional    

Must be a valid date. Example: 2026-10-05T15:49:19

months_work_performed   string  optional    

Retrieve a notice

requires authentication

Returns a single notice by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "6473e2d5-b977-403d-87f6-27a4219d8627",
        "notice_number": "N-251104-9FV001",
        "project_id": "7d724e6e-f60f-4000-b86e-faccba78e026",
        "organization_id": "00fd486f-3e89-46a9-93b0-46da60dd96d6",
        "division_id": "06fe9388-e339-4be8-80bb-59d037ea9c12",
        "type": "preliminary",
        "type_label": "Preliminary Notice",
        "status": "draft",
        "status_label": "Draft",
        "state": "MO",
        "notice_date": "2025-11-04",
        "deadline_date": "2027-02-03",
        "deadline_source": null,
        "first_furnishing_date": "2025-12-20",
        "last_furnishing_date": "2026-09-20",
        "deadline_rule": {
            "required": true,
            "basis": "varies",
            "days": null,
            "deadline": null,
            "rolling_lookback_days": null,
            "explanation": "The MO deadline depends on the facts of the project (varies) and is not calculated; set deadline_date yourself.",
            "source": null,
            "verified": false
        },
        "claim_amount": "99055.43",
        "original_claim_amount": null,
        "description": "Et et modi ipsum nostrum.",
        "is_amendment": false,
        "parent_notice_id": null,
        "amendment_reason": null,
        "amendment_reason_label": null,
        "amendment_sequence": 1,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/notices/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a notice

requires authentication

Applies a partial update to a notice and returns it.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"type\": \"preliminary\",
    \"state\": \"CA\",
    \"notice_date\": \"2026-05-24\",
    \"deadline_date\": \"2026-06-24\",
    \"first_furnishing_date\": \"2026-09-15\",
    \"last_furnishing_date\": \"2026-10-20\",
    \"claim_amount\": 50000,
    \"description\": \"Eius et animi quos velit et.\",
    \"metadata\": {
        \"party_grid_max\": 4,
        \"mail_pack\": true,
        \"service_method\": \"v\",
        \"service_date\": \"2026-10-05T15:49:19\"
    }
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "type": "preliminary",
    "state": "CA",
    "notice_date": "2026-05-24",
    "deadline_date": "2026-06-24",
    "first_furnishing_date": "2026-09-15",
    "last_furnishing_date": "2026-10-20",
    "claim_amount": 50000,
    "description": "Eius et animi quos velit et.",
    "metadata": {
        "party_grid_max": 4,
        "mail_pack": true,
        "service_method": "v",
        "service_date": "2026-10-05T15:49:19"
    }
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "5b113d62-8f68-464b-83aa-06bdcee18cc0",
        "notice_number": "N-251120-6MK001",
        "project_id": "b4919775-4341-4ec1-8901-2a017fc6ed64",
        "organization_id": "3313285e-20d2-49f2-aa0d-29634aa32fd7",
        "division_id": "cba56efe-184a-4a06-ac9b-72f44081448b",
        "type": "bond_claim",
        "type_label": "Bond Claim",
        "status": "draft",
        "status_label": "Draft",
        "state": "OK",
        "notice_date": "2025-11-20",
        "deadline_date": "2027-01-06",
        "deadline_source": null,
        "first_furnishing_date": "2026-02-23",
        "last_furnishing_date": "2026-09-26",
        "deadline_rule": {
            "required": null,
            "basis": "not_applicable",
            "days": null,
            "deadline": null,
            "rolling_lookback_days": null,
            "explanation": "Serve-by deadlines are only calculated for preliminary notices.",
            "source": null,
            "verified": false
        },
        "claim_amount": "315532.61",
        "original_claim_amount": null,
        "description": "Provident perspiciatis quo omnis nostrum aut adipisci quidem.",
        "is_amendment": false,
        "parent_notice_id": null,
        "amendment_reason": null,
        "amendment_reason_label": null,
        "amendment_sequence": 1,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/notices/{uuid}

PATCH api/v1/notices/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

type   string  optional    

Notice type. Example: preliminary

Must be one of:
  • preliminary
  • stop_payment
  • lien
  • bond_claim
state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

notice_date   string  optional    

Date the notice is issued (YYYY-MM-DD). Must be a valid date. Example: 2026-05-24

deadline_date   string  optional    

Serve-by deadline. Send null to switch back to the calculated date (preliminary notices; see deadline_rule in the response). Must be a valid date. Example: 2026-06-24

first_furnishing_date   string  optional    

First date the claimant furnished labor or materials. Drives the calculated serve-by deadline in most states. Must be a valid date. Example: 2026-09-15

last_furnishing_date   string  optional    

Last date the claimant furnished labor or materials (used where the state counts from last furnishing). Must be a valid date. Must be a date after or equal to first_furnishing_date. Example: 2026-10-20

claim_amount   number  optional    

Amount claimed, in dollars. Example: 50000

description   string  optional    

The labor and/or materials furnished, printed on the notice. Cannot be cleared. Must not be greater than 10000 characters. Example: Eius et animi quos velit et.

metadata   object  optional    

Free-form keyvalue bag (max 32 KB, depth 6, 500 items). Claimant-identity keys (claimant_name, claimant_address, claimant_license_number, ...) are rejected here (422): the claimant comes from the division. Supply metadata.owner.name / metadata.gc.name to satisfy the document preflight inline. metadata.party_grid_max (4 or 8, default 8) caps the party boxes on the first page of a preliminary notice; the rest are listed on an Exhibit A page. metadata.mail_pack=true adds a cover page per served party (acknowledgment of receipt, or a proof-of-service affidavit in CA; metadata.service_method / metadata.service_date fill the affidavit). metadata.months_work_performed (string or list) prints the month(s) covered, e.g. on a Texas monthly notice.

party_grid_max   integer  optional    

Example: 4

Must be one of:
  • 4
  • 8
mail_pack   boolean  optional    

Example: true

service_method   string  optional    

Must not be greater than 120 characters. Example: v

service_date   string  optional    

Must be a valid date. Example: 2026-10-05T15:49:19

months_work_performed   string  optional    

Delete a notice

requires authentication

Soft-deletes the notice.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Notice deleted."
}
 

Request      

DELETE api/v1/notices/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Transition a notice

requires authentication

Moves the notice to another workflow status. Reaching 'generated' is not allowed here - generate the document instead.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed/transition" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"status\": \"sent\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed/transition"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "status": "sent"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "e254bdbd-54dd-4d5b-9c8a-eb1e7ddd22e5",
        "notice_number": "N-251104-X9H001",
        "project_id": "3de0cff4-44c5-4bd3-8a21-230c362f28a1",
        "organization_id": "e354c530-1cf6-445e-9bd4-3b1e4ddb5e59",
        "division_id": "00ecc154-47cf-4f38-b957-c99063163eb9",
        "type": "preliminary",
        "type_label": "Preliminary Notice",
        "status": "draft",
        "status_label": "Draft",
        "state": "MO",
        "notice_date": "2025-11-04",
        "deadline_date": "2027-02-03",
        "deadline_source": null,
        "first_furnishing_date": "2025-12-20",
        "last_furnishing_date": "2026-09-20",
        "deadline_rule": {
            "required": true,
            "basis": "varies",
            "days": null,
            "deadline": null,
            "rolling_lookback_days": null,
            "explanation": "The MO deadline depends on the facts of the project (varies) and is not calculated; set deadline_date yourself.",
            "source": null,
            "verified": false
        },
        "claim_amount": "99055.43",
        "original_claim_amount": null,
        "description": "Et et modi ipsum nostrum.",
        "is_amendment": false,
        "parent_notice_id": null,
        "amendment_reason": null,
        "amendment_reason_label": null,
        "amendment_sequence": 1,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/notices/{notice_uuid}/transition

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

notice_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

status   string     

Target status. Reaching generated is not allowed here (generate the document instead). Example: sent

Must be one of:
  • draft
  • generated
  • sent
  • delivered
  • cancelled

Generate & mail a notice

requires authentication

Generates the notice PDF if needed, then creates an accountable USPS mail order for it. Reuses an existing PDF to avoid a second charge.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed/order" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"billing_method\": \"credit_balance\",
    \"amount_cents\": 27,
    \"mail_class\": \"certified\",
    \"recipient_name\": \"Property Owner LLC\",
    \"recipient_address_line_1\": \"200 Main Street\",
    \"recipient_address_line_2\": \"n\",
    \"recipient_city\": \"Austin\",
    \"recipient_state\": \"TX\",
    \"recipient_zip\": \"78702\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/notices/6ff8f7f6-1eb3-3525-be4a-3932c805afed/order"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "billing_method": "credit_balance",
    "amount_cents": 27,
    "mail_class": "certified",
    "recipient_name": "Property Owner LLC",
    "recipient_address_line_1": "200 Main Street",
    "recipient_address_line_2": "n",
    "recipient_city": "Austin",
    "recipient_state": "TX",
    "recipient_zip": "78702"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "ac2e04b3-1e15-4e30-9fd7-94dbd86a8b19",
        "status": "pending",
        "order_type": "mail",
        "billing": {
            "status": "pending",
            "method": "credit_balance",
            "amount_cents": 4175,
            "invoiced_at": null,
            "paid_at": null,
            "invoice_reference": null,
            "payment_reference": null
        },
        "tracking_number": null,
        "carrier": null,
        "mail_class": "priority",
        "recipient": {
            "name": "Rowan Gulgowski",
            "address_line_1": "4529 Tillman Ridges Suite 142",
            "address_line_2": null,
            "city": "East Nickshire",
            "state": "MO",
            "zip": "33724"
        },
        "external_provider_id": null,
        "shipped_at": null,
        "delivered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/notices/{notice_uuid}/order

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

notice_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

billing_method   string  optional    

How the order is paid for: prepay (debit credits now), invoice (bill later), or credit_balance. Example: credit_balance

Must be one of:
  • prepay
  • invoice
  • credit_balance
amount_cents   integer  optional    

Optional caller-declared amount in cents. The authoritative price is still computed server-side. Must be at least 0. Example: 27

mail_class   string  optional    

USPS mail class for the parcel. Example: certified

Must be one of:
  • first_class
  • certified
  • priority
recipient_name   string     

Name of the party the document is mailed to. Must not be greater than 255 characters. Example: Property Owner LLC

recipient_address_line_1   string     

Recipient street address, line 1. Must not be greater than 255 characters. Example: 200 Main Street

recipient_address_line_2   string  optional    

Recipient street address, line 2. Must not be greater than 255 characters. Example: n

recipient_city   string     

Recipient city. Must not be greater than 255 characters. Example: Austin

recipient_state   string     

Recipient two-letter US state code. Must be 2 characters. Example: TX

recipient_zip   string     

Recipient postal code. Must not be greater than 10 characters. Example: 78702

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Organizations

Tenant accounts and directory records for counterparties (owner, GC, lender).

List organizations

requires authentication

Paginated organizations visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/organizations?type=architecto&role=owner&search=architecto&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/organizations"
);

const params = {
    "type": "architecto",
    "role": "owner",
    "search": "architecto",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "0dc8cc85-76ab-4463-bee6-f1385cd01bdb",
            "name": "Bailey Ltd",
            "type": "general-contractor",
            "license_number": null,
            "ein": "31-2965625",
            "phone": null,
            "email": "idickens@runte.com",
            "address": {
                "line_1": "16748 Lyric Loop",
                "line_2": null,
                "city": "New Theoburgh",
                "state": "LA",
                "zip": "19279",
                "zip_plus_4": null,
                "country_code": "US"
            },
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "bd17fbb9-45cb-4691-85b1-d72331c439dd",
            "name": "Leuschke, Bauch and Fritsch",
            "type": "sub-contractor",
            "license_number": null,
            "ein": "79-0915066",
            "phone": null,
            "email": null,
            "address": {
                "line_1": "5161 Vesta Coves Apt. 809",
                "line_2": null,
                "city": "Haagborough",
                "state": "MT",
                "zip": "36080-0782",
                "zip_plus_4": null,
                "country_code": "US"
            },
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/organizations

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

type   string     

Filter by type. Example: architecto

role   string     

Filter by your relationship: owner or contact. Example: owner

search   string     

Case-insensitive partial match on name. Example: architecto

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a organization

requires authentication

Creates a organization and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/organizations" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"name\": \"Acme Construction Co\",
    \"type\": \"general_contractor\",
    \"license_number\": \"LIC-558231\",
    \"ein\": \"12-3456789\",
    \"phone\": \"512-555-0100\",
    \"email\": \"ops@example.com\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"b\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"zip_plus_4\": \"1234\",
    \"country_code\": \"US\",
    \"cls_reference_id\": \"CLS-10842\",
    \"role\": \"owner\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/organizations"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "name": "Acme Construction Co",
    "type": "general_contractor",
    "license_number": "LIC-558231",
    "ein": "12-3456789",
    "phone": "512-555-0100",
    "email": "ops@example.com",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "b",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "zip_plus_4": "1234",
    "country_code": "US",
    "cls_reference_id": "CLS-10842",
    "role": "owner"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "afbc6bfb-9510-4f28-b957-904a19acac55",
        "name": "Bailey Ltd",
        "type": "general-contractor",
        "license_number": null,
        "ein": "31-2965625",
        "phone": null,
        "email": "idickens@runte.com",
        "address": {
            "line_1": "16748 Lyric Loop",
            "line_2": null,
            "city": "New Theoburgh",
            "state": "LA",
            "zip": "19279",
            "zip_plus_4": null,
            "country_code": "US"
        },
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/organizations

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

name   string     

Organization legal name. Must not be greater than 255 characters. Example: Acme Construction Co

type   string     

Organization type in the CLS vocabulary. Example: general_contractor

Must be one of:
  • owner-on-title
  • owner-reputed-owner
  • reputed-owner
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
  • lender-beneficiary
  • surety-bond-company
  • architect
  • title-company
  • escrow-title-agency
  • developer
  • construction-manager
  • project-manager
  • owner-representative
  • project-owner
  • lessee
  • lessor
  • sub-lessee
  • home-owners-association
  • property-manager
  • trustee
  • insurance-agency
  • professional-services
  • copy-to
license_number   string  optional    

Contractor license number. Must not be greater than 255 characters. Example: LIC-558231

ein   string  optional    

Employer identification number. Must not be greater than 255 characters. Example: 12-3456789

phone   string  optional    

Contact phone number. Must not be greater than 255 characters. Example: 512-555-0100

email   string  optional    

Contact email address. Must be a valid email address. Must not be greater than 255 characters. Example: ops@example.com

address_line_1   string  optional    

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: b

city   string  optional    

City. Must not be greater than 255 characters. Example: Austin

state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

zip   string  optional    

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

zip_plus_4   string  optional    

Optional 4-digit ZIP+4 extension. Must not be greater than 4 characters. Example: 1234

country_code   string  optional    

Two-letter ISO country code. Defaults to US. Must be 2 characters. Example: US

cls_reference_id   string  optional    

Optional external reference id carried through to CLS. Must not be greater than 255 characters. Example: CLS-10842

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

role   string  optional    

Whether this org is your own tenant (owner) or a directory-only counterparty (contact). Defaults to owner. Example: owner

Must be one of:
  • owner
  • contact

Retrieve a organization

requires authentication

Returns a single organization by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/organizations/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/organizations/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "a778a857-8700-44fa-a75c-67bde426960b",
        "name": "Price Ltd",
        "type": "general-contractor",
        "license_number": null,
        "ein": "59-0214902",
        "phone": null,
        "email": null,
        "address": {
            "line_1": "427 Predovic Ridge",
            "line_2": null,
            "city": "Baileemouth",
            "state": "KS",
            "zip": "32375-9947",
            "zip_plus_4": null,
            "country_code": "US"
        },
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/organizations/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a organization

requires authentication

Applies a partial update to a organization and returns it.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/organizations/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"name\": \"Acme Construction Co\",
    \"type\": \"general_contractor\",
    \"license_number\": \"LIC-558231\",
    \"ein\": \"12-3456789\",
    \"phone\": \"512-555-0100\",
    \"email\": \"ops@example.com\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"b\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"zip_plus_4\": \"1234\",
    \"country_code\": \"US\",
    \"cls_reference_id\": \"CLS-10842\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/organizations/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "name": "Acme Construction Co",
    "type": "general_contractor",
    "license_number": "LIC-558231",
    "ein": "12-3456789",
    "phone": "512-555-0100",
    "email": "ops@example.com",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "b",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "zip_plus_4": "1234",
    "country_code": "US",
    "cls_reference_id": "CLS-10842"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "4953b899-dc92-40e4-bd9d-bb8a9ccac222",
        "name": "Bailey Ltd",
        "type": "general-contractor",
        "license_number": null,
        "ein": "31-2965625",
        "phone": null,
        "email": "idickens@runte.com",
        "address": {
            "line_1": "16748 Lyric Loop",
            "line_2": null,
            "city": "New Theoburgh",
            "state": "LA",
            "zip": "19279",
            "zip_plus_4": null,
            "country_code": "US"
        },
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/organizations/{uuid}

PATCH api/v1/organizations/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

name   string  optional    

Organization legal name. Must not be greater than 255 characters. Example: Acme Construction Co

type   string  optional    

Organization type in the CLS vocabulary. Example: general_contractor

Must be one of:
  • owner-on-title
  • owner-reputed-owner
  • reputed-owner
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
  • lender-beneficiary
  • surety-bond-company
  • architect
  • title-company
  • escrow-title-agency
  • developer
  • construction-manager
  • project-manager
  • owner-representative
  • project-owner
  • lessee
  • lessor
  • sub-lessee
  • home-owners-association
  • property-manager
  • trustee
  • insurance-agency
  • professional-services
  • copy-to
license_number   string  optional    

Contractor license number. Must not be greater than 255 characters. Example: LIC-558231

ein   string  optional    

Employer identification number. Must not be greater than 255 characters. Example: 12-3456789

phone   string  optional    

Contact phone number. Must not be greater than 255 characters. Example: 512-555-0100

email   string  optional    

Contact email address. Must be a valid email address. Must not be greater than 255 characters. Example: ops@example.com

address_line_1   string  optional    

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: b

city   string  optional    

City. Must not be greater than 255 characters. Example: Austin

state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

zip   string  optional    

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

zip_plus_4   string  optional    

Optional 4-digit ZIP+4 extension. Must not be greater than 4 characters. Example: 1234

country_code   string  optional    

Two-letter ISO country code. Defaults to US. Must be 2 characters. Example: US

cls_reference_id   string  optional    

Optional external reference id carried through to CLS. Must not be greater than 255 characters. Example: CLS-10842

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Delete a organization

requires authentication

Soft-deletes the organization.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/organizations/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/organizations/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Organization deleted."
}
 

Request      

DELETE api/v1/organizations/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Parties

Project participants (owner, GC, subs) in the CLS role vocabulary.

List partys

requires authentication

Paginated partys visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/parties?project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&role=general_contractor&is_active=1&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/parties"
);

const params = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "role": "general_contractor",
    "is_active": "1",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "1aa54411-f745-4581-a543-f249e4354ce1",
            "project_id": "2628312c-b356-41be-99ab-c1540374b2b5",
            "organization_id": "a1c43657-6c86-42d7-ab95-e0808490127c",
            "division_id": null,
            "is_claimant": false,
            "contact_id": null,
            "role": "owner-on-title",
            "tier": "sub",
            "license_number": "LIC-024635",
            "contract_amount": "1485225.30",
            "is_active": true,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "44f08e8a-e117-4440-94ea-955aa3579d28",
            "project_id": "593edcd7-a5ed-4a88-91d0-0e6663bade44",
            "organization_id": "c2b1d8a0-36f4-4bc6-9ed5-633276e3242f",
            "division_id": null,
            "is_claimant": false,
            "contact_id": null,
            "role": "owner-on-title",
            "tier": "prime",
            "license_number": "LIC-693053",
            "contract_amount": null,
            "is_active": true,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/parties

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

project_id   string     

Filter to this project (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

role   string     

Filter by party role (CLS vocabulary). Example: general_contractor

is_active   boolean     

Filter by active state. Example: true

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a party

requires authentication

Creates a party and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/parties" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"project_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"contact_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"role\": \"general_contractor\",
    \"tier\": \"prime\",
    \"license_number\": \"LIC-119284\",
    \"contract_amount\": 250000,
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/parties"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "contact_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "role": "general_contractor",
    "tier": "prime",
    "license_number": "LIC-119284",
    "contract_amount": 250000,
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "d2646e28-fae3-4538-8496-cb00dbdf2bc1",
        "project_id": "8e41f863-5b9d-4068-96f0-b5961519ac38",
        "organization_id": "35542e78-b04e-4676-ab38-3744249e8a31",
        "division_id": null,
        "is_claimant": false,
        "contact_id": null,
        "role": "general-contractor",
        "tier": null,
        "license_number": "LIC-589365",
        "contract_amount": "456205.34",
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/parties

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

project_id   string     

UUID of the project. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

contact_id   string  optional    

Optional UUID of a contact to associate with this party. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

role   string     

Party role in the CLS vocabulary (property_owner, general_contractor, subcontractor, ...). Example: general_contractor

Must be one of:
  • owner-on-title
  • owner-reputed-owner
  • reputed-owner
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
  • lender-beneficiary
  • surety-bond-company
  • architect
  • title-company
  • escrow-title-agency
  • developer
  • construction-manager
  • project-manager
  • owner-representative
  • project-owner
  • lessee
  • lessor
  • sub-lessee
  • home-owners-association
  • property-manager
  • trustee
  • insurance-agency
  • professional-services
  • copy-to
tier   string  optional    

Contracting tier: prime, sub, or sub-sub. Example: prime

Must be one of:
  • prime
  • sub
  • sub-sub
license_number   string  optional    

Party contractor license number. Must not be greater than 255 characters. Example: LIC-119284

contract_amount   number  optional    

Party contract value, in dollars. Must be at least 0. Example: 250000

is_active   boolean  optional    

Whether the record is active. Defaults to true. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a party

requires authentication

Returns a single party by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/parties/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/parties/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "d1c6aa90-619f-4fc3-b83f-55dd08023323",
        "project_id": "911f6a43-48c7-4e2e-9f78-2bf33fd30e51",
        "organization_id": "2c65f467-0ca5-46b4-8e17-7f1e6d3d5091",
        "division_id": null,
        "is_claimant": false,
        "contact_id": null,
        "role": "general-contractor",
        "tier": "sub-sub",
        "license_number": "LIC-031881",
        "contract_amount": "1483598.02",
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/parties/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a party

requires authentication

Partial update. The is_claimant party rejects role / is_active changes (422).

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/parties/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"contact_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"role\": \"general_contractor\",
    \"tier\": \"prime\",
    \"license_number\": \"LIC-119284\",
    \"contract_amount\": 250000,
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/parties/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "contact_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "role": "general_contractor",
    "tier": "prime",
    "license_number": "LIC-119284",
    "contract_amount": 250000,
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "c55152d3-a81e-4d30-a3db-0b4c72975eb2",
        "project_id": "5d916c3a-44a4-46d0-957f-781e1e93ec7c",
        "organization_id": "e475924f-595c-430b-b14d-74894993c4ac",
        "division_id": null,
        "is_claimant": false,
        "contact_id": null,
        "role": "general-contractor",
        "tier": null,
        "license_number": "LIC-589365",
        "contract_amount": "456205.34",
        "is_active": true,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/parties/{uuid}

PATCH api/v1/parties/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

contact_id   string  optional    

Optional UUID of a contact to associate with this party. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

role   string  optional    

Party role in the CLS vocabulary. Cannot be changed on the system-managed is_claimant party. Example: general_contractor

Must be one of:
  • owner-on-title
  • owner-reputed-owner
  • reputed-owner
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
  • lender-beneficiary
  • surety-bond-company
  • architect
  • title-company
  • escrow-title-agency
  • developer
  • construction-manager
  • project-manager
  • owner-representative
  • project-owner
  • lessee
  • lessor
  • sub-lessee
  • home-owners-association
  • property-manager
  • trustee
  • insurance-agency
  • professional-services
  • copy-to
tier   string  optional    

Contracting tier: prime, sub, or sub-sub. Example: prime

Must be one of:
  • prime
  • sub
  • sub-sub
license_number   string  optional    

Party contractor license number. Must not be greater than 255 characters. Example: LIC-119284

contract_amount   number  optional    

Party contract value, in dollars. Must be at least 0. Example: 250000

is_active   boolean  optional    

Whether the party is active. Cannot be changed on the system-managed is_claimant party. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Delete a party

requires authentication

Deletes the party. The system-managed is_claimant party cannot be deleted (422).

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/parties/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/parties/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Party deleted."
}
 

Request      

DELETE api/v1/parties/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Pay Applications

AIA G702/G703 pay applications and their status lifecycle.

List pay applications

requires authentication

Paginated G702/G703 pay applications visible to the caller.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/pay-applications?status=architecto&project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/pay-applications"
);

const params = {
    "status": "architecto",
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "2a852107-b50d-44a0-bfcc-f76bff555a2e",
            "application_number": 17,
            "period_from": "1996-07-19",
            "period_to": "2020-02-16",
            "total_contract_amount": "4977103.93",
            "previous_billed_amount": "607748.02",
            "current_billing_amount": "949513.30",
            "retainage_percent": "0.00",
            "retainage_amount": "0.00",
            "total_completed_to_date": "1557261.32",
            "balance_to_finish": "3419842.61",
            "status": "draft",
            "sov_line_items": null,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "bf7b998b-db2c-4c37-abb0-f8385f993972",
            "application_number": 43,
            "period_from": "2009-02-16",
            "period_to": "1990-04-07",
            "total_contract_amount": "1077361.99",
            "previous_billed_amount": "120550.69",
            "current_billing_amount": "53163.61",
            "retainage_percent": "0.00",
            "retainage_amount": "0.00",
            "total_completed_to_date": "173714.30",
            "balance_to_finish": "903647.69",
            "status": "draft",
            "sov_line_items": null,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/pay-applications

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

status   string     

Filter by lifecycle status. Example: architecto

project_id   string     

Filter to this project (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a pay application

requires authentication

Creates a pay application, optionally with inline SOV line items and participants.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/pay-applications" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"project_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"application_number\": 3,
    \"period_from\": \"2026-05-01\",
    \"period_to\": \"2026-05-31\",
    \"total_contract_amount\": 600000,
    \"current_billing_amount\": 75000,
    \"previous_billed_amount\": 0,
    \"retainage_percent\": 10,
    \"cls_reference_id\": \"CLS-10842\",
    \"sov_line_items\": [
        {
            \"description\": \"Concrete - foundations\",
            \"scheduled_value\": 50000,
            \"previous\": 0,
            \"this_period\": 12000
        }
    ],
    \"participants\": [
        {
            \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
            \"role\": \"receiver\"
        }
    ]
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/pay-applications"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "application_number": 3,
    "period_from": "2026-05-01",
    "period_to": "2026-05-31",
    "total_contract_amount": 600000,
    "current_billing_amount": 75000,
    "previous_billed_amount": 0,
    "retainage_percent": 10,
    "cls_reference_id": "CLS-10842",
    "sov_line_items": [
        {
            "description": "Concrete - foundations",
            "scheduled_value": 50000,
            "previous": 0,
            "this_period": 12000
        }
    ],
    "participants": [
        {
            "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
            "role": "receiver"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "39e9ede3-7c2d-4807-a505-fed07903e7bb",
        "application_number": 16,
        "period_from": "1972-10-24",
        "period_to": "1996-07-19",
        "total_contract_amount": "1976890.61",
        "previous_billed_amount": "983826.63",
        "current_billing_amount": "145593.19",
        "retainage_percent": "0.00",
        "retainage_amount": "0.00",
        "total_completed_to_date": "1129419.82",
        "balance_to_finish": "847470.79",
        "status": "draft",
        "sov_line_items": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/pay-applications

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

project_id   string     

UUID of the project. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

division_id   string  optional    

UUID of the claimant division. Optional: inherited from the project. Supplying a division other than the project one is rejected (422). Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

application_number   integer     

Sequential pay application number for the project. Must be at least 1. Example: 3

period_from   string     

Start of the billing period (YYYY-MM-DD). Must be a valid date. Example: 2026-05-01

period_to   string     

End of the billing period; on or after period_from. Must be a valid date. Must be a date after or equal to period_from. Example: 2026-05-31

total_contract_amount   number     

Total contract value to date, in dollars. Must be at least 0. Example: 600000

current_billing_amount   number     

Amount billed this period, in dollars. Must be at least 0. Example: 75000

previous_billed_amount   number  optional    

Amount billed in prior periods, in dollars. Must be at least 0. Example: 0

retainage_percent   number  optional    

Retainage withheld, as a percent (0 to 100). Must be at least 0. Must not be greater than 100. Example: 10

sov_line_items   object[]  optional    

Inline schedule-of-values rows (alternative to a stored SOV). Must not have more than 1000 items.

description   string  optional    

Line item description. This field is required when sov_line_items is present. Must not be greater than 10000 characters. Example: Concrete - foundations

scheduled_value   number  optional    

Scheduled value for the line, in dollars. This field is required when sov_line_items is present. Example: 50000

previous   number  optional    

Value completed in prior periods, in dollars. Example: 0

this_period   number  optional    

Value completed this period, in dollars. Example: 12000

cls_reference_id   string  optional    

Optional external reference id carried through to CLS. Must not be greater than 255 characters. Example: CLS-10842

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

participants   object[]  optional    

Organizations to attach to this pay application, with their role. Must not have more than 50 items.

organization_id   string  optional    

UUID of a participating organization. This field is required when participants is present. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

role   string  optional    

Participant role: sender, receiver, or reviewer. This field is required when participants is present. Example: receiver

Must be one of:
  • sender
  • receiver
  • reviewer

Retrieve a pay application

requires authentication

Returns a single pay application by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/pay-applications/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/pay-applications/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "58924756-bc0d-466a-8f5b-d07039fb7afe",
        "application_number": 33,
        "period_from": "2010-03-28",
        "period_to": "2022-06-24",
        "total_contract_amount": "109752.23",
        "previous_billed_amount": "53431.06",
        "current_billing_amount": "12714.35",
        "retainage_percent": "0.00",
        "retainage_amount": "0.00",
        "total_completed_to_date": "66145.41",
        "balance_to_finish": "43606.82",
        "status": "draft",
        "sov_line_items": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/pay-applications/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Transition a pay application

requires authentication

Moves the pay application to submitted, under_review, approved or rejected.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/pay-applications/6ff8f7f6-1eb3-3525-be4a-3932c805afed/transition" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"status\": \"submitted\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/pay-applications/6ff8f7f6-1eb3-3525-be4a-3932c805afed/transition"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "status": "submitted"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "ba61bf5d-51a2-450d-86f0-e1ef6a6cbbff",
        "application_number": 33,
        "period_from": "2010-03-28",
        "period_to": "2022-06-24",
        "total_contract_amount": "109752.23",
        "previous_billed_amount": "53431.06",
        "current_billing_amount": "12714.35",
        "retainage_percent": "0.00",
        "retainage_amount": "0.00",
        "total_completed_to_date": "66145.41",
        "balance_to_finish": "43606.82",
        "status": "draft",
        "sov_line_items": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/pay-applications/{pay_application_uuid}/transition

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

pay_application_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

status   string     

Target status: submitted, under_review, approved, or rejected. Example: submitted

Must be one of:
  • submitted
  • under_review
  • approved
  • rejected

Projects

Construction projects. A claimant division and role are required on create.

List projects

requires authentication

Paginated projects visible to the caller, newest first.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/projects?state=CA&search=architecto&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/projects"
);

const params = {
    "state": "CA",
    "search": "architecto",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "977f512d-f0d1-4407-b25a-33adef1921b4",
            "name": "eius et animi Project",
            "division_id": "c9af0603-2c74-4a4f-93d7-bccf0331169d",
            "project_number": "PRJ-26316",
            "description": null,
            "address": {
                "line_1": "40575 Dickens Inlet",
                "line_2": null,
                "city": "Myaport",
                "state": "CT",
                "zip": "08182",
                "county": null
            },
            "project_type": null,
            "contract_amount": "177784.58",
            "date_contract": "1981-06-04",
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "a1b39ffb-a611-4c0c-bc79-07d8364a71a1",
            "name": "repellendus assumenda et Project",
            "division_id": "41a84ca3-8481-4ccf-912f-b0bc0ea46bc6",
            "project_number": "PRJ-82438",
            "description": "Quia perspiciatis deserunt ducimus corrupti et.",
            "address": {
                "line_1": "93199 Walker Avenue",
                "line_2": null,
                "city": "Kreigerburgh",
                "state": "FL",
                "zip": "96823",
                "county": "ut"
            },
            "project_type": null,
            "contract_amount": "305560.48",
            "date_contract": "1996-08-19",
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/projects

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

state   string     

Filter by two-letter US state code. Example: CA

search   string     

Case-insensitive partial match on name and project number. Example: architecto

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a project

requires authentication

Creates a project and returns it.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/projects" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"name\": \"Riverside Medical Center\",
    \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"claimant_role\": \"general_contractor\",
    \"date_contract\": \"2026-02-01\",
    \"project_number\": \"PRJ-1042\",
    \"description\": \"Eius et animi quos velit et.\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"v\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"county\": \"Travis\",
    \"project_type\": \"com-new-build\",
    \"contract_amount\": 600000,
    \"cls_reference_id\": \"CLS-10842\",
    \"participants\": [
        {
            \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
            \"role\": \"property_owner\"
        }
    ]
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/projects"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "name": "Riverside Medical Center",
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "claimant_role": "general_contractor",
    "date_contract": "2026-02-01",
    "project_number": "PRJ-1042",
    "description": "Eius et animi quos velit et.",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "v",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "county": "Travis",
    "project_type": "com-new-build",
    "contract_amount": 600000,
    "cls_reference_id": "CLS-10842",
    "participants": [
        {
            "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
            "role": "property_owner"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "a6965421-92a8-4b3e-ae7e-1f53728d1882",
        "name": "sunt nihil accusantium Project",
        "division_id": "d385fff3-210c-428c-b62c-1c4f7adfb4cb",
        "project_number": "PRJ-80841",
        "description": null,
        "address": {
            "line_1": "78142 Nick Field",
            "line_2": null,
            "city": "West Noahmouth",
            "state": "WV",
            "zip": "59021-4902",
            "county": null
        },
        "project_type": null,
        "contract_amount": "655842.27",
        "date_contract": "1977-08-15",
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/projects

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

name   string     

Project name. Must not be greater than 255 characters. Example: Riverside Medical Center

division_id   string     

UUID of the claimant division for this project. Required. Also materialised as the system-managed is_claimant party. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

claimant_role   string     

The claimant role on the project (CLS vocabulary), e.g. general_contractor or subcontractor. Example: general_contractor

Must be one of:
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
date_contract   string  optional    

Prime/sub contract date (YYYY-MM-DD). Required later for G702 generation. Must be a valid date. Example: 2026-02-01

project_number   string  optional    

Your internal project number. Must not be greater than 255 characters. Example: PRJ-1042

description   string  optional    

Optional project description. Must not be greater than 10000 characters. Example: Eius et animi quos velit et.

address_line_1   string  optional    

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: v

city   string  optional    

City. Must not be greater than 255 characters. Example: Austin

state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

zip   string  optional    

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

county   string  optional    

County name. Must not be greater than 255 characters. Example: Travis

project_type   string  optional    

CLS project type (fmp-diy vocabulary). Public-work types (gov-*, tribal) look for bond information on notices; private types look for a construction lender. Example: com-new-build

Must be one of:
  • com-new-build
  • com-tenant-improvement
  • com-apartments
  • res-spec-home
  • res-tract-home
  • res-condos
  • res-owner-occupied
  • res-restoration
  • gov-state
  • gov-federal
  • gov-education-public
  • gov-education-private
  • tribal
  • unknown
contract_amount   number  optional    

Project contract value, in dollars. Must be at least 0. Example: 600000

cls_reference_id   string  optional    

Optional external reference id carried through to CLS. Must not be greater than 255 characters. Example: CLS-10842

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

participants   object[]  optional    

Organizations to attach to the project, with their role. Must not have more than 50 items.

organization_id   string  optional    

UUID of a participating organization. This field is required when participants is present. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

role   string  optional    

Participant role (CLS role token, or claimant). This field is required when participants is present. Example: property_owner

Must be one of:
  • owner-on-title
  • owner-reputed-owner
  • reputed-owner
  • general-contractor
  • sub-contractor
  • 2nd-tier-contractor
  • 3rd-tier-contractor
  • material-supplier
  • equipment-supplier
  • labor-supplier
  • lender-beneficiary
  • surety-bond-company
  • architect
  • title-company
  • escrow-title-agency
  • developer
  • construction-manager
  • project-manager
  • owner-representative
  • project-owner
  • lessee
  • lessor
  • sub-lessee
  • home-owners-association
  • property-manager
  • trustee
  • insurance-agency
  • professional-services
  • copy-to
  • claimant

Retrieve a project

requires authentication

Returns a single project by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/projects/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/projects/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "f4c690c6-9346-455b-a9f0-4e0e1fe4fbed",
        "name": "aut adipisci quidem Project",
        "division_id": "19381109-7056-436d-aa74-7af76e82a924",
        "project_number": "PRJ-00432",
        "description": null,
        "address": {
            "line_1": "38862 Ferne Locks Suite 058",
            "line_2": null,
            "city": "Christianshire",
            "state": "IA",
            "zip": "97161",
            "county": "tempora"
        },
        "project_type": null,
        "contract_amount": "3701357.66",
        "date_contract": "1985-12-26",
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/projects/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a project

requires authentication

Applies a partial update to a project and returns it.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/projects/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"name\": \"Riverside Medical Center\",
    \"project_number\": \"PRJ-1042\",
    \"description\": \"Eius et animi quos velit et.\",
    \"address_line_1\": \"100 Commerce Blvd\",
    \"address_line_2\": \"v\",
    \"city\": \"Austin\",
    \"state\": \"CA\",
    \"zip\": \"78701\",
    \"county\": \"Travis\",
    \"project_type\": \"com-new-build\",
    \"contract_amount\": 600000,
    \"date_contract\": \"2026-02-01\",
    \"cls_reference_id\": \"CLS-10842\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/projects/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "name": "Riverside Medical Center",
    "project_number": "PRJ-1042",
    "description": "Eius et animi quos velit et.",
    "address_line_1": "100 Commerce Blvd",
    "address_line_2": "v",
    "city": "Austin",
    "state": "CA",
    "zip": "78701",
    "county": "Travis",
    "project_type": "com-new-build",
    "contract_amount": 600000,
    "date_contract": "2026-02-01",
    "cls_reference_id": "CLS-10842"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "21f6303b-59e0-4d7e-a0c8-4b55d56aaaa2",
        "name": "sunt nihil accusantium Project",
        "division_id": "3102faa9-72f6-4ac6-8bc6-c2ba06dcd69c",
        "project_number": "PRJ-80841",
        "description": null,
        "address": {
            "line_1": "78142 Nick Field",
            "line_2": null,
            "city": "West Noahmouth",
            "state": "WV",
            "zip": "59021-4902",
            "county": null
        },
        "project_type": null,
        "contract_amount": "655842.27",
        "date_contract": "1977-08-15",
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

PUT api/v1/projects/{uuid}

PATCH api/v1/projects/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

name   string  optional    

Project name. Must not be greater than 255 characters. Example: Riverside Medical Center

project_number   string  optional    

Your internal project number. Must not be greater than 255 characters. Example: PRJ-1042

description   string  optional    

Optional project description. Must not be greater than 10000 characters. Example: Eius et animi quos velit et.

address_line_1   string  optional    

Street address, line 1. Must not be greater than 255 characters. Example: 100 Commerce Blvd

address_line_2   string  optional    

Street address, line 2 (suite, unit). Must not be greater than 255 characters. Example: v

city   string  optional    

City. Must not be greater than 255 characters. Example: Austin

state   string  optional    

Two-letter US state code. Must be 2 characters. Example: CA

zip   string  optional    

Postal code (5 or 9 digit). Must not be greater than 10 characters. Example: 78701

county   string  optional    

County name. Must not be greater than 255 characters. Example: Travis

project_type   string  optional    

CLS project type (fmp-diy vocabulary). Public-work types (gov-*, tribal) look for bond information on notices; private types look for a construction lender. Example: com-new-build

Must be one of:
  • com-new-build
  • com-tenant-improvement
  • com-apartments
  • res-spec-home
  • res-tract-home
  • res-condos
  • res-owner-occupied
  • res-restoration
  • gov-state
  • gov-federal
  • gov-education-public
  • gov-education-private
  • tribal
  • unknown
contract_amount   number  optional    

Project contract value, in dollars. Must be at least 0. Example: 600000

date_contract   string  optional    

Prime/sub contract date (YYYY-MM-DD). Must be a valid date. Example: 2026-02-01

cls_reference_id   string  optional    

Optional external reference id carried through to CLS. Must not be greater than 255 characters. Example: CLS-10842

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Delete a project

requires authentication

Soft-deletes the project.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/projects/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/projects/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Project deleted."
}
 

Request      

DELETE api/v1/projects/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Provider Auth

Stored credentials for downstream service providers.

List provider credentials

requires authentication

Stored mail-provider credentials (secrets are never returned in full).

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/provider-auth?organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&provider=lob&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/provider-auth"
);

const params = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "provider": "lob",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "e2784395-8e31-406c-b14a-0eb4a9fc665a",
            "provider": "lob",
            "label": "adipisci quidem",
            "environment": "sandbox",
            "is_active": true,
            "has_api_key": true,
            "has_api_secret": true,
            "verified_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "b30d7f47-5ba2-4cf3-ba70-cb80ac87e885",
            "provider": "stannp",
            "label": "adipisci molestias",
            "environment": "sandbox",
            "is_active": true,
            "has_api_key": true,
            "has_api_secret": true,
            "verified_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/provider-auth

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

provider   string     

Filter by provider: lob, click2mail or stannp. Example: lob

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Store a provider credential

requires authentication

Saves an encrypted mail-provider API credential.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/provider-auth" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"provider\": \"lob\",
    \"label\": \"Primary Lob key\",
    \"api_key\": \"live_xxx\",
    \"api_secret\": \"b\",
    \"environment\": \"production\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/provider-auth"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "provider": "lob",
    "label": "Primary Lob key",
    "api_key": "live_xxx",
    "api_secret": "b",
    "environment": "production"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "346bd825-e8a8-4d80-8fbd-3951c940a0d2",
        "provider": "lob",
        "label": "et animi",
        "environment": "sandbox",
        "is_active": true,
        "has_api_key": true,
        "has_api_secret": true,
        "verified_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/provider-auth

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

provider   string     

Mail provider the credential is for. Example: lob

Must be one of:
  • lob
  • click2mail
  • stannp
label   string  optional    

Optional friendly name for the credential. Must not be greater than 255 characters. Example: Primary Lob key

api_key   string     

Provider API key. Stored encrypted; never returned in full. Must not be greater than 1000 characters. Example: live_xxx

api_secret   string  optional    

Optional provider API secret. Must not be greater than 1000 characters. Example: b

environment   string  optional    

Provider environment the credential targets. Example: production

Must be one of:
  • sandbox
  • production
metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a provider credential

requires authentication

Returns a single credential by UUID (secrets masked).

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/provider-auth/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/provider-auth/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "78f35162-abc9-4db8-9c74-aab667972087",
        "provider": "lob",
        "label": "adipisci quidem",
        "environment": "sandbox",
        "is_active": true,
        "has_api_key": true,
        "has_api_secret": true,
        "verified_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/provider-auth/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

SOVs

Schedules of values, including CSV import.

List schedules of values

requires authentication

Paginated SOVs visible to the caller.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/sovs?project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&pay_application_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&status=architecto&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/sovs"
);

const params = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "pay_application_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "status": "architecto",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "2f9db788-8407-4f13-969d-b56e3330acda",
            "project_id": "2b3db26a-0028-4ff7-95ee-87c7a238d087",
            "pay_application_id": null,
            "name": "Schedule of Values",
            "line_items": [
                {
                    "item_number": 1,
                    "description": "transform 24/365 networks",
                    "scheduled_value": 26301.26,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 2,
                    "description": "aggregate plug-and-play e-business",
                    "scheduled_value": 73527.26,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 3,
                    "description": "streamline best-of-breed communities",
                    "scheduled_value": 42718.56,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 4,
                    "description": "streamline virtual vortals",
                    "scheduled_value": 35174.92,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 5,
                    "description": "repurpose vertical convergence",
                    "scheduled_value": 7452.43,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 6,
                    "description": "implement intuitive e-tailers",
                    "scheduled_value": 67892.93,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                }
            ],
            "total_contract_amount": "253067.36",
            "source": "manual",
            "status": "active",
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        },
        {
            "id": "a2109301-0c33-47d2-86b0-44029ae59f6c",
            "project_id": "87ecf023-fd7c-4640-9d2f-393ef47d5b50",
            "pay_application_id": null,
            "name": "Schedule of Values",
            "line_items": [
                {
                    "item_number": 1,
                    "description": "repurpose transparent metrics",
                    "scheduled_value": 95837.82,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 2,
                    "description": "repurpose mission-critical portals",
                    "scheduled_value": 77640.32,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 3,
                    "description": "maximize frictionless e-services",
                    "scheduled_value": 90813.2,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 4,
                    "description": "envisioneer efficient infomediaries",
                    "scheduled_value": 28549.11,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 5,
                    "description": "mesh 24/7 e-commerce",
                    "scheduled_value": 50319.38,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                },
                {
                    "item_number": 6,
                    "description": "synthesize web-enabled bandwidth",
                    "scheduled_value": 94610.18,
                    "work_completed_from_previous": 0,
                    "work_completed_this_period": 0,
                    "materials_presently_stored": 0,
                    "total_completed_and_stored": 0,
                    "percent_complete": 0,
                    "balance_to_finish": 0,
                    "retainage": 0
                }
            ],
            "total_contract_amount": "437770.01",
            "source": "manual",
            "status": "active",
            "metadata": null,
            "created_at": "2026-10-05T15:49:19+00:00",
            "updated_at": "2026-10-05T15:49:19+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/sovs

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

project_id   string     

Filter to this project (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

pay_application_id   string     

Filter to this pay application (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

status   string     

Filter by lifecycle status. Example: architecto

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a schedule of values

requires authentication

Creates an SOV with 1-1000 line items.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/sovs" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"project_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"pay_application_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"name\": \"Base contract SOV\",
    \"line_items\": [
        {
            \"item_number\": \"1\",
            \"description\": \"Concrete - foundations\",
            \"scheduled_value\": 50000
        }
    ]
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/sovs"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "pay_application_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "name": "Base contract SOV",
    "line_items": [
        {
            "item_number": "1",
            "description": "Concrete - foundations",
            "scheduled_value": 50000
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "cc12bbe1-8993-41b7-a010-de80b46ed922",
        "project_id": "3c4cba61-5612-4532-938a-36a89908cf7a",
        "pay_application_id": null,
        "name": "Schedule of Values",
        "line_items": [
            {
                "item_number": 1,
                "description": "exploit scalable supply-chains",
                "scheduled_value": 88168.27,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 2,
                "description": "optimize front-end e-tailers",
                "scheduled_value": 58195.4,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 3,
                "description": "orchestrate out-of-the-box web-readiness",
                "scheduled_value": 57528.21,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 4,
                "description": "seize sexy e-services",
                "scheduled_value": 92046.48,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 5,
                "description": "engineer compelling e-markets",
                "scheduled_value": 72985.28,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 6,
                "description": "aggregate granular synergies",
                "scheduled_value": 39857.96,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            }
        ],
        "total_contract_amount": "408781.60",
        "source": "manual",
        "status": "active",
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/sovs

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

project_id   string     

UUID of the project. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

pay_application_id   string  optional    

Optional UUID of a pay application to attach the SOV to. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

name   string  optional    

Optional label for the schedule of values. Must not be greater than 255 characters. Example: Base contract SOV

line_items   object[]     

Schedule-of-values rows (1 to 1000). Must have at least 1 items. Must not have more than 1000 items.

item_number   string     

Row number / identifier. Example: 1

description   string     

Line item description. Must not be greater than 10000 characters. Example: Concrete - foundations

scheduled_value   number     

Scheduled value for the line, in dollars. Must be at least 0. Example: 50000

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a schedule of values

requires authentication

Returns a single SOV by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/sovs/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/sovs/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "306fbe5a-0557-419b-9224-7bf03f528e6b",
        "project_id": "ade9676a-9d68-4060-bf44-c559e8809f96",
        "pay_application_id": null,
        "name": "Schedule of Values",
        "line_items": [
            {
                "item_number": 1,
                "description": "synergize next-generation vortals",
                "scheduled_value": 45413.38,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 2,
                "description": "reintermediate world-class webservices",
                "scheduled_value": 16627.28,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 3,
                "description": "enhance back-end content",
                "scheduled_value": 7616.01,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            }
        ],
        "total_contract_amount": "69656.67",
        "source": "manual",
        "status": "active",
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

GET api/v1/sovs/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Delete a schedule of values

requires authentication

Deletes the SOV.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/sovs/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/sovs/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "SOV deleted."
}
 

Request      

DELETE api/v1/sovs/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Import an SOV from CSV

requires authentication

Creates an SOV from an uploaded CSV file (multipart/form-data).

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/sovs/import-csv" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --form "project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c"\
    --form "pay_application_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c"\
    --form "name=Imported SOV"\
    --form "file=@/tmp/phpc0hrjr1lr94u8h61xtc" 
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/sovs/import-csv"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

const body = new FormData();
body.append('project_id', '9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c');
body.append('pay_application_id', '9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c');
body.append('name', 'Imported SOV');
body.append('file', document.querySelector('input[name="file"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "81a3f51c-25fa-4efb-8ac4-ddd48c0c6454",
        "project_id": "89022d9c-8034-4920-afd1-4100ab470c37",
        "pay_application_id": null,
        "name": "Schedule of Values",
        "line_items": [
            {
                "item_number": 1,
                "description": "exploit scalable supply-chains",
                "scheduled_value": 88168.27,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 2,
                "description": "optimize front-end e-tailers",
                "scheduled_value": 58195.4,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 3,
                "description": "orchestrate out-of-the-box web-readiness",
                "scheduled_value": 57528.21,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 4,
                "description": "seize sexy e-services",
                "scheduled_value": 92046.48,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 5,
                "description": "engineer compelling e-markets",
                "scheduled_value": 72985.28,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            },
            {
                "item_number": 6,
                "description": "aggregate granular synergies",
                "scheduled_value": 39857.96,
                "work_completed_from_previous": 0,
                "work_completed_this_period": 0,
                "materials_presently_stored": 0,
                "total_completed_and_stored": 0,
                "percent_complete": 0,
                "balance_to_finish": 0,
                "retainage": 0
            }
        ],
        "total_contract_amount": "408781.60",
        "source": "manual",
        "status": "active",
        "metadata": null,
        "created_at": "2026-10-05T15:49:19+00:00",
        "updated_at": "2026-10-05T15:49:19+00:00"
    }
}
 

Request      

POST api/v1/sovs/import-csv

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

project_id   string     

UUID of the project. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

pay_application_id   string  optional    

Optional UUID of a pay application to attach the imported SOV to. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

name   string  optional    

Optional label for the imported schedule of values. Must not be greater than 255 characters. Example: Imported SOV

file   file     

The CSV file (csv or txt, max 2 MB). Sent as multipart/form-data. Must be a file. Must not be greater than 2048 kilobytes. Example: /tmp/phpc0hrjr1lr94u8h61xtc

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Sandbox

Inspect the API key mode and reset disposable sandbox data.

Get sandbox status

requires authentication

Reports whether the current API key is in live or sandbox mode.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/sandbox" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/sandbox"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "mode": "sandbox",
    "is_sandbox": true
}
 

Request      

GET api/v1/sandbox

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Reset sandbox data

requires authentication

Wipes all disposable sandbox records for the caller. Optionally reseeds demo data. Sandbox keys only.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/sandbox/reset" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"sample_data\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/sandbox/reset"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "sample_data": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Sandbox data reset.",
    "reseeded": false
}
 

Request      

POST api/v1/sandbox/reset

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

sample_data   boolean  optional    

When true, reseed a fresh set of demo records after wiping sandbox data. Example: true

Search

Cross-resource search.

requires authentication

Case-insensitive partial-match search over organizations, projects and contacts the caller can see.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/search?q=riverside&types[]=projects&types[]=contacts&per_type=5" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"q\": \"b\",
    \"types\": [
        \"contacts\"
    ],
    \"per_type\": 22
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/search"
);

const params = {
    "q": "riverside",
    "types[0]": "projects",
    "types[1]": "contacts",
    "per_type": "5",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "q": "b",
    "types": [
        "contacts"
    ],
    "per_type": 22
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "organizations": [
            {
                "id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
                "name": "Riverside Builders"
            }
        ],
        "projects": [
            {
                "id": "104ad307-aee6-4277-9c47-ebb899a035f5",
                "name": "Riverside Medical Center",
                "project_number": "PRJ-1042"
            }
        ],
        "contacts": []
    },
    "query": "riverside"
}
 

Shipper Auth

Stored credentials for shipping and mail carriers.

List shipper credentials

requires authentication

Stored carrier credentials (secrets are never returned in full).

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/shipper-auth?organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&carrier=usps&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/shipper-auth"
);

const params = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "carrier": "usps",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "0dcb0594-f4de-4aa6-af1c-f817576255bb",
            "carrier": "usps",
            "label": "adipisci quidem",
            "account_number": "310719",
            "environment": "sandbox",
            "is_active": true,
            "has_api_key": true,
            "has_api_secret": true,
            "verified_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "df86388d-681d-4f89-9511-b03a8ce34ecf",
            "carrier": "ups",
            "label": "adipisci molestias",
            "account_number": "696081",
            "environment": "sandbox",
            "is_active": true,
            "has_api_key": true,
            "has_api_secret": true,
            "verified_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/shipper-auth

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

carrier   string     

Filter by carrier: usps, fedex or ups. Example: usps

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Store a shipper credential

requires authentication

Saves an encrypted carrier API credential.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/shipper-auth" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"carrier\": \"usps\",
    \"label\": \"USPS account\",
    \"api_key\": \"live_xxx\",
    \"api_secret\": \"b\",
    \"account_number\": \"0001234\",
    \"environment\": \"production\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/shipper-auth"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "carrier": "usps",
    "label": "USPS account",
    "api_key": "live_xxx",
    "api_secret": "b",
    "account_number": "0001234",
    "environment": "production"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "0dcea519-ea7e-424e-8922-a421c4e48e20",
        "carrier": "usps",
        "label": "et animi",
        "account_number": "089432",
        "environment": "sandbox",
        "is_active": true,
        "has_api_key": true,
        "has_api_secret": true,
        "verified_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/shipper-auth

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

carrier   string     

Shipping carrier the credential is for. Example: usps

Must be one of:
  • usps
  • fedex
  • ups
label   string  optional    

Optional friendly name for the credential. Must not be greater than 255 characters. Example: USPS account

api_key   string     

Carrier API key. Stored encrypted; never returned in full. Must not be greater than 1000 characters. Example: live_xxx

api_secret   string  optional    

Optional carrier API secret. Must not be greater than 1000 characters. Example: b

account_number   string  optional    

Optional carrier account number. Must not be greater than 255 characters. Example: 0001234

environment   string  optional    

Carrier environment the credential targets. Example: production

Must be one of:
  • sandbox
  • production
metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a shipper credential

requires authentication

Returns a single credential by UUID (secrets masked).

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/shipper-auth/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/shipper-auth/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "1a210080-d9cc-437d-b800-591c5cbea122",
        "carrier": "usps",
        "label": "adipisci quidem",
        "account_number": "310719",
        "environment": "sandbox",
        "is_active": true,
        "has_api_key": true,
        "has_api_secret": true,
        "verified_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/shipper-auth/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Support

Health, credit and usage summaries.

Health check

Liveness probe plus CLS connectivity. No auth required.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/support/health" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/support/health"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "status": "ok",
    "time": "2026-09-09T00:00:00+00:00",
    "cls": {
        "driver": "http",
        "reachable": true
    }
}
 

Request      

GET api/v1/support/health

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Credit summary

requires authentication

Credit balance and recent usage totals for the calling organization.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/support/credits" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/support/credits"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "balance": 250,
    "cls_eligible_balance": 250,
    "used_last_30d": 42.5
}
 

Request      

GET api/v1/support/credits

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Usage summary

requires authentication

API and billable-event counts for the calling organization.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/support/usage" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/support/usage"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "api_calls_last_30d": 1284,
    "documents_generated_last_30d": 37,
    "mail_sent_last_30d": 12
}
 

Request      

GET api/v1/support/usage

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Waivers

Conditional and unconditional lien waivers, including signing.

List waivers

requires authentication

Paginated lien waivers visible to the caller.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/waivers?type=architecto&status=architecto&project_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&pay_application_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/waivers"
);

const params = {
    "type": "architecto",
    "status": "architecto",
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "pay_application_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "12a4eac2-9589-4fff-b86b-36ccad5d5c19",
            "project_id": "373471bf-f4bd-48bb-a68e-5a4609437257",
            "pay_application_id": "beb6c7a6-2b50-42d2-903f-c911b1626516",
            "division_id": "1ca1015e-4d3e-41b2-beee-21e6bd8876fc",
            "type": "unconditional",
            "status": "pending",
            "amount": "122864.55",
            "through_date": "2024-07-19",
            "check_number": null,
            "exceptions": null,
            "signee_name": null,
            "signee_title": null,
            "signed_at": null,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "c93ae1d2-0662-496c-8279-ca592a4d36b8",
            "project_id": "5704fe13-342d-43b3-8c41-eda8bade8b91",
            "pay_application_id": "6a2ac7a4-db29-4993-8573-fe2bdda57446",
            "division_id": "26d0f33e-8a15-47e4-b59c-2982a93fcc54",
            "type": "unconditional",
            "status": "pending",
            "amount": "120142.13",
            "through_date": "2013-10-02",
            "check_number": null,
            "exceptions": null,
            "signee_name": null,
            "signee_title": null,
            "signed_at": null,
            "cls_reference_id": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/waivers

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

type   string     

Filter by type. Example: architecto

status   string     

Filter by lifecycle status. Example: architecto

project_id   string     

Filter to this project (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

pay_application_id   string     

Filter to this pay application (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a waiver

requires authentication

Creates a conditional or unconditional lien waiver.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/waivers" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"division_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"project_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"pay_application_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"type\": \"conditional\",
    \"amount\": 75000,
    \"through_date\": \"2026-05-31\",
    \"check_number\": \"10482\",
    \"exceptions\": \"b\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/waivers"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "division_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "project_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "pay_application_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "conditional",
    "amount": 75000,
    "through_date": "2026-05-31",
    "check_number": "10482",
    "exceptions": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "20979b21-c3eb-4c26-afd2-f1b8eebe7688",
        "project_id": "4a0d9882-3dec-4143-baaa-8ca6cfc86025",
        "pay_application_id": "05c2b85f-a59a-4d2f-a126-3a112041be23",
        "division_id": "dfa04dd3-2280-4e99-a7e9-d2ef2e1dd906",
        "type": "unconditional",
        "status": "pending",
        "amount": "122864.55",
        "through_date": "2024-07-19",
        "check_number": null,
        "exceptions": null,
        "signee_name": null,
        "signee_title": null,
        "signed_at": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/waivers

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

division_id   string  optional    

UUID of the claimant division. Optional: inherited from the project. Supplying a division other than the project one is rejected (422). Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

project_id   string  optional    

UUID of the project. Required unless pay_application_id is given. This field is required when pay_application_id is not present. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

pay_application_id   string  optional    

UUID of the pay application this waiver is tied to. Required unless project_id is given. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string     

Waiver type: conditional or unconditional. Example: conditional

Must be one of:
  • conditional
  • unconditional
amount   number     

Waiver amount, in dollars. Must be at least 0. Example: 75000

through_date   string     

Effective-through date of the waiver (YYYY-MM-DD). Must be a valid date. Example: 2026-05-31

check_number   string  optional    

Optional payment check number referenced by the waiver. Must not be greater than 50 characters. Example: 10482

exceptions   string  optional    

Optional text describing amounts or claims excluded from the waiver. Must not be greater than 10000 characters. Example: b

metadata   object  optional    

Free-form keyvalue bag (max 32 KB, depth 6, 500 items). Claimant-identity keys (claimant_name, claimant_address, claimant_license_number, ...) are rejected here (422): the claimant comes from the division. Supply metadata.owner.name / metadata.gc.name to satisfy the document preflight inline.

Retrieve a waiver

requires authentication

Returns a single waiver by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/waivers/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/waivers/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "18aeb5b5-fe3b-4c17-b9dc-441ff7873371",
        "project_id": "4193443a-85dd-4130-b83e-396a1c8090d4",
        "pay_application_id": "b1de1cb2-2161-49e4-8e32-d467b8589177",
        "division_id": "8ea7eed2-3ecd-4fcd-98ee-de4f37a02564",
        "type": "conditional",
        "status": "pending",
        "amount": "486859.78",
        "through_date": "2006-04-05",
        "check_number": null,
        "exceptions": null,
        "signee_name": null,
        "signee_title": null,
        "signed_at": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/waivers/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a waiver

requires authentication

Applies a partial update to a waiver.

Example request:
curl --request PATCH \
    "https://api.prelienpro.com/api/v1/api/v1/waivers/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"pay_application_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"type\": \"conditional\",
    \"amount\": 75000,
    \"through_date\": \"2026-05-31\",
    \"check_number\": \"10482\",
    \"exceptions\": \"b\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/waivers/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "pay_application_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "type": "conditional",
    "amount": 75000,
    "through_date": "2026-05-31",
    "check_number": "10482",
    "exceptions": "b"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "2cff6cf6-f816-4853-a890-b88b2c61066e",
        "project_id": "513c3b2c-2616-45a9-bf3d-1c0c7d3af4d7",
        "pay_application_id": "ffbd2bba-d19c-41d2-9e6f-6eef2765b274",
        "division_id": "5f3ca6b3-70c6-4550-b05c-9a97cbaf981b",
        "type": "unconditional",
        "status": "pending",
        "amount": "122864.55",
        "through_date": "2024-07-19",
        "check_number": null,
        "exceptions": null,
        "signee_name": null,
        "signee_title": null,
        "signed_at": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

PATCH api/v1/waivers/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

pay_application_id   string  optional    

UUID of the pay application this waiver is tied to. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

type   string  optional    

Waiver type: conditional or unconditional. Example: conditional

Must be one of:
  • conditional
  • unconditional
amount   number  optional    

Waiver amount, in dollars. Must be at least 0. Example: 75000

through_date   string  optional    

Effective-through date of the waiver (YYYY-MM-DD). Must be a valid date. Example: 2026-05-31

check_number   string  optional    

Optional payment check number referenced by the waiver. Must not be greater than 50 characters. Example: 10482

exceptions   string  optional    

Optional text describing amounts or claims excluded from the waiver. Must not be greater than 10000 characters. Example: b

metadata   object  optional    

Free-form keyvalue bag (max 32 KB, depth 6, 500 items). Claimant-identity keys (claimant_name, claimant_address, claimant_license_number, ...) are rejected here (422): the claimant comes from the division. Supply metadata.owner.name / metadata.gc.name to satisfy the document preflight inline.

Sign a waiver

requires authentication

Records the signer name and title and marks the waiver signed.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/waivers/6ff8f7f6-1eb3-3525-be4a-3932c805afed/sign" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"signee_name\": \"Jane Smith\",
    \"signee_title\": \"Controller\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/waivers/6ff8f7f6-1eb3-3525-be4a-3932c805afed/sign"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "signee_name": "Jane Smith",
    "signee_title": "Controller"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "557abed2-927f-44a3-8464-fd30bbb3c4fa",
        "project_id": "29f8df8d-0240-4ea6-96b6-6bdd2084124c",
        "pay_application_id": "83539844-eb4c-4c1b-ab22-5d425d9300fa",
        "division_id": "a19e0832-548a-41c5-b38f-40eebe80fce7",
        "type": "unconditional",
        "status": "pending",
        "amount": "497668.34",
        "through_date": "1997-11-28",
        "check_number": null,
        "exceptions": null,
        "signee_name": null,
        "signee_title": null,
        "signed_at": null,
        "cls_reference_id": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/waivers/{waiver_uuid}/sign

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

waiver_uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

signee_name   string     

Full name of the person signing the waiver. Must not be greater than 255 characters. Example: Jane Smith

signee_title   string     

Job title of the signer. Must not be greater than 255 characters. Example: Controller

Webhooks

Outbound subscriptions and inbound provider callbacks.

List webhook subscriptions

requires authentication

Paginated webhook subscriptions visible to the caller.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/webhooks?organization_id=9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c&per_page=15" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks"
);

const params = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "50657cb6-5ddd-4578-b10d-12e27b653d13",
            "organization_id": "445f3fde-a538-4125-862d-4b1733f433a6",
            "url": "http://armstrong.net/error-voluptatibus-odio-ut-dignissimos",
            "events": [
                "pay_app.created",
                "pay_app.approved"
            ],
            "is_active": true,
            "last_triggered_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        },
        {
            "id": "efaddca8-666f-4a1f-bd07-bad5249de0a8",
            "organization_id": "c5099161-9693-42a9-ae6b-1b507255ee69",
            "url": "http://tromp.com/molestias-reiciendis-velit-doloremque-quidem-et.html",
            "events": [
                "pay_app.created",
                "pay_app.approved"
            ],
            "is_active": true,
            "last_triggered_at": null,
            "metadata": null,
            "created_at": "2026-10-05T15:49:20+00:00",
            "updated_at": "2026-10-05T15:49:20+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 15,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/v1/webhooks

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Query Parameters

organization_id   string     

Filter to this organization (UUID). Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

per_page   integer     

Results per page. Clamped to 1-100; defaults to 15. Example: 15

Create a webhook subscription

requires authentication

Registers an HTTPS endpoint for the given event names.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/webhooks" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"organization_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"url\": \"https:\\/\\/example.com\\/webhooks\\/prelien\",
    \"events\": [
        \"pay_application.approved\"
    ],
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "organization_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "url": "https:\/\/example.com\/webhooks\/prelien",
    "events": [
        "pay_application.approved"
    ],
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "data": {
        "id": "f1abc611-cc8e-4105-950d-2b6970c142f1",
        "organization_id": "7726d606-ffc1-4542-9d77-ce85cc7d4a17",
        "url": "http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html",
        "events": [
            "pay_app.created",
            "pay_app.approved"
        ],
        "is_active": true,
        "last_triggered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

POST api/v1/webhooks

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

organization_id   string     

UUID of the organization this record belongs to. Must be one the API key can access. Must match an existing stored value. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

url   string     

HTTPS endpoint to POST events to. Private, loopback and reserved hosts are rejected in production. Must not be greater than 2048 characters. Example: https://example.com/webhooks/prelien

events   string[]     

A single event name.

is_active   boolean  optional    

Whether the subscription is active. Defaults to true. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Retrieve a webhook subscription

requires authentication

Returns a single subscription by UUID.

Example request:
curl --request GET \
    --get "https://api.prelienpro.com/api/v1/api/v1/webhooks/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "6b406358-2c5e-4a4c-ab88-cbe487465337",
        "organization_id": "90bd12c9-31f5-454b-a277-53c20f100cfd",
        "url": "http://www.price.org/",
        "events": [
            "pay_app.created",
            "pay_app.approved"
        ],
        "is_active": true,
        "last_triggered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

GET api/v1/webhooks/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Update a webhook subscription

requires authentication

Partial update of URL, events or active state.

Example request:
curl --request PUT \
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"url\": \"https:\\/\\/example.com\\/webhooks\\/prelien\",
    \"events\": [
        \"pay_application.approved\"
    ],
    \"is_active\": true
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "url": "https:\/\/example.com\/webhooks\/prelien",
    "events": [
        "pay_application.approved"
    ],
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "dbda829b-e4c0-4b07-8958-6d3bba67230e",
        "organization_id": "dcfed30b-9935-4c12-aec5-26d65ff05466",
        "url": "http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html",
        "events": [
            "pay_app.created",
            "pay_app.approved"
        ],
        "is_active": true,
        "last_triggered_at": null,
        "metadata": null,
        "created_at": "2026-10-05T15:49:20+00:00",
        "updated_at": "2026-10-05T15:49:20+00:00"
    }
}
 

Request      

PUT api/v1/webhooks/{uuid}

PATCH api/v1/webhooks/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

url   string  optional    

HTTPS endpoint to POST events to. Private, loopback and reserved hosts are rejected in production. Must not be greater than 2048 characters. Example: https://example.com/webhooks/prelien

events   string[]  optional    

A single event name. This field is required when events is present. Must not be greater than 255 characters.

is_active   boolean  optional    

Whether the subscription is active. Example: true

metadata   object  optional    

Free-form keyvalue bag stored alongside the record (max 32 KB, depth 6, 500 items).

Delete a webhook subscription

requires authentication

Removes the subscription.

Example request:
curl --request DELETE \
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Webhook subscription deleted."
}
 

Request      

DELETE api/v1/webhooks/{uuid}

Headers

Authorization        

Example: Bearer Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

URL Parameters

uuid   string     

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Mail-provider callback

Inbound endpoint for the mail provider. HMAC-signed; not called by API clients.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/mail-provider" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/mail-provider"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "Webhook processed."
}
 

Request      

POST api/v1/webhooks/mail-provider

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

CLS fulfillment-status callback

Inbound endpoint for CLS research status updates. HMAC-signed; not called by API clients.

Example request:
curl --request POST \
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/cls/fulfillment-status" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Organization-UUID: {YOUR_ORGANIZATION_UUID}" \
    --data "{
    \"fulfillment_request_id\": \"9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c\",
    \"status\": \"fulfilled\",
    \"payment_required\": {
        \"recipients\": 1
    },
    \"status_reason\": \"n\",
    \"last_error\": \"g\",
    \"cls_resource_type\": \"notice\",
    \"cls_resource_id\": \"cls_ntc_88213\",
    \"refund_decision\": \"none\",
    \"refund_amount\": 12,
    \"refund_reason\": \"m\"
}"
const url = new URL(
    "https://api.prelienpro.com/api/v1/api/v1/webhooks/cls/fulfillment-status"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Organization-UUID": "{YOUR_ORGANIZATION_UUID}",
};

let body = {
    "fulfillment_request_id": "9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c",
    "status": "fulfilled",
    "payment_required": {
        "recipients": 1
    },
    "status_reason": "n",
    "last_error": "g",
    "cls_resource_type": "notice",
    "cls_resource_id": "cls_ntc_88213",
    "refund_decision": "none",
    "refund_amount": 12,
    "refund_reason": "m"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "ok"
}
 

Request      

POST api/v1/webhooks/cls/fulfillment-status

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

X-Organization-UUID        

Example: {YOUR_ORGANIZATION_UUID}

Body Parameters

fulfillment_request_id   string     

UUID of the fulfillment request this status update is for. Must be a valid UUID. Example: 9b7e0e2a-1c3d-4f5a-8b6c-2d4e6f8a0b1c

status   string     

New lifecycle status of the CLS ticket. Example: fulfilled

Must be one of:
  • submitted_to_cls
  • in_progress
  • payment_required
  • fulfilled
  • failed
  • cancelled
  • rejected
payment_required   object  optional    

This field is required when status is payment_required.

recipients   integer  optional    

This field is required when payment_required is present. Must be at least 1. Must not be greater than 500. Example: 1

status_reason   string  optional    

Optional explanation for the status change. Must not be greater than 10000 characters. Example: n

last_error   string  optional    

Optional error detail when status is failed. Must not be greater than 10000 characters. Example: g

cls_resource_type   string  optional    

Optional CLS resource type the ticket resolved to. Must not be greater than 100 characters. Example: notice

cls_resource_id   string  optional    

Optional CLS resource id the ticket resolved to. Must not be greater than 100 characters. Example: cls_ntc_88213

meta   object  optional    

Optional bounded keyvalue bag of extra context.

result   object  optional    

Research output for a fulfilled ticket (project / parties / notice specifics). Intentionally flexible and bounded rather than a fixed schema.

refund_decision   string  optional    

Optional operator-supplied refund instruction. CLS itself never dictates refunds. Example: none

Must be one of:
  • full
  • partial
  • none
refund_amount   number  optional    

Refund amount; required when refund_decision is partial. This field is required when refund_decision is partial. Must be at least 0.01. Example: 12

refund_reason   string  optional    

Optional explanation recorded with the refund. Must not be greater than 10000 characters. Example: m