---
title: LeadPerfection API Integration on Truto
slug: leadperfection
category: CRM
canonical: "https://truto.one/integrations/detail/leadperfection/"
---

# LeadPerfection API Integration on Truto



**Category:** CRM  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 59 tools for LeadPerfection that AI agents can call directly.

- **create_a_lead_perfection_token** — Create an authentication token required by all other LeadPerfection REST API requests. The token expires 24 hours after generation and must be refreshed periodically.
- **list_all_lead_perfection_leads_get_inbound_lead_infos** — Retrieve inbound lead history from LeadPerfection within a date range, optionally filtered by promoter or log number. Returns: data (array of inbound lead status records for the Source codes you have access to). Dates must be in MM/DD/YYYY format.
- **list_all_lead_perfection_leads_get_leads_forward_looks** — Retrieve Forward Look data in LeadPerfection for sales rep appointment availability over the upcoming 14 days. Returns: SDate, TMS_Descr1–TMS_Descr6 (time slot descriptions), T1–T6 (appointments needed per slot with overbooking), X1–X6 (appointments needed without overbooking). Specify either branchid (Market) or productid and zip.
- **list_all_lead_perfection_leads_get_leads_source_sub_promoters** — Retrieve lists of valid values from LeadPerfection lookup tables (SubSources, Promoters, Branches, or Products) for use during lead capture. Returns records with id and table-specific attributes. The type parameter selects the source table and defaults to S (SubSources).
- **create_a_lead_perfection_leads_set_appointment** — Set a new appointment on an existing data lead in LeadPerfection. The lead must be in a set-able status, cannot be out of area, and must not have an existing future appointment. Returns an empty response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_leads_set_appointment_sales_rep** — Set a new appointment on an existing data lead in LeadPerfection with an optional sales rep and product assignment. The lead must be in a set-able status, cannot be out of area, and must not have an existing future appointment. Returns an empty response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_add_job_image** — Add an image to a job in LeadPerfection by uploading the file's raw byte array along with the target job id and filename. The filename must exactly match the original file's name and extension or the file may be flagged as improperly saved. Optional: docdescr, dtyid. Use /api/SalesApi/GetSalesApptDispProd with type=y to enumerate valid dtyid values. Returns…. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_add_note** — Add a note to a Prospect, Issued Lead, or Job record in LeadPerfection. The note appears on the Notes tab for the specified record. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_add_sales_job_commission** — Add a commission record on a job in LeadPerfection. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_add_sales_job_payment** — Add a payment record on a job in LeadPerfection. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_add_sales_job_cost** — Add a job cost record to a job in LeadPerfection, including quantity, cost, price, commission and invoice details. Returns an empty response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_add_salesman_image** — Add an image to a sales appointment in LeadPerfection. If the appointment disposition is SALE the image attaches to the associated job record, otherwise it attaches to the prospect. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **list_all_lead_perfection_sales_api_get_prospect_job_ids** — Search for jobs in LeadPerfection by prospect id or job number and receive back a list of matching JobIDs. Returns: JobID. At least one of prospectid or contractid should be supplied.
- **list_all_lead_perfection_sales_api_get_prospect_job_id_2_s** — Search for jobs in LeadPerfection by prospect id, job number (contractid), or issued lead id. Returns a list of matching JobIDs. At least one of prospectid, contractid, or issued_appt_id should be provided.
- **list_all_lead_perfection_sales_api_get_sales_appt_disp_prods** — Enumerate static lookup tables in LeadPerfection by specifying a type code. Returns records with id and type-specific attributes whose field structure varies by the requested data type (e.g., dispositions, products, sales reps, call results).
- **list_all_lead_perfection_sales_api_get_sales_appt_cals** — View the appointment calendar for the logged-in sales rep in LeadPerfection. For the current month, lists each day that the rep has at least one appointment scheduled, along with the total number of appointments for each day. Returns the appointment calendar with day-level appointment counts via attributes. Limited to the current month only.
- **list_all_lead_perfection_sales_api_get_sales_appt_day_lists** — List all appointments for a specified day for the logged-in sales rep in LeadPerfection. Returns: id.
- **get_single_lead_perfection_sales_api_get_sales_appt_detail_by_id** — Get detailed information about a single sales appointment in LeadPerfection by specifying a date and issued lead id. Returns an empty 200 response on success.
- **list_all_sales_api_get_sales_appt_detail_date_ranges** — Retrieve a list of issued sales appointments within a specified date range from LeadPerfection, spanning all sales reps rather than just the logged-in user. The upstream API does not document the response body fields.
- **list_all_lead_perfection_sales_api_get_sales_appt_lists** — List all issued sales appointments within a specified date range in LeadPerfection. Returns a list of appointments for the given date range; the upstream OpenAPI spec does not document the response schema.
- **get_single_lead_perfection_sales_api_get_sales_job_detail_by_id** — Get sales job detail information in LeadPerfection for a given JobID. Returns job detail info about the job; the upstream spec does not enumerate individual response fields.
- **list_all_lead_perfection_sales_api_get_sales_opens** — List recent sales for the logged-in sales rep in LeadPerfection. Returns: status for each sale. No request parameters are required.
- **create_a_lead_perfection_sales_api_update_sales_appt_detail_3** — Update the results of an issued sales appointment in LeadPerfection (version 3, adding sale type and vendor parameters over version 2). Returns an empty 200 response on success. Follow-up date/time fields require the IncludeFollowUpinPresentation config key set to Y. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_update_sales_job_cost** — Update a job cost record for a job in LeadPerfection. Returns an empty 200 response on success. invoiceDate must be in YYYY-MM-DD format. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_sales_api_update_sales_job_detail** — Update the paperwork status, commission type, total commission amount, and user fields (job_user_11, job_user_12) on a LeadPerfection job record. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **list_all_lead_perfection_sales_api_get_sales_schedules** — Get the sales schedule in LeadPerfection broken down by day and then by rep, showing each rep's available time slots and whether an appointment is already scheduled. Returns: day, rep (including slots and appointment-scheduled status for each slot). If no date range is supplied, defaults to the current month; SlrID 0 returns all reps and BrnID 'ALL' returns all markets.
- **list_all_lead_perfection_sales_api_get_employees** — Get a list of employees in LeadPerfection. Returns employee records with EmpID, FirstName, LastName, Active, and Email. Pagination is handled via StartIndex and PageSize parameters.
- **list_all_lead_perfection_downloads_get_leads_by_cqdids** — Retrieve a list of leads to dial from a specified call queue in LeadPerfection. Returns a list of leads in the given queue that are available to be dialed; the response shape is not documented in the upstream API specification. Pulls are restricted to a max of 1000 records at a time.
- **list_all_lead_perfection_downloads_get_leads_by_cqdid_longs** — Retrieve a list of leads available to be dialed from a specific call queue in LeadPerfection, optionally filtered by a call filter. The upstream API does not document the response field structure. Pulls are restricted to a max of 1000 records at a time.
- **create_a_lead_perfection_downloads_process_call_history_xml** — Import call history records into LeadPerfection by submitting an XML payload. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_downloads_process_notes_xml** — Import note records into LeadPerfection by submitting a call history XML payload. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_customers_add_call_history** — Add call history results back into LeadPerfection. Returns an empty 200 response on success. Valid values for these fields can be enumerated via the GetSalesApptDispProd API. The upstream spec specifies an empty response schema.
- **list_all_lead_perfection_customers_get_customers** — Search customers in LeadPerfection by last name or prospect ID. Returns: name. At least one of custnumber or lastname should be provided. This endpoint is deprecated.
- **list_all_lead_perfection_customers_get_customers_2_s** — Search for prospects in LeadPerfection by last name, phone, job number, or prospect ID. Returns: custnumber, name, phone. This endpoint is deprecated.
- **list_all_lead_perfection_customers_get_customers_3_s** — Search prospects in LeadPerfection by last name, phone, job number, prospect ID, or email. Returns matching records with custnumber, name, and phone for any found matches. All search criteria are optional.
- **list_all_lead_perfection_customers_get_customers_by_prospect_ids** — Search for prospects in LeadPerfection by Prospect ID, job number, first name, last name, or phone. Returns matching prospects with prospectid, name, address, and phone.
- **list_all_lead_perfection_customers_get_leads** — Retrieve full prospect, lead, appointment, and job data from LeadPerfection by prospect id, lead id, issued lead id, or date range. Returns a full set of data for each matching prospect, potentially including hundreds of data elements such as alternate contacts, lead history, appointment history, job history, milestones, payments, and notes.
- **list_all_lead_perfection_customers_get_job_status_changes** — Search for jobs with status changes in LeadPerfection within a specified date range, optionally filtering by customer, job, or job status ID. Returns job status change records for matching jobs; the specific response fields are not documented in the API specification.
- **list_all_lead_perfection_customers_get_lead_infos** — Search for prospects in LeadPerfection by lastname, phone, jobnumber, or prospectid. Returns lead information including EntryDate, PromoterName, Source, SubSourceDescription, and Disposition. Provide at least one search criterion.
- **list_all_lead_perfection_customers_get_milestones** — Retrieve prospect, lead, appointment, and job milestone data from LeadPerfection by specifying a prospect ID, lead ID, issued lead ID, or date range. Returns the data array of full prospect records including milestones, lead history, appointment history, job history, and notes.
- **list_all_lead_perfection_customers_get_prospect_datas** — Retrieve full prospect, lead, appointment, and job data from LeadPerfection by prospect id, lead id, issued lead id, or date range. Returns a data array of prospect records, each potentially including hundreds of elements such as alternate contacts, lead history, appointment history, job history, milestones, payments, and notes. Specify at least one selector: cst_id, lds_id, ils_id, or a date…
- **list_all_lead_perfection_customers_get_sales_appointments** — Get sales appointments with full prospect, lead, appointment, and job data from LeadPerfection by specifying a date range and optional prospect, lead, or issued lead IDs. Returns the data array containing full prospect records including alternate contacts, lead history, appointment history, job history, milestones, payments, and notes.
- **list_all_lead_perfection_customers_get_service_appointments** — Retrieve full prospect, lead, appointment, and job data from LeadPerfection by prospect id, lead id, issued lead id, or date range. Returns the prospect data object with id and content-specific attributes including alternate contacts, lead history, appointment history, job history, milestones, payments, service, and notes.
- **create_a_lead_perfection_customers_update_customer** — Update basic prospect information in LeadPerfection — first name, last name, and phone for a given prospect ID. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_customers_update_prospect_info** — Update basic prospect information in LeadPerfection by prospect ID. Supports updating first name, last name, address, address2, city, state, zip, phone, and email. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_customers_update_dnc_status** — Update the internal DNC (Do Not Call) status on a prospect in LeadPerfection. The newDncStatus parameter accepts C (Do Not Call), M (Do Not Mail), T (Do Not Text), E (Do Not Email), or P (Do Not Promote). Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **create_a_lead_perfection_installer_add_installer_job_note** — Add notes to a job in LeadPerfection matching a given jobid number. Returns an empty 200 response on success. The upstream spec specifies an empty response schema.
- **list_all_lead_perfection_installer_get_installer_appt_cals** — Get the installer appointment calendar for the current month in LeadPerfection, listing each day the installer has at least one appointment scheduled along with the total appointment count for that day. Returns: apptdate. No request parameters are required.
- **list_all_lead_perfection_installer_get_installer_appt_day_lists** — List installer appointments for a given day in LeadPerfection. For the specified date, returns all appointments for the logged-in sales rep; the LeadPerfection API does not document the specific response fields.
- **get_installer_get_installer_appt_detail_by_id** — Get detailed information about a single installer appointment in LeadPerfection by specifying an appointment date and job ID. Returns a 200 response; the upstream spec does not document specific response fields.
- **get_installer_get_installer_job_detail_by_id** — Get detailed information about a single installer job appointment in LeadPerfection by specifying an appointment date and job ID. The upstream API does not document the response schema for this endpoint.
- **list_all_lead_perfection_installer_get_installer_job_notes** — Get notes associated with a job in LeadPerfection. For a given job ID and appointment date, returns the notes that appear on the Notes tab for that job. Returns: notes.
- **list_all_lead_perfection_installer_get_installs_opens** — Get a list of open installs assigned to the logged-in user in LeadPerfection. Returns: id. No required parameters.
- **list_all_lead_perfection_installer_get_job_images** — Get documents associated with a job in LeadPerfection. Returns a list of documents that appear on the DOCS tab for the specified job, customer, or issued lead record.
- **list_all_lead_perfection_job_get_job_details** — Pull basic information about a job in LeadPerfection by providing at least one search criterion. Returns the job detail data object. At least one of JobID, JobNumber, IssuedAppointmentID, StartContractDate, or EndContractDate must be provided.
- **create_a_lead_perfection_file_download_web_file** — Download a web file from a URL in LeadPerfection. If the account has an associated Amazon S3 account, uploads the file to S3 and returns the final storage path. Returns: path.
- **create_a_lead_perfection_lead** — Add a lead to the inbound lead queue in LeadPerfection, the preferred API method with access to all lead fields including contact info, phones, product interest, and appointment details. Returns the created lead record with content-type-specific fields (id, attributes).
- **list_all_lead_perfection_leads** — Retrieve limited information on all leads added to the inbound leads queue during the current day in LeadPerfection. Returns inbound lead records with content-type-specific fields (id, attributes). Deprecated — use GetInboundLeadInfo instead.
- **list_all_lead_perfection_leads_get_lead_datas** — Retrieve a list of leads from LeadPerfection by date range or Issued Lead ID. Returns: data. This endpoint is deprecated; use Customers/GetLead for the current version.

## How it works

1. **Link your customer's LeadPerfection account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach LeadPerfection.** The Proxy API is a 1-to-1 mapping of the LeadPerfection API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Embed LeadPerfection in AI voice and SMS platforms** — Conversational AI vendors serving home improvement contractors need to create leads, book appointments against live rep availability, and log transcripts back to the CRM. Truto lets them ship this integration without learning LeadPerfection's forward-look capacity model or XML-based call history endpoints.
- **Power in-home CPQ and contracting apps** — Quoting and estimation tools used by field reps need to pull daily schedules, push signed contracts as image blobs, and write back finalized job costs and commissions. Offering a LeadPerfection integration is table stakes for selling into roofing, windows, and HVAC contractors.
- **Build marketing attribution and BI dashboards** — Analytics platforms that report on marketing ROI for home services companies need continuous access to lead sources, job milestones, and status changes. Truto handles the polling, pagination, and namespace fragmentation across LeadPerfection's Lead, Sales, and Customer APIs.
- **Ship field service apps for installer crews** — Photo management and job tracking apps built for installers need a separate view of the installer calendar, job details, and note history — distinct from sales rep data. Truto exposes the installer namespace so SaaS vendors can build persona-specific mobile experiences.
- **Enable outbound dialer and call center tooling** — Dialer and contact center platforms need to pull batches of leads from LeadPerfection's dialing queues, sync call history, and update DNC compliance status. Truto abstracts the CQDID batching and XML payload formatting required to make this reliable at scale.

## What you can build

- **Automated appointment booking with capacity checks** — Query a sales rep's 14-day availability via forward-look data and book appointments directly onto the correct rep's calendar based on zip code routing.
- **Lead intake with source attribution** — Create new leads in LeadPerfection with promoter and sub-promoter tagging so downstream marketing analytics can attribute revenue back to the originating campaign.
- **Two-way call history and DNC sync** — Pull leads from dialing queues in batches, push call outcomes back via the call history endpoint, and flag opted-out prospects with a DNC status update.
- **Contract and photo upload from the field** — Attach signed contracts, site photos, and salesman images to jobs directly from a tablet or mobile app, tied to the correct prospect and job ID.
- **Sales-to-job conversion workflow** — Dispose appointments as sold, push finalized job costs and commission splits, and update job detail records to move prospects through the Prospect → Appointment → Job funnel.
- **Milestone and status change polling for BI** — Continuously sync job status changes and milestone events to close the loop between marketing spend and installed revenue in a reporting dashboard.

## FAQs

### How does authentication work with LeadPerfection?

LeadPerfection uses token-based authentication generated from customer credentials. Truto handles the token lifecycle for each of your end users via the create token endpoint, so you don't need to manage credential storage or refresh logic yourself.

### Can we separate sales rep calendars from installer calendars?

Yes. LeadPerfection exposes distinct endpoints for sales appointment calendars and installer appointment calendars, and both are available through Truto. This lets you build persona-specific views without mixing the two datasets.

### How do we handle high-volume lead syncs for dialer use cases?

LeadPerfection supports batched lead retrieval from dialing queues (CQDIDs) of up to 1,000 records per call. Truto exposes these list endpoints with standard pagination so you can build reliable, incremental sync jobs.

### How do we write call activity back to LeadPerfection?

Call history is written via an XML payload endpoint, and standalone notes can be added via a separate endpoint. Truto normalizes the request format so you send structured JSON and we handle the XML transformation.

### Can we upload contract PDFs and photos to a job?

Yes. LeadPerfection accepts image and file uploads tied to a job ID via the add job image and add salesman image endpoints. Files are transmitted as byte payloads, which Truto passes through directly.

### How fresh is the data — is there webhook support?

LeadPerfection's public API is polling-based rather than webhook-driven. For status changes, milestones, and new leads, you'll poll the relevant list endpoints on an interval that matches your product's freshness requirements.

## Related reading

- [Connect LeadPerfection to Claude: Track Sales Jobs and Prospects](https://truto.one/blog/connect-leadperfection-to-claude-track-sales-jobs-and-prospects/) — Learn how to connect LeadPerfection to Claude using a Truto MCP Server. Automate sales routing, track installer jobs, and sync CRM prospects autonomously.
- [Connect LeadPerfection to ChatGPT: Manage Appointments and Leads](https://truto.one/blog/connect-leadperfection-to-chatgpt-manage-appointments-and-leads/) — Learn how to connect LeadPerfection to ChatGPT using a managed MCP server. This guide covers bypassing XML payload traps, setting appointments, and API quirks.
- [Connect LeadPerfection to AI Agents: Sync Leads and Installer Jobs](https://truto.one/blog/connect-leadperfection-to-ai-agents-sync-leads-and-installer-jobs/) — Learn how to connect LeadPerfection to AI Agents using Truto's tools endpoint to sync leads, manage sales appointments, and automate installer workflows.
