# Enerflo Documentation
> Enerflo's public API and Webhook documentation.
Append .md to any documentation page URL to get its markdown version.
## Guides
- [Getting Started with the Enerflo API](https://docs.enerflo.io/docs/welcome.md): Welcome to the Enerflo Developer Hub. This page will orient you on how Enerflo's APIs work, which one to use for your integration, and where to go next.
- [REST API (Enerflo 1.0)](https://docs.enerflo.io/docs/rest-api.md)
- [Authentication](https://docs.enerflo.io/docs/authentication.md): Learn how to authenticate your requests to the Enerflo REST API.
- [API Keys: Global Access Key](https://docs.enerflo.io/docs/api-key-global-access.md): API Keys can be retrieved from your Enerflo Company Settings page:
- [API Keys: Limited-Use Keys](https://docs.enerflo.io/docs/api-key-limited-use.md): API Keys can be retrieved from your Enerflo Company Settings page:
- [Rate Limits](https://docs.enerflo.io/docs/api-rate-limits.md)
- [GraphQL API (Enerflo 2.0)](https://docs.enerflo.io/docs/graphql-api.md)
- [Generating a GraphQL API Key](https://docs.enerflo.io/docs/graphql-api-keys.md): All calls to the Enerflo GraphQL api will need to be made using a valid `api key`. In this section we cover how to provision new keys in the Enerflo UI.
- [Authenticating my GraphQL API Request](https://docs.enerflo.io/docs/authenticating-my-graphql-api-request.md)
- [GraphQL Clients](https://docs.enerflo.io/docs/graphql-clients.md)
- [GraphQL Playground](https://docs.enerflo.io/docs/graphql-playground.md)
- [GraphQL using Postman](https://docs.enerflo.io/docs/graphql-postman.md)
- [GraphQL using Hasura.io](https://docs.enerflo.io/docs/graphql-using-hasura.md)
- [Swipe File of Useful GraphQL Queries and Mutations](https://docs.enerflo.io/docs/swipe-file-of-useful-graphql-queries-and-mutations.md)
- [Retrieve Lending Products for my Company](https://docs.enerflo.io/docs/retrieve-lending-products-for-my-company.md)
- [Update Mutation: Change value of a field in the Deal State Object](https://docs.enerflo.io/docs/update-deal-state-fields.md)
- [Paginate through a List](https://docs.enerflo.io/docs/paginate-through-a-list.md)
- [Access the Utility Bill for a known Deal ID](https://docs.enerflo.io/docs/access-the-utility-bill-for-a-known-deal-id.md)
- [Overview](https://docs.enerflo.io/docs/webhooks.md)
- [Enerflo 1.0 Events](https://docs.enerflo.io/docs/enerflo-v1-events.md): Webhook subscriptions can be created from your Company Settings
- [Enerflo 1.0 Event Definitions](https://docs.enerflo.io/docs/enerflo-v1-event-definitions.md)
- [Enerflo 2.0 Events](https://docs.enerflo.io/docs/enerflo-v2-events.md): Webhook subscriptions can be created from your v2 Settings: https://{partner}.enerflo.io/settings/webhooks
- [Enerflo 2.0 Event Definitions](https://docs.enerflo.io/docs/enerflo-v2-event-definitions.md)
- [Enerflo 2.0 Event Filtering](https://docs.enerflo.io/docs/enerflo-20-event-filtering.md): Webhook filtering allows you to control exactly when a webhook fires by setting conditional rules on the event payload. Instead of receiving every webhook event, you can configure filters to only send webhooks when specific conditions are met.
- [Will adopting Enerflo v2 impact any of my existing integrations?](https://docs.enerflo.io/docs/v2-adoption-faqs.md): This reference guide is for Enerflo Partners who are transitioning to Enerflo v2. The following questions may help you identify supporting actions you may wish to take.
- [Replacing v1 `new_install` with v2 triggers](https://docs.enerflo.io/docs/v2-events-in-place-of-v1-new-install.md): See also: https://docs.enerflo.io/reference/find-v1-install-using-v2-dealid
- [When Does the V1 Install Tracker Get Created?](https://docs.enerflo.io/docs/when-does-my-enerflo-v2-deal-push-to-the-enerflo-v1-install-tracker.md)
- [How to Integrate Enerflo with my CRM](https://docs.enerflo.io/docs/how-to-integration-enerflo-with-my-crm.md)
- [Enerflo API Docs Feedback Form](https://docs.enerflo.io/docs/docs-feedback.md)
## API Reference
- [Legacy Documentation](https://docs.enerflo.io/reference/legacy-documentation.md)
- [Add a Customer/Lead](https://docs.enerflo.io/reference/add-a-lead.md): The `/lead/add` endpoint allows Enerflo Partners to connect external lead sources and push leads automatically into Enerflo.
Note: Empty fields are set to null when created via API, but empty strings ("") when created through the UI.
- [Get All Appointments for a Customer](https://docs.enerflo.io/reference/get-all-appointments-for-a-customer.md)
- [Get Appointment Details](https://docs.enerflo.io/reference/get-appointment-details.md)
- [Create an Appointment for a Customer](https://docs.enerflo.io/reference/create-an-appointment-for-a-customer.md)
- [Update an Appointment](https://docs.enerflo.io/reference/update-an-appointment.md)
- [Get Details About a Change Order](https://docs.enerflo.io/reference/get-details-about-a-change-order.md)
- [Get Most Recent Completed Change Order for an Install](https://docs.enerflo.io/reference/v3-installs-get-recent-completed-change-order.md): This will return the most recent completed change order associated with the install (if applicable).
- [Get Details About a Company](https://docs.enerflo.io/reference/get-details-about-a-company.md): Access to company details is limited to organizations with which you have an established relationship.
- [Get Zipcodes from Markets](https://docs.enerflo.io/reference/get-zipcodes-from-markets-grouped-by-epc-and-state.md): Retrieve a list of all zip codes associated with markets that your company services. Zip codes are grouped by Installer, then by state. Response will mirror the data found in the UI here: https://enerflo.io/markets
- [Retrieve a Customer (using the Enerflo Customer ID)](https://docs.enerflo.io/reference/v3customersid.md)
- [Retrieve a Customer (using the PK value of a remote system)](https://docs.enerflo.io/reference/v1integrationsmapsearch.md)
- [Get all Customers](https://docs.enerflo.io/reference/get-all-customers.md)
- [Update the Details of a Customer](https://docs.enerflo.io/reference/update-the-details-of-a-customer.md)
- [Get all Notes associated with a Customer](https://docs.enerflo.io/reference/v3-customers-id-notes.md)
- [Create a Note for a Customer](https://docs.enerflo.io/reference/create-a-note-for-a-customer.md)
- [Delete a Customer Note](https://docs.enerflo.io/reference/delete-a-customer-note.md): If there is no matching noteId, it will return a 200
- [Get Market info associated to a Customer's location](https://docs.enerflo.io/reference/v3-customer-id-market.md)
- [Deals & Surveys](https://docs.enerflo.io/reference/deals-and-surveys.md)
- [Get Deal Info (v1)](https://docs.enerflo.io/reference/get-deal-info-v1.md)
- [Get Deal Info (v3)](https://docs.enerflo.io/reference/get-deal-info-v3.md)
- [Get All Deals](https://docs.enerflo.io/reference/get-all-deals-1.md)
- [Update a Deal](https://docs.enerflo.io/reference/v1surveysave.md)
- [Attach a File to a Deal](https://docs.enerflo.io/reference/v3-survey-ssurvey_id-add-files-from-url.md): **NOTICE: This Endpoint should not be used for Enerflo V2 deals.
- [Get Details About All Panels](https://docs.enerflo.io/reference/get-details-about-all-panels.md): This retrieves all module data from https://enerflo.io/epc/equipment/panels. You can only access details about organizations with which you have an established relationship.
- [Get Details About All Inverters](https://docs.enerflo.io/reference/get-details-about-all-inverters.md): This retrieves all inverter data from https://enerflo.io/epc/equipment/inverters. You can only access details about organizations with which you have an established relationship.
- [Create a Lead with an Install](https://docs.enerflo.io/reference/create-a-lead-with-an-install.md): Generate a new customer record with a deal and install without agreements. You can update the records using the same integration IDs. When install fields are updated, then a completed Change Order will be automatically generated. Milestone communications are not sent out and only essential webhooks are triggered.
- [Search for an Install Record using a Customer or Survey ID](https://docs.enerflo.io/reference/v1-search-find-install.md): This endpoint receives one of four search criteria from the user. The user should supply just one search field at a time.
- [Search for an Install record using a Deal ID from Enerflo 2.0](https://docs.enerflo.io/reference/find-v1-install-using-v2-dealid.md)
- [Get Install Info (v3)](https://docs.enerflo.io/reference/v3installsid.md): Retrieves data about an install project, including company details, customer info, milestones, and uploaded files. To find the utility bill, check the files array and look for an entry where the type field starts with V2_utilityBill.
- [Get a list of Installs](https://docs.enerflo.io/reference/get-a-list-of-installs.md)
- [Get all Notes for an Install](https://docs.enerflo.io/reference/v3-installs-notes.md)
- [Create a note for a specific installation](https://docs.enerflo.io/reference/v3-installs-id-notes.md)
- [Update Install Project Milestones](https://docs.enerflo.io/reference/update-install-project-milestones.md): Begin, Update, or Complete milestones in the Enerflo Install Tracker.
- [Get Installer Meta Data](https://docs.enerflo.io/reference/get-install-meta-data.md)
- [Get all Install statuses](https://docs.enerflo.io/reference/get-all-install-statuses.md): Retrieves a list of all potential Install Project statuses that could describe any given install.
- [Update the Status and Details of an Install (v3)](https://docs.enerflo.io/reference/update-install-status-and-details.md)
- [Remove a Project Contact from an Install](https://docs.enerflo.io/reference/delete-a-contact-from-an-install.md): This action removes a Contact (name, title, and phone number) from both the `install tracker` and the `customer portal`.
- [Add a Contact to an Install](https://docs.enerflo.io/reference/add-a-contact-to-an-install.md): This appends Project Contacts, including their names, titles, and phone numbers, on both the installation tracker and the customer portal. Any contact added or removed from the installation tracker will be correspondingly added or removed from the customer portal as well.
- [Remove a Note from an Install](https://docs.enerflo.io/reference/remove-a-note-from-an-install.md)
- [Toggle the `completed` flag for an Install Note](https://docs.enerflo.io/reference/toggle-completed-flag-for-epc_install_notes.md)
- [Get All Install Reports](https://docs.enerflo.io/reference/get-all-install-reports.md): This retrieves a list of the meta data of all your saved/shared reports. Install reports are a collection of saved table filters utilized on the install tracker page: https://enerflo.io/installs/list
- [Get Details About an Install Report](https://docs.enerflo.io/reference/get-details-about-an-install-report.md): This retrieves the meta data of a given saved/shared report. Install reports are a collection of saved table filters utilized on the install tracker page: https://enerflo.io/installs/list
- [Delete an Install Report](https://docs.enerflo.io/reference/delete-an-install-report.md): This deletes a saved/shared report. Install reports are a collection of saved table filters utilized on the install tracker page: https://enerflo.io/installs/list
- [Get Details About all Loan Products](https://docs.enerflo.io/reference/get-details-about-all-loan-products.md): Retrieves all finance options from https://enerflo.io/solar/settings/lenders
- [Get Details About all Offices](https://docs.enerflo.io/reference/get-details-about-all-offices.md): Retrieves all details about office records from https://enerflo.io/company/offices
- [Get Details About an Office](https://docs.enerflo.io/reference/get-details-about-an-office.md): Retrieves specific details about an office record from https://enerflo.io/company/offices
- [Get Products](https://docs.enerflo.io/reference/get-products.md): Returns a list of products associated to my company, or with companies for whom I am an authorized org.
- [Get a list of Tasks for a Customer](https://docs.enerflo.io/reference/retrieve-a-list-of-tasks.md)
- [Get a list of Tasks for my Company (GET)](https://docs.enerflo.io/reference/get-v3-tasks-all.md)
- [Get a list of Tasks for my Company (POST)](https://docs.enerflo.io/reference/post-v3-tasks-all.md)
- [Create a Task (Notify Multiple Users)](https://docs.enerflo.io/reference/add-a-task-to-a-customer.md): Create a task that is associated to a customer. Assign the task to a user, with the option to notify other users when it is complete.
- [Update a task](https://docs.enerflo.io/reference/update-a-task.md): Modify a customer's task details like users, content and due date.
- [Get a list of Users](https://docs.enerflo.io/reference/get-all-users.md)
- [Get User Info (single User)](https://docs.enerflo.io/reference/get-user-info.md)
- [Add a User](https://docs.enerflo.io/reference/add-a-user.md)
- [Update a User](https://docs.enerflo.io/reference/update-a-user.md)
- [Get Details About all Utility Providers](https://docs.enerflo.io/reference/get-details-about-all-utilities-v1-only.md): Retrieve a list of all (v1) utility providers associated with your company. These are the providers that could potentially be associated with your v1 <>. State values will return in capital format (ex: "AL","AZ", etc). Response will include genability IDs and zip codes.
- [Lookup a V1 object using a V2 ID](https://docs.enerflo.io/reference/lookup-v1-object-using-v2-id.md)
- [Search Integration Maps](https://docs.enerflo.io/reference/search-integration-maps-.md): This endpoint returns a list of integration maps for a given Enerflo or external id.
- [Webhook Management](https://docs.enerflo.io/reference/webhook-management.md)
- [Create a new Webhook subscription](https://docs.enerflo.io/reference/create-a-new-webhook-subscription.md)
- [Update an existing Webhook subscription](https://docs.enerflo.io/reference/update-a-webhook-subscription.md): The only attribute that can be change on an existing webhook is the target URL. You cannot change {event_names} or {versions}.
- [Delete an existing Webhook subscription](https://docs.enerflo.io/reference/delete-an-existing-webhook-subscription.md)
- [Get all existing Webhook subscriptions](https://docs.enerflo.io/reference/get-all-existing-webhooks.md)
- [View logs of recent Webhook Events](https://docs.enerflo.io/reference/sample-historic-webhook-responses.md)
- [Direct Authentication](https://docs.enerflo.io/reference/direct-authentication.md)
- [Supply User Credentials and receive an `access_token`](https://docs.enerflo.io/reference/api-auth-login.md): Supply user credentials. If the user is valid, you'll receive an `access_token` which can be used to authenticate the user on Enerflo v1
- [Supply `access_token` to Authenticate](https://docs.enerflo.io/reference/api-auth-user.md)
- [Check if the Provided API Key is Valid](https://docs.enerflo.io/reference/check-if-the-provided-api-key-is-valid.md)
- [Delegated Authentication](https://docs.enerflo.io/reference/delegated-authentication.md): Enerflo's "Delegated Authentication" leverages OAuth & JWT methodologies to allow external applications to authenticate users in Enerflo without the user's express involvement.
- [Check Auth - Do I Need a JWT Token](https://docs.enerflo.io/reference/check-auth.md)
- [Request a JWT Authentication Token](https://docs.enerflo.io/reference/request-a-jwt-authentication-token.md)
- [Exchange JWT Token for Session (Header Method)](https://docs.enerflo.io/reference/exchange-jwt-token-for-session.md): This endpoint receives a JWT generated from `api/oauth/token`, and exchanges it for a valid user session on *.enerflo.io. This allows the user to access both Enerflo v1 & v2 resources.
- [Exchange JWT Token for Session (Param Method)](https://docs.enerflo.io/reference/exchange-jwt-token-for-session-param-method.md): This endpoint receives a JWT generated from `api/oauth/token`. The token is passed as a URL parameter and is exchanged for a valid user session on *.enerflo.io. This allows the user to access both Enerflo v1 & v2 resources.
- [CallPilot - Retrieve Welcome Call Details](https://docs.enerflo.io/reference/retrieve-welcome-call-details.md): Returns Welcome Call video, questions, and answers.
- [Schedule Audit](https://docs.enerflo.io/reference/schedule-audit.md): This is a multi-facted endpoint that can perform various actions depending on the input you provide:
1) edit customer data
2) create a Deal for an existing customer
3) begin the scheduling process to create an appointment for a customer.
Note: Empty fields are set to null when created via API, but empty strings ("") when created through the UI.
## Recipes
- [Access Deal Files as an Installer with Optional TTL](https://docs.enerflo.io/recipes/access-deal-files-as-an-installer-with-optional-ttl.md)
- [Access Finance Methods by Quote Type](https://docs.enerflo.io/recipes/access-finance-methods-by-quote-type.md)
- [Augment the Project Submission Event with the Utility Bill](https://docs.enerflo.io/recipes/augment-the-project-submission-event-with-the-utility-bill.md)
- [Create a Deal for an Existing Customer](https://docs.enerflo.io/recipes/create-a-deal-for-an-existing-customer.md)
- [Create a Lead and Import an Existing Aurora Design](https://docs.enerflo.io/recipes/create-a-lead-and-import-an-existing-aurora-design.md)
- [Create a Scanifly Design Request](https://docs.enerflo.io/recipes/create-a-scanifly-design-request.md)
- [Delete Project Contacts using Customer ID](https://docs.enerflo.io/recipes/delete-project-contacts-using-customer-id.md)
- [Enrich the `update_customer` v1 webhook with additional data](https://docs.enerflo.io/recipes/enrich-the-update_customer-v1-webhook-with-additional-data.md)
- [Get Signed Agreement for a Deal](https://docs.enerflo.io/recipes/get-signed-agreement-for-a-deal.md)
- [Inform a CRM when the Customer Portal is used to upload a Utility Bill](https://docs.enerflo.io/recipes/inform-a-crm-when-the-customer-portal-is-used-to-upload-a-utility-bill.md)
- [Retrieve and Filter New Customers from Enerflo](https://docs.enerflo.io/recipes/retrieve-and-filter-new-customers-from-enerflo.md)
- [Retrieve the v2 Company subdomain for a known v1 User](https://docs.enerflo.io/recipes/retrieve-the-v2-company-subdomain-for-a-known-v1-user.md)
- [Update the Sales Rep for a V2 Deal](https://docs.enerflo.io/recipes/update-the-sales-rep-for-a-v2-deal.md)