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