Introduction
The Proof API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
API URLs
| Environment | URL |
|---|---|
| Staging | https://api.staging.proofserve.com/v1/ |
| Trunk | https://api.trunk.proofserve.com/v1/ |
| Production | https://api.proofserve.com/v1/ |
Authentication
Example authenticated request:
# With http, you can just pass the correct header with each request
curl "<ENDPOINT>"
-H "Authorization: <API_KEY>"
Make sure to replace
<API_KEY>with your API key. You can generate an API key by logging in and going to Billing & Configuration > API.
Authentication to the API is performed via HTTP Basic Auth. Provide your API key as the basic auth username value. You do not need to provide a password. API keys can be generated within the web app in the Billing & Configuration > API page.
Errors
Proof uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, the request failed, etc.). Codes in the 5xx range indicate an error with Proof's servers (these are rare).
Rate limit
All accounts start off with a rate limit of 1,800 requests per minute. If you make over 1,800 requests in a given minute, your requests will begin returning 429 status codes. If you need a higher limit, please contact Proof. A basic technique for integrations to gracefully handle limiting is to watch for 429 status codes and build in a retry mechanism. The retry mechanism should follow an exponential backoff schedule to reduce request volume when necessary.
API Changelog
October 20, 2025
Added
Multiple Mailings Support (V2): Jobs now support multiple mailings per servee via the
servees.*.mailingsarray inPOST /jobs. Configure multiple automated mailings with different triggers, service types, and custom recipients.- New field
servees.*.mailings[]with: trigger:CLOSEOUT_ANY,CLOSEOUT_SUCCESS,CLOSEOUT_FAILURE,SERVICE_OUTCOMEmailing_type:AUTOMATED,SERVER,SCM_VENDORservice_type:FIRST_CLASS,CERTIFIEDaddress(optional): Custom recipient withaddress_1,address_2,city,state_id,zipservice_outcome_triggers[](optional): Array withis_successful,service_type- Response:
GET /jobs/{id}now returnsmailings[]array in servee object
- New field
New GraphQL Operations:
addMailing- Add a new mailing to an existing jobgetMailingsByJobID- Query mailings with filtering and paginationdeleteMailing- Delete a mailing from a job
Deprecated
servees.*.letter_trigger- DEPRECATED: Useservees.*.mailingsarray insteadservees.*.letter_is_certified- DEPRECATED: Useservees.*.mailingsarray instead
May 12, 2025
Added
- New endpoint:
POST /v1/jobs/{job_id}/mailing/attempt- Create Job Mailing capability for processing job mailings. See the "Mailing" section for detailed documentation. - Serve Spec APIs:
- New GraphQL mutation:
createJobSpecification- Create standardized job specifications with preferences - New GraphQL mutation:
updateJobSpecification- Update existing job specifications - New GraphQL query:
getJobSpecsByLawFirm- Retrieve job specifications for a law firm - These new APIs enable law firms to create and manage templated job specifications with standardized preferences for different job types (SERVE/POSTING) and states.
- New GraphQL mutation:
Changed
POST /jobs/{job_id}/cancel- Updated documentation to correctly reflect that a request body is required. Added example request payload.POST /jobs- Fixed the data type forservees.*.same_addressfield from bool to int.
Fixed
- Webhook endpoint path corrected from
/webhooks/to/webhooks/endpoints. Please ensure your integrations for creating (POST) and retrieving (GET) webhook configurations use the correct path.
Attempt Photos
Get attempt photo
Example response:
<image file>
HTTP Request
GET /attempt-photos/{attempt_photo_id}.{ext}
Billing
Get payment methods
Example response:
[
{
"id": 1,
"brand": "Visa",
"last4": "4242",
"address_zip": "12321",
"billing_name": "Martin",
"exp_month": 4,
"exp_year": 2024,
"default": true,
"shared": false,
"user_id": 2,
"label": "Abc",
"stripe_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"type": "CARD",
"status": "CONFIRMED"
}
]
HTTP Request
GET /billing/payment-methods
Checklist Templates
Checklist templates are used in conjunction with site visit jobs. When a site visit job is created a checklist_template_id must be provided in the JSON request.
Get checklist templates
Example response:
[
{
"id": 1,
"revision": 1,
"name": "Occupancy Check",
"description": "Verify occupancy with fast, accurate inspections.",
"icon": "OccupancyCheck",
"checklist": {
"items": [
{
"id": 1,
"question": "Take photos of front of building from left, right and center.",
"photos_required": true,
"min_photos_required": 3
},
{
"id": 2,
"answers": [
{
"label": "Yes",
"description_required": true
},
{
"label": "No",
"description_required": false
},
{
"label": "Other",
"description_required": true
}
],
"question": "Are there signs of human activity?",
"photos_required": false
},
{
"id": 3,
"answers": [
{
"label": "Yes",
"description_required": true
},
{
"label": "No",
"description_required": false
},
{
"label": "Other",
"description_required": true
}
],
"question": "Are there any personal belongings in the yard or on the patio?",
"photos_required": false
},
{
"id": 4,
"answers": [
{
"label": "Yes",
"description_required": true
},
{
"label": "No",
"description_required": false
},
{
"label": "Other",
"description_required": true
}
],
"question": "Are there any vehicles in driveway or carport?",
"photos_required": false
},
{
"id": 5,
"answers": [
{
"label": "Yes",
"description_required": true
},
{
"label": "No",
"description_required": false
},
{
"label": "Other",
"description_required": true
}
],
"question": "Is there any trash in the trash can(s)?",
"photos_required": false
}
]
},
"created_at": 1684502880815,
"updated_at": 1684502880815
},
{
"id": 2,
"revision": 1,
"name": "HOA",
"description": "Maintain community standards with reliable assessments.",
"icon": "HOA",
"checklist": {
"items": [
{
"id": 1,
"question": "Take photos of front of building from left, right and center.",
"photos_required": true,
"min_photos_required": 3
},
{
"id": 6,
"question": "Take photos of front yard from multiple angles.",
"photos_required": true,
"min_photos_required": 3
}
]
},
"created_at": 1684502880815,
"updated_at": 1684502880815
}
]
HTTP Request
GET /checklists/templates
Documents
Upload document
Example request body:
"<file>"
Example response:
{
"document": {
"filename": "file.pdf",
"size": 13264,
"page_count": "1",
"extension": "pdf",
"law_firm_id": 2,
"created_by_id": 2,
"updated_at": 1625161312000,
"created_at": 1625161312000,
"id": 893
},
"title": null,
"court_name": null,
"court_address": null,
"case_number": null,
"billing_number": null,
"court_date": null,
"plaintiffs": null,
"defendants": null,
"multiple_documents": null,
"page_count": null
}
HTTP Request
POST /documents
File should be sent as multipart/form-data with the file sent under the file key.
In supported states we will attempt to parse and return pertinent information from the PDF file (e.g. document title, court name, plaintiffs, etc.). This data should be verified by the user before submitted.
Get document
Example response:
<pdf file>
HTTP Request
GET /documents/{document_id}.{ext}
Export
Export jobs (csv)
Example response:
<csv file>
HTTP Request
GET /export/{start}/{end}/csv
URL Parameters
| Parameter | Description |
|---|---|
startinteger, required |
UNIX Timestamp in milliseconds |
endinteger, required |
UNIX Timestamp in milliseconds |
Invoices
Get invoices
Example response:
{
"current_page": 1,
"last_page": 3,
"per_page": 10,
"total": 25,
"data": [
{
"id": 4,
"user_id": 2,
"law_firm_id": 2,
"job_id": 8,
"total": 75,
"paid_amount": 75,
"paid": true,
"created_at": 1548853797000,
"updated_at": 1548853797000,
"deleted_at": null,
"balance": 0,
"line_items": [
{
"id": 1,
"invoice_id": 4,
"name": "Standard Serve (Base Fee)",
"description": "Servee: John Doe\nCase Number: C12345\nAttempts Made: 2\n",
"price": 25,
"quantity": 1,
"total": "25.0000000000",
"created_at": 1548853846000,
"updated_at": 1548853846000,
"deleted_at": null
},
{
"id": 2,
"invoice_id": 4,
"name": "Standard Serve (Bounty)",
"description": "Serve Date: 02/10/2019",
"price": 50,
"quantity": 1,
"total": "50.0000000000",
"created_at": 1548853846000,
"updated_at": 1548853846000,
"deleted_at": null
}
],
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
},
"job": {
"id": 8,
"user_id": 2,
"law_firm_id": 2,
"server_id": 6,
"original_job_id": null,
"new_job_id": 50,
"status": "IN_PROGRESS",
"contact_first_name": "",
"contact_last_name": "",
"contact_email": "",
"contact_phone": null,
"billing_number": "A00012345",
"court_name": "Jefferson County District Court",
"case_number": "CL35832",
"state_id": 1,
"serve_pricing_id": 1,
"stripe_card_id": "card_1Dy074Hg213tM5vxjBic4l40",
"post_serve": false,
"assign_date": null,
"created_by_id": 2,
"attempts_made": 2,
"last_attempt": "2019-03-27 16:30:34",
"successful_attempt": false,
"successful_at": null,
"completed_at": null,
"due_date": 1548435181000,
"originated_at": 1548340763000,
"subpoena": false,
"witness_fee": null,
"authorize_skiptrace": true,
"affidavit_extension": "pdf",
"review_period_ends": null,
"created_at": 1548340763000,
"updated_at": 1581529725000,
"deleted_at": null,
"same_address_job_id": null,
"attorney_name": null,
"attorney_bar_number": null,
"court_street_address": null,
"court_mailing_address": null,
"court_city": null,
"court_zip": null,
"court_branch_name": null,
"court_address": null,
"last_status_change": null,
"court_date": null,
"affidavit_status": "PENDING_TM_REVIEW",
"cancel_job_reason": null,
"affidavit_uploaded_at": "2020-10-04 01:07:06",
"salesforce_id": null,
"archived": false,
"off_app_assigned_to": "NOT_ASSIGNED",
"salesforce_user_id": "",
"affidavit_due_at": null,
"affidavit_reminders_sent": 0,
"last_affidavit_reminder_sent_at": null,
"attempt_reminders_sent": 0,
"last_attempt_reminder_sent_at": null,
"signed_affidavit_url": null,
"base_fee": 25,
"bounty": 50,
"post_price": 45,
"servee": {
"id": 7,
"type": "INDIVIDUAL",
"job_id": 8,
"name": "Jane Smith",
"registered_agent_name": null,
"physical_description": true,
"race": "White",
"gender": "Male",
"hair_color": "Brown",
"marital_status": "Married",
"eye_glasses": "Yes",
"height": "5' 9\" to 6'",
"weight": "160 to 180 lbs",
"age": 30,
"notes": "He works from 9-5\nCompany name is Propel Technology",
"social_links": "https://www.facebook.com/propelitco/",
"created_at": 1548083163000,
"updated_at": 1548083163000,
"deleted_at": null,
"primary_address": {
"id": 18,
"servee_id": 7,
"type": "HOME",
"business_name": null,
"address_1": "7154 Eaton Ct",
"address_2": "",
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"primary": true,
"longitude": -105.0596457,
"latitude": 39.8252367,
"county": "Jefferson County",
"created_at": 1548345974000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver"
}
},
"serve_pricing": {
"id": 1,
"name": "Standard",
"state_id": 1,
"base_fee": 25,
"bounty_fee": 50,
"diy_price": 75,
"post_price": 45,
"post_duration": 172800,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
}
}
}
]
}
HTTP Request
GET /invoices
Get invoice
Example response:
{
"id": 4,
"user_id": 2,
"law_firm_id": 2,
"job_id": 8,
"total": 75,
"paid_amount": 75,
"paid": true,
"created_at": 1548853797000,
"updated_at": 1548853797000,
"deleted_at": null,
"balance": 0,
"line_items": [
{
"id": 1,
"invoice_id": 4,
"name": "Standard Serve (Base Fee)",
"description": "Servee: John Doe\nCase Number: C12345\nAttempts Made: 2\n",
"price": 25,
"quantity": 1,
"total": "25.0000000000",
"created_at": 1548853846000,
"updated_at": 1548853846000,
"deleted_at": null
},
{
"id": 2,
"invoice_id": 4,
"name": "Standard Serve (Bounty)",
"description": "Serve Date: 02/10/2019",
"price": 50,
"quantity": 1,
"total": "50.0000000000",
"created_at": 1548853846000,
"updated_at": 1548853846000,
"deleted_at": null
}
],
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
},
"law_firm": {
"id": 2,
"name": "Acme Law Firm",
"phone_number": "7347304250",
"email": "marty@wachocki.net",
"address_1": "8753 Yates Dr",
"address_2": "#215",
"city": "Westminster",
"state_id": 1,
"zip": "80031",
"created_at": 1548272881000,
"updated_at": 1607363359000,
"deleted_at": null,
"email_invoices_to": null,
"free_credits": "475.0000000000",
"api_enabled": true,
"private_jobs": false,
"salesforce_connected": true
},
"job": {
"id": 8,
"user_id": 2,
"law_firm_id": 2,
"server_id": 6,
"original_job_id": null,
"new_job_id": 50,
"status": "IN_PROGRESS",
"contact_first_name": "",
"contact_last_name": "",
"contact_email": "",
"contact_phone": null,
"billing_number": "A00012345",
"court_name": "Jefferson County District Court",
"case_number": "CL35832",
"state_id": 1,
"serve_pricing_id": 1,
"stripe_card_id": "card_1Dy074Hg213tM5vxjBic4l40",
"post_serve": false,
"assign_date": null,
"created_by_id": 2,
"attempts_made": 2,
"last_attempt": "2019-03-27 16:30:34",
"successful_attempt": false,
"successful_at": null,
"completed_at": null,
"due_date": 1548435181000,
"originated_at": 1548340763000,
"subpoena": false,
"witness_fee": null,
"authorize_skiptrace": true,
"affidavit_extension": "pdf",
"review_period_ends": null,
"created_at": 1548340763000,
"updated_at": 1581529725000,
"deleted_at": null,
"same_address_job_id": null,
"attorney_name": null,
"attorney_bar_number": null,
"court_street_address": null,
"court_mailing_address": null,
"court_city": null,
"court_zip": null,
"court_branch_name": null,
"court_address": null,
"last_status_change": null,
"court_date": null,
"affidavit_status": "PENDING_TM_REVIEW",
"cancel_job_reason": null,
"affidavit_uploaded_at": "2020-10-04 01:07:06",
"salesforce_id": null,
"archived": false,
"off_app_assigned_to": "NOT_ASSIGNED",
"salesforce_user_id": "",
"affidavit_due_at": null,
"affidavit_reminders_sent": 0,
"last_affidavit_reminder_sent_at": null,
"attempt_reminders_sent": 0,
"last_attempt_reminder_sent_at": null,
"signed_affidavit_url": null,
"base_fee": 25,
"bounty": 50,
"post_price": 45,
"servee": {
"id": 7,
"type": "INDIVIDUAL",
"job_id": 8,
"name": "Jane Smith",
"registered_agent_name": null,
"physical_description": true,
"race": "White",
"gender": "Male",
"hair_color": "Brown",
"marital_status": "Married",
"eye_glasses": "Yes",
"height": "5' 9\" to 6'",
"weight": "160 to 180 lbs",
"age": 30,
"notes": "He works from 9-5\nCompany name is Propel Technology",
"social_links": "https://www.facebook.com/propelitco/",
"created_at": 1548083163000,
"updated_at": 1548083163000,
"deleted_at": null,
"primary_address": {
"id": 18,
"servee_id": 7,
"type": "HOME",
"business_name": null,
"address_1": "7154 Eaton Ct",
"address_2": "",
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"primary": true,
"longitude": -105.0596457,
"latitude": 39.8252367,
"county": "Jefferson County",
"created_at": 1548345974000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver"
}
},
"serve_pricing": {
"id": 1,
"name": "Standard",
"state_id": 1,
"base_fee": 25,
"bounty_fee": 50,
"diy_price": 75,
"post_price": 45,
"post_duration": 172800,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
}
},
"payments": [
{
"id": 1,
"invoice_id": 4,
"stripe_customer_id": "",
"stripe_card_id": "",
"stripe_charge_id": "",
"type": "STRIPE",
"card_brand": "Visa",
"card_name": "Marty's Card",
"card_last_4": "8030",
"amount": 75,
"notes": null,
"created_at": 1550065265000,
"updated_at": 1550065265000,
"deleted_at": null
}
]
}
HTTP Request
GET /invoices/{invoice_id}
Get invoice pdf
Example response:
<pdf file>
HTTP Request
GET /invoices/{invoice_id}/pdf
Jobs
Get all jobs
Example response:
{
"current_page": 1,
"last_page": 16,
"per_page": 10,
"total": 153,
"data": [
{
"id": 8,
"user_id": 2,
"law_firm_id": 2,
"server_id": 6,
"original_job_id": null,
"new_job_id": 50,
"status": "IN_PROGRESS",
"contact_first_name": "",
"contact_last_name": "",
"contact_email": "",
"contact_phone": null,
"billing_number": "A00012345",
"court_name": "Jefferson County District Court",
"case_number": "CL35832",
"state_id": 1,
"serve_pricing_id": 1,
"stripe_card_id": "card_1Dy074Hg213tM5vxjBic4l40",
"post_serve": false,
"assign_date": null,
"created_by_id": 2,
"attempts_made": 2,
"last_attempt": "2019-03-27 16:30:34",
"successful_attempt": false,
"successful_at": null,
"completed_at": null,
"due_date": 1548435181000,
"originated_at": 1548340763000,
"subpoena": false,
"witness_fee": null,
"authorize_skiptrace": true,
"affidavit_extension": "pdf",
"review_period_ends": null,
"created_at": 1548340763000,
"updated_at": 1581529725000,
"deleted_at": null,
"same_address_job_id": null,
"attorney_name": null,
"attorney_bar_number": null,
"court_street_address": null,
"court_mailing_address": null,
"court_city": null,
"court_zip": null,
"court_branch_name": null,
"court_address": null,
"last_status_change": null,
"court_date": null,
"affidavit_status": "PENDING_TM_REVIEW",
"cancel_job_reason": null,
"affidavit_uploaded_at": "2020-10-04 01:07:06",
"salesforce_id": null,
"archived": false,
"off_app_assigned_to": "NOT_ASSIGNED",
"salesforce_user_id": "",
"affidavit_due_at": null,
"affidavit_reminders_sent": 0,
"last_affidavit_reminder_sent_at": null,
"attempt_reminders_sent": 0,
"last_attempt_reminder_sent_at": null,
"signed_affidavit_url": null,
"base_fee": 25,
"bounty": 50,
"post_price": 45,
"starred": false,
"server": {
"id": 6,
"law_firm_id": null,
"type": "SERVER",
"name": "Test Server",
"last_name": "Server",
"first_name": "Test",
"active": 1,
"email": "server@proofserve.com",
"administrator": false,
"phone_number": "7347304250",
"state_id": 1,
"created_at": 1548158103000,
"updated_at": 1602128137000,
"deleted_at": null,
"total_job_count": 13,
"total_job_count_5_stars": 1,
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false,
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
},
"servee": {
"id": 7,
"type": "INDIVIDUAL",
"job_id": 8,
"name": "Jane Smith",
"registered_agent_name": null,
"physical_description": true,
"race": "White",
"gender": "Male",
"hair_color": "Brown",
"marital_status": "Married",
"eye_glasses": "Yes",
"height": "5' 9\" to 6'",
"weight": "160 to 180 lbs",
"age": 30,
"notes": "He works from 9-5\nCompany name is Propel Technology",
"social_links": "https://www.facebook.com/propelitco/",
"created_at": 1548083163000,
"updated_at": 1548083163000,
"deleted_at": null,
"servee_addresses": [
{
"id": 18,
"servee_id": 7,
"type": "HOME",
"business_name": null,
"address_1": "7154 Eaton Ct",
"address_2": "",
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"primary": true,
"longitude": -105.0596457,
"latitude": 39.8252367,
"county": "Jefferson County",
"created_at": 1548345974000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver",
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
},
{
"id": 206,
"servee_id": 7,
"type": "HOME",
"business_name": null,
"address_1": "7156 Eaton Ct",
"address_2": "",
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"primary": false,
"longitude": null,
"latitude": null,
"county": null,
"created_at": 1553704234000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver",
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
}
],
"primary_address": {
"id": 18,
"servee_id": 7,
"type": "HOME",
"business_name": null,
"address_1": "7154 Eaton Ct",
"address_2": "",
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"primary": true,
"longitude": -105.0596457,
"latitude": 39.8252367,
"county": "Jefferson County",
"created_at": 1548345974000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver",
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
}
},
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
},
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
},
"law_firm": {
"id": 2,
"name": "Acme Law Firm",
"phone_number": "7347304250",
"email": "marty@wachocki.net",
"address_1": "8753 Yates Dr",
"address_2": "#215",
"city": "Westminster",
"state_id": 1,
"zip": "80031",
"created_at": 1548272881000,
"updated_at": 1607363359000,
"deleted_at": null,
"email_invoices_to": null,
"free_credits": "475.0000000000",
"api_enabled": true,
"private_jobs": false,
"salesforce_connected": true
},
"serve_pricing": {
"id": 1,
"name": "Standard",
"state_id": 1,
"base_fee": 25,
"bounty_fee": 50,
"diy_price": 75,
"post_price": 45,
"post_duration": 172800,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
"offered_server": null,
"same_address_jobs": [],
"flags": []
}
]
}
HTTP Request
GET /jobs
Create a job
Example request body:
{
"court_name": "Denver County Court",
"court_address": "520 W Colfax Ave, Denver, CO 80204",
"case_number": "CV-12345",
"court_date": "2020-07-30",
"user_id": 2,
"state_id": 1,
"post_serve": false,
"billing_number": "P12345",
"status": "UNASSIGNED",
"stripe_card_id": "card_1Dy074Hg213tM5vxjBic4l40",
"payment_method_id": 1,
"plaintiffs": [
{
"name": "John Doe"
}
],
"defendants": [
{
"name": "Jane Smith"
}
],
"documents": [
{
"id": 894,
"name": "Summons"
}
],
"servees": [
{
"type": "INDIVIDUAL",
"name": "Jane Smith",
"physical_description": true,
"race": "White",
"gender": "Male",
"hair_color": "Blonde",
"marital_status": "Married",
"eye_glasses": "No",
"height": "5' 9\" to 6'",
"weight": "160 lbs to 180 lbs",
"age": "35",
"serve_pricing_id": 1,
"serve_pricing_name": "Standard",
"notes": "The servee is usually working from 9am to 5pm.",
"subpoena": false,
"authorize_skiptrace": false,
"same_address": null,
"documents": [
894
],
"mailings": [
{
"trigger": "CLOSEOUT_SUCCESS",
"mailing_type": "AUTOMATED",
"service_type": "FIRST_CLASS"
},
{
"trigger": "CLOSEOUT_FAILURE",
"mailing_type": "SERVER",
"service_type": "CERTIFIED",
"address": {
"address_1": "1437 Bannock St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"zip": "80202"
}
},
{
"trigger": "SERVICE_OUTCOME",
"mailing_type": "AUTOMATED",
"service_type": "FIRST_CLASS",
"service_outcome_triggers": [
{
"is_successful": true,
"service_type": "PERSONAL"
},
{
"is_successful": true,
"service_type": "POSTING"
},
{
"is_successful": false
}
]
}
],
"servee_addresses": [
{
"type": "WORK",
"business_name": "Glade Voogt Lopez Smith",
"address_1": "1800 N Gaylord St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"zip": "80206",
"primary": true
},
{
"type": "HOME",
"address_1": "1437 Bannock St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"zip": "80202"
}
],
"servee_photos": [
{
"id": 155
}
]
}
],
"job_specifications": [1, 2, 3]
}
Example response:
{
"jobs": [
{
"court_name": "Denver County Court",
"court_address": "520 W Colfax Ave, Denver, CO 80204",
"case_number": "CV-12345",
"court_date": "2020-07-30",
"user_id": 2,
"state_id": 1,
"billing_number": "P12345",
"status": "UNASSIGNED",
"stripe_card_id": "card_1Dy074Hg213tM5vxjBic4l40",
"originated_at": 1625161317000,
"serve_pricing_id": 1,
"authorize_skiptrace": false,
"post_serve": false,
"subpoena": false,
"last_status_change": 1625161317000,
"law_firm_id": 2,
"created_by_id": 2,
"updated_at": 1625161317000,
"created_at": 1625161317000,
"id": 256,
"signed_affidavit_url": null,
"base_fee": 25,
"bounty": 50,
"post_price": 45,
"servee": {
"id": 255,
"type": "INDIVIDUAL",
"job_id": 256,
"name": "Jane Smith",
"registered_agent_name": null,
"physical_description": true,
"race": "White",
"gender": "Male",
"hair_color": "Blonde",
"marital_status": "Married",
"eye_glasses": "No",
"height": "5' 9\" to 6'",
"weight": "160 lbs to 180 lbs",
"age": 35,
"notes": "The servee is usually working from 9am to 5pm.",
"social_links": null,
"created_at": 1625161317000,
"updated_at": 1625161317000,
"deleted_at": null,
"mailings": [
{
"id": 1,
"status": "AWAITING_TRIGGER",
"trigger": "CLOSEOUT_SUCCESS",
"service_type": "FIRST_CLASS",
"mailing_type": "AUTOMATED"
},
{
"id": 2,
"status": "AWAITING_TRIGGER",
"trigger": "CLOSEOUT_FAILURE",
"service_type": "CERTIFIED",
"mailing_type": "SERVER",
"mailing_address": {
"id": 1,
"recipient_name": "Jane Smith",
"address_1": "1437 Bannock St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO"
},
"zip": "80202"
}
},
{
"id": 3,
"status": "AWAITING_TRIGGER",
"trigger": "SERVICE_OUTCOME",
"service_type": "FIRST_CLASS",
"mailing_type": "AUTOMATED",
"service_outcome_triggers": [
{
"is_successful": true,
"service_type": "PERSONAL"
},
{
"is_successful": true,
"service_type": "POSTING"
},
{
"is_successful": false
}
]
}
],
"servee_photos": [
{
"id": 155,
"servee_id": 255,
"filename": "file.png",
"extension": "png",
"access_key": "wA4ze91k2pIbOLFUsTWd9ZxvftRLFR4E",
"created_at": 1625161317000,
"updated_at": 1625161318000,
"deleted_at": null,
"created_by_id": 2,
"law_firm_id": 2
}
],
"servee_addresses": [
{
"id": 398,
"servee_id": 255,
"type": "WORK",
"business_name": "Glade Voogt Lopez Smith",
"address_1": "1800 N Gaylord St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"zip": "80206",
"primary": true,
"longitude": -104.9606913,
"latitude": 39.7450098,
"county": "Denver County",
"created_at": 1625161317000,
"updated_at": 1625161318000,
"deleted_at": null,
"timezone": "America/Denver"
},
{
"id": 399,
"servee_id": 255,
"type": "HOME",
"business_name": null,
"address_1": "1437 Bannock St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"zip": "80202",
"primary": false,
"longitude": -104.9907968,
"latitude": 39.7392296,
"county": "Denver County",
"created_at": 1625161318000,
"updated_at": 1625161318000,
"deleted_at": null,
"timezone": "America/Denver"
}
],
"primary_address": {
"id": 398,
"servee_id": 255,
"type": "WORK",
"business_name": "Glade Voogt Lopez Smith",
"address_1": "1800 N Gaylord St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"zip": "80206",
"primary": true,
"longitude": -104.9606913,
"latitude": 39.7450098,
"county": "Denver County",
"created_at": 1625161317000,
"updated_at": 1625161318000,
"deleted_at": null,
"timezone": "America/Denver"
}
},
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
},
"serve_pricing": {
"id": 1,
"name": "Standard",
"state_id": 1,
"base_fee": 25,
"bounty_fee": 50,
"diy_price": 75,
"post_price": 45,
"post_duration": 172800,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
"defendants": [],
"plaintiffs": [],
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
}
}
]
}
HTTP Request
POST /jobs
Tips:
- Documents should be uploaded beforehand using the Upload Document endpoint.
- Servee photos should be uploaded beforehand using the Upload Servee Photo endpoint.
Request Parameters
| Parameter | Description |
|---|---|
court_namestring |
|
court_addressstring |
|
case_numberstring |
|
court_datestring |
|
user_idint, required |
References a user's id |
state_idinteger, required |
Reference state id from Get All States |
billing_numberstring, required |
This should be a unique internal reference #. |
statusstring, required |
One of: DRAFT, UNASSIGNED |
stripe_card_idstring, required |
DEPRECATED: see payment_method_id |
post_serveboolean |
Default: false |
payment_method_idint, required |
Reference id from Get payment methods. Used in place of stripe_card_id. |
plaintiffsarray |
|
plaintiffs.*.namestring, required |
|
defendantsarray |
|
defendants.*.namestring, required |
|
documentsarray, required |
|
documents.*.idinteger, required |
Reference previously uploaded document id from Upload Document |
documents.*.namestring, required |
|
serveesarray, required |
|
servees.*.typestring, required |
One of: INDIVIDUAL, ENTITY |
servees.*.namestring, required |
|
servees.*.physical_descriptionboolean |
Default: false |
servees.*.racestring |
If physical_description is false, don't provide. |
servees.*.genderstring |
If physical_description is false, don't provide. |
servees.*.hair_colorstring |
If physical_description is false, don't provide. |
servees.*.marital_statusstring |
If physical_description is false, don't provide. |
servees.*.eye_glassesstring |
If physical_description is false, don't provide. |
servees.*.heightstring |
If physical_description is false, don't provide. |
servees.*.weightstring |
If physical_description is false, don't provide. |
servees.*.agestring |
If physical_description is false, don't provide. |
servees.*.serve_pricing_idinteger, required |
References serve pricing id from Get Serve Pricings ID from the state_id. |
servees.*.serve_pricing_namestring, required |
|
servees.*.notesstring |
|
servees.*.subpoenaboolean |
Default: false |
servees.*.authorize_skiptraceboolean |
Default: false |
servees.*.letter_triggerstring, DEPRECATED |
DEPRECATED - Use servees.*.mailings instead. One of: NONE, CLOSEOUT_ANY, CLOSEOUT_SUCCESS, CLOSEOUT_FAILURE |
servees.*.letter_is_certifiedboolean, DEPRECATED |
DEPRECATED - Use servees.*.mailings instead. Default: false |
servees.*.mailingsarray |
Array of mailing configurations. Supports multiple mailings per servee. |
servees.*.mailings.*.triggerstring, required |
One of: CLOSEOUT_ANY, CLOSEOUT_SUCCESS, CLOSEOUT_FAILURE, SERVICE_OUTCOME |
servees.*.mailings.*.mailing_typestring, required |
Type of mailing. One of: AUTOMATED, SERVER, SCM_VENDOR |
servees.*.mailings.*.service_typestring, required |
Mail delivery type. One of: FIRST_CLASS, CERTIFIED |
servees.*.mailings.*.addressobject |
Optional custom recipient address. If not provided, mails to servee's primary address. |
servees.*.mailings.*.address.address_1string, required |
Custom address line 1. Required if address object is provided. |
servees.*.mailings.*.address.address_2string |
Custom address line 2. Optional. |
servees.*.mailings.*.address.citystring, required |
Custom city. Required if address object is provided. |
servees.*.mailings.*.address.state_idinteger, required |
Custom state ID. Required if address object is provided. Reference state id from Get All States |
servees.*.mailings.*.address.zipstring, required |
Custom ZIP code. Required if address object is provided. |
servees.*.mailings.*.service_outcome_triggersarray |
Array of service outcome conditions. Only used when trigger is SERVICE_OUTCOME. |
servees.*.mailings.*.service_outcome_triggers.*.is_successfulboolean, required |
Whether this trigger applies to successful (true) or failed (false) serves. |
servees.*.mailings.*.service_outcome_triggers.*.service_typestring |
Optional specific service type. One of: ENTITY, REGISTERED_AGENT, PERSONAL, RESIDENTIAL_SUB, WORK_SUB, REFUSAL, POSTING, OTHER, UNSUCCESSFUL, JAIL. If not provided, applies to all service types. |
servees.*.same_addressinteger |
Default: null. If not null, it should be the index of the parent servee at the same address. |
servees.*.documentsarray, required |
|
servees.*.documents.*integer, required |
Reference previously uploaded document id from Upload Document |
servees.*.servee_addressesarray, required |
|
servees.*.servee_addresses.*.typestring, required |
One of: HOME, WORK, REGISTERED_AGENT, ENTITY, OTHER |
servees.*.servee_addresses.*.business_namearray |
Should be provided if type is one of WORK, REGISTERED_AGENT, ENTITY |
servees.*.servee_addresses.*.address_1string, required |
|
servees.*.servee_addresses.*.address_2string |
|
servees.*.servee_addresses.*.citystring, required |
|
servees.*.servee_addresses.*.state_idinteger, required |
Reference state id from Get All States |
servees.*.servee_addresses.*.zipstring, required |
|
servees.*.servee_addresses.*.primaryboolean, required |
Only one address should be have primary to true |
servees.*.servee_photosarray |
|
servees.*.servee_photos.*.idinteger, required |
References servee photo id from Upload Servee Photo. |
job_specificationsarray integer |
Array of integers representing the IDs of JobSpecification entities associated with the job. |
Create a site visit job
Example request body:
{
"billing_number": "P12345",
"payment_method_id": 1,
"serve_pricing_id": 377,
"cced_users": [1,2,3],
"checklist_template_id": 2,
"property_address": {
"type": "HOME",
"address_1": "8120 Sheridan Boulevard",
"address_2": "Apt 300",
"city": "Arvada",
"state_id": 6,
"zip": "80003"
}
}
Example response:
[
{
"id": 101766,
"user_id": 8,
"law_firm_id": 7,
"status": "UNASSIGNED",
"type": "SITE_VISIT",
"billing_number": "100",
"state_id": 42,
"serve_pricing_id": 377,
"payment_method_id": 1,
"created_by_id": 8,
"attempts_made": 0,
"originated_at": 1719948443844,
"created_at": 1719948443917,
"updated_at": 1719948444142,
"last_status_change": 1719948445732,
"base_fee": 50,
"territory_manager_id": 4,
"servee": {
"id": 101766,
"servee_addresses": [
{
"id": 105628,
"type": "HOME",
"business_name": null,
"address_1": "8120 Sheridan Boulevard",
"address_2": "Apt 300",
"city": "Arvada",
"state_id": 6,
"zip": "80003",
"primary": true,
"pending": false,
"longitude": -105.052024,
"latitude": 39.8437682,
"county": "Adams County",
"deleted_at": "0001-01-01T00:00:00Z",
"timezone": "America/Denver",
"state": {
"id": 6,
"name": "Alabama",
"abbreviation": "AL",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1557771726000,
"updated_at": 1553048780000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": false,
"requires_notary_nonservice": false,
"allow_sunday_serve": 1,
"average_server_rating": 0,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
},
"skip_trace_used": false
}
],
"age": null,
"authorize_skiptrace": false,
"eye_glasses": null,
"gender": null,
"hair_color": null,
"height": null,
"marital_status": null,
"name": "8120 Sheridan Boulevard, Apt 300, Arvada, CO 80003",
"notes": null,
"physical_description": false,
"post_serve": false,
"primary_address": {
"id": 105628,
"type": "HOME",
"business_name": null,
"address_1": "8120 Sheridan Boulevard",
"address_2": "Apt 300",
"city": "Arvada",
"state_id": 6,
"zip": "80003",
"primary": true,
"pending": false,
"longitude": -105.052024,
"latitude": 39.8437682,
"county": "Adams County",
"deleted_at": "0001-01-01T00:00:00Z",
"timezone": "America/New_York",
"state": {
"id": 6,
"name": "Alabama",
"abbreviation": "AL",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1557771726000,
"updated_at": 1553048780000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": false,
"requires_notary_nonservice": false,
"allow_sunday_serve": 1,
"average_server_rating": 0,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
},
"skip_trace_used": false
},
"serve_pricing_id": 377,
"type": "INDIVIDUAL",
},
"serve_docs_prints_remaining": 2,
"affidavit_prints_remaining": 2,
"checklist_template_id": 2,
"checklist_template_revision": 1,
"checklist_template": {
"id": 2,
"revision": 1,
"name": "HOA",
"description": "Maintain community standards with reliable assessments.",
"icon": "HOA",
"checklist": {
"items": [
{
"id": 1,
"question": "Take photos of front of building from left, right and center.",
"photos_required": true,
"min_photos_required": 3
},
{
"id": 6,
"question": "Take photos of front yard from multiple angles.",
"photos_required": true,
"min_photos_required": 3
}
]
},
"created_at": 1684502880815,
"updated_at": 1684502880815
}
}
]
HTTP Request
POST /jobs?type=SITE_VISIT
Request Parameters
| Parameter | Description |
|---|---|
billing_numberstring, required |
This should be a unique internal reference #. |
payment_method_idint, required |
Reference id from Get payment methods. |
serve_pricing_idinteger, required |
References serve pricing id from Get Serve Pricings. Note: The serve pricing job_type query param must be set to SITE_VISIT when making the get serve pricings call. |
checklist_template_idinteger, required |
References checklist template id from Get Checklist Templates. |
property_addressobject, required |
Address of the site visit location. |
property_address.*.typestring, required |
One of: HOME, WORK, REGISTERED_AGENT, ENTITY, OTHER |
property_address.*.address_1string, required |
|
property_address.*.address_2string |
|
property_address.*.citystring, required |
|
property_address.*.state_idint, required |
Reference state id from Get All States |
property_address.*.zipstring, required |
|
cced_usersarray |
Array of user ids to recieve notifications about the job. |
Get job
Example response:
{
"id": 160,
"user_id": 2,
"law_firm_id": 2,
"server_id": 14,
"original_job_id": null,
"new_job_id": null,
"status": "PENDING_NOTARY",
"contact_first_name": "Marty",
"contact_last_name": "Wachocki",
"contact_email": "marty@propeltechnology.com",
"contact_phone": "7347304250",
"billing_number": "123",
"court_name": "District Court, County Of Adams, State Of",
"case_number": "2018CV31346",
"state_id": 1,
"serve_pricing_id": 2,
"stripe_card_id": "card_1Dy074Hg213tM5vxjBic4l40",
"post_serve": false,
"assign_date": "2019-04-04 20:05:30",
"created_by_id": 2,
"attempts_made": 1,
"last_attempt": "2019-04-04 20:35:29",
"successful_attempt": true,
"successful_at": 1554410129000,
"completed_at": null,
"due_date": 1554667530000,
"originated_at": 1554126237000,
"subpoena": false,
"witness_fee": null,
"authorize_skiptrace": false,
"affidavit_extension": null,
"review_period_ends": null,
"created_at": 1554126237000,
"updated_at": 1625156672000,
"deleted_at": null,
"same_address_job_id": null,
"attorney_name": null,
"attorney_bar_number": null,
"court_street_address": null,
"court_mailing_address": null,
"court_city": null,
"court_zip": null,
"court_branch_name": null,
"court_address": null,
"last_status_change": null,
"court_date": null,
"affidavit_status": "PENDING_TM_REVIEW",
"cancel_job_reason": null,
"affidavit_uploaded_at": "2020-09-29 05:45:04",
"salesforce_id": null,
"archived": false,
"off_app_assigned_to": "NOT_ASSIGNED",
"salesforce_user_id": "",
"affidavit_due_at": "2021-07-02 04:24:32",
"affidavit_reminders_sent": 0,
"last_affidavit_reminder_sent_at": null,
"attempt_reminders_sent": 0,
"last_attempt_reminder_sent_at": null,
"signed_affidavit_url": null,
"base_fee": 45,
"bounty": 80,
"post_price": 0,
"starred": false,
"territory_manager": null,
"servee": {
"id": 159,
"type": "INDIVIDUAL",
"job_id": 160,
"name": "Test Servee",
"registered_agent_name": null,
"physical_description": false,
"race": null,
"gender": null,
"hair_color": null,
"marital_status": "",
"eye_glasses": null,
"height": null,
"weight": null,
"age": null,
"notes": null,
"social_links": null,
"created_at": 1554126237000,
"updated_at": 1554126237000,
"deleted_at": null,
"mailings": [
{
"id": 1,
"status": "AWAITING_TRIGGER",
"trigger": "CLOSEOUT_SUCCESS",
"service_type": "FIRST_CLASS",
"mailing_type": "AUTOMATED"
}
],
"servee_addresses": [
{
"id": 209,
"servee_id": 159,
"type": "HOME",
"business_name": null,
"address_1": "8120 Sheridan Boulevard",
"address_2": "",
"city": "Arvada",
"state_id": 6,
"zip": "80003",
"primary": true,
"longitude": -105.052024,
"latitude": 39.8437682,
"county": "Adams County",
"created_at": 1554126238000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver",
"state": {
"id": 6,
"name": "Alabama",
"abbreviation": "AL",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1557771726000,
"updated_at": 1553048780000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": false,
"requires_notary_nonservice": false,
"allow_sunday_serve": 1,
"average_server_rating": 0,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
},
{
"id": 210,
"servee_id": 159,
"type": "ENTITY",
"business_name": null,
"address_1": "7395 S Peoria St",
"address_2": "# 105",
"city": "Englewood",
"state_id": 6,
"zip": "80112",
"primary": false,
"longitude": -104.8460701,
"latitude": 39.5823553,
"county": "Arapahoe County",
"created_at": 1554126238000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver",
"state": {
"id": 6,
"name": "Alabama",
"abbreviation": "AL",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1557771726000,
"updated_at": 1553048780000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": false,
"requires_notary_nonservice": false,
"allow_sunday_serve": 1,
"average_server_rating": 0,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
},
{
"id": 211,
"servee_id": 159,
"type": "HOME",
"business_name": null,
"address_1": "9852 W 76th Ave",
"address_2": "",
"city": "Arvada",
"state_id": 6,
"zip": "80005",
"primary": false,
"longitude": -105.1080116,
"latitude": 39.8340379,
"county": "Jefferson County",
"created_at": 1554126239000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver",
"state": {
"id": 6,
"name": "Alabama",
"abbreviation": "AL",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1557771726000,
"updated_at": 1553048780000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": false,
"requires_notary_nonservice": false,
"allow_sunday_serve": 1,
"average_server_rating": 0,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
}
],
"servee_marks": [],
"servee_photos": [],
"primary_address": {
"id": 209,
"servee_id": 159,
"type": "HOME",
"business_name": null,
"address_1": "8120 Sheridan Boulevard",
"address_2": "",
"city": "Arvada",
"state_id": 6,
"zip": "80003",
"primary": true,
"longitude": -105.052024,
"latitude": 39.8437682,
"county": "Adams County",
"created_at": 1554126238000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver"
}
},
"invoice": null,
"line_items": [],
"flags": [],
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false,
"law_firm": {
"id": 2,
"name": "Acme Law Firm",
"phone_number": "7347304250",
"email": "marty@wachocki.net",
"address_1": "8753 Yates Dr",
"address_2": "#215",
"city": "Westminster",
"state_id": 1,
"zip": "80031",
"created_at": 1548272881000,
"updated_at": 1607363359000,
"deleted_at": null,
"email_invoices_to": null,
"free_credits": "475.0000000000",
"api_enabled": true,
"private_jobs": false,
"salesforce_connected": true
}
},
"law_firm": {
"id": 2,
"name": "Acme Law Firm",
"phone_number": "7347304250",
"email": "marty@wachocki.net",
"address_1": "8753 Yates Dr",
"address_2": "#215",
"city": "Westminster",
"state_id": 1,
"zip": "80031",
"created_at": 1548272881000,
"updated_at": 1607363359000,
"deleted_at": null,
"email_invoices_to": null,
"free_credits": "475.0000000000",
"api_enabled": true,
"private_jobs": false,
"salesforce_connected": true
},
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
},
"serve_pricing": {
"id": 2,
"name": "Expedited",
"state_id": 1,
"base_fee": 45,
"bounty_fee": 80,
"diy_price": 125,
"post_price": null,
"post_duration": null,
"initial_duration": 259200,
"total_duration": 259200,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
"server": {
"id": 14,
"law_firm_id": null,
"type": "SERVER",
"name": "Mark Kreloff",
"last_name": "Kreloff",
"first_name": "Mark",
"active": 1,
"email": "mark@proofserve.com",
"administrator": false,
"phone_number": "6477676186",
"state_id": 46,
"created_at": 1548158103000,
"updated_at": 1607926553000,
"deleted_at": null,
"total_job_count": 51,
"total_job_count_5_stars": 5,
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false,
"state": {
"id": 46,
"name": "Tennessee",
"abbreviation": "TN",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Return of Service",
"affidavit_nonservice_title": "Return of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 0,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
},
"created_by": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
},
"attempts": [
{
"id": 36,
"job_id": 160,
"server_id": 14,
"servee_address_id": 210,
"success": true,
"description": "Served.",
"latitude": 40.0207994301,
"longitude": -105.2732255464,
"race": "White",
"gender": "Female",
"hair_color": "Other",
"eye_glasses": "Unknown",
"height": "4' 9\" to 5'",
"weight": "180 lbs to 200 lbs",
"age": 33,
"service_type": "WORK_SUB",
"service_type_other": null,
"substitute_company": null,
"substitute_name": "Lori Davis",
"substitute_title": "Chief",
"attempt_date": 1554435329000,
"created_at": 1554410129000,
"updated_at": 1554410129000,
"deleted_at": null,
"mailed": false,
"mailed_from": null,
"mailed_on": null,
"mailed_address_id": null,
"bad_address": false,
"address": {
"id": 210,
"servee_id": 159,
"type": "ENTITY",
"business_name": null,
"address_1": "7395 S Peoria St",
"address_2": "# 105",
"city": "Englewood",
"state_id": 6,
"zip": "80112",
"primary": false,
"longitude": -104.8460701,
"latitude": 39.5823553,
"county": "Arapahoe County",
"created_at": 1554126238000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver",
"state": {
"id": 6,
"name": "Alabama",
"abbreviation": "AL",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1557771726000,
"updated_at": 1553048780000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": false,
"requires_notary_nonservice": false,
"allow_sunday_serve": 1,
"average_server_rating": 0,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
},
"mailed_address": null,
"attempt_photos": [
{
"id": 37,
"attempt_id": 36,
"extension": "jpg",
"include_in_affidavit": true,
"created_at": 1554410129000,
"updated_at": 1554410129000,
"deleted_at": null
}
],
"documents": [
{
"id": 380,
"name": "Subpoena",
"filename": "Martinez Subpoena to Boulder Neurosurgical.pdf",
"extension": "pdf",
"size": 41212,
"law_firm_id": null,
"created_by_id": 2,
"created_at": 1554126204000,
"updated_at": 1554126239000,
"deleted_at": null,
"page_count": 0,
"pivot": {
"attempt_id": 36,
"document_id": 380
}
}
]
}
],
"stripe_card": {
"id": 2,
"label": "Marty's Card",
"stripe_id": "card_1Dy074Hg213tM5vxjBic4l40",
"user_id": 2,
"law_firm_id": 2,
"shared": true,
"created_at": 1548731467000,
"updated_at": 1551664188000
},
"messages": [
{
"id": 212,
"user_id": 13,
"job_id": 160,
"message": "Hello",
"read": 0,
"created_at": 1625159254000,
"updated_at": 1625159254000,
"deleted_at": null,
"system": false,
"user": {
"id": 13,
"law_firm_id": null,
"type": "PROOF",
"name": "Admin Wachocki",
"last_name": "Wachocki",
"first_name": "Admin",
"active": 1,
"email": "admin@proofserve.com",
"administrator": false,
"phone_number": null,
"state_id": 1,
"created_at": 1550875352000,
"updated_at": 1602128130000,
"deleted_at": null,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
}
}
],
"defendants": [
{
"id": 186,
"job_id": 160,
"name": "Catholic Health Initiatives Colorado D/b/a St. Anthony Hospital North",
"created_at": 1554126239000,
"updated_at": 1554126239000,
"deleted_at": null
}
],
"documents": [
{
"id": 380,
"name": "Subpoena",
"filename": "Martinez Subpoena to Boulder Neurosurgical.pdf",
"extension": "pdf",
"size": 41212,
"law_firm_id": null,
"created_by_id": 2,
"created_at": 1554126204000,
"updated_at": 1554126239000,
"deleted_at": null,
"page_count": 0,
"pivot": {
"job_id": 160,
"document_id": 380,
"name": "Subpoena"
}
}
],
"plaintiffs": [
{
"id": 128,
"job_id": 160,
"name": "Linda Martinez",
"created_at": 1554126239000,
"updated_at": 1554126239000,
"deleted_at": null
}
],
"original_job": null,
"new_job": null,
"same_address_job": null,
"same_address_jobs": []
}
HTTP Request
GET /jobs/{job_id}
Cancel job
Example request body:
{
"cancel_job_reason": "I don't need this."
}
Example response:
{
"success": true
}
HTTP Request
POST /jobs/{job_id}/cancel
Request Parameters
| Parameter | Description |
|---|---|
cancel_job_reasonstring, required |
A description of why the job is being canceled. |
Extend job deadline
Example request body:
{
"days": 2
}
Example response:
{
"due_date": 1554840330000
}
HTTP Request
POST /jobs/{job_id}/extend
Request Parameters
| Parameter | Description |
|---|---|
daysfloat, required |
The number of days to extend the job due_date by. This can include decimal points (e.g. 2.5 days) |
Flag a job
Example request body:
{
"type": "AFFIDAVIT_CHANGES",
"type_extra": "AFF_TMPL_CHANGE",
"description": "Could you please make X correction in the affidavit?"
}
Example response:
{
"created_at": "2025-04-28T14:39:09.480132Z",
"created_by_id": 2,
"id": 3244,
"job_id": 21788,
"type": "AFFIDAVIT_CHANGES",
"type_extra": "AFF_TMPL_CHANGE",
"updated_at": "2025-04-28T14:39:09.480132Z",
"description": "Could you please make X correction in the affidavit?",
"resolution_notes": null,
"resolved": false,
"resolved_by_id": null,
"auto_resolve": false,
"auto_resolve_at": null,
"created_by": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Firm User Tester",
"last_name": "Tester",
"first_name": "Firm User",
"email": "firm@proofserve.com",
"stripe_default_payment_method_id": 608,
"email_verified": true,
"phone_number": "+5521993725912",
"address_1": "7154 Eaton Ct",
"address_2": "",
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1745850649755,
}
}
HTTP Request
POST /jobs/{job_id}/flag
Request Parameters
| Parameter | Description |
|---|---|
typestring, required |
One of: BAD_ADDRESS, MISSING_INFORMATION, AFFIDAVIT_CHANGES, OTHER |
type_extrastring, optional |
Optional enum field that provides additional context for job flags. See below for possible values. |
descriptionstring, required |
TYPE_EXTRA Values
| Type | Possible Values |
|---|---|
| BAD_ADDRESS | VACANT_HOME, ABANDONED_LOT, HOME_FOR_SALE, NEW_RESIDENT, CONFIRMED_WITH_NEIGHBOR |
| MISSING_INFORMATION | MISSING_DOCUMENTS, POOR_SCAN, INCOMPLETE_ADDRESS, INCORRECT_DETAILS |
| FILING_EXCEPTION | COURT_RESPONSE, DOCUMENT_ISSUE |
| AFFIDAVIT_CHANGES | AFF_TMPL_CHANGE, NOTARY_REQUIRED, PHOTOS_TOO_MANY_FEW, MISSING_MAILING_RECEIPT, REMOVE_PRICING, WET_INK_REQUIRED, WORDING_CHANGE, OTHER |
| Timing-related | ETA_GIVEN, NO_ETA |
Resolve a flag
Example request body:
{
"resolution_notes": "We have updated the address."
}
Example response:
{
"id": 62,
"job_id": 160,
"created_by_id": 13,
"type": "AFFIDAVIT_CHANGES",
"description": "Could you please make X correction in the affidavit?",
"resolved": true,
"resolution_notes": "We have updated the address.",
"resolved_by_id": 13,
"created_at": 1625161316000,
"updated_at": 1625161316000
}
HTTP Request
POST /jobs/{job_id}/flag/{flag_id}/resolve
Request Parameters
| Parameter | Description |
|---|---|
resolution_notesstring |
Send chat message
Example request body:
{
"message": "This is an example chat message."
}
Example response:
{
"message": "This is an example chat message.",
"job_id": 160,
"user_id": 2,
"updated_at": 1625161314000,
"created_at": 1625161314000,
"id": 223
}
HTTP Request
POST /jobs/{job_id}/messages
Request Parameters
| Parameter | Description |
|---|---|
messagestring, required |
Get chat messages
Example response:
[
{
"id": 212,
"user_id": 13,
"job_id": 160,
"message": "Hello",
"read": 0,
"created_at": 1625159254000,
"updated_at": 1625159254000,
"deleted_at": null,
"system": false,
"user": {
"id": 13,
"law_firm_id": null,
"type": "PROOF",
"name": "Admin Wachocki",
"last_name": "Wachocki",
"first_name": "Admin",
"active": 1,
"email": "admin@proofserve.com",
"administrator": false,
"phone_number": null,
"state_id": 1,
"created_at": 1550875352000,
"updated_at": 1602128130000,
"deleted_at": null,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false,
"law_firm": null
}
}
]
HTTP Request
GET /jobs/{job_id}/messages
Mark messages as read
Example response:
{
"success": true
}
HTTP Request
POST /jobs/{job_id}/messages/{message_id}/read
Mark a given message as read, as well as all messages sent previous to that message.
Add an address
Example request body:
{
"type": "WORK",
"business_name": "Acme Corp, Inc.",
"address_1": "12345 Some St.",
"address_2": null,
"city": "Denver",
"state_id": 1,
"zip": "80014",
"primary": true
}
Example response:
{
"type": "WORK",
"business_name": "Acme Corp, Inc.",
"address_1": "12345 Some St.",
"address_2": null,
"city": "Denver",
"state_id": 1,
"zip": "80014",
"primary": true,
"servee_id": 159,
"county": "Denver County",
"latitude": 39.7811727,
"longitude": -104.9133288,
"timezone": "America/Denver",
"updated_at": 1625161315000,
"created_at": 1625161315000,
"id": 395,
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"requires_server_identification": false,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"hide_caption": 0,
"caption_id": "co",
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"show_prior_attempts": 0,
"requires_notary_service": true,
"requires_notary_nonservice": true,
"attach_summons": false,
"proof_percent": "0.4500000000",
"show_photos": 1,
"custom_affidavit": 0,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
}
}
HTTP Request
POST /jobs/{job_id}/servees/{servee_id}/addresses
Delete an address
Example response:
{
"success": true
}
HTTP Request
DELETE /jobs/{job_id}/servees/{servee_id}/addresses/{address_id}
Law Firms
Job Specifications (Serve Specs)
Recently, we launched Job Specifications (also known as Serve Specs) to replace the previous Special Requirements feature. Job Specifications are uniquely identified by a Job Spec ID, associated with a Job Type (SERVE or POSTING), and can be applied based on location, all jobs, or restricted to a specific state.
Serve Specs are primarily managed via our GraphQL API. You can find detailed information on how to create and manage Job Specifications in the GraphQL API documentation for createJobSpecification.
Job Types and Speed Mappings
Our system supports two primary job types, each with its own set of speed mappings:
Serve Jobs
Serve jobs involve the physical delivery of legal documents to a recipient. Available speed mappings for Serve jobs include:
| Speed Mapping | Description |
|---|---|
| STANDARD | Four attempts over ten days |
| EXPEDITED | Four attempts over three days |
| SAME_DAY | First attempt on same day if received before 2pm |
| HYBRID | Two (2) personal attempts before posting within four (4) days |
| GARNISHMENT | Up to four (4) attempts at one (1) address over seven (7) days. |
Post Jobs
Post jobs involve the public posting of legal notices. Available speed mappings for Post jobs include:
| Speed Mapping | Description |
|---|---|
| 2_DAY_POST | Documents placed on door within two (2) days |
| ENVELOPE | Posting in envelope |
When creating job specifications, ensure you select the appropriate job type (SERVE or POSTING) and speed mapping based on your requirements.
Concierge Client
Concierge Client is a premium firm setting that Proof administrators can enable for eligible law firms. This setting unlocks additional service options regardless of legal requirements, including:
- Wet Ink Signature: Your server will physically sign the affidavit
- Notarize Affidavit: Your server will have the final affidavit notarized
While Proof always adheres to legal requirements for wet ink signatures and notarized documents, the Concierge Client setting allows firms to apply these preferences to all jobs regardless of jurisdictional requirements.
Firms interested in Concierge Client status should contact support@proofserve.com to discuss eligibility with the sales team.
Custom Preferences
In addition to standard job preferences, Proof administrators can create custom preferences tailored to specific client needs. These custom preferences can only be created by Proof administrators, not by the firms themselves.
Firms interested in custom preferences should contact support@proofserve.com to discuss their specific requirements with the sales team.
Get current law firm
Example response:
{
"id": 2,
"name": "Acme Law Firm",
"phone_number": "7347304250",
"email": "marty@wachocki.net",
"address_1": "8753 Yates Dr",
"address_2": "#215",
"city": "Westminster",
"state_id": 1,
"zip": "80031",
"created_at": 1548272881000,
"updated_at": 1607363359000,
"deleted_at": null,
"email_invoices_to": null,
"free_credits": "475.0000000000",
"api_enabled": true,
"private_jobs": false,
"salesforce_connected": true,
"primary_billing_contact_email": "user@email.com",
"consolidate_invoice_line_items": true,
"prefix_billing_number_filenames": true,
"notary_required": false,
"exempt_witness_fees": false,
"allow_post_payment": false,
"collection_firm": true,
"creditor_firm": true,
"efile_enabled": true,
"notary_override": true,
"automated_statement_emails": true,
"affidavit_add_all_attempts": true,
"automated_statement_recipients": "user@email.com",
}
HTTP Request
GET /law-firms/current
Get special requirements
Note: The Special Requirements feature is deprecated. We strongly recommend transitioning to Job Specifications (Serve Specs) to manage special instructions for your jobs.
You can find detailed information on how to create and manage Job Specifications in the GraphQL API documentation for createJobSpecification.
DEPRECATED This special requirements feature is deprecated. Please use the new serve spec GraphQL API instead.
Example response:
[
{
"id": 134,
"title": "aaaaa",
"instructions": "123",
"is_default": true,
"law_firm_id": 2,
"last_updated_by": {
"id": 199,
"law_firm_id": 2,
"type": "FIRM",
"name": "User",
"last_name": "User",
"first_name": "User",
"email": "user@email.com",
"stripe_default_payment_method_id": null,
"email_verified": true,
"phone_number": "111-111-1111",
"address_1": "1802 N Gaylord St",
"address_2": "",
"city": "Denver",
"state_id": 1,
"zip": "80206",
"created_at": 1660062112023,
"updated_at": 1683913724176,
"new_user": true,
"notes": null,
"notify_hours": 1,
"email_affidavits": true,
"active": true,
"email_chat_messages": true,
"email_progress_updates": true,
"email_reassigned": true,
"email_job_completed": true,
"email_job_pending_firm_action": true,
"email_invoices": true,
"email_notifications": true,
"administrator": false,
},
"created_at": "2023-04-06T12:37:18.084663Z",
"updated_at": "2023-04-06T12:37:18.084663Z"
}
]
HTTP Request
GET /law-firms/{law-firm-id}/special-requirement
Create a special requirement
DEPRECATED This special requirements feature is deprecated. Please use the new serve spec GraphQL API instead.
Note: The Special Requirements feature is deprecated. We strongly recommend transitioning to Job Specifications (Serve Specs) to manage special instructions for your jobs.
You can find detailed information on how to create and manage Job Specifications in the GraphQL API documentation for createJobSpecification.
Example request body:
{
"title": "Back door check",
"instructions": "please check the back door",
"is_default": true,
"is_internal": false,
"states":[1,2]
}
Example response:
{
"id": 133,
"instructions": "new requirement",
"is_default": true,
"is_internal": true,
"last_updated_by_id": 162,
"law_firm_id": 2,
"title": "My New Req",
"created_at": "2023-10-03T14:40:58.507102923Z",
"updated_at": "2023-10-03T14:40:58.507103173Z",
"deleted_at": null
}
HTTP Request
POST /law-firms/{law-firm-id}/special-requirement
Notifications
Get notifications
Example response:
[
{
"id": 327,
"user_id": 2,
"job_id": 160,
"type": "MESSAGE",
"author_id": 13,
"action": null,
"message": "Hello",
"message_2": null,
"emailed": 0,
"read": false,
"created_at": 1625159254000,
"updated_at": 1625159254000,
"message_id": 212,
"author_system": 0,
"author": {
"id": 13,
"law_firm_id": null,
"type": "PROOF",
"name": "Admin Wachocki",
"last_name": "Wachocki",
"first_name": "Admin",
"active": 1,
"email": "admin@proofserve.com",
"administrator": false,
"phone_number": null,
"state_id": 1,
"created_at": 1550875352000,
"updated_at": 1602128130000,
"deleted_at": null,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false
},
"job": {
"id": 160,
"user_id": 2,
"law_firm_id": 2,
"server_id": 14,
"original_job_id": null,
"new_job_id": null,
"status": "PENDING_NOTARY",
"contact_first_name": "Marty",
"contact_last_name": "Wachocki",
"contact_email": "marty@propeltechnology.com",
"contact_phone": "7347304250",
"billing_number": "123",
"court_name": "District Court, County Of Adams, State Of",
"case_number": "2018CV31346",
"state_id": 1,
"serve_pricing_id": 2,
"stripe_card_id": "card_1Dy074Hg213tM5vxjBic4l40",
"post_serve": false,
"assign_date": "2019-04-04 20:05:30",
"created_by_id": 2,
"attempts_made": 1,
"last_attempt": "2019-04-04 20:35:29",
"successful_attempt": true,
"successful_at": 1554410129000,
"completed_at": null,
"due_date": 1554667530000,
"originated_at": 1554126237000,
"subpoena": false,
"witness_fee": null,
"authorize_skiptrace": false,
"affidavit_extension": null,
"review_period_ends": null,
"created_at": 1554126237000,
"updated_at": 1625156672000,
"deleted_at": null,
"same_address_job_id": null,
"attorney_name": null,
"attorney_bar_number": null,
"court_street_address": null,
"court_mailing_address": null,
"court_city": null,
"court_zip": null,
"court_branch_name": null,
"court_address": null,
"last_status_change": null,
"court_date": null,
"affidavit_status": "PENDING_TM_REVIEW",
"cancel_job_reason": null,
"affidavit_uploaded_at": "2020-09-29 05:45:04",
"salesforce_id": null,
"archived": false,
"off_app_assigned_to": "NOT_ASSIGNED",
"salesforce_user_id": "",
"affidavit_due_at": "2021-07-02 04:24:32",
"affidavit_reminders_sent": 0,
"last_affidavit_reminder_sent_at": null,
"attempt_reminders_sent": 0,
"last_attempt_reminder_sent_at": null,
"signed_affidavit_url": null,
"base_fee": 45,
"bounty": 80,
"post_price": 0,
"servee": {
"id": 159,
"type": "INDIVIDUAL",
"job_id": 160,
"name": "Test Servee",
"registered_agent_name": null,
"physical_description": false,
"race": null,
"gender": null,
"hair_color": null,
"marital_status": "",
"eye_glasses": null,
"height": null,
"weight": null,
"age": null,
"notes": null,
"social_links": null,
"created_at": 1554126237000,
"updated_at": 1554126237000,
"deleted_at": null,
"primary_address": {
"id": 209,
"servee_id": 159,
"type": "HOME",
"business_name": null,
"address_1": "8120 Sheridan Boulevard",
"address_2": "",
"city": "Arvada",
"state_id": 6,
"zip": "80003",
"primary": true,
"longitude": -105.052024,
"latitude": 39.8437682,
"county": "Adams County",
"created_at": 1554126238000,
"updated_at": 1558672808000,
"deleted_at": null,
"timezone": "America/Denver"
}
},
"serve_pricing": {
"id": 2,
"name": "Expedited",
"state_id": 1,
"base_fee": 45,
"bounty_fee": 80,
"diy_price": 125,
"post_price": null,
"post_duration": null,
"initial_duration": 259200,
"total_duration": 259200,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
"user": {
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false,
"law_firm": {
"id": 2,
"name": "Acme Law Firm",
"phone_number": "7347304250",
"email": "marty@wachocki.net",
"address_1": "8753 Yates Dr",
"address_2": "#215",
"city": "Westminster",
"state_id": 1,
"zip": "80031",
"created_at": 1548272881000,
"updated_at": 1607363359000,
"deleted_at": null,
"email_invoices_to": null,
"free_credits": "475.0000000000",
"api_enabled": true,
"private_jobs": false,
"salesforce_connected": true
}
}
}
}
]
HTTP Request
GET /notifications
Mark notifications as read
Example request body:
{
"ids": [
1,
2,
3
]
}
Example response:
{
"success": true
}
HTTP Request
POST /notifications/read
Serve Pricings
Get serve pricings
Example response:
[
{
"id": 1,
"name": "Standard",
"state_id": 1,
"base_fee": 25,
"bounty_fee": 50,
"diy_price": 75,
"post_price": 45,
"post_duration": 172800,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
}
]
HTTP Request
GET /serve-pricings/{state_id}
Defaults to getting serve pricings for serve jobs.
Add the job_type query param to get site visit serve pricings.
GET /serve-pricings/{state_id}?job_type=SITE_VISIT
Get serve pricings by address
Example response:
[
{
"id": 1,
"name": "Standard",
"state_id": 1,
"base_fee": 25,
"bounty_fee": 50,
"diy_price": 75,
"post_price": 45,
"post_duration": 172800,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
}
]
HTTP Request
GET /serve-pricings/address?address_1=1800+N+Gaylord+St&city=Denver&state_id=1&zip=80206&job_type=SERVE
job_type: SERVE | SITE_VISIT
Servee Photos
Upload servee photo
Example request body:
"<file>"
Example response:
{
"filename": "file.png",
"extension": "png",
"law_firm_id": 2,
"created_by_id": 2,
"access_key": "sVUoraXLtzAGtB1NTI3yE7R3QPBCKKx9",
"updated_at": 1625161318000,
"created_at": 1625161318000,
"id": 156
}
HTTP Request
POST /servee-photos
Get servee photo
Example response:
<image file>
HTTP Request
GET /servee-photos/{servee_photo_id}.{ext}
States
Get all states
Example response:
[
{
"id": 6,
"name": "Alabama",
"abbreviation": "AL",
"allow_jobs": true,
"allow_residential_sub": false,
"allow_work_sub": false,
"created_at": 1557771726000,
"updated_at": 1553048780000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": false,
"requires_notary_nonservice": false,
"allow_sunday_serve": 1,
"average_server_rating": 0,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0,
"serve_pricings": [
{
"id": 21,
"name": "Standard",
"state_id": 6,
"base_fee": 35,
"bounty_fee": 40,
"diy_price": 75,
"post_price": 45,
"post_duration": 172800,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
{
"id": 22,
"name": "Expedited",
"state_id": 6,
"base_fee": 45,
"bounty_fee": 80,
"diy_price": 125,
"post_price": null,
"post_duration": null,
"initial_duration": 259200,
"total_duration": 259200,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
{
"id": 23,
"name": "Same Day",
"state_id": 6,
"base_fee": 75,
"bounty_fee": 150,
"diy_price": 225,
"post_price": null,
"post_duration": null,
"initial_duration": 86400,
"total_duration": 86400,
"total_attempts": 4,
"updated_at": 1548331771000,
"created_at": 1548331771000,
"creditor_only": 0,
"collection_only": 0
},
{
"id": 231,
"name": "Garnishment",
"state_id": 6,
"base_fee": 40,
"bounty_fee": 0,
"diy_price": 0,
"post_price": 0,
"post_duration": 0,
"initial_duration": 604800,
"total_duration": 604800,
"total_attempts": 2,
"updated_at": 1612845039000,
"created_at": 1612845039000,
"creditor_only": 0,
"collection_only": 1
}
],
"supplementary_pricings": [
{
"id": 19,
"state_id": 6,
"name": "Skip Trace",
"price": "$75",
"description": "Find updated address(es) for servee.",
"server_cut": false,
"server_price": "$41.25",
"created_at": null,
"updated_at": null
},
{
"id": 79,
"state_id": 6,
"name": "Extended Travel Areas",
"price": "$50+",
"description": "A server may charge an additional fee for rural or other areas requiring additional travel time or costs to reach areas.",
"server_cut": false,
"server_price": "$27.5+",
"created_at": null,
"updated_at": null
},
{
"id": 80,
"state_id": 6,
"name": "Witness Fee Convenience Charge",
"price": "10%",
"description": "10% of the witness fee amount will be charged for printing & delivery of check. $2 min / $25 max.",
"server_cut": false,
"server_price": null,
"created_at": null,
"updated_at": null
},
{
"id": 81,
"state_id": 6,
"name": "Additional Serve at Same Address",
"price": "50% reduction",
"description": "Each Additional Serve at Same Address. 50% reduction in payout on each additional serve at the same address.",
"server_cut": true,
"server_price": "50% reduction",
"created_at": null,
"updated_at": null
},
{
"id": 82,
"state_id": 6,
"name": "Military Base and Jail/Prison Serve",
"price": "$75",
"description": "Additional payout for serves at military bases and jails/prisons.",
"server_cut": true,
"server_price": "$13.75",
"created_at": null,
"updated_at": null
},
{
"id": 83,
"state_id": 6,
"name": "On-demand Surveillance",
"price": "Up to $75/hour",
"description": "As needed survelliance for evasive servees. 2 hour minimum.",
"server_cut": false,
"server_price": "Up to $41.25/hour",
"created_at": null,
"updated_at": null
},
{
"id": 84,
"state_id": 6,
"name": "Additional Addresses",
"price": "$35 - $75",
"description": "If a serve address is updated after a server has made any or all 4 attempts on the original address. The payout is based on the base payout for the type of serve (as listed above).",
"server_cut": true,
"server_price": "$16.50 - $41.25",
"created_at": null,
"updated_at": null
},
{
"id": 85,
"state_id": 6,
"name": "Document Printing",
"price": "10\u00a2",
"description": "A fee of 10\u00a2 per page may be added for jobs with more than 100 printed pages.",
"server_cut": false,
"server_price": null,
"created_at": null,
"updated_at": null
}
]
}
]
HTTP Request
GET /states
Get state rules
Example response:
[
{
"id": 1,
"state_id": 1,
"rule": "Test rule #1",
"created_at": null,
"updated_at": null
}
]
HTTP Request
GET /states/{state_id}/rules
Statements
Export statement (csv)
Example response:
<csv file>
HTTP Request
GET /statements/{start}/{end}/csv
URL Parameters
| Parameter | Description |
|---|---|
startinteger, required |
UNIX Timestamp in milliseconds |
endinteger, required |
UNIX Timestamp in milliseconds |
Export statement (pdf)
Example response:
<pdf file>
HTTP Request
GET /statements/{start}/{end}/pdf
URL Parameters
| Parameter | Description |
|---|---|
startinteger, required |
UNIX Timestamp in milliseconds |
endinteger, required |
UNIX Timestamp in milliseconds |
Users
Get current user
Example response:
{
"id": 2,
"law_firm_id": 2,
"type": "FIRM",
"name": "Marty Wachocki",
"last_name": "Wachocki",
"first_name": "Marty",
"active": 1,
"email": "firm@proofserve.com",
"stripe_default_card_id": "card_1Hz7FKHg213tM5vxSS07Qj5Q",
"email_invoices": true,
"email_notifications": true,
"email_verified": true,
"administrator": true,
"phone_number": "7347304250",
"address_1": "7154 Eaton Ct",
"address_2": null,
"city": "Arvada",
"state_id": 1,
"zip": "80003",
"created_at": 1548158103000,
"updated_at": 1608152958000,
"deleted_at": null,
"new_user": 0,
"rating_count": 0,
"email_chat_messages": 1,
"email_progress_updates": 1,
"email_reassigned": 1,
"email_job_completed": 1,
"notify_hours": 1,
"total_job_count": 0,
"total_job_count_5_stars": 0,
"table_style": "DEFAULT",
"coupon_code": null,
"last_cdp_update": null,
"email_affidavits": false,
"law_firm": {
"id": 2,
"name": "Acme Law Firm",
"phone_number": "7347304250",
"email": "marty@wachocki.net",
"address_1": "8753 Yates Dr",
"address_2": "#215",
"city": "Westminster",
"state_id": 1,
"zip": "80031",
"created_at": 1548272881000,
"updated_at": 1607363359000,
"deleted_at": null,
"email_invoices_to": null,
"free_credits": "475.0000000000",
"api_enabled": true,
"private_jobs": false,
"salesforce_connected": true
},
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO",
"allow_jobs": true,
"allow_residential_sub": true,
"allow_work_sub": true,
"created_at": 1596844801000,
"updated_at": 1596844801000,
"deleted_at": null,
"affidavit_service_title": "Affidavit of Service",
"affidavit_nonservice_title": "Affidavit of Nonservice",
"requires_notary_service": true,
"requires_notary_nonservice": true,
"allow_sunday_serve": 1,
"average_server_rating": 5,
"summons_serve_stamp": false,
"attach_summons_position": "PREPENDED",
"show_prior_attempts_posting": 0
},
"states": []
}
HTTP Request
GET /users/current
Mailing
Create mailing for a job
POST v1/jobs/{job_id}/mailing/attempt
Request Parameters
| Parameter | Description |
|---|---|
letter_triggerstring, required |
One of: CLOSEOUT_ANY, CLOSEOUT_SUCCESS, CLOSEOUT_FAILEDCLOSEOUT_ANY = 'Always mailed'CLOSEOUT_SUCCESS = 'Mailed only if serve is successful'CLOSEOUT_FAILURE = 'Mailed only if serve is unsuccessful' |
letter_is_certifiedboolean, required |
One of: true, false |
Example response:
{
"success": true
}
GraphQL: Add Mailing
Add a new mailing to an existing job using GraphQL.
Example mutation:
mutation AddMailing($input: AddMailingInput!) {
addMailing(input: $input) {
id
status
trigger
mailingType
serviceType
serviceOutcomeTriggers {
id
isSuccessful
serviceType
}
mailingAddress {
id
recipientName
address1
address2
city
zip
stateID
state {
id
name
abbreviation
}
}
job {
id
}
}
}
Example variables:
{
"input": {
"jobID": 12345,
"serveeID": 67890,
"trigger": "CLOSEOUT_SUCCESS",
"mailingType": "AUTOMATED",
"serviceType": "CERTIFIED",
"address": {
"recipientName": "Jane Smith",
"address1": "123 Main St",
"address2": "Apt 4B",
"city": "Denver",
"stateID": 1,
"zip": "80202"
}
}
}
Example response:
{
"data": {
"addMailing": {
"id": 743,
"status": "AWAITING_TRIGGER",
"trigger": "CLOSEOUT_SUCCESS",
"mailingType": "AUTOMATED",
"serviceType": "CERTIFIED",
"serviceOutcomeTriggers": null,
"mailingAddress": {
"id": 1,
"recipientName": "Jane Smith",
"address1": "123 Main St",
"address2": "Apt 4B",
"city": "Denver",
"zip": "80202",
"stateID": 1,
"state": {
"id": 1,
"name": "Colorado",
"abbreviation": "CO"
}
},
"job": {
"id": 12345
}
}
}
}
Input Fields
| Field | Description |
|---|---|
jobIDInt, required |
The job ID to add the mailing to |
serveeIDInt, required |
The servee ID to associate the mailing with |
triggerString, required |
One of: CLOSEOUT_ANY, CLOSEOUT_SUCCESS, CLOSEOUT_FAILURE, SERVICE_OUTCOME |
mailingTypeString, required |
One of: AUTOMATED, SERVER, SCM_VENDOR |
serviceTypeString, required |
One of: FIRST_CLASS, CERTIFIED |
addressObject |
Optional custom recipient address. If not provided, mails to servee's primary address |
address.recipientNameString, required |
Recipient name (required if address provided) |
address.address1String, required |
Address line 1 (required if address provided) |
address.address2String |
Address line 2 (optional) |
address.cityString, required |
City (required if address provided) |
address.stateIDInt, required |
State ID (required if address provided) |
address.zipString, required |
ZIP code (required if address provided) |
serviceOutcomeTriggersArray |
Array of service outcome conditions (only for SERVICE_OUTCOME trigger) |
serviceOutcomeTriggers.*.isSuccessfulBoolean |
Whether trigger applies to successful or failed serves (optional) |
serviceOutcomeTriggers.*.serviceTypeString |
Optional service type filter: ENTITY, REGISTERED_AGENT, PERSONAL, RESIDENTIAL_SUB, WORK_SUB, REFUSAL, POSTING, OTHER, UNSUCCESSFUL, JAIL |
GraphQL: Query Mailings
Query mailings for a specific job or filter by various criteria.
Example query:
query getMailingsByJobID($jobID: ID!, $first: Int, $after: String) {
getMailingsByJobID(
where: { jobID: $jobID }
first: $first
after: $after
) {
edges {
node {
id
jobID
status
mailingType
serviceType
trigger
trackingNumber
createdAt
updatedAt
postedAt
serviceOutcomeTriggers {
id
isSuccessful
serviceType
}
mailingAddress {
id
recipientName
address1
address2
city
zip
stateID
state {
id
name
abbreviation
}
}
job {
id
}
}
cursor
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
totalCount
}
}
Example variables:
{
"jobID": "12345",
"first": 10,
"after": null
}
Example response:
{
"data": {
"getMailingsByJobID": {
"edges": [
{
"node": {
"id": 743,
"jobID": 12345,
"status": "AWAITING_TRIGGER",
"mailingType": "AUTOMATED",
"serviceType": "FIRST_CLASS",
"trigger": "SERVICE_OUTCOME",
"trackingNumber": null,
"createdAt": 1625161317000,
"updatedAt": 1625161317000,
"postedAt": null,
"serviceOutcomeTriggers": [
{
"id": 1,
"isSuccessful": true,
"serviceType": "PERSONAL"
},
{
"id": 2,
"isSuccessful": false,
"serviceType": null
}
],
"mailingAddress": null,
"job": {
"id": 12345
}
},
"cursor": "YXJyYXljb25uZWN0aW9uOjA="
},
{
"node": {
"id": 727,
"jobID": 12345,
"status": "AWAITING_TRIGGER",
"mailingType": "SERVER",
"serviceType": "CERTIFIED",
"trigger": "CLOSEOUT_FAILURE",
"trackingNumber": null,
"createdAt": 1625161317000,
"updatedAt": 1625161317000,
"postedAt": null,
"serviceOutcomeTriggers": null,
"mailingAddress": {
"id": 1,
"recipientName": "Jane Smith",
"address1": "456 Custom Street",
"address2": null,
"city": "Custom City",
"zip": "10001",
"stateID": 30,
"state": {
"id": 30,
"name": "New York",
"abbreviation": "NY"
}
},
"job": {
"id": 12345
}
},
"cursor": "YXJyYXljb25uZWN0aW9uOjE="
}
],
"pageInfo": {
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "YXJyYXljb25uZWN0aW9uOjA=",
"endCursor": "YXJyYXljb25uZWN0aW9uOjE="
},
"totalCount": 2
}
}
}
Query Parameters
| Field | Description |
|---|---|
where.jobIDID |
Filter by job ID |
where.statusString |
Filter by mailing status (e.g., AWAITING_TRIGGER, REQUESTING, POSTED, COMPLETE) |
where.mailingTypeString |
Filter by mailing type: AUTOMATED, SERVER, SCM_VENDOR |
where.serviceTypeString |
Filter by service type: FIRST_CLASS, CERTIFIED |
where.triggerString |
Filter by trigger type: CLOSEOUT_ANY, CLOSEOUT_SUCCESS, CLOSEOUT_FAILURE, SERVICE_OUTCOME |
firstInt |
Number of results to return (pagination) |
afterString |
Cursor for pagination (use endCursor from previous page) |
GraphQL: Delete Mailing
Delete a mailing from a job.
Example mutation:
mutation DeleteMailing($mailingID: Int!) {
deleteMailing(id: $mailingID)
}
Example variables:
{
"mailingID": 743
}
Example response:
{
"data": {
"deleteMailing": true
}
}
Input Fields
| Field | Description |
|---|---|
mailingIDInt, required |
The mailing ID to delete |
Webhooks
Create webhook endpoint
Example response:
{
"url": "https://example.com/webhook",
"enabled": true,
"version": 1,
"law_firm_id": 2,
"updated_at": 1625161320000,
"created_at": 1625161320000,
"id": 50
}
HTTP Request
POST /webhooks/endpoints
Get webhook endpoints
Example response:
[
{
"id": 51,
"law_firm_id": 2,
"url": "https://example.com/webhook",
"version": 1,
"enabled": 1,
"event_job_status_change": 0,
"event_job_deleted": 0,
"event_job_extended": 0,
"event_job_attempt_created": 0,
"event_job_attempt_updated": 0,
"event_job_attempt_deleted": 0,
"event_job_flag_created": 0,
"event_job_flag_resolved": 0,
"event_job_chat_message": 0,
"created_at": 1625161320000,
"updated_at": 1625161320000
}
]
HTTP Request
GET /webhooks/endpoints
Get webhook calls
Example response:
{
"current_page": 1,
"data": [
{
"id": 5,
"webhook_endpoint_id": 52,
"law_firm_id": 2,
"endpoint_url": "https://example.com/webhook",
"successful": 1,
"request_body": "{}",
"response_body": "{}",
"response_status_code": 200,
"attempts": 1,
"last_attempt": "2021-07-01 17:42:00",
"created_at": 1625161320000,
"updated_at": 1625161320000,
"event": "JOB_STATUS_CHANGE"
}
],
"first_page_url": "http://localhost:3000/v1/webhooks/calls?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://localhost:3000/v1/webhooks/calls?page=1",
"links": [
{
"url": null,
"label": "pagination.previous",
"active": false
},
{
"url": "http://localhost:3000/v1/webhooks/calls?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "pagination.next",
"active": false
}
],
"next_page_url": null,
"path": "http://localhost:3000/v1/webhooks/calls",
"per_page": 10,
"prev_page_url": null,
"to": 1,
"total": 1
}
HTTP Request
GET /webhooks/calls
Webhook Events
Webhook endpoints are configured through the web interface in the Billing & Configuration > API page.
In the API page, click Add endpoint to reveal a form to add a new endpoint for receiving events. You can enter any URL as the destination for events. You can choose to be notified of all event types, or only specific ones. You can find a full list of all event types below.
Event types
| Event ID | Description |
|---|---|
| JOB_STATUS_CHANGE | When a job's status changes (e.g. In Progress -> Pending Notary) |
| JOB_DELETED | When a job is deleted |
| JOB_EXTENDED | When a job's deadline is extended |
| JOB_ATTEMPT_CREATED | When an attempt is created on a given job |
| JOB_ATTEMPT_UPDATED | When an attempt is updated on a given job |
| JOB_ATTEMPT_DELETED | When an attempt is deleted on a given job |
| JOB_FLAG_CREATED | When a job is flagged for any reason (e.g. bad address) |
| JOB_FLAG_RESOLVED | When a job flag is resolved |
| JOB_CHAT_MESSAGE | When a new chat message is received on a job |
Webhook payload examples
Example JOB_STATUS_CHANGE payload:
{
"event": "JOB_STATUS_CHANGE",
"created_at": 1696337002725,
"data": {
"job_id": 3146,
"old_status": "UNASSIGNED",
"new_status": "ASSIGNED"
}
}
Example JOB_DELETED payload:
{
"event": "JOB_DELETED",
"created_at": 1696339533678,
"data": {
"job_id": 3146
}
}
Example JOB_EXTENDED payload:
{
"event": "JOB_EXTENDED",
"created_at": 1696340853704,
"data": {
"job_id": 3145,
"days_extended": 7,
"old_due_date": "2023-10-13T12:37:16.458259Z",
"new_due_date": "2023-10-20T12:37:16.458259Z"
}
}
Example JOB_ATTEMPT_CREATED payload:
{
"event": "JOB_ATTEMPT_CREATED",
"created_at": 1696337321265,
"data": {
"job_id": 3146,
"attempt_id": 994,
"type": true
}
}
Example JOB_ATTEMPT_UPDATED payload:
{
"event": "JOB_ATTEMPT_UPDATED",
"created_at": 1696339428638,
"data": {
"job_id": 3146,
"attempt_id": 994,
"type": true
}
}
Example JOB_ATTEMPT_DELETED payload:
{
"event": "JOB_ATTEMPT_DELETED",
"created_at": 1696339533678,
"data": {
"job_id": 3146,
"attempt_id": 994
}
}
Example JOB_FLAG_CREATED payload:
{
"event": "JOB_FLAG_CREATED",
"created_at": 1696341106559,
"data": {
"job_id": 3145,
"flag_id": 412,
"type": "BAD_ADDRESS",
"description": "No house on site.",
"created_by_id": 13,
"created_by_name": "John Doe",
"created_by_type": "SERVER"
}
}
Example JOB_FLAG_RESOLVED payload:
{
"event": "JOB_FLAG_RESOLVED",
"created_at": 1696341195035,
"data": {
"job_id": 3145,
"flag_id": 412,
"type": "BAD_ADDRESS",
"description": "Ok",
"ResolvedByID": 14,
"ResolvedByName": "Jane Doe",
"ResolvedByType": "PROOF"
}
}
Example JOB_CHAT_MESSAGE payload:
{
"event": "JOB_CHAT_MESSAGE",
"created_at": 1696339851387,
"data": {
"job_id": 3146,
"user_name": "John Doe",
"user_type": "SERVER",
"message": "Hello, how are you?"
}
}
Each webhook request will include the following attributes:
| Attribute | Description |
|---|---|
| event | The event type that triggered the event |
| data | Data object containing information specific to the event |
For testing webhooks, we recommend a useful service called Request Bin, which allows you to inspect arbitrary webhook requests.
If a JOB_STATUS_CHANGE events new_status field is REASSIGNED, an additional field called new_job_id will be present in the data. This is the job ID of the newly created job.
GraphQL API
This document provides an overview of our GraphQL API and details on available operations.
Interacting with our GraphQL API:
Send all GraphQL operations as POST requests to:
HTTP POST https://api.proofserve.com/v1/query
The POST request body is a JSON object:
operationName: (Optional but recommended) String naming the operation (e.g., "createJobSpecification").query: String with the GraphQL query or mutation.variables: (Optional) JSON object with variables for the query or mutation.
createJobSpecification
Creates a new job specification with associated standard job preferences.
Important Note: When creating a job specification, you need to provide the IDs of existing standard job preferences in the jobPreferenceIDs array. You can retrieve these IDs by first calling the getJobSpecsByLawFirm query (see the Queries section below).
Operation Name: createJobSpecification
GraphQL Mutation:
graphql
mutation createJobSpecification($input: CreateJobSpecification!) {
createJobSpecification(input: $input) {
# Response fields (not required for input).
# Request only necessary response fields.
id
lawFirmID
title
jobType
stateID
stateType
# Also request details of linked job preferences associated
jobpreferences {
id
lawFirmID
type
title
description
jobType
legalRequirementID
stakeholder
inputType
createdAt
updatedAt
}
}
}
Input Type: CreateJobSpecification
Input object fields:
1. jobSpecification: (Required) Object with details for the job specification.
Variables ($input):
Conforms to CreateJobSpecification input type.
jobSpecification Input Object Fields:
| Parameter | Type | Description |
|---|---|---|
lawFirmID |
Int! |
Required. Law firm ID for this job specification. |
title |
String! |
Required. Job specification title. |
jobType |
JobSpecificationJobType! |
Required. Job type (e.g., SERVE, POSTING). |
jobPreferenceIDs |
[Int!] |
Required. Array of existing standard job preference IDs to associate. |
stateID |
Int |
Optional. State ID for this job specification. |
stateType |
JobSpecificationStateType |
Optional, but required if stateID is provided. State association type (e.g., COURT, SERVE_ADDRESS). |
Example request body:
json { "operationName": "createJobSpecification", "query": "mutation createJobSpecification($input: CreateJobSpecification!) { createJobSpecification(input: $input) { id lawFirmID title jobType stateID stateType jobpreferences { id title type jobType stakeholder inputType } } }", "variables": { "input": { "jobSpecification": { "lawFirmID": 2, "title": "Indiana General Civil Process", "jobType": "SERVE", "jobPreferenceIDs": [3, 4], "stateID": 18, "stateType": "COURT" } } } }Example response (200 OK):
json { "data": { "createJobSpecification": { "id": "123", "lawFirmID": 2, "title": "Indiana General Civil Process", "jobType": "SERVE", "stateID": 18, "stateType": "COURT", "jobpreferences": [ { "id": "3", "title": "Photo of Residence Required", "type": "STANDARDIZED", "jobType": "SERVE", "stakeholder": "{\"SERVER\":true,\"PROOF\":true}", "inputType": "{\"PHOTOS\":true}" }, { "id": "4", "title": "GPS Logging Required", "type": "STANDARDIZED", "jobType": "SERVE", "stakeholder": "{\"SERVER\":true}", "inputType": "{\"GPS\":true}" } ] } } }
Error Responses:
If there's an error (e.g., validation error, server error), the response will typically have a 200 OK status, but the JSON body will contain an errors array.
Example error response:
json { "errors": [ { "message": "Validation failed: lawFirmID is required.", "locations": [ { "line": 2, "column": 3 } ], "path": [ "createJobSpecification", "input", "jobSpecification", "lawFirmID" ], "extensions": { "code": "BAD_USER_INPUT" } } ] }
updateJobSpecification
Updates an existing job specification. Modifies details and associated standard job preferences.
Operation Name: updateJobSpecification
GraphQL Mutation:
graphql
mutation updateJobSpecification($input: UpdateJobSpecification!) {
updateJobSpecification(input: $input) {
# Request needed response fields from the updated object
id
lawFirmID
title
jobType
stateID
stateType
jobpreferences {
id
lawFirmID
type
title
description
# ... other preference fields as needed
}
}
}
Example request body:
json { "operationName": "updateJobSpecification", "query": "mutation updateJobSpecification($input: UpdateJobSpecification!) { updateJobSpecification(input: $input) { id title stateID stateType jobpreferences { id title } } }", "variables": { "input": { "id": 123, "title": "Updated Indiana General Civil Process", "stateID": null, "stateType": null, "jobpreferenceIDs": [5, 7] } } }Example response (200 OK):
json { "data": { "updateJobSpecification": { "id": "123", "title": "Updated Indiana General Civil Process", "stateID": null, "stateType": null, "jobpreferences": [ { "id": "5", "title": "Evening Attempts Required" }, { "id": "7", "title": "Multiple Attempts Required" } ] } } }
Error Responses:
If there's an error (e.g., validation error, server error), the response will typically have a 200 OK status, but the JSON body will contain an errors array.
Example error response:
json { "errors": [ { "message": "Validation failed: lawFirmID is required.", "locations": [ { "line": 2, "column": 3 } ], "path": [ "createJobSpecification", "input", "jobSpecification", "lawFirmID" ], "extensions": { "code": "BAD_USER_INPUT" } } ] }
deleteJobSpecification
Deletes an existing job specification.
Operation Name: deleteJobSpecification
GraphQL Mutation:
graphql
mutation deleteJobSpecification($id: Int!) {
deleteJobSpecification(id: $id) {
# Request fields from the deleted object (e.g., ID, title for confirmation)
id
title # To confirm what was deleted
}
}
Variables:
* $id: Int! - Required. ID of the job specification to delete.
Example request body:
json { "operationName": "deleteJobSpecification", "query": "mutation deleteJobSpecification($id: Int!) { deleteJobSpecification(id: $id) { id title } }", "variables": { "id": 123 } }Example response (200 OK):
json { "data": { "deleteJobSpecification": { "id": "123", "title": "Updated Indiana General Civil Process" } } }
Error Responses: Refer to the format in createJobSpecification.
getJobSpecsByLawFirm
Retrieves job specifications for a specific law firm. This query is useful for getting job preference IDs needed when creating or updating job specifications.
GraphQL Query:
graphql
query getJobSpecsByLawFirm($lawFirmID: Int!) {
jobSpecifications(where: { lawFirmID: $lawFirmID }) {
edges {
node {
id
lawFirmID
title
stateID
state {
abbreviation
name
}
stateType
jobType
jobpreferences {
id
lawFirmID
type
title
description
jobType
legalRequirementID
stakeholder
inputType
createdAt
updatedAt
}
createdByID
createdby {
name
}
}
}
totalCount
}
}
Variables:
* $lawFirmID: Int! - Required. Law firm ID to retrieve job specifications for.
Example request body:
json { "operationName": "getJobSpecsByLawFirm", "query": "query getJobSpecsByLawFirm($lawFirmID: Int!) { jobSpecifications(where: { lawFirmID: $lawFirmID }) { edges { node { id lawFirmID title stateID state { abbreviation name } stateType jobType jobpreferences { id title type } createdByID createdby { name } } } totalCount } }", "variables": { "lawFirmID": 443 } }Example response (200 OK):
json { "data": { "jobSpecifications": { "edges": [ { "node": { "id": "spec101", "lawFirmID": 443, "title": "Standard Civil Serve - CountyX", "stateID": 12, "state": { "abbreviation": "CX", "name": "CountyX State" }, "stateType": "COURT", "jobType": "SERVE", "jobpreferences": [ { "id": "pref201", "title": "Morning Attempts Only", "type": "STANDARDIZED" }, { "id": "pref202", "title": "Photo of Building Required", "type": "STANDARDIZED" } ], "createdByID": "user789", "createdby": { "name": "Jane Doe" } } }, { "node": { "id": "spec102", "lawFirmID": 443, "title": "General Posting - All Areas", "stateID": null, "state": null, "stateType": null, "jobType": "POSTING", "jobpreferences": [], "createdByID": "user790", "createdby": { "name": "John Smith" } } } ], "totalCount": 2 } } }
Error Responses: Refer to the format described in createJobSpecification.
addMailing
Add a new mailing to an existing job. Mailings are automated mail delivery triggers that send documents to recipients based on job outcomes.
Operation Name: addMailing
GraphQL Mutation:
graphql
mutation AddMailing($input: AddMailingInput!) {
addMailing(input: $input) {
id
status
trigger
mailingType
serviceType
serviceOutcomeTriggers {
id
isSuccessful
serviceType
}
mailingAddress {
id
recipientName
address1
address2
city
zip
stateID
state {
id
name
abbreviation
}
}
job {
id
}
}
}
Input Type: AddMailingInput
AddMailingInput Fields:
| Parameter | Type | Description |
|---|---|---|
jobID |
Int! |
Required. Job ID to add the mailing to. |
serveeID |
Int! |
Required. Servee ID to associate the mailing with. |
trigger |
MailingTrigger! |
Required. When to send: CLOSEOUT_ANY, CLOSEOUT_SUCCESS, CLOSEOUT_FAILURE, SERVICE_OUTCOME. |
mailingType |
MailingMailingType! |
Required. Mailing type: AUTOMATED, SERVER, SCM_VENDOR. |
serviceType |
MailingServiceType! |
Required. Mail delivery type: FIRST_CLASS, CERTIFIED. |
address |
MailingAddressInput |
Optional. Custom recipient address. If not provided, mails to servee's primary address. |
address.recipientName |
String! |
Required if address provided. Recipient name. |
address.address1 |
String! |
Required if address provided. Address line 1. |
address.address2 |
String |
Optional. Address line 2. |
address.city |
String! |
Required if address provided. City. |
address.stateID |
Int! |
Required if address provided. State ID. |
address.zip |
String! |
Required if address provided. ZIP code. |
serviceOutcomeTriggers |
[ServiceOutcomeTriggerInput!] |
Optional. Array of service outcome conditions (only for SERVICE_OUTCOME trigger). |
serviceOutcomeTriggers.*.isSuccessful |
Boolean |
Optional. Whether trigger applies to successful or failed serves. |
serviceOutcomeTriggers.*.serviceType |
String |
Optional. Service type filter: ENTITY, REGISTERED_AGENT, PERSONAL, RESIDENTIAL_SUB, WORK_SUB, REFUSAL, POSTING, OTHER, UNSUCCESSFUL, JAIL. |
Example request body:
json { "operationName": "AddMailing", "query": "mutation AddMailing($input: AddMailingInput!) { addMailing(input: $input) { id status trigger mailingType serviceType mailingAddress { id recipientName address1 city zip stateID state { name abbreviation } } job { id } } }", "variables": { "input": { "jobID": 12345, "serveeID": 67890, "trigger": "CLOSEOUT_SUCCESS", "mailingType": "AUTOMATED", "serviceType": "CERTIFIED", "address": { "recipientName": "Jane Smith", "address1": "123 Main St", "address2": "Apt 4B", "city": "Denver", "stateID": 1, "zip": "80202" } } } }Example response (200 OK):
json { "data": { "addMailing": { "id": 743, "status": "AWAITING_TRIGGER", "trigger": "CLOSEOUT_SUCCESS", "mailingType": "AUTOMATED", "serviceType": "CERTIFIED", "mailingAddress": { "id": 1, "recipientName": "Jane Smith", "address1": "123 Main St", "city": "Denver", "zip": "80202", "stateID": 1, "state": { "id": 1, "name": "Colorado", "abbreviation": "CO" } }, "job": { "id": 12345 } } } }
Error Responses: Refer to the format in createJobSpecification.
getMailingsByJobID
Query mailings for a specific job or filter by various criteria. Supports pagination using Relay-style connection pattern.
Operation Name: getMailingsByJobID
GraphQL Query:
graphql
query getMailingsByJobID($jobID: ID!, $first: Int, $after: String) {
getMailingsByJobID(
where: { jobID: $jobID }
first: $first
after: $after
) {
edges {
node {
id
jobID
status
mailingType
serviceType
trigger
trackingNumber
createdAt
updatedAt
postedAt
serviceOutcomeTriggers {
id
isSuccessful
serviceType
}
mailingAddress {
id
recipientName
address1
address2
city
zip
stateID
state {
id
name
abbreviation
}
}
job {
id
}
}
cursor
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
totalCount
}
}
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
where.jobID |
ID |
Filter by job ID. |
where.status |
MailingStatus |
Filter by status: AWAITING_TRIGGER, REQUESTING, POSTED, COMPLETE. |
where.mailingType |
MailingMailingType |
Filter by mailing type: AUTOMATED, SERVER, SCM_VENDOR. |
where.serviceType |
MailingServiceType |
Filter by service type: FIRST_CLASS, CERTIFIED. |
where.trigger |
MailingTrigger |
Filter by trigger: CLOSEOUT_ANY, CLOSEOUT_SUCCESS, CLOSEOUT_FAILURE, SERVICE_OUTCOME. |
first |
Int |
Number of results to return (pagination). |
after |
String |
Cursor for pagination (use endCursor from previous page). |
Example request body:
json { "operationName": "getMailingsByJobID", "query": "query getMailingsByJobID($jobID: ID!, $first: Int, $after: String) { getMailingsByJobID(where: { jobID: $jobID } first: $first after: $after) { edges { node { id jobID status mailingType serviceType trigger trackingNumber serviceOutcomeTriggers { id isSuccessful serviceType } mailingAddress { recipientName address1 city zip state { name abbreviation } } } cursor } pageInfo { hasNextPage endCursor } totalCount } }", "variables": { "jobID": "12345", "first": 10, "after": null } }Example response (200 OK):
json { "data": { "getMailingsByJobID": { "edges": [ { "node": { "id": 743, "jobID": 12345, "status": "AWAITING_TRIGGER", "mailingType": "AUTOMATED", "serviceType": "FIRST_CLASS", "trigger": "SERVICE_OUTCOME", "trackingNumber": null, "serviceOutcomeTriggers": [ { "id": 1, "isSuccessful": true, "serviceType": "PERSONAL" }, { "id": 2, "isSuccessful": false, "serviceType": null } ], "mailingAddress": null }, "cursor": "YXJyYXljb25uZWN0aW9uOjA=" }, { "node": { "id": 727, "jobID": 12345, "status": "AWAITING_TRIGGER", "mailingType": "SERVER", "serviceType": "CERTIFIED", "trigger": "CLOSEOUT_FAILURE", "trackingNumber": null, "mailingAddress": { "recipientName": "Jane Smith", "address1": "456 Custom Street", "city": "Custom City", "zip": "10001", "state": { "name": "New York", "abbreviation": "NY" } } }, "cursor": "YXJyYXljb25uZWN0aW9uOjE=" } ], "pageInfo": { "hasNextPage": false, "endCursor": "YXJyYXljb25uZWN0aW9uOjE=" }, "totalCount": 2 } } }
Error Responses: Refer to the format in createJobSpecification.
deleteMailing
Delete a mailing from a job.
Operation Name: deleteMailing
GraphQL Mutation:
graphql
mutation DeleteMailing($mailingID: Int!) {
deleteMailing(id: $mailingID)
}
Variables:
* $mailingID: Int! - Required. The mailing ID to delete.
Example request body:
json { "operationName": "DeleteMailing", "query": "mutation DeleteMailing($mailingID: Int!) { deleteMailing(id: $mailingID) }", "variables": { "mailingID": 743 } }Example response (200 OK):
json { "data": { "deleteMailing": true } }
Error Responses: Refer to the format in createJobSpecification.