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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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
      operationId: getApiV4CompaniesByCompanyIdUsers
      x-operation-id-source: derived
    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.

        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.

        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
      operationId: postApiV4CompaniesByCompanyIdUsers
      x-operation-id-source: derived
  /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.
      operationId: putApiV4CompaniesByCompanyIdUsersByUserId
      x-operation-id-source: derived
  /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
      operationId: getApiV4CompaniesSelfBranches
      x-operation-id-source: derived
  /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
      operationId: getApiV4CompaniesSelfAuthorizedSubcontractors
      x-operation-id-source: derived