Leap Webhook Subscription API
Create, list, update, delete and test webhook subscriptions for Leap connect-session and meter/enrollment event types.
Create, list, update, delete and test webhook subscriptions for Leap connect-session and meter/enrollment event types.
openapi: 3.0.1
info:
contact:
email: apiteam@leap.energy
description: "Create webhooks, list existing webhooks, update webhooks, and delete\
\ webhooks."
title: Webhook Subscription API
version: "1.1"
servers:
- url: https://api.staging.leap.energy
- url: https://api.leap.energy
security:
- http: []
tags:
- name: webhooks
paths:
/v1.1/webhooks:
get:
description: List existing webhooks.
operationId: listWebhooks
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/WebhookListResponse"
description: List of webhooks
"401":
content:
application/json:
examples:
error:
summary: Unauthorized error
value:
error: Unauthorized
message: Auth token is invalid
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Unauthorized - Auth token is invalid
"403":
content:
application/json:
examples:
error:
summary: Forbidden error
value:
error: Forbidden
message: You do not have permission to perform this action
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Forbidden - You do not have permission to perform this action
"500":
content:
application/json:
examples:
error:
summary: Internal Server Error
value:
error: Internal Server Error
message: An unexpected error occurred
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Internal Server Error
summary: List webhooks
tags:
- webhooks
post:
description: Create a new webhook to receive event notifications.
operationId: createWebhook
requestBody:
$ref: "#/components/requestBodies/WebhookRequestBody"
responses:
"200":
content:
application/json:
examples:
success:
summary: A successful response
value:
webhook_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
schema:
$ref: "#/components/schemas/WebhookResponse"
description: Webhook created successfully
"401":
content:
application/json:
examples:
error:
summary: Unauthorized error
value:
error: Unauthorized
message: Auth token is invalid
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Unauthorized - Auth token is invalid
"403":
content:
application/json:
examples:
error:
summary: Forbidden error
value:
error: Forbidden
message: You do not have permission to perform this action
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Forbidden - You do not have permission to perform this action
summary: Create a webhook
tags:
- webhooks
/v1.1/webhooks/{webhook_id}:
delete:
description: Delete an existing webhook identified by webhook_id.
operationId: deleteWebhook
parameters:
- description: The ID of the webhook.
explode: false
in: path
name: webhook_id
required: true
schema:
format: uuid
type: string
style: simple
responses:
"200":
content:
application/json:
examples:
success:
summary: A successful response
value:
message: Operation completed successfully
schema:
$ref: "#/components/schemas/SuccessResponse"
description: Operation completed successfully
"401":
content:
application/json:
examples:
error:
summary: Unauthorized error
value:
error: Unauthorized
message: Auth token is invalid
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Unauthorized - Auth token is invalid
"403":
content:
application/json:
examples:
error:
summary: Forbidden error
value:
error: Forbidden
message: You do not have permission to perform this action
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Forbidden - You do not have permission to perform this action
"404":
content:
application/json:
examples:
error:
summary: Not Found error
value:
error: Not Found
message: The specified resource was not found
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Not Found - The specified resource was not found
summary: Delete a webhook
tags:
- webhooks
put:
description: "Update an existing webhook identified by webhook_id. NOTE: using\
\ this endpoint will overwrite all existing settings for the specified webhook_id."
operationId: updateWebhook
parameters:
- description: The ID of the webhook.
explode: false
in: path
name: webhook_id
required: true
schema:
format: uuid
type: string
style: simple
requestBody:
$ref: "#/components/requestBodies/WebhookRequestBody"
responses:
"200":
content:
application/json:
examples:
success:
summary: A successful response
value:
webhook_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
schema:
$ref: "#/components/schemas/WebhookResponse"
description: Webhook created successfully
"401":
content:
application/json:
examples:
error:
summary: Unauthorized error
value:
error: Unauthorized
message: Auth token is invalid
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Unauthorized - Auth token is invalid
"403":
content:
application/json:
examples:
error:
summary: Forbidden error
value:
error: Forbidden
message: You do not have permission to perform this action
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Forbidden - You do not have permission to perform this action
"404":
content:
application/json:
examples:
error:
summary: Not Found error
value:
error: Not Found
message: The specified resource was not found
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Not Found - The specified resource was not found
summary: Update a webhook
tags:
- webhooks
/v1.1/webhooks/{webhook_id}/test:
post:
description: Send a test event to the configured receiver_url for the specified
webhook_id.
operationId: testWebhook
parameters:
- description: The ID of the webhook.
explode: false
in: path
name: webhook_id
required: true
schema:
format: uuid
type: string
style: simple
requestBody:
$ref: "#/components/requestBodies/TestWebhookRequestBody"
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/TestWebhookResponse"
description: Object that returns the response from your server
"401":
content:
application/json:
examples:
error:
summary: Unauthorized error
value:
error: Unauthorized
message: Auth token is invalid
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Unauthorized - Auth token is invalid
"403":
content:
application/json:
examples:
error:
summary: Forbidden error
value:
error: Forbidden
message: You do not have permission to perform this action
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Forbidden - You do not have permission to perform this action
"404":
content:
application/json:
examples:
error:
summary: Not Found error
value:
error: Not Found
message: The specified resource was not found
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Not Found - The specified resource was not found
summary: Test a webhook
tags:
- webhooks
components:
parameters:
WebhookId:
description: The ID of the webhook.
explode: false
in: path
name: webhook_id
required: true
schema:
format: uuid
type: string
style: simple
requestBodies:
WebhookRequestBody:
content:
application/json:
examples:
webhook:
summary: A sample webhook request
value:
headers:
- name: x-api-key
value: your-test-key
event_types:
- meter.created
receiver_url: https://company.com/leap-webhooks
schema:
$ref: "#/components/schemas/WebhookRequest"
required: true
TestWebhookRequestBody:
content:
application/json:
examples:
meter.created:
summary: A sample meter created event
value:
webhook_event_type: meter.created
meter_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
partner_reference: sample-ref-123
schema:
$ref: "#/components/schemas/WebhookEventTypeDiscriminator"
required: true
responses:
WebhookList:
content:
application/json:
schema:
$ref: "#/components/schemas/WebhookListResponse"
description: List of webhooks
Unauthorized:
content:
application/json:
examples:
error:
summary: Unauthorized error
value:
error: Unauthorized
message: Auth token is invalid
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Unauthorized - Auth token is invalid
Forbidden:
content:
application/json:
examples:
error:
summary: Forbidden error
value:
error: Forbidden
message: You do not have permission to perform this action
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Forbidden - You do not have permission to perform this action
InternalServerError:
content:
application/json:
examples:
error:
summary: Internal Server Error
value:
error: Internal Server Error
message: An unexpected error occurred
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Internal Server Error
WebhookCreated:
content:
application/json:
examples:
success:
summary: A successful response
value:
webhook_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
schema:
$ref: "#/components/schemas/WebhookResponse"
description: Webhook created successfully
NotFound:
content:
application/json:
examples:
error:
summary: Not Found error
value:
error: Not Found
message: The specified resource was not found
schema:
$ref: "#/components/schemas/ErrorResponse"
description: Not Found - The specified resource was not found
Success:
content:
application/json:
examples:
success:
summary: A successful response
value:
message: Operation completed successfully
schema:
$ref: "#/components/schemas/SuccessResponse"
description: Operation completed successfully
TestWebhookResponse:
content:
application/json:
schema:
$ref: "#/components/schemas/TestWebhookResponse"
description: Object that returns the response from your server
schemas:
WebhookRequest:
example:
headers:
- name: x-api-key
value: your-test-key
event_types:
- meter.created
receiver_url: https://company.com/leap-webhooks
properties:
headers:
description: List of custom headers used in requests back to the origin.
example:
- name: x-api-key
value: your-test-key
items:
$ref: "#/components/schemas/Header"
type: array
event_types:
description: A list of unique event keys to subscribe to.
example:
- meter.created
items:
$ref: "#/components/schemas/WebhookEventType"
type: array
receiver_url:
description: The callback URL for this webhook.
example: https://company.com/leap-webhooks
type: string
required:
- event_types
- receiver_url
type: object
Webhook:
example:
webhook_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
event_types:
- meter.created
- meter.created
headers:
- name: name
value: value
- name: name
value: value
receiver_url: https://company.com/leap-webhooks
properties:
webhook_id:
description: The unique identifier for your webhook subscription.
example: 364be407-1f08-48fa-afd2-ee1dd228b76b
format: uuid
type: string
event_types:
items:
$ref: "#/components/schemas/WebhookEventType"
type: array
headers:
items:
$ref: "#/components/schemas/Header"
type: array
receiver_url:
example: https://company.com/leap-webhooks
type: string
required:
- event_types
- headers
- receiver_url
- webhook_id
type: object
WebhookListResponse:
example:
webhooks:
- webhook_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
event_types:
- meter.created
- meter.created
headers:
- name: name
value: value
- name: name
value: value
receiver_url: https://company.com/leap-webhooks
- webhook_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
event_types:
- meter.created
- meter.created
headers:
- name: name
value: value
- name: name
value: value
receiver_url: https://company.com/leap-webhooks
properties:
webhooks:
items:
$ref: "#/components/schemas/Webhook"
type: array
required:
- webhooks
type: object
WebhookEventId:
description: The unique identifier for a webhook event with payload.
example: 31f6b61a-712e-42e7-83af-ea441777a32f
format: uuid
type: string
WebhookPayload:
description: A webhook payload that you receive from Leap.
properties:
webhook_event_id:
description: The unique identifier for a webhook event with payload.
example: 31f6b61a-712e-42e7-83af-ea441777a32f
format: uuid
type: string
payload:
$ref: "#/components/schemas/WebhookEventTypeDiscriminator"
required:
- payload
- webhook_event_id
type: object
ErrorResponse:
example:
error: error
message: message
properties:
error:
description: Error type.
type: string
message:
description: Detailed error message.
type: string
type: object
WebhookResponse:
example:
webhook_id: 364be407-1f08-48fa-afd2-ee1dd228b76b
properties:
webhook_id:
description: The unique identifier for your webhook subscription.
example: 364be407-1f08-48fa-afd2-ee1dd228b76b
format: uuid
type: string
required:
- webhook_id
type: object
SuccessResponse:
example:
message: Operation completed successfully
properties:
message:
description: Success message.
example: Operation completed successfully
type: string
required:
- message
type: object
TestWebhookResponse:
description: This object returns the response that Leap got from your server
example:
is_successful: true
error: error
status_code: 0
response_time_ms: 6
properties:
is_successful:
description: True if Leap was able to connect to your server and receive
a 2xx response.
type: boolean
error:
description: "If Leap wasn't able to get any response from your server,\
\ e.g. due to connection issues, this field will be populated."
type: string
status_code:
description: HTTP response status code that Leap received from your server.
This field will only be populated if Leap was able to reach your server.
type: integer
response_time_ms:
description: Your server's response time in milliseconds. This field will
only be populated if Leap was able to reach your server.
type: integer
required:
- is_successful
type: object
WebhookEventTypeDiscriminator:
discriminator:
mapping:
meter.created: "#/components/schemas/MeterCreatedEventV1Wrapped"
meter.enrollment.global-status.updated: "#/components/schemas/MeterEnrollmentGlobalStatusUpdatedEventV1Wrapped"
meter.enrollment.participation-status.updated: "#/components/schemas/MeterEnrollmentParticipationStatusUpdatedEventV1Wrapped"
meter.enrollment.required-actions.updated: "#/components/schemas/MeterEnrollmentPartnerRequiredActionsUpdatedV1Wrapped"
meter.enrollment.group.updated: "#/components/schemas/MeterEnrollmentGroupUpdatedEventV1Wrapped"
connect_session.updated: "#/components/schemas/ConnectSessionUpdatedEventV1Wrapped"
connect_session.authorization_updated: "#/components/schemas/ConnectSessionAuthorizationUpdatedEventV1Wrapped"
propertyName: webhook_event_type
example:
webhook_event_type: meter.created
oneOf:
- $ref: "#/components/schemas/MeterCreatedEventV1Wrapped"
- $ref: "#/components/schemas/MeterEnrollmentGlobalStatusUpdatedEventV1Wrapped"
- $ref: "#/components/schemas/MeterEnrollmentParticipationStatusUpdatedEventV1Wrapped"
- $ref: "#/components/schemas/MeterEnrollmentPartnerRequiredActionsUpdatedV1Wrapped"
- $ref: "#/components/schemas/MeterEnrollmentGroupUpdatedEventV1Wrapped"
- $ref: "#/components/schemas/ConnectSessionUpdatedEventV1Wrapped"
- $ref: "#/components/schemas/ConnectSessionAuthorizationUpdatedEventV1Wrapped"
properties:
webhook_event_type:
$ref: "#/components/schemas/WebhookEventType"
required:
- webhook_event_type
type: object
WebhookEventType:
enum:
- meter.created
- connect_session.updated
- connect_session.authorization_updated
- meter.enrollment.global-status.updated
- meter.enrollment.participation-status.updated
- meter.enrollment.required-actions.updated
- meter.enrollment.group.updated
type: string
Header:
example:
name: name
value: value
properties:
name:
description: The name of the header.
type: string
value:
description: The value of the header.
type: string
required:
- name
- value
type: object
WebhookId:
description: The unique identifier for your webhook subscription.
example: 364be407-1f08-48fa-afd2-ee1dd228b76b
format: uuid
type: string
MeterCreatedEventV1Wrapped:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- $ref: "#/components/schemas/MeterCreatedEventV1"
MeterCreatedEventV1:
properties:
meter_id:
description: The unique identifier for the meter.
example: 11111111-1111-1111-1111-111111111111
format: uuid
type: string
partner_reference:
description: The partner-supplied reference ID to help identify the customer
or site that a Leap meter correlates to a partner?s internal systems.
example: partner-reference-1
maxLength: 256
minLength: 3
pattern: "^[^\\/\\\\?\\]\\[{}!#$%^&*()<>|]{3,256}$"
type: string
transmission_region:
$ref: "#/components/schemas/transmission_region"
meter_type:
$ref: "#/components/schemas/MeterType"
required:
- meter_id
- transmission_region
type: object
MeterEnrollmentGlobalStatusUpdatedEventV1Wrapped:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- $ref: "#/components/schemas/MeterEnrollmentGlobalStatusUpdatedV1"
MeterEnrollmentGlobalStatusUpdatedV1:
properties:
meter_id:
description: The unique identifier for the meter.
example: 11111111-1111-1111-1111-111111111111
format: uuid
type: string
partner_reference:
description: The partner-supplied reference ID to help identify the customer
or site that a Leap meter correlates to a partner?s internal systems.
example: partner-reference-1
maxLength: 256
minLength: 3
pattern: "^[^\\/\\\\?\\]\\[{}!#$%^&*()<>|]{3,256}$"
type: string
transmission_region:
$ref: "#/components/schemas/transmission_region"
meter_type:
$ref: "#/components/schemas/MeterType"
global_enrollment_status:
$ref: "#/components/schemas/EnrollmentStatus"
required:
- global_enrollment_status
- meter_id
- transmission_region
type: object
MeterEnrollmentParticipationStatusUpdatedEventV1Wrapped:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- $ref: "#/components/schemas/MeterEnrollmentParticipationStatusUpdatedV1"
MeterEnrollmentParticipationStatusUpdatedV1:
properties:
meter_id:
description: The unique identifier for the meter.
example: 11111111-1111-1111-1111-111111111111
format: uuid
type: string
partner_reference:
description: The partner-supplied reference ID to help identify the customer
or site that a Leap meter correlates to a partner?s internal systems.
example: partner-reference-1
maxLength: 256
minLength: 3
pattern: "^[^\\/\\\\?\\]\\[{}!#$%^&*()<>|]{3,256}$"
type: string
transmission_region:
$ref: "#/components/schemas/transmission_region"
meter_type:
$ref: "#/components/schemas/MeterType"
participation_preference:
$ref: "#/components/schemas/ParticipationPreference"
start_time:
format: date-time
type: string
end_time:
format: date-time
type: string
required:
- meter_id
- participation_preference
- start_time
- transmission_region
type: object
MeterEnrollmentPartnerRequiredActionsUpdatedV1Wrapped:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- $ref: "#/components/schemas/MeterEnrollmentPartnerRequiredActionsUpdatedV1"
MeterEnrollmentPartnerRequiredActionsUpdatedV1:
properties:
meter_id:
description: The unique identifier for the meter.
example: 11111111-1111-1111-1111-111111111111
format: uuid
type: string
partner_reference:
description: The partner-supplied reference ID to help identify the customer
or site that a Leap meter correlates to a partner?s internal systems.
example: partner-reference-1
maxLength: 256
minLength: 3
pattern: "^[^\\/\\\\?\\]\\[{}!#$%^&*()<>|]{3,256}$"
type: string
transmission_region:
$ref: "#/components/schemas/transmission_region"
meter_type:
$ref: "#/components/schemas/MeterType"
required_actions:
$ref: "#/components/schemas/PartnerRequiredActions"
global_enrollment_status:
$ref: "#/components/schemas/EnrollmentStatus"
required:
- global_enrollment_status
- meter_id
- required_actions
- transmission_region
type: object
MeterEnrollmentGroupUpdatedEventV1Wrapped:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- $ref: "#/components/schemas/MeterEnrollmentGroupUpdatedV1"
MeterEnrollmentGroupUpdatedV1:
properties:
market_group_id:
description: Identifier for the market group
format: uuid
type: string
market_group_name:
description: Name for the market group
example: GRP1_NAME
type: string
start_date_time:
description: The date when this market group will become active
example: 2024-05-01T04:00:00Z
format: date-time
type: string
end_date_time:
description: The date when this market group will become inactive
example: 2024-06-01T04:00:00Z
format: date-time
type: string
meter_ids:
items:
$ref: "#/components/schemas/meter_id"
type: array
required:
- end_date_time
- market_group_id
- market_group_name
- meter_ids
- start_date_time
type: object
ConnectSessionUpdatedEventV1Wrapped:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- $ref: "#/components/schemas/ConnectSessionUpdatedEventV1"
ConnectSessionUpdatedEventV1:
properties:
partner_reference:
description: The partner-supplied reference ID to help identify the customer
or site that a Leap meter correlates to a partner?s internal systems.
example: partner-reference-1
maxLength: 256
minLength: 3
pattern: "^[^\\/\\\\?\\]\\[{}!#$%^&*()<>|]{3,256}$"
type: string
status:
description: The status of the connect session.
enum:
- CREATED
- UPDATED
- CLOSED
- COMPLETED
type: string
required:
- partner_reference
- status
type: object
ConnectSessionAuthorizationUpdatedEventV1Wrapped:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- $ref: "#/components/schemas/ConnectSessionAuthorizationUpdatedEventV1"
ConnectSessionAuthorizationUpdatedEventV1:
properties:
partner_reference:
description: The partner-supplied reference ID to help identify the customer
or site that a Leap meter correlates to a partner?s internal systems.
example: partner-reference-1
maxLength: 256
minLength: 3
pattern: "^[^\\/\\\\?\\]\\[{}!#$%^&*()<>|]{3,256}$"
type: string
utility_name:
$ref: "#/components/schemas/utility"
status:
description: The status of the authorization.
enum:
- INITIATED
- COMPLETED
- FAILED
type: string
required:
- partner_reference
- status
- utility_name
type: object
BaseEvent:
properties:
webhook_event_type:
$ref: "#/components/schemas/WebhookEventType"
required:
- webhook_event_type
type: object
meter_id:
description: The unique identifier for the meter.
example: 11111111-1111-1111-1111-111111111111
format: uuid
type: string
PartnerReference:
description: The partner-supplied reference ID to help identify the customer
or site that a Leap meter correlates to a partner?s internal systems.
example: partner-reference-1
maxLength: 256
minLength: 3
pattern: "^[^\\/\\\\?\\]\\[{}!#$%^&*()<>|]{3,256}$"
type: string
transmission_region:
description: Defines the transmission region of the meter
enum:
- CAISO
- ERCOT
- NYISO
- ISONE
- PJM
- SERC
- WECC_SW
- WECC_PC
example: CAISO
type: string
MeterType:
description: The type of asset.
enum:
- UTILITY_METER
- SUBMETER
- DEVICE
type: string
EnrollmentStatus:
description: The enrollment status of the meter.
enum:
- ACTIVE
- ELIGIBLE
- INELIGIBLE
- NOT_PARTICIPATING
- PENDING
type: string
ParticipationPreference:
enum:
- PARTICIPATE
- IDLE
- DISENROLL
type: string
PartnerRequiredActions:
properties:
partner:
description: Required actions for the partner
example:
- program_identifier: CEC-DSGS
delivery_period: CEC-DSGS_2025_AUG_OCT
enrollment_deadline_date_time: 2024-07-29T00:00:00.000Z
action_type: IS_AUTHORIZED
action_description: "There are missing fields: fieldname"
action_code: AUTH_0001
items:
$ref: "#/components/schemas/RequiredAction"
type: array
type: object
RequiredAction:
allOf:
- $ref: "#/components/schemas/PublicProgram"
- $ref: "#/components/schemas/DeliveryPeriod"
- properties:
enrollment_deadline_date_time:
description: The deadline date and time for the required action in UTC.
example: 2024-07-29T00:00:00Z
format: date-time
type: string
action_type:
$ref: "#/components/schemas/action_type"
action_description:
description: Description of the required action.
example: "There are missing fields: fieldname"
type: string
action_code:
description: The action code.
example: SERV_0002
type: string
required:
- action_code
- action_description
- action_type
- enrollment_deadline_date_time
type: object
example: null
type: object
example: null
utility:
description: The name of the Investor Owned Utility or Publicly Owned Utility
whose territory the customer is in.
enum:
- PGE
- S
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leap/refs/heads/main/openapi/leap-webhooks-openapi-original.yml