Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
description: Firefly Service's RESTful InDesign API offers resources to automate tedious, time-consuming design tasks through scalable cloud services, encouraging more personalization at scale, creative automation, and faster content delivery.
version: ''
title: Firefly Services - InDesign Data Merge API
termsOfService: https://www.adobe.com/content/dam/cc/en/legal/terms/enterprise/pdfs/PSLT-AdobeCreativeAPI-WW-2024v2.pdf
contact:
email: idservices@adobe.com
servers:
- url: https://indesign.adobe.io
security:
- AccessToken: []
X-Api-Key: []
tags:
- name: Data Merge
description: Create document variations from CSV data and InDesign templates. Supports UTF-16BE encoding for CSV files, which is necessary for languages or characters requiring multi-byte representation. For plain English characters, the CSV will function correctly even without this encoding.
paths:
/v3/merge-data:
post:
summary: Perform a data merge
description: 'Creates InDesign documents or PDFs by merging CSV data with InDesign templates. Supports multiple output formats: JPEG (`image/jpeg`), PNG (`image/png`), PDF (`application/pdf`), and InDesign (`application/x-indesign`).'
operationId: dataMerge
tags:
- Data Merge
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MergeDataRequest'
description: This job request object specifies parameters for merging the data with the given template.
required: true
responses:
'202':
$ref: '#/components/responses/Accepted'
'400':
$ref: '#/components/responses/BadParams'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v3/merge-data-tags:
post:
summary: Get data merge tags
description: Retrieves the data merge tags from a document.
operationId: dataMergeTags
tags:
- Data Merge
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MergeDataTagsRequest'
description: This job request object specifies parameters for retrieving the data merge tags.
required: true
responses:
'202':
$ref: '#/components/responses/Accepted'
'400':
$ref: '#/components/responses/BadParams'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
components:
responses:
Forbidden:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
Content-Type:
schema:
type: string
description: The type of content returned (e.g., `application/json`).
Content-Length:
schema:
type: integer
description: The length of the response content.
Access-Control-Allow-Origin:
schema:
type: string
description: The Cross Origin Resource Sharing (CORS) header.
Access-Control-Allow-Methods:
schema:
type: string
description: This header indicates what HTTP methods are allowed.
Access-Control-Allow-Headers:
schema:
type: string
description: This indicates which HTTP headers can be used during the actual request.
Access-Control-Allow-Credentials:
schema:
type: string
description: This header is used by servers to indicate that the client shall share HTTP responses.
Access-Control-Max-Age:
schema:
type: integer
description: This indicates how long the results of a preflight request can be cached.
InternalServerError:
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
Content-Type:
schema:
type: string
description: The type of content returned (e.g., `application/json`).
Content-Length:
schema:
type: integer
description: The length of the response content.
Access-Control-Allow-Origin:
schema:
type: string
description: The Cross Origin Resource Sharing (CORS) header.
Access-Control-Allow-Methods:
schema:
type: string
description: This header indicates what HTTP methods are allowed.
Access-Control-Allow-Headers:
schema:
type: string
description: This indicates which HTTP headers can be used during the actual request.
Access-Control-Allow-Credentials:
schema:
type: string
description: This header is used by servers to indicate that the client shall share HTTP responses.
Access-Control-Max-Age:
schema:
type: integer
description: This indicates how long the results of a preflight request can be cached.
TooManyRequests:
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
Content-Type:
schema:
type: string
description: The format of the content returned (e.g., `application/json`).
Content-Length:
schema:
type: integer
description: The length of the response content.
Retry-After:
schema:
type: integer
description: The number of seconds until the user should try again.
Access-Control-Allow-Origin:
schema:
type: string
description: The Cross Origin Resource Sharing (CORS) header.
Access-Control-Allow-Methods:
schema:
type: string
description: This indicates what HTTP methods are allowed.
Access-Control-Allow-Headers:
schema:
type: string
description: This indicates which HTTP headers can be used during the actual request.
Access-Control-Allow-Credentials:
schema:
type: string
description: This header is used by servers to indicate that the client shall share HTTP responses.
Access-Control-Max-Age:
schema:
type: integer
description: This indicates how long the results of a preflight request can be cached.
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
Content-Type:
schema:
type: string
description: The type of content returned (e.g., `application/json`).
Content-Length:
schema:
type: integer
description: The length of the response content.
Access-Control-Allow-Origin:
schema:
type: string
description: The Cross Origin Resource Sharing (CORS) header.
Access-Control-Allow-Methods:
schema:
type: string
description: This indicates what HTTP methods are allowed.
Access-Control-Allow-Headers:
schema:
type: string
description: This indicates which HTTP headers can be used during the actual request.
Access-Control-Allow-Credentials:
schema:
type: string
description: This header is used by servers to indicate that the client shall share HTTP responses.
Access-Control-Max-Age:
schema:
type: integer
description: This indicates how long the results of a preflight request can be cached.
NotFound:
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
Content-Type:
schema:
type: string
description: The type of content returned (e.g., `application/json`).
Content-Length:
schema:
type: integer
description: The length of the response content.
Access-Control-Allow-Origin:
schema:
type: string
description: The Cross Origin Resource Sharing (CORS) header.
Access-Control-Allow-Methods:
schema:
type: string
description: This header indicates what HTTP methods are allowed.
Access-Control-Allow-Headers:
schema:
type: string
description: This indicates which HTTP headers can be used during the actual request.
Access-Control-Allow-Credentials:
schema:
type: string
description: This header is used by servers to indicate that the client shall share HTTP responses.
Access-Control-Max-Age:
schema:
type: integer
description: This indicates how long the results of a preflight request can be cached.
Accepted:
description: The job has been accepted for processing.
content:
application/json:
schema:
properties:
jobId:
type: string
description: The job ID.
statusUrl:
type: string
description: The status URL.
headers:
link:
schema:
type: string
description: The status URL for a retry.
retry-after:
schema:
type: integer
description: The number of seconds until the user should try again.
Content-Type:
schema:
type: string
description: The type of content that is returned (e.g., `application/json`).
Content-Length:
schema:
type: integer
description: The length of the response content.
Access-Control-Allow-Origin:
schema:
type: string
description: The Cross Origin Resource Sharing (CORS) header.
Access-Control-Allow-Methods:
schema:
type: string
description: This indicates what HTTP methods are allowed.
Access-Control-Allow-Headers:
schema:
type: string
description: This indicates which HTTP headers can be used during the actual request.
Access-Control-Allow-Credentials:
schema:
type: string
description: This header is used by servers to indicate that the client shall share HTTP responses.
Access-Control-Max-Age:
schema:
type: integer
description: This indicates how long the results of a preflight request can be cached.
BadParams:
description: Bad Parameter
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
Content-Type:
schema:
type: string
description: The type of content returned (e.g., `application/json`).
Content-Length:
schema:
type: integer
description: The length of the response content.
Access-Control-Allow-Origin:
schema:
type: string
description: The Cross Origin Resource Sharing (CORS) header.
Access-Control-Allow-Methods:
schema:
type: string
description: This header indicates what HTTP methods are allowed.
Access-Control-Allow-Headers:
schema:
type: string
description: This indicates which HTTP headers can be used during the actual request.
Access-Control-Allow-Credentials:
schema:
type: string
description: This header is used by servers to indicate that the client shall share HTTP responses.
Access-Control-Max-Age:
schema:
type: integer
description: This indicates how long the results of a preflight request can be cached.
schemas:
BaseJobRequest:
description: The base job request for any job.
required:
- assets
properties:
assets:
type: array
items:
$ref: '#/components/schemas/InputAsset'
description: Information about the assets, which will be used to process the job.
params:
type: object
properties:
generalSettings:
description: General settings.
type: object
properties:
fonts:
description: Settings related to fonts. It is recommended to include fonts to avoid missing fonts warnings when processing the job.
type: object
properties:
fontsDirectories:
description: This lists the font directories for the input InDesign documents. "Document Fonts" in parallel to the document will continue to work even without specifying them. <br></br> If none are specified, a temporary base directory (working directory) will be considered as a font directory.
type: array
items:
type: string
description: This provides a path to a directory relative to a temporary base directory (working directory) where the fonts can be found. It cannot go up using '..' or '/'. Should be a valid path. For specifying a working directory, mention '.'.
links:
description: Settings related to links.
type: object
properties:
replaceLinks:
type: array
items:
type: object
required:
- targetDocument
- mapping
properties:
targetDocument:
description: The document in which the relinking is to be done. Relinking of assets is required to ensure that there are no missing links in the output document.
type: string
mapping:
type: array
items:
type: object
required:
- newAssetRelativePath
properties:
newAssetRelativePath:
type: string
description: This provides a path relative to a temporary base directory (working directory) where the asset to be linked to can be found. It cannot go up using '..' or '/'. Should be a valid file name.
currentURI:
type: string
description: The existing URI of the link that needs relinking. If multiple links with this URI are found, all will be relinked. If `linkID` is provided, this attribute will be ignored. Either `currentURI` or `linkID` should be present.
linkID:
type: integer
description: The ID of the link which is to be relinked. If `currentURI` is also provided, it will be ignored. Either `currentURI` or `linkID` should be present.
appLogs:
description: Describes parameters regarding application logs.
type: object
properties:
logsRelativePath:
type: string
description: This provides a path to a file, relative to the temporary base directory (working directory). This file is where the application's logs are to be dumped.
HyphenationLanguage:
type: string
description: Supported hyphenation dictionary languages.
enum:
- Arabic
- Bengali (India)
- Bulgarian
- Burmese (Myanmar [Burma])
- Catalan
- Croatian
- Czech
- Danish
- 'Dutch: 2005 Reform'
- 'Dutch: Old Rules'
- 'English: Canadian'
- 'English: UK'
- 'English: USA'
- 'English: USA Legal'
- 'English: USA Medical'
- Estonian
- Finnish
- French
- 'French: Canadian'
- 'German: 1996 Reform'
- 'German: 2006 Reform'
- 'German: Austria 2006 Reform'
- 'German: Old Rules'
- 'German: Swiss'
- 'German: Swiss 2006 Reform'
- Greek
- Gujarati (India)
- Hebrew
- Hindi (India)
- Hungarian
- Indonesian (Indonesia)
- Italian
- Kannada (India)
- Khmer (Cambodia)
- Lao (Laos)
- Latvian
- Lithuanian
- Malayalam (India)
- Marathi (India)
- 'Norwegian: Bokmål'
- 'Norwegian: Nynorsk'
- Oriya (India)
- Polish
- Portuguese
- 'Portuguese: Brazilian'
- 'Portuguese: Orthographic Agreement'
- Punjabi (India)
- Romanian
- Russian
- Sinhala (Sri Lanka)
- Slovak
- Slovenian
- Spanish
- Swedish
- Tamil (India)
- Telugu (India)
- Thai
- Turkish
- Ukrainian
- Vietnamese
BaseJobRequestWithOutput:
allOf:
- $ref: '#/components/schemas/BaseJobRequest'
- description: The base job request for any job with the option to specify output URLs.
type: object
properties:
outputs:
type: array
items:
$ref: '#/components/schemas/OutputAsset'
MergeDataTagsRequest:
allOf:
- $ref: '#/components/schemas/BaseJobRequest'
- description: Filters according to which the information related to data merge tags would be retrieved.
type: object
required:
- params
properties:
params:
type: object
required:
- targetDocument
properties:
targetDocument:
description: The target document that will have its tags extracted.
type: string
dataSource:
description: The data source file to be used for extracting and matching the tags.
type: string
filter:
description: The filter applied for tags. Accepts multiple values.
type: array
example:
- text
- image
default:
- all
items:
type: string
enum:
- all
- text
- image
- qr
includePageItemIdentifiers:
type: boolean
description: If true, the information for associated page items is added to the tags extracted from the document.
default: false
MergeDataRequest:
allOf:
- $ref: '#/components/schemas/BaseJobRequestWithOutput'
- description: Inputs for the data merge request.
type: object
required:
- params
properties:
params:
type: object
required:
- targetDocument
- dataSource
properties:
targetDocument:
description: The tagged document to be used as the template for merging.
type: string
dataSource:
description: The data source files to be used.
type: string
outputMediaType:
description: The type of output.
type: string
enum:
- image/jpeg
- image/png
- application/pdf
- application/x-indesign
default: application/x-indesign
exportSettings:
type: object
description: The settings corresponding to the output format.
properties:
jobOptionsFile:
type: string
description: File path reference to a `.joboptions` file (Adobe PDF preset file) containing custom PDF export settings. This file must be included as part of the input assets. It defines detailed PDF output configurations such as compression, color management, and security settings. When provided, this takes precedence over the `pdfPreset` attribute. Only applicable when generating PDF output.
default: PDF preset `High Quality Print` will be used if not provided.
pdfPreset:
type: string
description: The PDF export style to be used. This is relevant if `outputMediaType` is `application/pdf`.
default: High Quality Print
enum:
- High Quality Print
- PDF/X-1a:2001
- PDF/X-3:2002
- PDF/X-4:2008
- Press Quality
- Smallest File Size
quality:
type: string
description: Defines the quality of the output for JPEG and PNG formats.
default: medium
enum:
- low
- medium
- high
- maximum
linkImages:
description: If `true`, links images to the target document. If `false`, embeds linked images already referred in the target document. Only relevant if `outputMediaType` is `application/x-indesign`.
type: boolean
default: false
recordRange:
description: The ranges of records to process for this job. Value can be `All`, along with numeral ranges. For example, '1-2, 5'.
type: string
default: All
allowMultipleRecordsPerPage:
description: If `true`, will show as many records as will fit on a page.
type: boolean
default: false
multipleRecordLayoutOptions:
description: The options to be used when `allowMultipleRecordsPerPage` is set to `true`.
type: object
properties:
arrangeBy:
description: 'The order that records will be arranged in the target document.
* `rows_first` - Arranges records by row.
* `columns_first` - Arranges records by column.
'
type: string
default: rows_first
enum:
- rows_first
- columns_first
bottomMargin:
description: The offset value of the bottom margin in the target document. The values can be specified like `1 pt`, `1 pica`, `1`, etc. If a number is mentioned in the string, it will be used as a value in pica.
type: string
topMargin:
description: The offset value of the top margin in the target document. The values can be specified like `1 pt`, `1 pica`, `1`, etc. If a number is mentioned in the string, it will be used as a value in pica.
type: string
leftMargin:
description: The offset value of the left margin in the target document. The values can be specified like `1 pt`, `1 pica`, `1`, etc. If a number is mentioned in the string, it will be used as a value in pica.
type: string
rightMargin:
description: The offset value of the right margin in the target document. The values can be specified like `1 pt`, `1 pica`, `1`, etc. If a number is mentioned in the string, it will be used as a value in pica.
type: string
columnSpacing:
description: The amount of spacing between columns of records in the target document. The values can be specified like `1 pt`, `1 pica`, `1`, etc. If a number is mentioned in the string, it will be used as a value in pica.
type: string
rowSpacing:
description: The amount of spacing between rows of records in the target document. The values can be specified like `1 pt`, `1 pica`, `1`, etc. If a number is mentioned in the string, it will be used as a value in pica.
type: string
imagePlacementOptions:
description: These are the options for image placement which will be used while merging images in the document.
type: object
properties:
centerImage:
description: If true, this centers the image in the frame while preserving the frame size as content size and proportions. If the content is larger than the frame, content around the edges is obscured by the bounding box of the frame. <br></br> This won't work when `fittingOption` is `Content_Aware_Fit`.
type: boolean
default: false
fittingOption:
description: 'The method of fitting content in a frame.
* `content_aware_fit` - Selects best crop region of the content for the frame based on Adobe Sensei. This preserves frame size but it might scale the content size. If this fitting is set, the `centerImage` property is turned-off.
* `fill_proportional` - Resizes content to fill the frame while preserving the proportions of the content. If the content and frame have different proportions, some of the content is obscured by the bounding box of the frame.
* `fit_content_to_frame` - Resizes content to fit the frame. Content that is a different size than the frame appears stretched or squeezed.
* `fit_frame_to_content` - Resizes the frame so it fits the content.
* `honor_existing_style` - Applies the frame fitting based on existing settings applied on the original frame.
* `preserve_sizes` - Preserves the original sizes of the frame and the content. Content that is larger than the frame is obscured around the edges.
* `proportional` - Resizes content to fit the frame while preserving content proportions. If the content and frame have different proportions, an empty space occurs in the frame.
'
type: string
default: proportional
enum:
- content_aware_fit
- fill_proportional
- fit_content_to_frame
- fit_frame_to_content
- honor_existing_style
- preserve_sizes
- proportional
linkImages:
description: This applies to the images being brought in the document while merging. If true, this links images to the target document. If false, it embeds images in the target document.
type: boolean
default: false
hyphenationSettings:
description: Hyphenation settings to control word breaking and hyphenation behavior during merge.
type: object
properties:
afterFirst:
type: integer
description: Minimum number of characters at the start of a word before a hyphen may be inserted.
beforeLast:
type: integer
description: Minimum number of characters at the end of a word after a hyphen.
wordsLongerThan:
type: integer
description: Minimum word length for hyphenation to apply.
ladderLimit:
type: integer
description: Maximum allowed consecutive hyphenated lines.
zone:
type: number
description: Whitespace ratio allowed at the end of a line before hyphenation begins (0–1).
capitalizedWords:
type: boolean
description: If true, allows hyphenation of capitalized words.
lastWord:
type: boolean
description: If true, allows hyphenation of the last word in a paragraph.
acrossColumns:
type: boolean
description: If true, allows hyphenation across columns.
dictionarySettings:
type: array
description: Special hyphenation definitions by language.
items:
type: object
required:
- language
- wordList
properties:
language:
$ref: '#/components/schemas/HyphenationLanguage'
wordList:
type: array
description: List of special hyphenation definitions (use `~` to mark break points, e.g., `Know~how`, `check~in`. Put `~` at the beginning of the word to exclude it from hyphenation, e.g., `~Wallstreet`, `~Starbucks`).
items:
type: string
pagesPerDocument:
description: The maximum number of pages per document.
type: integer
default: By default this would not be applicable.
removeBlankLines:
description: If true, removes blank lines caused by empty fields.
type: boolean
default: false
convertUrlToHyperlink:
description: If true, all URLs in the merged document are converted into hyperlinks.
type: boolean
default: true
outputFileBaseString:
type: string
description: The name of the output file.
default: It is derived from the original document filename.
outputFolderPath:
type: string
description: The path of the output folder.
default: A unique temporary folder name would be created.
OutputAsset:
description: The URL where the output assets are to be posted after the job is processed.
type: object
required:
- destination
- source
properties:
destination:
type: object
required:
- url
properties:
url:
type: string
description: The URL of the asset.
storageType:
type: string
description: This is an optional parameter, however IT IS RECOMMENDED to provide this information.
enum:
- Azure
- Dropbox
- AWS
source:
type: string
description: This provides a path relative of the output where the resource would be generated. It cannot go up using '..' or '/'. Should be a valid file name.
InputAsset:
type: object
description: The URL where the asset will be fetched.
required:
- source
properties:
source:
type: object
required:
- url
properties:
url:
type: string
description: The pre-signed URL of the input asset. This is the URL of the asset that will be downloaded and a
# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/adobe-suite/refs/heads/main/openapi/adobe-suite-data-merge-api-openapi.yml