Adobe InDesign API

Automate document layout and publishing workflows.

OpenAPI Specification

adobe-suite-firefly-indesign-openapi.json Raw ↑
{
  "openapi": "3.0.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 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."
    },
    {
      "name": "Remap Links",
      "description": "Replace file-based links in InDesign documents with AEM URLs. Particularly useful for customers working with Adobe Experience Manager (AEM) using Adobe Asset Link, enabling designers to work with output files that have direct links to AEM URLs."
    },
    {
      "name": "Rendition",
      "description": "Create file renditions in specified formats (e.g., PNG, JPEG, or PDF)."
    },
    {
      "name": "Custom Scripts",
      "description": "Submit and execute custom scripts for InDesign automation. Supports comprehensive scripting capabilities for document manipulation and processing."
    },
    {
      "name": "Document Info",
      "description": "Retrieve information from INDD / IDML documents including layers, links and fonts."
    },
    {
      "name": "Convert PDF to InDesign",
      "description": "Convert PDF documents to InDesign (INDD or IDML) format. The output is a ZIP file containing the converted documents and all associated assets."
    },
    {
      "name": "Job Status",
      "description": "Track job execution status and lifecycle events. Retrieves the most recent status event for jobs across different execution stages: `not_started` (job creation), `running` (execution begins), `succeeded` (complete), `partial_success` (complete with non-critical errors), `failed` (execution failure)."
    }
  ],
  "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"
          }
        }
      }
    },
    "/v3/remap-links": {
      "post": {
        "summary": "Remap links",
        "description": "Replaces file-based links in InDesign documents with AEM URLs. Particularly useful for customers working with Adobe Experience Manager (AEM) using Adobe Asset Link, enabling designers to work with output files that have direct links to AEM URLs.",
        "operationId": "remapLinks",
        "tags": [
          "Remap Links"
        ],
        "parameters": [
          {
            "name": "x-aem-token",
            "in": "header",
            "description": "Bearer token generated for the AEM technical account without the bearer keyword.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemapLinksRequest"
              }
            }
          },
          "description": "Job request object that specifies parameters for remapping links in the InDesign document.",
          "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"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v3/create-rendition": {
      "post": {
        "summary": "Create JPEG, PNG, or PDF renditions",
        "description": "Creates JPEG, PNG, or PDF renditions of InDesign documents. Supports multiple output formats: JPEG (`image/jpeg`), PNG (`image/png`), and PDF (`application/pdf`).",
        "operationId": "renditionJob",
        "tags": [
          "Rendition"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRenditionRequest"
              }
            }
          },
          "description": "This object specifies parameters for the JPEG, PNG or PDF output.",
          "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/scripts": {
      "post": {
        "summary": "Submit a Custom Script",
        "description": "Submits custom script bundles for registration. Returns a URL for posting execution requests for the registered script.",
        "operationId": "submitCustomScript",
        "tags": [
          "Custom Scripts"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "The custom script bundle, in ZIP format. This package describes the script to the app engine.",
          "required": true
        },
        "responses": {
          "202": {
            "description": "Status of a job execution.",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "capability": {
                      "type": "string",
                      "description": "The name of the custom script, as specified in the custom script manifest."
                    },
                    "version": {
                      "type": "string",
                      "description": "The version of the custom script, as specified in the custom script manifest."
                    },
                    "url": {
                      "type": "string",
                      "description": "The URL to submit an execution request for the custom script."
                    }
                  }
                }
              }
            }
          },
          "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"
          }
        }
      },
      "get": {
        "summary": "List custom scripts API",
        "description": "Retrieves details of the latest version of all registered custom scripts. Includes version, download link, registration date, and script name. Response is paginated based on list length.",
        "operationId": "listCustomScripts",
        "tags": [
          "Custom Scripts"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number for pagination",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of registered custom scripts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomScriptsListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadParams"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v3/{script_id}/{script_name}": {
      "post": {
        "summary": "Submit a custom script execution request",
        "description": "Submits execution requests for custom scripts. Defines input assets and parameters that the custom script will use during execution.",
        "operationId": "executeCustomScript",
        "tags": [
          "Custom Scripts"
        ],
        "parameters": [
          {
            "name": "script_id",
            "in": "path",
            "description": "script_id as reported in the response to custom script submit request.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "script_name",
            "in": "path",
            "description": "The name of the custom script, specified in the custom script manifest.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BaseJobRequestWithOutput"
              }
            }
          },
          "description": "This job request object specifies parameters for the execution of the custom script.",
          "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/scripts/{script_name}": {
      "get": {
        "summary": "Get Custom Script details",
        "description": "Retrieves details of a single registered custom script. Includes version, download link, registration date, and script name.",
        "operationId": "getCustomScriptDetails",
        "tags": [
          "Custom Scripts"
        ],
        "parameters": [
          {
            "name": "script_name",
            "in": "path",
            "description": "Name of the custom script",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Details of the custom script",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomScriptDetails"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadParams"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      },
      "delete": {
        "summary": "Delete a Custom Script",
        "description": "Deletes a single registered custom script. All versions of the script will be permanently removed.",
        "operationId": "deleteCustomScript",
        "tags": [
          "Custom Scripts"
        ],
        "parameters": [
          {
            "name": "script_name",
            "in": "path",
            "description": "Name of the custom script to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Script successfully deleted"
          },
          "400": {
            "$ref": "#/components/responses/BadParams"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v3/scripts/{script_name}/app-version": {
      "put": {
        "summary": "Update Custom Script App Version",
        "description": "Updates the InDesign app version configuration for a registered custom script. Allows customers to specify version strategies: use latest version, fix to a major version, or fix to a specific major and minor version.",
        "operationId": "updateScriptAppVersion",
        "tags": [
          "Custom Scripts"
        ],
        "parameters": [
          {
            "name": "script_name",
            "in": "path",
            "description": "Name of the custom script to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppVersionUpdateRequest"
              }
            }
          },
          "description": "Configuration for the app version strategy. The majorAppVersion and minorAppVersion fields are optional and their requirement depends on the selected strategy."
        },
        "responses": {
          "200": {
            "description": "App version configuration updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "example": "App version configuration updated successfully"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadParams"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v3/app-versions": {
      "get": {
        "summary": "Get Current App Versions",
        "description": "Retrieves information about all available InDesign app versions. Returns major version, minor version, and status for each registered app version.",
        "operationId": "listAppVersions",
        "tags": [
          "Custom Scripts"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List of registered app versions for the product",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AppVersionInfo"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadParams"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v3/document-info": {
      "post": {
        "summary": "Get document information",
        "description": "Retrieve comprehensive information about INDD/IDML documents. Returns data based on the enabled information types specified in the request.",
        "operationId": "getDocumentInfo",
        "tags": [
          "Document Info"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentInfoRequest"
              }
            }
          },
          "description": "This job request object specifies parameters for extracting document information.",
          "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/status/{document-info_job_id}": {
      "get": {
        "operationId": "getDocumentInfoJobStatus",
        "summary": "Get status - Document Info API",
        "description": "Returns the latest status of a Document Info job. Poll this endpoint to retrieve the extracted document information including pages, links, fonts, page items, and text stories.",
        "tags": [
          "Document Info"
        ],
        "parameters": [
          {
            "name": "document-info_job_id",
            "in": "path",
            "description": "The ID of the Document Info job you want to see the status of. This comes from the response of the Document Info request.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Status of a Document Info job execution.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/notstartedEvent"
                    },
                    {
                      "$ref": "#/components/schemas/runningEvent"
                    },
                    {
                      "$ref": "#/components/schemas/succeededEvent"
                    },
                    {
                      "$ref": "#/components/schemas/failedEvent"
                    },
                    {
                      "$ref": "#/components/schemas/partialSuccessEvent"
                    }
                  ]
                },
                "examples": {
                  "succeeded": {
                    "summary": "Document Info Job Succeeded",
                    "description": "Example response when a Document Info job completes successfully with extracted document information.",
                    "value": {
                      "jobId": "f54e0fcb-260b-47c8-b340-f5a3bcf6b623",
                      "status": "succeeded",
                      "data": {
                        "numSpreads": 6,
                        "numPages": 10,
                        "hiddenSpreads": 2,
                        "pageInfo": {
                          "items": [
                            {
                              "isParentSpread": false,
                              "spreadId": 215,
                              "spreadIndex": 3,
                              "spreadName": "",
                              "isHiddenSpread": false,
                              "pages": [
                                {
                                  "pageId": 237,
                                  "pageIndexInDocument": 5,
                                  "pageIndexInSpread": 0,
                                  "appliedParentSpread": 248,
                                  "pageSide": "left_hand",
                                  "pageName": "6",
                                  "bounds": {
                                    "left": 0,
                                    "right": 595.275590551,
                                    "top": 0,
                                    "bottom": 841.889763778
                                  }
                                }
                              ]
                            }
                          ]
                        },
                        "pageItemInfo": {
                          "items": [
                            {
                              "type": "TextFrame",
                              "itemId": 255,
                              "itemName": "",
                              "locked": false,
                              "visible": true,
                              "layerName": "Layer 1",
                              "bounds": {
                                "left": 201,
                                "right": 570,
                                "top": 168,
                                "bottom": 475
                              },
                              "parentType": "Spread",
                              "parentId": 207,
                              "pageId": 212,
                              "pageIndex": 0,
                              "spreadIndex": 0,
                              "spreadId": 207,
                              "liesOnParentPage": false,
                              "liesOnPasteboard": false
                            }
                          ],
                          "layers": [
                            {
                              "layerName": "Layer 1",
                              "layerId": 204,
                              "visible": true,
                              "locked": false,
                              "layerIndex": 0
                            }
                          ]
                        },
                        "textStoryInfo": {
                          "items": [
                            {
                              "storyId": 237,
                              "textOnPath": false,
                              "textContainers": [
                                {
                                  "startIndex": 0,
                                  "endIndex": 529,
                                  "textContainerId": 255,
                                  "paragraphStyles": [
                                    {
                                      "paragraphIndex": 0,
                                      "styleName": "[Basic Paragraph]",
                                      "fontName": "Krungthep Regular",
                                      "fontStyle": "Regular",
                                      "fontSize": 12,
                                      "startCharIndex": 0,
                                      "endCharIndex": 239
                                    }
                                  ],
                                  "characterStyles": [
                                    {
                                      "styleName": "[None]",
                                      "fontName": "Krungthep Regular",
                                      "fontStyle": "Regular",
                                      "fontSize": 12,
                                      "startCharIndex": 0,
                                      "endCharIndex": 238
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        "fontInfo": {
                          "items": [
                            {
                              "fontFamily": "Minion Pro",
                              "fontStyleName": "Regular",
                              "postscriptName": "MinionPro-Regular",
                              "available": true,
                              "fontType": "OPENTYPE_CFF"
                            },
                            {
                              "fontFamily": "Krungthep",
                              "fontStyleName": "Regular",
                              "postscriptName": "Krungthep",
                              "available": false,
                              "fontType": "OPENTYPE_CFF"
                            }
                          ]
                        },
                        "linkInfo": {
                          "items": [
                            {
                              "linkId": 406,
                              "status": "link_missing",
                              "uri": "file:/Users/paraggupta/Downloads/image1.jpg",
                              "linkType": "JPEG",
                              "linkName": "image1.jpg",
                              "pages": [
                                {
                                  "pageId": 234,
                                  "pageIndex": 2,
                                  "spreadIndex": 1,
                                  "spreadId": 213,
                                  "liesOnParentPage": false,
                                  "liesOnPasteboard": false
                                }
                              ]
                            }
                          ]
                        }
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "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 returned (e.g., `application/json`)."
              },
              "Content-Length": {
                "schema": {
                  "type": "integer"
                },
                "description": "The length of the response."
              }
            }
          }
        }
      }
    },
    "/v3/convert-pdf-to-indesign": {
      "post": {
        "summary": "Convert PDF to InDesign document",
        "description": "Converts PDF documents to editable InDesign (INDD or IDML) format. The output is a ZIP file (default name 'output.zip') containing subfolders (named after each input PDF) with the converted document and associated assets. If `embedLinks` is false, assets are provided in a separate folder within the ZIP. If `embedLinks` is true, all links are embedded in the InDesign file. Returns warnings for missing fonts and links.",
        "operationId": "convertPDFToInDesign",
        "tags": [
          "Convert PDF to InDesign"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConvertToInDesignRequest"
              }
            }
          },
          "description": "This job request object specifies parameters for converting PDF to InDesign format.",
          "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/status/{convert-pdf-to-indesign_job_id}": {
      "get": {
        "operationId": "getConvertPDFToInDesignJobStatus",
        "summary": "Get status - Convert PDF to InDesign API",
        "description": "Returns the 

# --- truncated at 32 KB (107 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/adobe-suite/refs/heads/main/openapi/adobe-suite-firefly-indesign-openapi.json