Enphase Energy Companies API

The Companies API from Enphase Energy — 4 operation(s) for companies.

Operations 5

GET /api/v4/companies/{company_id}/users Get all users with in a company
POST /api/v4/companies/{company_id}/users Create company user
PUT /api/v4/companies/{company_id}/users/{user_id} Update company user
GET /api/v4/companies/self/branches User's company and its branches
GET /api/v4/companies/self/authorized_subcontractors User's company and its authorized subcontractors.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/enphase-companies-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

enphase-companies-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Commissioning Companies API
  version: v4
servers:
- url: https://api.enphaseenergy.com
tags:
- name: Companies
paths:
  /api/v4/companies/{company_id}/users:
    get:
      summary: Get all users with in a company
      description: Returns the users in the given company.
      parameters:
      - name: company_id
        in: path
        description: Company ID
        required: true
        schema:
          type: integer
      tags:
      - Companies
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: Key is users
                additionalProperties:
                  type: array
                  description: Zero or more users. Each user is an array. In that first value of the array is Enlighten ID of the user. System-generated. Second value of the array is the email address of the user.
              example:
                users:
                - - 6
                  - test@gmail.com
                - - 7
                  - test2@gmail.com
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '401'
                message:
                - Not authorized to access requested resource.
                - API Key missing in url/headers!
        '404':
          description: Not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '404'
                message:
                - Company not found
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                    description: Response code
                  message:
                    type: array
                    items:
                      type: string
                      description: Error Messages
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                reason: '429'
                message:
                - Usage limit exceeded for plan Partner (custom)
                period: minute
                period_start: 1623825660
                period_end: 1623825720
                limit: 5
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '501'
                message:
                - Not Implemented
    post:
      summary: Create company user
      description: "Create a company user. When the user is created in the context of a company, then the user is belongs to that company. Otherwise, the user does not belong to a company.\n Email, First Name, and Last Name are mandatory fields in the user. Any unneeded fields passed in the request parameter will be skipped and not stored.\n Pass body param in 'application/x-www-form-urlencoded' format, in this endpoint, key will be 'user' and value will be a JSON dictionary of user fields."
      parameters:
      - name: company_id
        in: path
        description: Company ID
        required: true
        schema:
          type: integer
      tags:
      - Companies
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  active:
                    type: boolean
                    description: Whether the user is allowed to log in to Enlighten.
                  user_roles:
                    type: array
                    items:
                      type: string
                      description: Role
                    description: What type of user this is in Enlighten. Possible values are ['self_installer']. For self installer user user_roles will be ['self_installer']. For other users user_roles will be empty.
                  email:
                    type: string
                    description: The email address of the user
                  enlighten_emails:
                    type: boolean
                    description: Whether the user receives automated emails from Enlighten
                  enlighten_view:
                    type: string
                    description: Which view of Enlighten the user has
                  first_name:
                    type: string
                    description: The user's first name
                  last_name:
                    type: string
                    description: The user's last name
                  phone:
                    type: string
                    description: The telephone number of the user.
                  uri:
                    type: string
                    description: URI to the show() method for the user. System-generated.
                  user_id:
                    type: integer
                    description: The Enlighten ID of the user. System-generated.
                  updated_at:
                    type: integer
                    description: Last updated date and time in Epoch format.
              example:
                active: true
                user_roles: []
                email: sample@gmail.com
                enlighten_emails: true
                enlighten_view: manager
                first_name: Test
                last_name: User
                phone: '1234567890'
                uri: /api/v4/users/2020.json
                user_id: 2020
                updated_at: 1565928605
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '401'
                message:
                - Not authorized to access requested resource.
                - API Key missing in url/headers!
        '404':
          description: Not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '404'
                message:
                - Company not found
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '422':
          description: Unprocessable entity. The body contains error information in a hash of errorMessages and an optional errorCode
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: integer
                  errorMessages:
                    type: array
                    items:
                      type: string
              example:
                errorMessages:
                - User param are missing at body location
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                    description: Response code
                  message:
                    type: array
                    items:
                      type: string
                      description: Error Messages
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                reason: '429'
                message:
                - Usage limit exceeded for plan Partner (custom)
                period: minute
                period_start: 1623825660
                period_end: 1623825720
                limit: 5
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '501'
                message:
                - Not Implemented
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: The email address of the user. Must be unique within Enlighten. Required
                enlighten_emails:
                  type: boolean
                  description: Whether the user receives automated emails from Enlighten. Default false.
                first_name:
                  type: string
                  description: The user's first name. Required
                last_name:
                  type: string
                  description: The user's last name. Required
                phone:
                  type: string
                  description: The telephone number of the user. Optional. Max length 50.
              required:
              - email
              - first_name
              - last_name
  /api/v4/companies/{company_id}/users/{user_id}:
    put:
      summary: Update company user
      description: 'Updates a user. You may change a user''s company if you have access to the user, the old company, and the new company. The user is requested in the scope of a company, then three conditions apply: 1) You must have access to the requested company; otherwise a 401 is returned. 2) The user must belong to the requested company; otherwise a 401 is returned. 3) Requested user must be created by API user (or) it must belong to your company or its branches.'
      parameters:
      - name: company_id
        in: path
        description: Company ID
        required: true
        schema:
          type: integer
      - name: user_id
        in: path
        description: User ID
        required: true
        schema:
          type: integer
      tags:
      - Companies
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  active:
                    type: boolean
                    description: Whether the user is allowed to log in to Enlighten.
                  user_roles:
                    type: array
                    items:
                      type: string
                      description: Role
                    description: What type of user this is in Enlighten. Possible values are ['self_installer']. For self installer user user_roles will be ['self_installer']. For other users user_roles will be empty.
                  email:
                    type: string
                    description: The email address of the user
                  enlighten_emails:
                    type: boolean
                    description: Whether the user receives automated emails from Enlighten
                  enlighten_view:
                    type: string
                    description: Which view of Enlighten the user has
                  first_name:
                    type: string
                    description: The user's first name
                  last_name:
                    type: string
                    description: The user's last name
                  phone:
                    type: string
                    description: The telephone number of the user.
                  uri:
                    type: string
                    description: URI to the show() method for the user. System-generated.
                  user_id:
                    type: integer
                    description: The Enlighten ID of the user. System-generated.
                  updated_at:
                    type: integer
                    description: Last updated date and time in Epoch format.
              example:
                active: true
                user_roles: []
                email: sample@gmail.com
                enlighten_emails: true
                enlighten_view: manager
                first_name: Test
                last_name: User
                phone: '1234567890'
                uri: /api/v4/users/210071.json
                user_id: 210071
                updated_at: 1565928605
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '401'
                message:
                - Not authorized to access requested resource.
                - API Key missing in url/headers!
        '404':
          description: Not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '404'
                message:
                - User not found.
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '422':
          description: Unprocessable entity. The body contains error information in a hash of errorMessages and an optional errorCode
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: integer
                  errorMessages:
                    type: array
                    items:
                      type: string
              example:
                errorMessages:
                - Email has already been registered
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                    description: Response code
                  message:
                    type: array
                    items:
                      type: string
                      description: Error Messages
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                reason: '429'
                message:
                - Usage limit exceeded for plan Partner (custom)
                period: minute
                period_start: 1623825660
                period_end: 1623825720
                limit: 5
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '501'
                message:
                - Not Implemented
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                company_id:
                  type: integer
                  description: 'The Enlighten-generated ID of the company to which the user belongs, if any. DEPRECATED: Use the ''company'' attribute instead, and the query parameter ''expand=company'' to get detailed company information.'
                email:
                  type: string
                  description: The email address of the user. Must be unique within Enlighten. Cannot be empty string.
                enlighten_emails:
                  type: boolean
                  description: Whether the user receives automated emails from Enlighten. Default false.
                first_name:
                  type: string
                  description: The user's first name. Cannot be empty string.
                last_name:
                  type: string
                  description: The user's last name. Cannot be empty string.
                phone:
                  type: string
                  description: The telephone number of the user. Optional. Max length 255.
  /api/v4/companies/self/branches:
    get:
      summary: User's company and its branches
      description: Returns information about the API user's company and its branches, if any
      tags:
      - Companies
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  company_id:
                    type: integer
                    description: The Enlighten ID of the API user's company.
                  company_name:
                    type: string
                    description: The name of the API user's company.
                  branches:
                    type: array
                    description: A list of branches belonging to the API user's company. May be empty.
                    items:
                      type: object
                      properties:
                        company_id:
                          type: integer
                          description: The Enlighten ID of the company.
                        company_name:
                          type: string
                          description: The name of the company.
                        location:
                          type: string
                          description: Company location
                        roles:
                          type: array
                          items:
                            type: string
                          description: What type of company this is in Enphase. Possible values are ['installer']. For installer company roles will be ['installer']. For other role roles will be empty.
                        uri:
                          type: string
                          description: URI to the show() method for the company. System-generated
              example:
                company_id: 9
                company_name: Super Solar
                branches:
                - company_id: 81
                  company_name: Super Solar North
                  location: Petaluma, CA - US
                  roles:
                  - installer
                  uri: /api/v4/companies/81.json
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '401'
                message:
                - Not authorized to access requested resource.
                - API Key missing in url/headers!
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                    description: Response code
                  message:
                    type: array
                    items:
                      type: string
                      description: Error Messages
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                reason: '429'
                message:
                - Usage limit exceeded for plan Partner (custom)
                period: minute
                period_start: 1623825660
                period_end: 1623825720
                limit: 5
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '501'
                message:
                - Not Implemented
  /api/v4/companies/self/authorized_subcontractors:
    get:
      summary: User's company and its authorized subcontractors.
      description: Returns all the authorized subcontractors of a given company, if any
      tags:
      - Companies
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  company_id:
                    type: integer
                    description: The Enlighten ID of the API user's company.
                  company_name:
                    type: string
                    description: The name of the API user's company.
                  authorized_subcontractors:
                    type: array
                    description: A list of subcontractors belonging to the API user's company. May be empty.
                    items:
                      type: object
                      properties:
                        company_id:
                          type: integer
                          description: The Enlighten ID of the company.
                        company_name:
                          type: string
                          description: The name of the company.
                        location:
                          type: string
                          description: Company location
                        roles:
                          type: array
                          items:
                            type: string
                            description: Company’s role in Enphase. Possible values are ['installer']. For installer companies, roles will be ['installer']. For other companies,  roles will be empty
                        uri:
                          type: string
                          description: URI to the show() method for the company. System-generated
                        status:
                          type: string
                          description: whether the subcontractor is enabled or disabled
              example:
                company_id: 9
                company_name: Super Solar
                authorized_subcontractors:
                - company_id: 81
                  company_name: Super Solar North
                  location: Petaluma, CA - US
                  roles:
                  - installer
                  uri: /api/v4/companies/81.json
                  status: Enabled
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '401'
                message:
                - Not authorized to access requested resource.
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                    description: Response code
                  message:
                    type: array
                    items:
                      type: string
                      description: Error Messages
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                reason: '429'
                message:
                - Usage limit exceeded for plan Partner (custom)
                period: minute
                period_start: 1623825660
                period_end: 1623825720
                limit: 5
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '501'
                message:
                - Not Implemented