Enode Webhooks API

Manage event webhooks.

Business capability
Webhook & Event Subscription Management BC-4270.80

Operations 6

POST /webhooks Create Webhook #
GET /webhooks List Webhooks #
PATCH /webhooks/{webhookId} Update Webhook #
GET /webhooks/{webhookId} Get Webhook #
DELETE /webhooks/{webhookId} Delete Webhook #
POST /webhooks/{webhookId}/test Test Webhook #

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/enode:enode-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

enode-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Enode Webhooks API
  version: '2023-08-01'
  description: One integration, 1000+ energy devices.
  license:
    name: Enode Commercial License
    url: https://enode.com
servers:
- url: https://enode-api.production.enode.io
tags:
- name: Webhooks
  description: 'Webhooks are a mechanism that allows your server to receive notifications of events from the Enode system.


    See the related guide for more information about timeouts, failures, and retry logic: Using Webhooks'
paths:
  /webhooks:
    post:
      summary: Create Webhook
      operationId: createWebhook
      description: Create a webhook.
      tags:
      - Webhooks
      security:
      - ClientAccessToken: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreatePayload'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
        '400':
          description: Webhook already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookNotValidProblem'
    get:
      summary: List Webhooks
      operationId: listWebhooks
      description: Returns a paginated list of webhooks.
      tags:
      - Webhooks
      security:
      - ClientAccessToken: []
      parameters:
      - $ref: '#/components/parameters/PaginationQueryAfter'
      - $ref: '#/components/parameters/PaginationQueryBefore'
      - $ref: '#/components/parameters/PaginationQueryPageSize'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedWebhookList'
  /webhooks/{webhookId}:
    patch:
      summary: Update Webhook
      operationId: updateWebhook
      description: Update a webhook.
      tags:
      - Webhooks
      security:
      - ClientAccessToken: []
      parameters:
      - $ref: '#/components/parameters/WebhookPathId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookUpdatePayload'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
        '404':
          description: Webhook not found or already deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookNotFoundProblem'
    get:
      summary: Get Webhook
      operationId: getWebhook
      description: Returns webhook with the given ID, if it exists.
      tags:
      - Webhooks
      security:
      - ClientAccessToken: []
      parameters:
      - $ref: '#/components/parameters/WebhookPathId'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
        '404':
          description: Webhook not found or already deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookNotFoundProblem'
    delete:
      summary: Delete Webhook
      operationId: deleteWebhook
      description: Deletes webhook with the given ID, if it exists.
      tags:
      - Webhooks
      security:
      - ClientAccessToken: []
      parameters:
      - $ref: '#/components/parameters/WebhookPathId'
      responses:
        '204':
          description: Successfully deleted
          content: {}
        '404':
          description: Webhook not found or already deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookNotFoundProblem'
  /webhooks/{webhookId}/test:
    post:
      summary: Test Webhook
      operationId: testWebhook
      description: Send a `enode:webhook:test` payload to the webhook. If the webhook is inactive, it'll be reactivated on success.
      tags:
      - Webhooks
      security:
      - ClientAccessToken: []
      parameters:
      - $ref: '#/components/parameters/WebhookPathId'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TestWebhook'
        '404':
          description: Webhook not found or already deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookNotFoundProblem'
components:
  schemas:
    PaginationQueryAfter:
      type: string
      description: Opaque cursor used to fetch next page. Cannot be set together with `before`. Refer to [Pagination](/api#pagination) for more information.
      example: MjAyMy0wNy0xOFQxMDowODowMi4zNzNa
    PaginationQueryBefore:
      type: string
      description: Opaque cursor used to fetch previous page. Cannot be used together with `after`. Refer to [Pagination](/api#pagination) for more information.
      example: MjAyMy0wNy0xOFQxMDowODowMi4zNzNa
    PaginatedWebhookList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/WebhookResponse'
          description: Paginated list of webhooks.
        pagination:
          $ref: '#/components/schemas/PaginationCursors'
      required:
      - data
      - pagination
      additionalProperties: false
      description: Paginated response of webhooks.
    PaginationQueryPageSize:
      type: integer
      description: Number of records to return per page. Default page size is 50.
      example: 50
      exclusiveMinimum: 0
    TestWebhook:
      type: object
      properties:
        status:
          type: string
          enum:
          - SUCCESS
          - FAILURE
          description: Indicates if the test webhook event was delivered successfully to your configured webhook endpoint.
        description:
          type: string
          description: Human readable description of the test outcome.
        response:
          type:
          - object
          - 'null'
          properties:
            code:
              type: number
              example: 200
              description: Status code returned by your configured webhook endpoint
            body:
              type: string
              example: '{}'
              description: Body returned by your configured webhook endpoint
            headers:
              type:
              - array
              - 'null'
              items:
                type: string
              description: Headers returned by your configured webhook endpoint
              example:
              - 'content-type: application/json; } charset=utf-8'
          required:
          - code
          - body
          - headers
          additionalProperties: false
          description: Null if status is `FAILURE` and no HTTP response was received (e.g. DNS resolution failure or connection error).
      required:
      - status
      - description
      - response
      additionalProperties: false
    WebhookResponse:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the webhook.
          example: 1de1as-dsa12wed-15sa
        url:
          type: string
          minLength: 8
          maxLength: 200
          description: The HTTPS URL that webhook payloads should be sent to. Must resolve to a public IP address and return a 2xx response directly without redirecting.
          example: https://example.com/enode-webhooks
          x-format:
            uri: true
        events:
          type: array
          items:
            type: string
          default:
          - '*'
          description: The events which will trigger the webhook.
          example:
          - user:vehicle:discovered
          - user:vehicle:updated
          - user:vehicle:deleted
        lastSuccess:
          type: string
          format: date-time
          description: Time when a delivery to this webhook was last successful.
          example: '2023-08-14T13:01:00.000'
        isActive:
          type: boolean
          description: Indicates whether the webhook is active or not.
          example: true
        createdAt:
          type: string
          format: date-time
          description: Time when the webhook was created.
          example: '2023-08-14T13:01:00.000'
        apiVersion:
          type:
          - string
          - 'null'
          description: API version of the payload. If null, the default API version of the client will be used when generating webhook payloads.
          example: '2024-10-01'
        authentication:
          type:
          - object
          - 'null'
          properties:
            headerName:
              type: string
          required:
          - headerName
          additionalProperties: false
      required:
      - id
      - url
      - lastSuccess
      - isActive
      - createdAt
      - apiVersion
      - authentication
      additionalProperties: false
      description: Webhook entity.
    WebhookPathId:
      type: string
      example: 4eaeb363-296d-4ccc-a973-7805e6f400bd
      x-format:
        guid: true
      description: ID of the Webhook.
    WebhookUpdatePayload:
      type: object
      properties:
        url:
          type: string
          minLength: 8
          maxLength: 200
          description: The HTTPS URL that webhook payloads should be sent to. Must resolve to a public IP address and return a 2xx response directly without redirecting.
          example: https://example.com/enode-webhooks
          x-format:
            uri: true
        secret:
          type: string
          minLength: 6
          maxLength: 256
          description: A cryptographically secure secret, generated and provided by your client. Refer to [Generating a secret](/docs/webhooks#payload-integrity) for details on how to do this.
          example: 0Kvs1tAUQ69FOMBiWlt5XJSrruXMhWDiVbyrWaNm
        events:
          type: array
          items:
            type: string
            enum:
            - '*'
            - user:vehicle:discovered
            - user:vehicle:updated
            - user:vehicle:deleted
            - user:vehicle:smart-charging-status-updated
            - user:charge-action:updated
            - user:vendor-action:updated
            - user:schedule:execution-updated
            - user:charger:discovered
            - user:charger:updated
            - user:charger:deleted
            - user:hvac:discovered
            - user:hvac:updated
            - user:hvac:deleted
            - user:inverter:discovered
            - user:inverter:updated
            - user:inverter:deleted
            - user:credentials:invalidated
            - user:battery:discovered
            - user:battery:updated
            - user:battery:deleted
            - enode:webhook:test
            - user:meter:discovered
            - user:meter:updated
            - user:meter:deleted
            - flex:session:updated
          description: 'The events which will trigger the webhook. Available events: `*`, `user:vehicle:discovered`, `user:vehicle:updated`, `user:vehicle:deleted`, `user:vehicle:smart-charging-status-updated`, `user:charge-action:updated`, `user:vendor-action:updated`, `user:schedule:execution-updated`, `user:charger:discovered`, `user:charger:updated`, `user:charger:deleted`, `user:hvac:discovered`, `user:hvac:updated`, `user:hvac:deleted`, `user:inverter:discovered`, `user:inverter:updated`, `user:inverter:deleted`, `user:credentials:invalidated`, `user:battery:discovered`, `user:battery:updated`, `user:battery:deleted`, `enode:webhook:test`, `user:meter:discovered`, `user:meter:updated`, `user:meter:deleted`, `flex:session:updated`'
          example:
          - user:vehicle:discovered
          - user:vehicle:updated
          - user:vehicle:deleted
        apiVersion:
          type:
          - string
          - 'null'
          description: 'If provided, webhook payloads will be generated for this version. If not provided or `null`, the default API version of the client will be used when generating webhook payloads. Valid versions: `2024-10-01`'
          example: '2024-10-01'
        authentication:
          type:
          - object
          - 'null'
          properties:
            headerName:
              type: string
              minLength: 1
              maxLength: 128
              pattern: ^[a-z0-9-_]+$
              description: Authentication header name.
              example: x-api-key
            headerValue:
              type: string
              minLength: 1
              maxLength: 256
              pattern: ^[a-zA-Z0-9_:;.,/\\"'?!(){}[\]@<>=\-+*#$&`|~^% ]+$
              description: Authentication header value.
              example: AOIxcVLKxR2VpzlN5HIk14oPu80
          required:
          - headerName
          - headerValue
          additionalProperties: false
          description: If provided, the authentication header will be sent with each webhook request.
      additionalProperties: false
      description: Fields to update the webhook with.
    WebhookNotFoundProblem:
      type: object
      properties:
        type:
          type: string
          description: A URI reference that identifies the problem type.
        title:
          type: string
          description: A short, human-readable summary of the problem type.
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem.
        issues:
          type: array
          items:
            type: object
            properties: {}
          description: A list of validation issues which occurred while validating some component of the network payload.
      required:
      - type
      - title
      - detail
      description: Webhook not found problem error
      example:
        type: https://docs.enode.io/api/problems/not-found
        title: Webhook not found
        detail: Could not find webhook 0ec3d927-0100-44ff-bb53-edfe3ce64a57
    WebhookCreatePayload:
      type: object
      properties:
        url:
          type: string
          minLength: 8
          maxLength: 200
          description: The HTTPS URL that webhook payloads should be sent to. Must resolve to a public IP address and return a 2xx response directly without redirecting.
          example: https://example.com/enode-webhooks
          x-format:
            uri: true
        secret:
          type: string
          minLength: 6
          maxLength: 256
          description: A cryptographically secure secret, generated and provided by your client. Refer to [Generating a secret](/docs/webhooks#payload-integrity) for details on how to do this.
          example: 0Kvs1tAUQ69FOMBiWlt5XJSrruXMhWDiVbyrWaNm
        events:
          type: array
          items:
            type: string
            enum:
            - '*'
            - user:vehicle:discovered
            - user:vehicle:updated
            - user:vehicle:deleted
            - user:vehicle:smart-charging-status-updated
            - user:charge-action:updated
            - user:vendor-action:updated
            - user:schedule:execution-updated
            - user:charger:discovered
            - user:charger:updated
            - user:charger:deleted
            - user:hvac:discovered
            - user:hvac:updated
            - user:hvac:deleted
            - user:inverter:discovered
            - user:inverter:updated
            - user:inverter:deleted
            - user:credentials:invalidated
            - user:battery:discovered
            - user:battery:updated
            - user:battery:deleted
            - enode:webhook:test
            - user:meter:discovered
            - user:meter:updated
            - user:meter:deleted
            - flex:session:updated
          default:
          - '*'
          description: 'The events which will trigger the webhook. Available events: `*`, `user:vehicle:discovered`, `user:vehicle:updated`, `user:vehicle:deleted`, `user:vehicle:smart-charging-status-updated`, `user:charge-action:updated`, `user:vendor-action:updated`, `user:schedule:execution-updated`, `user:charger:discovered`, `user:charger:updated`, `user:charger:deleted`, `user:hvac:discovered`, `user:hvac:updated`, `user:hvac:deleted`, `user:inverter:discovered`, `user:inverter:updated`, `user:inverter:deleted`, `user:credentials:invalidated`, `user:battery:discovered`, `user:battery:updated`, `user:battery:deleted`, `enode:webhook:test`, `user:meter:discovered`, `user:meter:updated`, `user:meter:deleted`, `flex:session:updated`'
          example:
          - user:vehicle:discovered
          - user:vehicle:updated
          - user:vehicle:deleted
        apiVersion:
          type:
          - string
          - 'null'
          description: 'If provided, webhook payloads will be generated for this version. If not provided or `null`, the default API version of the client will be used when generating webhook payloads. Valid versions: `2024-10-01`'
          example: '2024-10-01'
        authentication:
          type: object
          properties:
            headerName:
              type: string
              minLength: 1
              maxLength: 128
              pattern: ^[a-z0-9-_]+$
              description: Authentication header name.
              example: x-api-key
            headerValue:
              type: string
              minLength: 1
              maxLength: 256
              pattern: ^[a-zA-Z0-9_:;.,/\\"'?!(){}[\]@<>=\-+*#$&`|~^% ]+$
              description: Authentication header value.
              example: AOIxcVLKxR2VpzlN5HIk14oPu80
          required:
          - headerName
          - headerValue
          additionalProperties: false
          description: If provided, the authentication header will be sent with each webhook request.
      required:
      - url
      - secret
      additionalProperties: false
      description: Fields to update the webhook with.
    WebhookNotValidProblem:
      type: object
      properties:
        type:
          type: string
          description: A URI reference that identifies the problem type.
        title:
          type: string
          description: A short, human-readable summary of the problem type.
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem.
        issues:
          type: array
          items:
            type: object
            properties: {}
          description: A list of validation issues which occurred while validating some component of the network payload.
      required:
      - type
      - title
      - detail
      description: Webhook input is not valid.
      example:
        type: https://docs.enode.io/api/problems/bad-request
        title: Webhook input is not valid.
        detail: The webhook input is not valid.
    PaginationCursors:
      type: object
      properties:
        after:
          type:
          - string
          - 'null'
          example: MjAyMy0wNy0xOFQxMDowODowMi4zNzNa
        before:
          type:
          - string
          - 'null'
          example: MjAyMy0wNi0xNlQwOTowMzowMS4yNjJa
      required:
      - after
      - before
      additionalProperties: false
      description: Cursors to the pages before and after current page. See the [Pagination](/api#pagination) section for reference.
  parameters:
    PaginationQueryPageSize:
      schema:
        $ref: '#/components/schemas/PaginationQueryPageSize'
      required: false
      description: Number of records to return per page. Default page size is 50.
      name: pageSize
      in: query
    WebhookPathId:
      schema:
        $ref: '#/components/schemas/WebhookPathId'
      required: true
      description: ID of the Webhook.
      name: webhookId
      in: path
    PaginationQueryBefore:
      schema:
        $ref: '#/components/schemas/PaginationQueryBefore'
      required: false
      description: Opaque cursor used to fetch previous page. Cannot be used together with `after`. Refer to [Pagination](/api#pagination) for more information.
      name: before
      in: query
    PaginationQueryAfter:
      schema:
        $ref: '#/components/schemas/PaginationQueryAfter'
      required: false
      description: Opaque cursor used to fetch next page. Cannot be set together with `before`. Refer to [Pagination](/api#pagination) for more information.
      name: after
      in: query
  securitySchemes:
    ClientAccessToken:
      type: oauth2
      description: 'A `ClientAccessToken` is obtained via the [OAuth 2.0 Client Credentials grant](https://www.oauth.com/oauth2-servers/access-tokens/client-credentials/) and carries authorization to access all functionalities and data in your Enode account.

        Full details at [The ClientAccessToken](/api#getting-an-access-token)

        '
      flows:
        clientCredentials:
          tokenUrl: https://oauth.production.enode.io/oauth2/token
          scopes: {}
x-provenance:
  method: harvested
  publisher: Enode
  source: https://enode-api.production.enode.io/openapi/v1.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)