---
title: "Create a new Print-Job"
method: POST
path: "/print-jobs/"
tags: ["Print-Jobs"]
---

# Create a new Print-Job

`POST /print-jobs/`

Print-Jobs are the core resource of the Print API. A Printjob
consists of line items, shipping information and some additional metadata.

## Elements of a Print-Job

### Line Items

A line item represents a book that should be printed or in short a **printable**.
Printables consist of cover and interior files as well as a `pod_package_id`.
The `pod_package_id` represents the manufacturing options; see the ["Select
a product"](#section/Select-a-Product) section for details. Each printable
can be identified by an immutable `printable_id`. The `printable_id` can be
used for re-orders so that the files don''t have to be transferred again.

#### Linen Wrap Foil

Foil stamping is available on Linen Wrap books, and printed on the spine of the book, not the accompanying dust jacket.
Text is entered into both the `foil_stamp_title_text` and `foil_stamp_author_text`. Combined, two fields comprising of the foil stamp text cannot exceed 42 characters.

Lulu's foil stamping supports the following characters:
  * Roman Character sets (A-Z, a-z, 0-9)
  * [];',./!`^&*()~+=:?"]ˇ˘°´¨¸¯- ØŁ
  * ÀÁÃĀÄĂĆČÇĎÈÉËĒĔĚĞÌÍĨÏĪĬĽĹÑŃŇÒÓÕÖŌŎŔŘŚŞŠŢŤÙÚŨŪÜŬÝŸŹŽ
  * àáãäāăćčçďèéëēĕěğìíĩïīĭľĺñńňòóõöōŏŕřśşšţťùúũūüŭýÿźž

Unsupported characters:
  - all non-roman character sets (Cyrillic, Arabic, Hebrew, Farsi, Chinese, Japanese, Thai, etc.), and the underscore character (_) are not supported.

Your linen and foil stamping color selections should be included at the end of your SKU using the following letters to indicate color, with the linen option first and the foil stamping option last:

* Linen:
  * Navy: N
  * Gray: G
  * Red: R
  * Black: B
  * Tan: T
  * Forest: F

* Foil:
  * Gold: G
  * Black: B
  * White: W

For example: 0600X0900.BW.STD.PB.060UW444.M**NG**

### Shipping Information & Metadata

Print-Jobs have to contain a `shipping_address` as well as a `shipping_level`.
Lulu offers five different service levels that differ in speed and traceability.

### Additional Metadata

A few additional metadata fields can be specified in the Print-Job as well:

* `contact_email` for questions related to the Print-Job itself

* `production_delay` allows you to specify a delay (between 60 minutes and
2,880 minutes) before the Print-Job goes to production.

* `external_id` allows you to link the Print-Job to an internal order number
or other reference.

* `recipient_tax_id` is required for shipping addresses to Brazil, Chile, and Mexico.
This field holds the recipient's tax identification number (CPF/CNPJ for Brazil, RUT for Chile, and RFC for Mexico).
The tax ID can be provided in formatted form (with dots, dashes, or slashes), but will be standardized to a compact version
without separators (e.g., "12.345.678/0001-90" will be converted to "12345678000190") for further processing.

For shipping addresses in the following countries, the recipient_tax_id can be provided, but no validation will be applied:
AF, DZ, BS, BH, BJ, BT, BA, BW, BF, BI, CV, KH, CM, CF, TD, KM, CG, CD, CI, DJ, DM, GQ, ER, SZ, ET, FJ, GA, GM, GD, GN, GW, HT, HN, IR, IQ,
JO, KI, KP, LA, LB, LS, LR, LY, MG, MW, MV, ML, MH, FM, MN, MZ, MM, NA, NR, NP, NE, OM, PW, PG, QA, RW, KN, LC, SN, SL, SB, SO, SS, SD, SR,
SY, TZ, TG, TO, TL, UG, VA, ZM, ZW.

## File Handling and Normalization

Interior and cover files have to be specified with a URL from which Lulu can
download the files. Using encoded [basic authentication](https://en.wikipedia.org/wiki/Basic_access_authentication#URL_encoding)
in the URL is ok. All files processed by Lulu will be validated and normalized
before sending them to production. If problems with the file occur, the PrintJob
will be rejected or cancelled and an error message will be displayed.

## Automation and Payment

After a Print-Job has been created successfully, it will remain in an `UNPAID`
state until it is paid for through the developer portal. However, you can
automate the process by putting a credit card on file. Then, the Print-Job
will automatically transition to the `PRODUCTION_DELAY` status and your card
will charged when the Print-Job is sent to production.

## Request body

- object — The job resource that represents a print order
  - `contact_email` string, email, required — Email address that should be contacted if questions regarding the Print-Job arise. Lulu recommends to use the email of a person who is responsible for placing the Print-Job like a developer or business owner.
  - `costs` object — Summary of the costs of a Print-Job
    - `line_item_costs` object — Costs for a Print-Job line item
      - `cost_excl_discounts` string, required — Per unit cost without any discounts applied as a decimal string
      - `discounts` object[], required — Discounts applied to this line item
        - `amount` string, required — The deducted amount as a decimal string
        - `description` string, required — Description of the discount
      - `quantity` number, required — The quantity of printables to base the calculations on
      - `tax_rate` string, required — The tax rate applied to the line as a decimal string
      - `total_cost_excl_discounts` string, required — The total line price without any discounts applied as a decimal string
      - `total_cost_excl_tax` string, required — The total line price including discounts excluding tax as a decimal string
      - `total_cost_incl_tax` string, required — The total line price including discounts and taxes as a decimal string
      - `total_tax` string, required — The total line tax amount as a decimal string
      - `unit_tier_cost` string — Per unit cost with tier discount applied, null for list price (non-tier) customers
    - `shipping_cost` object — Summary of the shipping costs
      - `tax_rate` string — Tax rate that was applied on shipping costs as a decimal string
      - `total_cost_excl_tax` string — Total shipping costs excluding taxes as a decimal string
      - `total_cost_incl_tax` string — Total shipping costs including taxes as a decimal string
      - `total_tax` string — Total amount of taxes on shipping as a decimal string
    - `total_cost_excl_tax` string — Total costs of the job excluding taxes as a decimal string
    - `total_cost_incl_tax` string — Total costs of the job including taxes as a decimal string
    - `total_tax` string — Total amount of taxes on the job as a decimal string
  - `estimated_shipping_dates` object — The estimated ship and delivery dates for a Print-Job
    - `arrival_max` string — The slowest estimated delivery date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
    - `arrival_min` string — The fastest estimated delivery date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
    - `dispatch_max` string — The slowest estimated ship date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
    - `dispatch_min` string — The fastest estimated ship date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
  - `external_id` string — Arbitrary string to identify and connect a print job to your systems. Set it to an order number, a purchase order or whatever else works for your particular use case.
  - `id` number, required
  - `line_items` object[], required — The line items of a Print-Job, defining it's Printables and their quantities. The property name 'items' can be used instead.
    - `cover` union — Shorthand of the cover source definition. If used together with 'interior' , it can replace 'printable_normalization', Alternatively to both options, a 'printable_id' of an existing printable can be provided.
      - object
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
      - string — The url of the interior source file.
    - `external_id` string — Arbitrary string to identify and connect a print job to your systems. Set it to an order number, a purchase order or whatever else works for your particular use case
    - `id` number, required
    - `interior` union — Shorthand of the interior source definition. If used together with 'cover' , it can replace 'printable_normalization'. Alternatively to both options, a 'printable_id' of an existing printable can be provided.
      - object
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
      - string — The url of the interior source file.
    - `page_count` number — The page count of the printable
    - `pod_package_id` string — The id of the PodPackage of the printable of this line item
    - `printable_id` string, uuid — Id of the Printable of of this line item. It can be used instead of 'printable_normalization' / 'interior' / 'cover'
    - `printable_normalization` object — Represents the normalization processes of the interior and cover source files. Alternatively, 'interior' and 'cover' can be set as a shorthand for creation or a 'printable_id' of an existing printable can be provided.
      - `cover` object, required — Represents the normalization process of the cover source files
        - `job_id` number — The id of the normalization job (either a InteriorNormalizationJob or a CoverNormalizationJob)
        - `normalized_file` object — The resulting normalized file
          - `file_id` number
          - `filename` string — Filename of the normalized file
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
      - `interior` object, required — Represents the normalization process of the interior source files
        - `job_id` number — The id of the normalization job (either a InteriorNormalizationJob or a CoverNormalizationJob)
        - `normalized_file` object — The resulting normalized file
          - `file_id` number
          - `filename` string — Filename of the normalized file
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
    - `quantity` number, required — Quantity of printed books for this line item
    - `status` object, required — Status object that contains the actual line item processing status as well as additional status related data
      - `messages` object — A map of status related messages / data
        - `delay` string — Expected delay in hours for error status'
        - `error` string — General status error message
        - `info` string — General info message on the status
        - `printable_normalization` object — A map of printable normalization related messages / data
          - `cover` string[] — Array of messages related to the cover file normalization
          - `interior` string[] — Array of messages related to the interior file normalization
        - `timestamp` string — [ISO 8601](https://www.w3.org/TR/NOTE-datetime)) timestamp of last status change
        - `url` union — Tracking url(s)
          - string
          - string[]
      - `name` 'CREATED' | 'ACCEPTED' | 'REJECTED' | 'IN_PRODUCTION' | 'ERROR' | 'SHIPPED', required — The actual processing status of the Print-Job.
    - `title` string — The title of the line item. Should be on the cover. This field will become mandatory on October 1, 2019!
    - `tracking_id` string — A list of tracking ids for this line item's shipment
    - `tracking_urls` string[] — A list of tracking urls for this line item's shipment.
  - `order_id` string — Reference to the order, which this PrintJob has created
  - `production_delay` integer — Delay before a newly created Print-Job is sent to production. Minimum is 60 minutes, maximum is 2880 minutes (=48 hours). As most cancellation requests occur right after an order has been placed, it makes sense to wait for some time before sending an order to production. Once production has started, orders cannot be canceled anymore.
  - `production_due_time` string, date-time — Target timestamp of when this job will move into production ([ISO 8601](https://www.w3.org/TR/NOTE-datetime))
  - `shipping_address` object, required — The shipping address of the customer.
    - `city` string, required
    - `country_code` string, required — [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code
    - `email` string, email, required — Shipping carriers require an email address for notifications or handling delivery issues. If no email is given, the default email in the user profile will be used.
    - `is_business` boolean — Only relevant for US addresses. Some US carriers don't deliver to business-addresses on Saturday.
    - `name` string, required — Full name of the person, including first and last name.
    - `organization` string — Name of an organization. Required if no person name is given.
    - `phone_number` string, required — Shipping carriers require a phone number for handling delivery issues. If no phone number is given, the default in the API user profile will be used. Validation Regex Pattern for phone numbers `^\+?[\d\s\-.\/()]{8,20}$`
    - `postcode` string, required — Required for most countries
    - `state_code` string — 2 or 3 letter state codes (officially called [ISO-3166-2 subdivision codes](https://en.wikipedia.org/wiki/ISO_3166-2)). They are required for some countries (e.g. US, MX, CA, AU)
    - `street1` string, required — First address line
    - `street2` string — Second address line
    - `title` 'MR' | 'MISS' | 'MRS' | 'MS' | 'DR'
    - `recipient_tax_id` string — The recipient’s tax identification number. Required for shipping addresses to Brazil, Chile, and Mexico.
  - `shipping_level` 'MAIL' | 'PRIORITY_MAIL' | 'GROUND_HD' | 'GROUND_BUS' | 'GROUND' | 'EXPEDITED' | 'EXPRESS', required — The shipping level that this Print-Job is shipped with
  - `tax_country` string — [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code of the tax country determined for this job

## Response `201`

Created

- object — The job resource that represents a print order
  - `contact_email` string, email, required — Email address that should be contacted if questions regarding the Print-Job arise. Lulu recommends to use the email of a person who is responsible for placing the Print-Job like a developer or business owner.
  - `costs` object — Summary of the costs of a Print-Job
    - `line_item_costs` object — Costs for a Print-Job line item
      - `cost_excl_discounts` string, required — Per unit cost without any discounts applied as a decimal string
      - `discounts` object[], required — Discounts applied to this line item
        - `amount` string, required — The deducted amount as a decimal string
        - `description` string, required — Description of the discount
      - `quantity` number, required — The quantity of printables to base the calculations on
      - `tax_rate` string, required — The tax rate applied to the line as a decimal string
      - `total_cost_excl_discounts` string, required — The total line price without any discounts applied as a decimal string
      - `total_cost_excl_tax` string, required — The total line price including discounts excluding tax as a decimal string
      - `total_cost_incl_tax` string, required — The total line price including discounts and taxes as a decimal string
      - `total_tax` string, required — The total line tax amount as a decimal string
      - `unit_tier_cost` string — Per unit cost with tier discount applied, null for list price (non-tier) customers
    - `shipping_cost` object — Summary of the shipping costs
      - `tax_rate` string — Tax rate that was applied on shipping costs as a decimal string
      - `total_cost_excl_tax` string — Total shipping costs excluding taxes as a decimal string
      - `total_cost_incl_tax` string — Total shipping costs including taxes as a decimal string
      - `total_tax` string — Total amount of taxes on shipping as a decimal string
    - `total_cost_excl_tax` string — Total costs of the job excluding taxes as a decimal string
    - `total_cost_incl_tax` string — Total costs of the job including taxes as a decimal string
    - `total_tax` string — Total amount of taxes on the job as a decimal string
  - `estimated_shipping_dates` object — The estimated ship and delivery dates for a Print-Job
    - `arrival_max` string — The slowest estimated delivery date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
    - `arrival_min` string — The fastest estimated delivery date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
    - `dispatch_max` string — The slowest estimated ship date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
    - `dispatch_min` string — The fastest estimated ship date for a Print-Job in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)) format
  - `external_id` string — Arbitrary string to identify and connect a print job to your systems. Set it to an order number, a purchase order or whatever else works for your particular use case.
  - `id` number, required
  - `line_items` object[], required — The line items of a Print-Job, defining it's Printables and their quantities. The property name 'items' can be used instead.
    - `cover` union — Shorthand of the cover source definition. If used together with 'interior' , it can replace 'printable_normalization', Alternatively to both options, a 'printable_id' of an existing printable can be provided.
      - object
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
      - string — The url of the interior source file.
    - `external_id` string — Arbitrary string to identify and connect a print job to your systems. Set it to an order number, a purchase order or whatever else works for your particular use case
    - `id` number, required
    - `interior` union — Shorthand of the interior source definition. If used together with 'cover' , it can replace 'printable_normalization'. Alternatively to both options, a 'printable_id' of an existing printable can be provided.
      - object
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
      - string — The url of the interior source file.
    - `page_count` number — The page count of the printable
    - `pod_package_id` string — The id of the PodPackage of the printable of this line item
    - `printable_id` string, uuid — Id of the Printable of of this line item. It can be used instead of 'printable_normalization' / 'interior' / 'cover'
    - `printable_normalization` object — Represents the normalization processes of the interior and cover source files. Alternatively, 'interior' and 'cover' can be set as a shorthand for creation or a 'printable_id' of an existing printable can be provided.
      - `cover` object, required — Represents the normalization process of the cover source files
        - `job_id` number — The id of the normalization job (either a InteriorNormalizationJob or a CoverNormalizationJob)
        - `normalized_file` object — The resulting normalized file
          - `file_id` number
          - `filename` string — Filename of the normalized file
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
      - `interior` object, required — Represents the normalization process of the interior source files
        - `job_id` number — The id of the normalization job (either a InteriorNormalizationJob or a CoverNormalizationJob)
        - `normalized_file` object — The resulting normalized file
          - `file_id` number
          - `filename` string — Filename of the normalized file
        - `source_md5_sum` string — A md5 hash of the source file to check it's integrity
        - `source_url` string, required — The url of the source file.
    - `quantity` number, required — Quantity of printed books for this line item
    - `status` object, required — Status object that contains the actual line item processing status as well as additional status related data
      - `messages` object — A map of status related messages / data
        - `delay` string — Expected delay in hours for error status'
        - `error` string — General status error message
        - `info` string — General info message on the status
        - `printable_normalization` object — A map of printable normalization related messages / data
          - `cover` string[] — Array of messages related to the cover file normalization
          - `interior` string[] — Array of messages related to the interior file normalization
        - `timestamp` string — [ISO 8601](https://www.w3.org/TR/NOTE-datetime)) timestamp of last status change
        - `url` union — Tracking url(s)
          - string
          - string[]
      - `name` 'CREATED' | 'ACCEPTED' | 'REJECTED' | 'IN_PRODUCTION' | 'ERROR' | 'SHIPPED', required — The actual processing status of the Print-Job.
    - `title` string — The title of the line item. Should be on the cover. This field will become mandatory on October 1, 2019!
    - `tracking_id` string — A list of tracking ids for this line item's shipment
    - `tracking_urls` string[] — A list of tracking urls for this line item's shipment.
  - `order_id` string — Reference to the order, which this PrintJob has created
  - `production_delay` integer — Delay before a newly created Print-Job is sent to production. Minimum is 60 minutes, maximum is 2880 minutes (=48 hours). As most cancellation requests occur right after an order has been placed, it makes sense to wait for some time before sending an order to production. Once production has started, orders cannot be canceled anymore.
  - `production_due_time` string, date-time — Target timestamp of when this job will move into production ([ISO 8601](https://www.w3.org/TR/NOTE-datetime))
  - `shipping_address` object, required — The shipping address of the customer.
    - `city` string, required
    - `country_code` string, required — [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) country code
    - `email` string, email, required — Shipping carriers require an email address for notifications or handling delivery issues. If no email is given, the default email in the user profile will be used.
    - `is_business` boolean — Only relevant for US addresses. Some US carriers don't deliver to business-addresses on Saturday.
    - `name` string, required — Full name of the person, including first and last name.
    - `organization` string — Name of an organization. Required if no person name is given.
    - `phone_number` string, required — Shipping carriers require a phone number for handling delivery issues. If no phone number is given, the default in the API user profile will be used. Validation Regex Pattern for phone numbers `^\+?[\d\s\-.\/()]{8,20}$`
    - `postcode` string, required — Required for most countries
    - `state_code` string — 2 or 3 letter state codes (officially called [ISO-3166-2 subdivision codes](https://en.wikipedia.org/wiki/ISO_3166-2)). They are required for some countries (e.g. US, MX, CA, AU)
    - `street1` string, required — First address line
    - `street2` string — Second address line
    - `title` 'MR' | 'MISS' | 'MRS' | 'MS' | 'DR'
    - `warnings` object[] — Warnings found during address validation
      - `type` string — Type of warning
      - `code` string — Warning code which describe what was suggested by validation
      - `path` string — Describes the validation origin of warning
      - `message` string — Warning message with suggested change
    - `suggested_address` object — Suggested address returned by shipping address validation
      - `country_code` string — Suggested country code
      - `state_code` string — Suggested state code
      - `postcode` string — Suggested postal code
      - `city` string — Suggested city
      - `street1` string — Suggested first address line
      - `street2` string — Suggested second address line
  - `shipping_level` 'MAIL' | 'PRIORITY_MAIL' | 'GROUND_HD' | 'GROUND_BUS' | 'GROUND' | 'EXPEDITED' | 'EXPRESS', required — The shipping level that this Print-Job is shipped with
  - `tax_country` string — [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code of the tax country determined for this job

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden

---

[API](https://skmtc.dev/lulu/apis/universal-publishing-platform-api.md) · [All operations](https://skmtc.dev/lulu/apis/universal-publishing-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lulu/universal-publishing-platform-api/revisions/3119f71811f8/schema)
