{ "openapi": "3.0.0", "info": { "description": "Firefly Service's RESTful InDesign APIs offer 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 APIs", "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": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ { "name": "Data Merge API", "description": "The Data Merge API is used to create document variations from CSV data and an InDesign file.

The Data Merge API 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": "Returns InDesign documents or PDFs that are created by merging the data provided and the specified template.

The data merge output MIME types are: ", "operationId": "dataMerge", "parameters": [ { "name": "x-gw-ims-org-id", "in": "header", "description": "This is the identifier for Adobe Identity Management Service (IMS) as defined in Adobe's developer console. This is optional.", "required": false, "schema": { "type": "string" } }, { "name": "x-api-key", "in": "header", "description": "The API key as defined in Adobe's developer console.", "required": true, "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "The authorization token with bearer \"token_value\".", "required": true, "schema": { "type": "string" } } ], "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", "parameters": [ { "name": "x-gw-ims-org-id", "in": "header", "description": "This is the identifier for Adobe Identity Management Service (IMS) as defined in Adobe's developer console. This is optional.", "required": false, "schema": { "type": "string" } }, { "name": "x-api-key", "in": "header", "description": "The API key as defined in Adobe's developer console.", "required": true, "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "The authorization token with bearer \"token_value\".", "required": true, "schema": { "type": "string" } } ], "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": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-api-key" }, "BearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } }, "schemas": { "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" ] }, "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 URL of the asset." }, "storageType": { "type": "string", "description": "This is optional parameter, however IT IS RECOMMENDED to provide this information.", "enum": [ "Azure", "Dropbox" ] } } }, "destination": { "type": "string", "description": "This provides a path relative to a temporary base directory (working directory) where the resource would be downloaded. This would be used to identify the assets within the parameters. It cannot go up using '..' or '/'. Should be a valid file name." } } }, "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.", "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.

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.", "type": "string" }, "mapping": { "type": "array", "items": { "type": "object", "required": [ "newAssetRelativePath" ], "properties": { "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." }, "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." } } } } } } } } }, "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." } } } } } } } } }, "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" ] } } }, "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." } } }, "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" } } } } ] }, "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": "The file, which will be used as the PDF creation settings file during the export. This will take precedence over the `pdfPreset` attribute.

Only relevant if the `outputMediaType` is `application/pdf`." }, "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.\n* `rows_first` - Arranges records by row.\n* `columns_first` - Arranges records by column.\n", "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.

This won't work when `fittingOption` is `Content_Aware_Fit`.", "type": "boolean", "default": false }, "fittingOption": { "description": "The method of fitting content in a frame.\n* `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.\n* `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.\n* `fit_content_to_frame` - Resizes content to fit the frame. Content that is a different size than the frame appears stretched or squeezed.\n* `fit_frame_to_content` - Resizes the frame so it fits the content.\n* `honor_existing_style` - Applies the frame fitting based on existing settings applied on the original frame.\n* `preserve_sizes` - Preserves the original sizes of the frame and the content. Content that is larger than the frame is obscured around the edges.\n* `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.\n", "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." } } } } } ] }, "Error": { "type": "object", "properties": { "message": { "type": "string" }, "error_code": { "type": "string" } }, "required": [ "message", "error_code" ] }, "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 } } } } } ] } }, "responses": { "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." } } }, "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." } } }, "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." } } }, "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." } } }, "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." } } } } } }