Skip to content

REST API

All routes are registered in includes/class-coverkit-rest.php on namespace coverkit/v1.

Base URL:

/wp-json/coverkit/v1
MethodRouteCallbackPermission
GET/image/{context_type}[/{context_id}][.{extension}]REST::get_image()get_image_permission() (currently allows public access)
GET/template[/{template_id}]REST::handle_template()public
POST/clear-cacheREST::clear_cache()edit_posts
GET/screenshotREST::get_screenshot()edit_posts
POST/previewREST::generate_preview()edit_post for given post_id
GET/autocompletersREST::get_autocompleters()public
GET/canvas/{filename}REST::serve_canvas_image()public
GET/opengraph/{template_id}/{post_id}.{extension}REST::get_opengraph_image()public
GET/use-casesREST::get_use_cases()edit_posts
GET/use-case/{use_case}/{template_id}/{post_id}.{extension}REST::get_use_case_image()edit_post when post_id > 0, else edit_posts
POST/use-case/previewREST::generate_use_case_preview()use_case_preview_permission()
GET /wp-json/coverkit/v1/image/{context_type}/{context_id}.png?width=1200&reload=1

Resolves a template (directly when context_type is coverkit, otherwise via get_template_by_context()), generates via Renderer::generate_from_content(), copies to wp-content/cache/coverkit/, and streams bytes.

GET /wp-json/coverkit/v1/template?context_type=post&context_id=123

Returns template structure for the editor. Requires context_type; optional context_id and template_id route segment.

POST /wp-json/coverkit/v1/preview

Body params:

  • content (required) — inner blocks or shape content
  • post_id (required)
  • save_to_uploads (optional)
  • format, width, quality (optional)
  • meta (optional) — canvas attributes when previewing a coverkit post

Calls Renderer::generate_from_content() with force => true. Response includes url and data (file path, dimensions, format).

GET /wp-json/coverkit/v1/opengraph/{template_id}/{post_id}.png

Public route used in og:image meta. Generation key is opengraph inside Renderer::generate().

GET /wp-json/coverkit/v1/use-cases

Response envelope:

{
"use_cases": {
"opengraph": {
"slug": "opengraph",
"label": "Open Graph image",
"description": "...",
"cardinality": "single",
"supports": [],
"settings_schema": {},
"recommended_settings": { "dimensions": { "width": 1200, "height": 630 } },
"output_profile": { "crop": false, "dimensions": { "width": 1200, "height": 630 } },
"mapping_sources": { "post_title": { "required": true } }
}
}
}
GET /wp-json/coverkit/v1/use-case/sidebar_image/123/456.png?reload=1

Streams generated bytes after Renderer::generate( $use_case, $template_id, $post_id, $options ).

POST /wp-json/coverkit/v1/use-case/preview

Body: use_case, template_id, content, assignment (required); optional post_id. Sanitizes assignment via Use_Case_Storage::sanitize_assignment() and generates from unsaved editor content.

GET /wp-json/coverkit/v1/autocompleters

Returns tag/label pairs for shape text tokens; extend with coverkit_autocompleter_options.

GET /wp-json/coverkit/v1/canvas/{hash}.png
GET /wp-json/coverkit/v1/canvas/{hash}-600x315.png

Serves files from _cache/generator/. Resized widths must be in get_coverkit_responsive_sizes() (default: 100, 300, 400, 600, 800, 1200, 1920). Cache-Control max-age from coverkit_canvas_image_cache_time (default one year).

GET /wp-json/coverkit/v1/screenshot?url=https://example.com&width=1200&height=630

Requires edit_posts. URL is validated to reduce SSRF risk. Note: route args are registered as width / height / viewport_width / viewport_height, but get_screenshot() reads screenshotWidth, screenshotHeight, viewportWidth, viewportHeight — pass those names until the route args are aligned.

Action coverkit_generate_image processes queued URLs stored in option coverkit_generate_image (see REST::handle_generate_image()).