---
title: "Create a full print wrap for a cover (async)"
method: POST
path: "/api/v1/wraps"
tags: ["Wraps"]
---

# Create a full print wrap for a cover (async)

`POST /api/v1/wraps`

## Request

- Base URL: `https://beyourcover.com`
- URL: `https://beyourcover.com/api/v1/wraps`
- Auth: HTTP bearer

Generates back-cover artwork from an existing cover, extends the cover art out to the full front print panel, lays the supplied text out on the back, and composites a print-ready wrap: a full-resolution flat, a preview, and a KDP-ready PDF. Costs 2 credits for `designStyle: "solid"` and 4 for the AI styles; the whole amount is refunded if the job fails. The book's first wrap costs 0 credits when its marketing kit was opened in the app this billing period: the `202` then says `credits_reserved: 0` and `included_format: true`, and a failed job does not give that included wrap back. Amazon KDP only. Call `GET /api/v1/wraps/calculate` first to confirm the geometry. Set the back-cover text and the spine lettering in any of the wrap editor's fonts with `fontFamily`.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `coverId` string, uuid, required: Public id of the cover to use as the front panel.
  - `trimWidth` number, required: Trim width in inches; must be a KDP trim size for the binding.
  - `trimHeight` number, required: Trim height in inches.
  - `pageCount` integer, required: Interior page count. Drives spine width. Paperback 24-830, hardcover 76-550.
  - `paperType` 'white' | 'cream' | 'premium_color' | 'standard_color', required
  - `bindingType` 'paperback' | 'hardcover'
  - `designStyle` 'solid' | 'textured' | 'continuation' | 'complementary': `solid` fills the back with a flat colour (2 credits, no AI). `textured` echoes the front's motifs as a subtle pattern. `continuation` treats the front as the right half of a panorama. `complementary` designs new but cohesive artwork.
  - `preset` 'standard' | 'blurb-only' | 'minimal': Where the text goes. `standard` = tagline + blurb + author bio; `blurb-only` = one large text area; `minimal` = tagline only.
  - `fontFamily` 'Arimo' | 'Playfair Display' | 'Merriweather' | 'Montserrat' | 'Dancing Script' | 'Roboto Slab' | 'Open Sans' | 'Source Code Pro' | 'Poppins' | 'Cinzel' | 'Cormorant Garamond' | 'Great Vibes' | 'Abril Fatface' | 'Libre Baskerville': Font for the back-cover text and the spine lettering: one of the families the browser wrap editor offers. The text is auto-fitted in this font, so a wider face still fits its space.
  - `solidColor` string: Hex colour for `designStyle: "solid"`. Omitted, the dominant colour of the front cover is sampled.
  - `spineColor` string: Hex spine colour. Omitted, it is sampled from the back artwork.
  - `customInstructions` string: Extra art direction appended to the back-cover prompt. Ignored for `solid`.
  - `tagline` string: Short hook line, set in bold at the top of the back cover (presets `standard` and `minimal`).
  - `blurb` string: Main back-cover description. Auto-fitted to its band; a warning is returned if it will not fit even at the minimum point size.
  - `authorBio` string: Short author biography, set below the blurb (preset `standard`).
  - `spineTitle` string: Spine lettering. Dropped with a warning when `canHaveSpineText` is false.
  - `spineAuthor` string: Author name on the spine.
  - `external_ref` string
  - `webhookUrl` string

## Response `200`

Idempotent replay of an existing job with the same `Idempotency-Key`.

- JobReplay: 200 envelope returned when an Idempotency-Key matches an existing job. Unlike the fresh 202, `status` reflects the job's current state and `operation` is always present.
  - `jobId` string, uuid, required
  - `status` 'queued' | 'processing' | 'completed' | 'failed', required: Current status of the previously created job.
  - `operation` 'generate' | 'variation' | 'edit_image' | 'upscale' | 'audiobook_cover' | 'remove_text' | 'generate_reference' | 'wrap' | 'wrap_extend_front', required
  - `credits_reserved` integer: What the ORIGINAL job reserved. Returned by the variations, edit-image, upscale, audiobook-cover, remove-text, wraps and extend-front endpoints when the job recorded it.
  - `included_format` boolean: true when the book's marketing kit paid for the ORIGINAL job instead of credits. Returned by the edit-image, upscale, audiobook-cover, remove-text, wraps and extend-front endpoints.
  - `external_ref` string, nullable, required: The external_ref stored on the ORIGINAL job.
  - `created_at` string, date-time, required
  - `poll_url` string, required

## Other responses

- `202`: Job accepted and queued. `operation` is `wrap`.
- `400`: `code` is one of: `invalid_trim_size`, `invalid_page_count`, `invalid_paper_type`, `invalid_binding_type`, `invalid_design_style`, `invalid_preset`, `invalid_font_family`, `invalid_color`, `missing_front_cover` (the cover has no image), `field_too_long`, `invalid_field_type`, `content_policy_violation`.
- `401`: Missing/malformed API key, unknown or inactive key, or inactive subscription detected during credit checks. `code`: `unauthorized`.
- `402`: Not enough credits (monthly + overage) for the requested operation. `code`: `insufficient_credits`.
- `403`: The API key is valid but its owner has no active enterprise subscription. `code`: `forbidden`.
- `404`: Cover not found or not owned by this API key's user. `code`: `cover_not_found`.
- `429`: The subscription's concurrent-job limit is reached (jobs with status `queued` or `processing` count). `code`: `concurrency_limit`.
- `500`: Server error. `code` is `job_creation_failed` or `internal_error`. Reserved credits are refunded.

---

[API](https://skmtc.dev/beyourcover/apis/beyourcover-partner-api.md) · [All operations](https://skmtc.dev/beyourcover/apis/beyourcover-partner-api/llms.txt) · [OpenAPI document](https://skmtc.dev/beyourcover/apis/beyourcover-partner-api/revisions/82ad2c7c8ede?raw)
