- Docs
- Management API
- OG configurations API
OG configurations API
Manage configurations that generate automatic Open Graph images for your site’s pages.
Infrastructure as code
Section titled “Infrastructure as code”Manage this resource alongside your application with Terraform or Pulumi. See infrastructure as code for application setups, credentials, and lifecycle behavior.
Operations
Section titled “Operations”Reads share 100 requests/minute, and writes share 20 requests/minute, per organization across REST and MCP. See authentication, rate limits, and the interactive API reference.
Create a new OG configuration
/v1/og-configsPermission required: og_configs:create_update
MCP tool: create_og_config
List OG configurations
/v1/og-configsPermission required: og_configs:read
MCP tool: list_og_configs
Retrieve an OG configuration
/v1/og-configs/{id}Permission required: og_configs:read
MCP tool: get_og_config
Update an OG configuration
/v1/og-configs/{id}Permission required: og_configs:create_update
MCP tool: update_og_config
Delete an OG configuration
/v1/og-configs/{id}Permission required: og_configs:delete
MCP tool: delete_og_config
Create a screenshot configuration
Section titled “Create a screenshot configuration”Set config_type to html_css to render page HTML/CSS using default image options and, optionally, options extracted from page metadata.
curl 'https://hcti.io/v1/og-configs' \ --user "$HCTI_API_ID:$HCTI_API_KEY" \ --header 'Content-Type: application/json' \ --data '{ "config_type": "html_css", "name": "Website screenshots", "base_url": "https://example.com", "disabled": false, "optimization_mode": "post_process", "extract_values": false, "default_options": { "viewport_width": 1200, "viewport_height": 630, "device_scale": 1 } }'Shared fields
Section titled “Shared fields”| Field | Description |
|---|---|
config_type |
Required: html_css or templated. Determines the request’s remaining fields. |
name |
Required, up to 255 characters. |
base_url |
Required HTTPS origin, such as https://example.com. No path, query, fragment, or credentials. |
description |
Optional, up to 1,023 characters. |
disabled |
Defaults to false; response uses enabled. |
refresh_interval_s |
Seconds before cached images become eligible for refresh. Minimum depends on the plan; maximum one year. Defaults to 86,400 seconds (24 hours). See refresh behavior and plan options. |
optimization_mode |
no_optimization retains dimensions; post_process (default) adapts one render to social sizes; set_viewport renders for crawler-specific viewport sizes and consumes multiple renders. |
HTML/CSS fields
Section titled “HTML/CSS fields”Set image rendering defaults in default_options using the supported parameters below.
extract_values defaults to false. When true, extracted page metadata overrides configured default image options. See OG parameter support.
| Name | Type | Description |
|---|---|---|
| css | String | CSS used to style the rendered image or modify a captured page. |
| additional_header_origins | Array | Allow custom headers on requests to specific additional HTTP or HTTPS origins. |
| block_consent_banners | Boolean | When set to true, automatically blocks cookie consent banners and popups on websites. Most useful for URL screenshots. |
| color_scheme | String | Set Chrome to render in light or dark mode. Affects websites using prefers-color-scheme. |
| device_scale | Double | Control resolution by adjusting the pixel ratio from 0.1 to 3. Higher values increase image quality and file size. |
| disable_twemoji | Boolean | HTML/CSS and template images use Twemoji by default; set true to disable it. URL images inject Twemoji only when explicitly set to false. |
| headers | Object | Add custom HTTP headers when screenshotting a URL. Headers are restricted to the requested URL's origin and any additional_header_origins. |
| identify_as_hcti | Boolean | Add X-HCTI-SCREENSHOT: 1 to the top-level request when screenshotting a URL. |
| include_headers_on_subrequests | Boolean | Also add custom headers to same-origin subrequests and subrequests matching additional_header_origins. |
| max_wait_ms | Integer | Set a maximum time limit from 500 to 10000 milliseconds for waiting before taking the screenshot. |
| media_type | String | Set Chrome to render using screen or print CSS media styles. |
| ms_delay | Integer | Delay before generating the image. Useful when waiting for JavaScript; start with 500 milliseconds. |
| proxy_id | String | Route outbound traffic through one of your organization's configured HTTP proxies. Available on the 10,000 images/month plan or higher. |
| render_when_ready | Boolean | Wait to generate the image until JavaScript calls ScreenshotReady(). |
| request_overrides | Array | Block browser network requests matching a URL wildcard pattern and/or resource types. Requires a paid plan. |
| selector | String | Crop the image to an element matching this CSS selector, such as section#complete-toolkit.container-lg. |
| storage_destination_id | String | Save rendered files to one of your organization's configured storage destinations. Available on the 10,000 images/month plan or higher. |
| timezone | String | Set Chrome's timezone with an IANA identifier such as America/New_York. |
| transparent_background | Boolean | Set to true to render with a transparent background. |
| viewport_height | Integer | Set the height of Chrome's viewport. Both dimensions must be set when using either. |
| viewport_landscape | Boolean | Set Chrome's viewport to landscape mode. |
| viewport_mobile | Boolean | Set Chrome's viewport to emulate a mobile device. |
| viewport_touch | Boolean | Set Chrome's viewport to support touch events. |
| viewport_width | Integer | Set the width of Chrome's viewport. Both dimensions must be set when using either. |
Create a templated configuration
Section titled “Create a templated configuration”For config_type: "templated", supply template_id. The referenced template must belong to your organization. To submit this example, save it as og-config.json, replace the template ID, and send it using --data @og-config.json with the same endpoint and authentication above.
This example includes optional headers for fetching the source page. Omit headers and additional_header_origins if you don’t need them.
{ "config_type": "templated", "name": "Blog social cards", "base_url": "https://example.com", "template_id": "your-template-id", "headers": { "X-Site-Token": "your-site-token" }, "additional_header_origins": ["https://www.example.com"], "template_values_mapping": [ { "template_key": "headline", "fallback": "titles" }, { "template_key": "summary", "fallback": "descriptions" } ]}Use the Template Editor to design the card and define the template keys, or create a template through the API. Use those keys in template_values_mapping. template_version is optional; omitted/null uses the latest version. Each of up to 32 mappings supplies a template_key and exactly one of:
meta_key: a page metadata key to extract.fallback:titlesordescriptions, using HCTI’s title or description fallbacks.
The optional fetching settings shown above apply when extracting template values from the source page:
headerssupplies custom HTTP headers for the source origin.additional_header_originsallows those headers to be sent to other specified origins, such ashttps://www.example.comafter a redirect.
Read the response and use the configuration
Section titled “Read the response and use the configuration”Create, get, and update return 200 OK with the configuration fields, timestamps, and:
| Field | Use |
|---|---|
id |
Management API/MCP identifier for reading, updating, or deleting the configuration. |
domain_id |
Identifier used in the public OG image URL. |
enabled |
Whether the configuration can serve OG images. |
Use domain_id to add the OG image URL to your pages. Creating a configuration does not itself render every page. The public OG image URL needs no API key or HMAC signature.
List, update, and delete
Section titled “List, update, and delete”- List configurations:
GET /v1/og-configsreturns configurations newest first, including disabled configurations. - Paginate: Use
count(1–100, default 10) and passpagination.next_page_startas the next request’spage_start. Stop when the cursor isnull. See pagination. - Retrieve one configuration: Use
GET /v1/og-configs/{id}.
POST /v1/og-configs/{id} replaces the configuration. Send config_type, required fields, and every optional setting you want to keep; omitted settings clear or reset. To disable it temporarily, send the complete configuration with disabled: true.
DELETE /v1/og-configs/{id} returns 204 No Content on success. Removing or disabling a configuration affects its ability to serve OG images; remove or replace the corresponding metadata on your site as appropriate.
Invalid settings return 400; inaccessible references can return 404; conflicting configurations can return 409. Plan and permission errors return 403. Check the response message before retrying.
Create accepts the same request under content; update takes id and content. Get/delete take id, and list accepts count and page_start. See MCP tools.
For example: “Use HCTI to list my OG configurations, inspect the blog configuration, and explain its refresh interval and template mappings.” This needs og_configs:read. Creating or changing a configuration also needs og_configs:create_update approved through OAuth.
Need help?
Talk to a human. Email support@htmlcsstoimage.com and we’ll help you get started.