Skip to content
Levr API Documentation
Download OpenAPI specOpenAPI

Hand off to an AI agent

Copy instructions to your AI agent

Copy this guide into your AI agent. It links to the current REST API and MCP documentation.

You are helping someone integrate their system with Levr. Use Levr's published documentation and machine-readable contracts as the source of truth. Do not invent endpoints, fields, or MCP tools.

  1. Start with the Levr API documentation to choose between a server-to-server REST integration and a user-authorized MCP connection.
  2. For REST, read the Markdown REST API guide, choose the user’s task, then fetch only the relevant resource guide and operation Markdown. Resource indexes include task guidance. For funding recommendations, start with the Matchmaking guide. Use the OpenAPI specification for exact paths, authentication, parameters, and envelope schemas.
  3. For REST client intake, Deal applications, or project Criteria, fetch that resource's contract_url. Its Application Contract is the authority for the current questions, stable keys, repeatable groups, file-transfer steps, accepted answer shapes, conditional visibility, supported operation URLs, and integration instructions. Repeatable fields require the returned item_id. File bytes use the expiring upload_url and multipart field named file; they never belong in JSON. Do not substitute a static example or the latest application definition.
  4. For an AI client acting with a signed-in user's access, read the MCP connection instructions in Markdown first, then the Model Context Protocol guide if needed. Let the connected MCP server expose its current tools and input contracts; do not infer tools from the REST API. Read the relevant MCP resource guide and follow the discovered tool’s revision, file-transfer, and confirmation requirements.
  5. Use URLs from the record handoff when supplied; otherwise use this documentation environment. Keep API keys and file-transfer credentials out of browser code, logs, prompts, and source control.
  6. Before implementing a write, verify authentication, required inputs, idempotency, error responses, and retry guidance in the current contract. If an operation is not documented, do not assume it exists.

Early access

Request an integration

Tell us what your integration needs to do. Add an email if you want a reply.

REST API reference

Businesses

Add businesses through a Lead source, complete their intake applications, and follow their progress.

Read as Markdown

Bring a business into your Portal

A business is the company seeking funding. Client intake optionally collects information and documents; funding work can start before intake exists.

  1. List API Lead sources and choose the one that should receive the business. If needed, create a Lead source by name.
  2. Check its readiness. If setup is missing, ask a Portal administrator to resolve the reported setup issues.
  3. Fetch the returned business_contract_url. Its request_schema defines the business and initial application information this Lead source accepts.
  4. Create the business through that Lead source. Store the returned business and client intake application IDs.
  5. Open the client intake application guide to complete or submit the intake.

Use the returned schema rather than assuming fields such as owners or legal_name exist. Contacts linked to a business and owners entered in an application serve different purposes.

To clean up an unused API Lead source, send DELETE /v1/source-channels/{source_channel_id}/ with an Idempotency-Key header and no request body. This requires Businesses write access. A source with attributed businesses or Deals returns 409; keep it for those existing records. This operation does not move attribution. Removal revokes any legacy credential owned by the source; the Portal API key remains active. Retry with the same key to replay the successful removal response.

Manage contacts

Business contacts are a complete replacement set. Use people available in the same Portal. A primary_person_id must also appear in person_ids; null clears the primary designation. An empty set clears the contacts. Read the current set and its ETag before replacing it, then read back the result.

Collect information after creating a business

For an existing source-owned business with no intake, call POST /v1/businesses/{business_id}/client-intake/ with no request body and a caller-generated Idempotency-Key. Requires businesses: write. The effective published source intake template is used even when automatic intake is off. The response contains business_id, application_id, created, and frontend_link: 201 for creation, 200 when returning existing intake. An exact retry replays the original response. This preserves business metadata and projects and sends no invitation.

In MCP, use businesses.create_client_intake with provider_slug, business_id, and a UUID idempotency_key. Review the resulting intake, then share it separately. The API share endpoint requires client_intake_applications: write; internal AI sharing uses the existing approval flow. An intake share grants application access, not workspace membership. Existing project matching answers are not automatically synchronized when intake is submitted; use the intake evidence in that project's autofill workflow.

Available operations

Intake applications

View overview →
GETGet a client intake application/client-intake-applications/{application_id}/GETRetrieve a client intake application contract/client-intake-applications/{application_id}/contract/GETList client intake application answers/client-intake-applications/{application_id}/answers/PATCHUpdate client intake application answers/client-intake-applications/{application_id}/answers/GETList repeatable answer items/client-intake-applications/{application_id}/answers/repeatable-items/POSTCreate a repeatable answer item/client-intake-applications/{application_id}/answers/repeatable-items/PATCHUpdate a repeatable answer item/client-intake-applications/{application_id}/answers/repeatable-items/DELETEDelete a repeatable answer item/client-intake-applications/{application_id}/answers/repeatable-items/GETList answer files/client-intake-applications/{application_id}/answers/files/POSTRequest an answer-file upload/client-intake-applications/{application_id}/answers/files/POSTUpload an answer file/client-intake-applications/{application_id}/answers/files/{upload_id}/DELETEDelete an answer file/client-intake-applications/{application_id}/answers/files/GETRead prepared client intake autofill evidence/client-intake-applications/{application_id}/autofill-preparation/POSTStart client intake autofill/client-intake-applications/{application_id}/autofill-runs/PATCHUpdate client intake autofill preparation/client-intake-applications/{application_id}/autofill-preparation/POSTUpload one client intake autofill evidence file/client-intake-applications/{application_id}/autofill-preparation/files/GETPoll client intake autofill/client-intake-application-autofill-runs/{run_id}/GETList client intake autofill suggestions/client-intake-application-autofill-runs/{run_id}/suggestions/POSTAccept autofill suggestion/client-intake-application-autofill-runs/{run_id}/suggestions/{suggestion_id}/accept/POSTRetry unresolved client intake autofill work/client-intake-application-autofill-runs/{run_id}/retry/POSTShare a client intake application with recipients by email/client-intake-applications/{application_id}/share/GETCheck client intake application submission readiness/client-intake-applications/{application_id}/submission-readiness/POSTSubmit a client intake application/client-intake-applications/{application_id}/submit/