---
title: "Get a webhook event"
method: GET
path: "/v1/webhooks/events/{id}"
tags: ["Webhooks"]
---

# Get a webhook event

`GET /v1/webhooks/events/{id}`

## Request

- Base URL: `https://hcti.io`
- URL: `https://hcti.io/v1/webhooks/events/{id}`
- Auth: HTTP basic

Returns one event's payload and each destination's delivery status and attempts. data is null, and payload_withheld is true, when the key can't read the event's resource, for example templates:read for template events.

**Rate limit:** 100 requests per minute per organization, shared across all operations in the `webhook:read` group and all API keys belonging to that organization.

## Path parameters

- `id` string, required

## Response `200`

OK

- WebhookEventHistoryItem: A webhook event with what happened to each of its deliveries. Its fields match the delivered event; data is included only when requested.
  - `data` union: Event-specific details; the event's type determines which shape is used.
    - object: Data for webhook_test: a synthetic event confirming the endpoint receives deliveries.
      - `webhook_id` string, required: ID of the webhook being tested.
      - `config_version` union, required: Version of the delivery settings this test was sent with.
        - integer
        - string, int32
    - object: Data for image_stored: a rendered image was saved to one location. A render saved to both HCTI storage and a storage destination sends one event for each.
      - `image_id` string, required: ID of the image that was saved.
      - `width` union: Width of the stored base image in pixels, before any requested transformation. Null for PDFs or older events without dimensions.
        - integer
        - string, int32
      - `height` union: Height of the stored base image in pixels, before any requested transformation. Null for PDFs or older events without dimensions.
        - integer
        - string, int32
      - `file_size_bytes` union: Size of the stored base file in bytes. Null for older events without file metadata.
        - integer
        - string, int64
      - `location` 'hcti_storage' | 'customer_storage', required
      - `location_details` ImageStoredLocationDetails: The storage destination object an image was saved to.
        - `storage_destination_id` string, required: ID of the storage destination.
        - `bucket` string, required: Bucket the image was written to.
        - `path` string, required: Object key the image was written to, including any key prefix.
    - object: Data for image_deleted: the images one delete request removed. A single delete lists one ID; a batch delete lists every image it deleted.
      - `image_ids` string[], required: IDs of the deleted images. Images that were already deleted are not included.
    - object: Data for *_created events.
      - `entity` WebhookEntityReference, required: Identifies the resource an event is about.
        - `type` 'webhook' | 'template' | 'image' | 'proxy' | 'storage_destination' | 'og_config' | 'api_key' | 'organization', required: The kind of resource a webhook event is about.
        - `id` string, required: The resource's ID, as used elsewhere in the API.
      - `properties` union, required: Properties of a template when it was created. template_type identifies the html_css or blocks variant. Nullable rendering settings are stored overrides; null means the setting is unset.
        - object: Properties of an html_css template when it was created. Large HTML and CSS are truncated; fetch the template for the full source.
          - `template_type` 'html_css', required
          - `css` MaybeTruncatedString: Text that may be truncated for size: the full text when it is short, otherwise its start and end with its full length.
            - `value` string, required: The text, or its start when truncated is true.
            - `truncated` boolean: Whether the text was cut to keep the payload small. When true, value holds its start and ender its last characters; fetch the resource for the full text.
            - `length` union: Length of the full text in characters.
              - …
            - `ender` string, nullable: The full text's last characters when truncated is true; null otherwise.
          - `html` MaybeTruncatedString: Text that may be truncated for size: the full text when it is short, otherwise its start and end with its full length.
            - `value` string, required: The text, or its start when truncated is true.
            - `truncated` boolean: Whether the text was cut to keep the payload small. When true, value holds its start and ender its last characters; fetch the resource for the full text.
            - `length` union: Length of the full text in characters.
              - …
            - `ender` string, nullable: The full text's last characters when truncated is true; null otherwise.
          - `google_fonts` string, nullable: Google Font families loaded for this template, separated by |.
          - `version` union: Saved template version identifier. Specify it when rendering to select this exact version.
            - integer
            - string, int64
          - `name` string, nullable: Optional display name for template discovery. Use id to identify the template in rendering and update requests.
          - `description` string, nullable: Optional notes about the template's purpose and intended use.
          - `device_scale` union: Screenshot pixel ratio. A value of 2 produces two output pixels per CSS pixel in each dimension.
            - number, double
            - string, double
          - `max_wait_ms` union: Maximum loading wait in milliseconds before capture when the page continues loading content.
            - integer
            - string, int32
          - `ms_delay` union: Additional delay in milliseconds before taking the screenshot.
            - integer
            - string, int32
          - `render_when_ready` boolean, nullable: Whether capture waits for the page to call ScreenshotReady(). Rendering fails if the readiness signal is not received.
          - `selector` string, nullable: CSS selector of the element to capture. When set, the image is cropped to the matching element.
          - `viewport_height` union: Browser viewport height in CSS pixels.
            - integer
            - string, int32
          - `viewport_width` union: Browser viewport width in CSS pixels.
            - integer
            - string, int32
          - `disable_twemoji` boolean, nullable: Whether native emoji rendering is used instead of Twemoji. Null leaves the rendering default in effect.
          - `color_scheme` unknown
          - `timezone` string, nullable: IANA timezone identifier exposed to the rendered page, such as America/New_York or UTC.
          - `viewport_mobile` boolean, nullable: Whether the browser viewport emulates a mobile device.
          - `viewport_landscape` boolean, nullable: Whether the browser viewport emulates landscape orientation.
          - `viewport_touch` boolean, nullable: Whether the browser emulates support for touch input.
          - `media_type` unknown
          - `proxy_id` string, nullable: ID of the proxy configured for browser requests, or null when no proxy is configured.
          - `storage_destination_id` string, nullable: ID of the configured storage destination for rendered files, or null when none is configured.
          - `jumbo_max_height` union: Maximum output height in pixels for jumbo rendering. Used together with jumbo_max_width.
            - integer
            - string, int32
          - `jumbo_max_width` union: Maximum output width in pixels for jumbo rendering. Used together with jumbo_max_height.
            - integer
            - string, int32
          - `transparent_background` boolean, nullable: Whether the default browser background is transparent. Backgrounds explicitly set by the page still apply.
          - `request_overrides` RequestOverride[], nullable: Browser request overrides. Block rules match URL wildcard patterns and/or resource types; supplied matchers must all match.
            - `action` 'block', required
            - `url` string, nullable: URL wildcard pattern to match, using * for any sequence of characters. When resource_types is also supplied, both matchers must match.
            - `resource_types` RequestOverrideResourceType[], nullable: Resource types to match, supplied as an array of names, such as image, script, xhr, or fetch. Any listed type may match. When url is also supplied, it must match too.
        - object: Properties of a blocks template when it was created.
          - `template_type` 'blocks', required
          - `block_counts` object: Number of blocks of each type in the saved design, keyed by block type name.
          - `variables` TemplateVariable[]: Discovered template variables and their value requirements.
            - `mode` 'Required' | 'Ignore' | 'Fallback': How a block-template variable is handled when rendering.
            - `key` string: Variable name or path used in template_values, without Handlebars braces. Preserve its casing and nesting when supplying values.
            - `fallback_value` unknown
            - `kind_hint` 'String' | 'Boolean' | 'Integer' | 'Float' | 'Color' | 'Size' | 'Object' | 'Collection'
            - `helper_kind` 'None' | 'If' | 'Unless' | 'With' | 'Each'
          - `version` union: Saved template version identifier. Specify it when rendering to select this exact version.
            - integer
            - string, int64
          - `name` string, nullable: Optional display name for template discovery. Use id to identify the template in rendering and update requests.
          - `description` string, nullable: Optional notes about the template's purpose and intended use.
          - `device_scale` union: Screenshot pixel ratio. A value of 2 produces two output pixels per CSS pixel in each dimension.
            - number, double
            - string, double
          - `max_wait_ms` union: Maximum loading wait in milliseconds before capture when the page continues loading content.
            - integer
            - string, int32
          - `ms_delay` union: Additional delay in milliseconds before taking the screenshot.
            - integer
            - string, int32
          - `render_when_ready` boolean, nullable: Whether capture waits for the page to call ScreenshotReady(). Rendering fails if the readiness signal is not received.
          - `selector` string, nullable: CSS selector of the element to capture. When set, the image is cropped to the matching element.
          - `viewport_height` union: Browser viewport height in CSS pixels.
            - integer
            - string, int32
          - `viewport_width` union: Browser viewport width in CSS pixels.
            - integer
            - string, int32
          - `disable_twemoji` boolean, nullable: Whether native emoji rendering is used instead of Twemoji. Null leaves the rendering default in effect.
          - `color_scheme` unknown
          - `timezone` string, nullable: IANA timezone identifier exposed to the rendered page, such as America/New_York or UTC.
          - `viewport_mobile` boolean, nullable: Whether the browser viewport emulates a mobile device.
          - `viewport_landscape` boolean, nullable: Whether the browser viewport emulates landscape orientation.
          - `viewport_touch` boolean, nullable: Whether the browser emulates support for touch input.
          - `media_type` unknown
          - `proxy_id` string, nullable: ID of the proxy configured for browser requests, or null when no proxy is configured.
          - `storage_destination_id` string, nullable: ID of the configured storage destination for rendered files, or null when none is configured.
          - `jumbo_max_height` union: Maximum output height in pixels for jumbo rendering. Used together with jumbo_max_width.
            - integer
            - string, int32
          - `jumbo_max_width` union: Maximum output width in pixels for jumbo rendering. Used together with jumbo_max_height.
            - integer
            - string, int32
          - `transparent_background` boolean, nullable: Whether the default browser background is transparent. Backgrounds explicitly set by the page still apply.
          - `request_overrides` RequestOverride[], nullable: Browser request overrides. Block rules match URL wildcard patterns and/or resource types; supplied matchers must all match.
            - `action` 'block', required
            - `url` string, nullable: URL wildcard pattern to match, using * for any sequence of characters. When resource_types is also supplied, both matchers must match.
            - `resource_types` RequestOverrideResourceType[], nullable: Resource types to match, supplied as an array of names, such as image, script, xhr, or fetch. Any listed type may match. When url is also supplied, it must match too.
    - object: Data for *_created events.
      - `entity` WebhookEntityReference, required: Identifies the resource an event is about.
        - `type` 'webhook' | 'template' | 'image' | 'proxy' | 'storage_destination' | 'og_config' | 'api_key' | 'organization', required: The kind of resource a webhook event is about.
        - `id` string, required: The resource's ID, as used elsewhere in the API.
      - `properties` ProxyCreatedData, required: Properties of a proxy when it was created. The password is never included.
        - `name` string, required: Display name for the proxy.
        - `url` string, required: Proxy server URL.
        - `port` union: Proxy server port, or null to use the URL scheme's default.
          - integer
          - string, uint16
        - `bypass_hosts` string[], required: Hosts that bypass the proxy.
        - `username` string, nullable: Proxy username, or null when authentication is not configured.
        - `password_assigned` boolean: Whether a password is set.
        - `enabled` boolean: Whether the proxy is enabled.
    - object: Data for *_created events.
      - `entity` WebhookEntityReference, required: Identifies the resource an event is about.
        - `type` 'webhook' | 'template' | 'image' | 'proxy' | 'storage_destination' | 'og_config' | 'api_key' | 'organization', required: The kind of resource a webhook event is about.
        - `id` string, required: The resource's ID, as used elsewhere in the API.
      - `properties` StorageDestinationCreatedData, required: Properties of a storage destination when it was created. Secret access keys are never included.
        - `name` string, required: Display name for the destination.
        - `enabled` boolean: Whether the destination is enabled.
        - `hcti_storage_disabled` boolean: Whether rendered files saved here are excluded from HCTI storage and the HCTI CDN.
        - `connection_info` union, required: Provider-specific storage connection details. Secret access keys are never returned.
          - object: Connection details for Amazon S3.
            - `provider` 'aws_s3', required
            - `region` 'af-south-1' | 'ap-east-1' | 'ap-east-2' | 'ap-northeast-1' | 'ap-northeast-2' | 'ap-northeast-3' | 'ap-south-1' | 'ap-south-2' | 'ap-southeast-1' | 'ap-southeast-2' | 'ap-southeast-3' | 'ap-southeast-4' | 'ap-southeast-5' | 'ap-southeast-6' | 'ap-southeast-7' | 'ca-central-1' | 'ca-west-1' | 'eu-central-1' | 'eu-central-2' | 'eu-north-1' | 'eu-south-1' | 'eu-south-2' | 'eu-west-1' | 'eu-west-2' | 'eu-west-3' | 'il-central-1' | 'me-central-1' | 'me-south-1' | 'mx-central-1' | 'sa-east-1' | 'us-east-1' | 'us-east-2' | 'us-west-1' | 'us-west-2', required
            - `role_arn` string, required: ARN of the IAM role HCTI assumes to access the bucket. Configure its trust policy for this organization before saving.
            - `bucket` string, required: Name of the existing bucket or Space. HCTI does not create it.
            - `key_prefix` string, nullable: Optional prefix for object keys within the bucket. Omitted or null uses the bucket root.
          - object: Connection details for Cloudflare R2.
            - `provider` 'cloudflare_r2', required
            - `cloudflare_account_id` string, required: The 32-character hexadecimal Cloudflare account ID that owns the bucket.
            - `cloudflare_jurisdiction` unknown
            - `access_key_id` string, required: S3-compatible access key ID. For Google Cloud Storage, use an HMAC access ID beginning with GOOG.
            - `bucket` string, required: Name of the existing bucket or Space. HCTI does not create it.
            - `key_prefix` string, nullable: Optional prefix for object keys within the bucket. Omitted or null uses the bucket root.
          - object: Connection details for Backblaze B2.
            - `provider` 'backblaze_b2', required
            - `region` 'us-west-000' | 'us-west-001' | 'us-west-002' | 'us-west-004' | 'us-east-005' | 'ca-east-006' | 'eu-central-003', required
            - `access_key_id` string, required: S3-compatible access key ID. For Google Cloud Storage, use an HMAC access ID beginning with GOOG.
            - `bucket` string, required: Name of the existing bucket or Space. HCTI does not create it.
            - `key_prefix` string, nullable: Optional prefix for object keys within the bucket. Omitted or null uses the bucket root.
          - object: Connection details for DigitalOcean Spaces.
            - `provider` 'digitalocean_spaces', required
            - `region` 'nyc3' | 'ams3' | 'sfo2' | 'sfo3' | 'sgp1' | 'lon1' | 'fra1' | 'tor1' | 'blr1' | 'syd1' | 'atl1' | 'ric1' | 'mkc1', required
            - `access_key_id` string, required: S3-compatible access key ID. For Google Cloud Storage, use an HMAC access ID beginning with GOOG.
            - `bucket` string, required: Name of the existing bucket or Space. HCTI does not create it.
            - `key_prefix` string, nullable: Optional prefix for object keys within the bucket. Omitted or null uses the bucket root.
          - object: Connection details for Wasabi.
            - `provider` 'wasabi', required
            - `region` 'us-east-1' | 'us-east-2' | 'us-central-1' | 'us-west-1' | 'us-west-2' | 'ca-central-1' | 'eu-central-1' | 'eu-central-2' | 'eu-west-1' | 'eu-west-2' | 'eu-west-3' | 'eu-south-1' | 'ap-northeast-1' | 'ap-northeast-2' | 'ap-southeast-1' | 'ap-southeast-2', required
            - `access_key_id` string, required: S3-compatible access key ID. For Google Cloud Storage, use an HMAC access ID beginning with GOOG.
            - `bucket` string, required: Name of the existing bucket or Space. HCTI does not create it.
            - `key_prefix` string, nullable: Optional prefix for object keys within the bucket. Omitted or null uses the bucket root.
          - object: Connection details for Google Cloud Storage.
            - `provider` 'google_cloud_storage', required
            - `access_key_id` string, required: S3-compatible access key ID. For Google Cloud Storage, use an HMAC access ID beginning with GOOG.
            - `bucket` string, required: Name of the existing bucket or Space. HCTI does not create it.
            - `key_prefix` string, nullable: Optional prefix for object keys within the bucket. Omitted or null uses the bucket root.
          - object: Connection details for another S3-compatible provider.
            - `provider` 'other_s3_compatible', required
            - `endpoint` string, required: Public HTTPS endpoint of the S3-compatible service. Do not include a path, query string, fragment, or credentials.
            - `region` string, nullable: Signing region expected by the service. Omit or set to null to use us-east-1.
            - `force_path_style` boolean, nullable: Whether to put the bucket name in the URL path instead of the hostname. Omitted or null defaults to true.
            - `access_key_id` string, required: S3-compatible access key ID. For Google Cloud Storage, use an HMAC access ID beginning with GOOG.
            - `bucket` string, required: Name of the existing bucket or Space. HCTI does not create it.
            - `key_prefix` string, nullable: Optional prefix for object keys within the bucket. Omitted or null uses the bucket root.
        - `secret_access_key_assigned` boolean: Whether a secret access key is set. Amazon S3 destinations use a role instead and report false.
    - object: Data for *_created events.
      - `entity` WebhookEntityReference, required: Identifies the resource an event is about.
        - `type` 'webhook' | 'template' | 'image' | 'proxy' | 'storage_destination' | 'og_config' | 'api_key' | 'organization', required: The kind of resource a webhook event is about.
        - `id` string, required: The resource's ID, as used elsewhere in the API.
      - `properties` union, required: Properties of an Open Graph image configuration when it was created. config_type identifies the html_css or templated variant.
        - object: Properties of an html_css Open Graph configuration when it was created.
          - `config_type` 'html_css', required
          - `default_options` OgDefaultImageOptions
            - `css` string, nullable: CSS injected into the loaded page to override its styles.
            - `device_scale` union: Adjusts the pixel ratio used for the screenshot. Minimum: 0.1. Maximum: 3. HTML and template renders default to 2; URL renders default to 1.
              - …
            - `max_wait_ms` union: Sets a limit on how long to wait before taking the screenshot when the page continues loading irrelevant content. Minimum: 500. Maximum: 10000 and subject to the account plan limit.
              - …
            - `ms_delay` union: Adds extra time in milliseconds before taking the screenshot so JavaScript can execute. Minimum: 0. Maximum: 10000.
              - …
            - `render_when_ready` boolean, nullable: Waits until the page signals that the screenshot is ready. The image fails if the readiness signal is never sent.
            - `selector` string, nullable: A CSS selector for an element in the HTML. We’ll crop the image to this specific element.
            - `viewport_height` union: Sets the height of Chrome's viewport and disables automatic cropping. Minimum: 1. Maximum: 6000. Both viewport dimensions must be supplied together.
              - …
            - `viewport_width` union: Sets the width of Chrome's viewport and disables automatic cropping. Minimum: 1. Maximum: 6000. Both viewport dimensions must be supplied together.
              - …
            - `disable_twemoji` boolean, nullable: Set explicitly to false to inject Twemoji into the captured URL page. Omitted, null, or true leaves the page's emoji handling unchanged and does not disable the website's own emoji scripts.
            - `color_scheme` unknown
            - `timezone` string, nullable: Sets the IANA timezone used by Chrome while rendering. Must be a recognized IANA timezone identifier.
            - `block_consent_banners` boolean, nullable: Attempt to block cookie/consent banners from displaying.
            - `identify_as_hcti` boolean, nullable: Identify the top-level page navigation as an HCTI screenshot request using the X-HCTI-SCREENSHOT header.
            - `headers` object, nullable: HTTP headers to include on top-level page navigations to the requested URL's origin and any additional_header_origins. Supports up to 20 headers with names up to 512 ASCII characters and values up to 8192 UTF-8 bytes. For GET and form-encoded requests, repeat this parameter using the format `headers=name:value`.
            - `additional_header_origins` string[], nullable: Additional exact HTTP or HTTPS origins allowed to receive custom headers. Supports up to 20 unique origins of up to 512 UTF-8 bytes each. Origins must use the format scheme://host[:port] without a path; duplicates are ignored. For GET and form-encoded requests, repeat this parameter for each origin.
            - `include_headers_on_subrequests` boolean, nullable: Include custom headers on subrequests to the requested URL's origin and any additional_header_origins. Defaults to false. Requires at least one header.
            - `viewport_mobile` boolean, nullable: Specifies whether the page uses mobile viewport behavior, including its viewport meta tag.
            - `viewport_landscape` boolean, nullable: Specifies whether the emulated viewport is in landscape orientation.
            - `viewport_touch` boolean, nullable: Specifies whether the emulated viewport supports touch events.
            - `media_type` unknown
            - `proxy_id` string, nullable
            - `storage_destination_id` string, nullable
            - `transparent_background` boolean, nullable: Specifies whether the image is rendered with a transparent background.
            - `request_overrides` RequestOverride[], nullable: Rules that override browser network requests. The block action blocks requests matching a URL wildcard pattern and/or resource types. When both matchers are supplied, both must match. A request is blocked if any block rule matches. Omitted, null, or an empty array adds no overrides. Requires a paid plan. Set default_options.request_overrides to a JSON array. Maximum 100 rules and 512 characters per URL pattern. Each block rule requires a nonempty URL pattern or at least one resource type; supplied matchers cannot be empty. Not supported in hcti: meta tags.
              - …
          - `css` MaybeTruncatedString: Text that may be truncated for size: the full text when it is short, otherwise its start and end with its full length.
            - `value` string, required: The text, or its start when truncated is true.
            - `truncated` boolean: Whether the text was cut to keep the payload small. When true, value holds its start and ender its last characters; fetch the resource for the full text.
            - `length` union: Length of the full text in characters.
              - …
            - `ender` string, nullable: The full text's last characters when truncated is true; null otherwise.
          - `extract_values` boolean: Whether image options are extracted from page metadata. When disabled, only the configured defaults are used.
          - `name` string, nullable: Optional display name.
          - `description` string, nullable: Optional description.
          - `base_url` string, required: Base URL of the pages this configuration generates images for.
          - `optimization_mode` 'no_optimization' | 'post_process' | 'set_viewport': How images are sized for different social platforms.
          - `enabled` boolean: Whether the configuration is enabled to serve Open Graph images.
          - `refresh_interval_s` union: Seconds before a generated image is refreshed.
            - integer
            - string, uint32
        - object: Properties of a templated Open Graph configuration when it was created.
          - `config_type` 'templated', required
          - `template_id` string, required: ID of the template used to render images.
          - `template_version` union: Template version used to render images. Null means the latest version is used.
            - integer
            - string, int64
          - `template_values_mapping` OgTemplateValueMapping[], nullable: Mappings from page metadata to template fields.
            - `template_key` string, required: Template field path to populate, up to 128 characters.
            - `meta_key` string, nullable: Meta tag name or property, such as og:title or twitter:description. Supply this or fallback, not both.
            - `fallback` unknown
          - `headers` object, nullable: Custom HTTP headers sent on top-level page navigations to the source website's origin and any additional_header_origins.
          - `additional_header_origins` string[], nullable: Additional origins allowed to receive custom headers.
          - `name` string, nullable: Optional display name.
          - `description` string, nullable: Optional description.
          - `base_url` string, required: Base URL of the pages this configuration generates images for.
          - `optimization_mode` 'no_optimization' | 'post_process' | 'set_viewport': How images are sized for different social platforms.
          - `enabled` boolean: Whether the configuration is enabled to serve Open Graph images.
          - `refresh_interval_s` union: Seconds before a generated image is refreshed.
            - integer
            - string, uint32
    - object: Data for *_created events.
      - `entity` WebhookEntityReference, required: Identifies the resource an event is about.
        - `type` 'webhook' | 'template' | 'image' | 'proxy' | 'storage_destination' | 'og_config' | 'api_key' | 'organization', required: The kind of resource a webhook event is about.
        - `id` string, required: The resource's ID, as used elsewhere in the API.
      - `properties` ApiKeyCreatedData, required: Properties of an API key when it was created. The secret key is never included.
        - `api_id` string, required: API ID used as the username when authenticating API requests.
        - `name` string, nullable: Display name, if one was given.
        - `description` string, nullable: Description of the key's purpose, if provided.
        - `enabled` boolean: Whether the key is enabled.
        - `all_future_permissions` boolean: Whether the key automatically receives all current and future permissions.
        - `permissions` string[], required
    - object: Data for *_updated events.
      - `entity` WebhookEntityReference, required: Identifies the resource an event is about.
        - `type` 'webhook' | 'template' | 'image' | 'proxy' | 'storage_destination' | 'og_config' | 'api_key' | 'organization', required: The kind of resource a webhook event is about.
        - `id` string, required: The resource's ID, as used elsewhere in the API.
      - `changes` object, required: Changed properties, keyed by property path. Nested objects are flattened into dotted paths such as authentication.username. Each value is a scalar, a whole array, or, for large text such as template html, a truncated text value. Unchanged properties are omitted.
    - object: Data for *_deleted events.
      - `entity` WebhookEntityReference, required: Identifies the resource an event is about.
        - `type` 'webhook' | 'template' | 'image' | 'proxy' | 'storage_destination' | 'og_config' | 'api_key' | 'organization', required: The kind of resource a webhook event is about.
        - `id` string, required: The resource's ID, as used elsewhere in the API.
    - object: Data for organization_plan_changed: the organization's effective plan changed.
      - `previous_plan` string, nullable: Plan tier before the change: Free, Basic, Pro, Scale, or No Plan. Null if it is unknown.
      - `previous_credits_allowed` union: Image credits per billing period included in the previous plan, or null if it is unknown.
        - integer
        - string, int32
      - `new_plan` string, nullable: Plan tier after the change: Free, Basic, Pro, Scale, or No Plan. Null if it is unknown.
      - `new_credits_allowed` union: Image credits per billing period included in the new plan, or null if it is unknown.
        - integer
        - string, int32
      - `changed_at` string, date-time: UTC timestamp when the change took effect.
    - object: Data for organization_usage_reset: a new billing period started and the organization's image credit usage was reset.
      - `previous_period_credits_used` union: Image credits used in the period that ended, or null if usage could not be read before the reset.
        - integer
        - string, uint64
      - `period_start` string, date-time: UTC start of the new billing period, which is also when the previous one ended.
      - `period_end` string, date-time, nullable: UTC end of the new billing period, when usage resets next. Null if it is unknown.
      - `plan` string, nullable: Plan tier in effect for the new period: Free, Basic, Pro, Scale, or No Plan. Null if it is unknown.
      - `credits_allowed` union: Image credits per billing period included in the plan, or null if it is unknown.
        - integer
        - string, int32
    - object: Data for organization_usage_alert: the organization crossed a usage threshold in the current billing period. Sent once per threshold per period.
      - `threshold_percent` union: Threshold crossed, as a percentage of the plan's included image credits: 80 or 100.
        - integer
        - string, int32
      - `credits_used` union: Image credits used in the current period when the alert was raised.
        - integer
        - string, uint64
      - `credits_allowed` union: Image credits per billing period included in the plan.
        - integer
        - string, int32
      - `period_start` string, date-time: UTC start of the billing period the alert is for.
  - `payload_withheld` boolean: True when your key can't read this event type's resources, so data is left out. Its destinations are still listed.
  - `destinations` WebhookEventDestination[], required: Each webhook the event was sent to, with its status and send attempts.
    - `webhook_id` string, required: ID of the webhook the event was sent to.
    - `webhook_name` string, required: The webhook's name.
    - `status` 'pending' | 'in_flight' | 'retry_scheduled' | 'succeeded' | 'failed' | 'invalidated' | 'cancelled', required
    - `invalidation_reason` unknown
    - `next_attempt_at` string, date-time, nullable: When the next attempt is scheduled, while status is retry_scheduled.
    - `completed_at` string, date-time, nullable: When sending to this webhook reached a final status.
    - `attempts` WebhookDeliveryAttempt[], required: Send attempts, newest first.
      - `attempt` union, required: Attempt number, starting at 1.
        - integer
        - string, int32
      - `url` string, required: The URL sent to, without query parameters.
      - `started_at` string, date-time, required
      - `completed_at` string, date-time, required
      - `http_status` union: Your endpoint's HTTP status, if it responded.
        - integer
        - string, int32
      - `error` unknown
      - `manual_retry` boolean: True when the attempt was a manual retry.
      - `config` WebhookAttemptConfig: A version of a webhook's delivery settings, as used by an attempt. Secret parameter values are never returned.
        - `version` union, required: The webhook's config_version at the time of the attempt.
          - integer
          - string, int32
        - `signing_enabled` boolean: Whether the attempt was signed with the webhook's signing secret.
        - `parameters` WebhookParameter[], required: Headers and query parameters sent with the attempt. Secret values are omitted.
          - `location` 'header' | 'query_parameter', required: Where a webhook parameter is sent on each delivery.
          - `key` string, required: Header or query parameter name.
          - `secret` boolean: Whether the value is secret. Secret values are stored encrypted and never returned.
          - `value` string, nullable: The parameter value, or null for secret parameters.
  - `event_id` string, required: Unique ID of this event. It is the same for every webhook that receives the event, and on every retry.
  - `type` 'webhook_test' | 'template_created' | 'template_updated' | 'template_deleted' | 'image_deleted' | 'image_stored' | 'proxy_created' | 'proxy_updated' | 'proxy_deleted' | 'storage_destination_created' | 'storage_destination_updated' | 'storage_destination_deleted' | 'og_config_created' | 'og_config_updated' | 'og_config_deleted' | 'api_key_created' | 'api_key_updated' | 'api_key_deleted' | 'organization_plan_changed' | 'organization_usage_reset' | 'organization_usage_alert', required: An event type a webhook can receive. webhook_test deliveries are sent automatically and cannot be subscribed to.
  - `schema_version` union, required: Version of this event type's data shape. Increases only for breaking changes.
    - integer
    - string, int32
  - `occurred_at` string, date-time, required: UTC time the event happened.
  - `source` union, required: What made the call that caused an event. channel identifies the shape.
    - object: A call authenticated with an API key.
      - `channel` 'api', required
      - `api_id` string, nullable: API ID of the key that made the call, as used for Basic authentication.
      - `ip` string, nullable: IP address the call came from, if known.
      - `user_agent` string, nullable: User agent the call was made with, if sent.
    - object: A call made by a signed-in user from the dashboard.
      - `channel` 'dashboard', required
      - `user_id` string, required: ID of the user who made the call.
      - `ip` string, nullable: IP address the call came from, if known.
      - `user_agent` string, nullable: User agent the call was made with, if sent.
    - object: A call made by an MCP client.
      - `channel` 'mcp', required
      - `client_name` string, nullable: Name the MCP client registered with, if it gave one.
      - `tool_name` string, nullable: MCP tool that made the call.
      - `ip` string, nullable: IP address the call came from, if known.
      - `user_agent` string, nullable: User agent the call was made with, if sent.
    - object: An unauthenticated call, such as fetching an image by its signed URL.
      - `channel` 'anonymous', required
      - `ip` string, nullable: IP address the call came from, if known.
      - `user_agent` string, nullable: User agent the call was made with, if sent.
    - object: HCTI acting on its own, such as billing updates, scheduled work, and support actions. No caller details are included.
      - `channel` 'system', required

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `429`: Too Many Requests

## Changes

- **2026-10-30** `146fbf859b2d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/htmlcsstoimage/apis/html-css-to-image-api/changes/v1/webhooks/events/:id/get.md)

---

[API](https://skmtc.dev/htmlcsstoimage/apis/html-css-to-image-api.md) - [All operations](https://skmtc.dev/htmlcsstoimage/apis/html-css-to-image-api/llms.txt) - [OpenAPI document](https://skmtc.dev/htmlcsstoimage/apis/html-css-to-image-api/revisions/100550373ae1?raw)
