{ "openapi": "3.0.0", "info": { "title": "Illustrator API - Firefly Services", "description": "Illustrator API allows you to perform various operations with an Adobe Illustrator template, including data merge, create rendition, image trace, and running custom scripts. The API processes requests asynchronously.", "version": "1.0.0", "license": { "name": "Adobe Creative API License", "url": "https://www.adobe.com/content/dam/cc/en/legal/terms/enterprise/pdfs/PSLT-AdobeCreativeAPI-WW-2024v2.pdf" } }, "servers": [ { "url": "https://illustrator-api.adobe.io", "description": "Production endpoint." } ], "security": [ { "AccessToken": [], "X-Api-Key": [] } ], "tags": [ { "name": "Data Merge & Create Rendition", "description": "Data merge, create rendition, and shared job status for asynchronous Illustrator API jobs." }, { "name": "Image Trace", "description": "Convert raster artwork to vector format using Illustrator Image Trace. These jobs run asynchronously." }, { "name": "Custom Scripts", "description": "Submit and execute Custom Scripts for Illustrator automation. These services support comprehensive scripting capabilities for document manipulation and processing." } ], "paths": { "/v1/merge-data": { "post": { "tags": [ "Data Merge & Create Rendition" ], "operationId": "dataMerge", "summary": "Data merge", "description": "This endpoint allows you to merge variable data from a CSV file with an Adobe Illustrator template. The request is processed asynchronously and the status of the job can be checked using the status URL provided in the response. The output is provided as an array of individual files, one for each row in the CSV data. If some rows succeed and others fail or require rerun, the job completes with status `partially_succeeded` when you poll the status endpoint; that status applies only to Data Merge jobs.", "x-ffs-async-job": true, "x-ffs-job-status-fetcher": "facadeJobStatus", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DataMergeRequest" }, "example": { "data": { "source": { "url": "https://your-bucket.s3.amazonaws.com/your-data.csv" } }, "template": { "source": { "url": "https://your-bucket.s3.amazonaws.com/your-template.ai" } }, "fontFiles": [ { "source": { "url": "https://your-bucket.s3.amazonaws.com/your-font.ttf" }, "mediaType": "font/ttf" } ], "settings": { "fontSettings": { "autoReduceFontSizeToFit": false, "minFontSize": 8, "fallBackFont": "Roboto-Thin" } }, "output": { "fileName": "your-output.pdf", "mediaType": "application/pdf" } } } } }, "responses": { "202": { "description": "Accepted", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "string" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "retry-after": { "description": "Indicates how long to wait before making a new request.", "schema": { "type": "string" } }, "link": { "description": "Provides a link to related resources.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "string" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobLinkResponse" }, "example": { "jobId": "f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4", "statusUrl": "https://illustrator-api.adobe.io/v1/status/f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4" } } } }, "400": { "description": "Bad Request", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "string" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "string" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" }, "example": { "error_code": "invalid_json", "message": "Unexpected token 'a', ...\"ntSize\" : a\n }\n\"... is not valid JSON" } } } }, "401": { "description": "Unauthorized", "headers": { "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "string" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UnauthorizedError" }, "example": { "title": "ErrInvalidOauthToken", "status": 401, "error_code": 401013, "message": "Oauth token is not valid" } } } }, "403": { "description": "Forbidden", "headers": { "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "string" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ForbiddenError" }, "example": { "title": "ErrMissingAPIKey", "status": 403, "error_code": 403000, "message": "API key is missing" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "string" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "string" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" }, "example": { "error_code": "validation_error", "validation_errors": [ "minFontSize must be a positive number", "minFontSize must be a number conforming to the specified constraints" ] } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" } } } } } } }, "/v1/create-rendition": { "post": { "tags": [ "Data Merge & Create Rendition" ], "operationId": "createRendition", "summary": "Create rendition", "description": "This endpoint allows you to convert Adobe Illustrator files into various output formats. It supports conversion of .ai documents into multiple web- and print-ready formats. The request is processed asynchronously and the status of the job can be checked using the status URL provided in the response. The output is provided as a single converted file.", "x-ffs-async-job": true, "x-ffs-job-status-fetcher": "facadeJobStatus", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateRenditionRequest" }, "example": { "input": { "source": { "url": "https://your-bucket.s3.amazonaws.com/your-document.ai" }, "mediaType": "application/illustrator" }, "fontFiles": [ { "source": { "url": "https://your-bucket.s3.amazonaws.com/your-font.ttf" }, "mediaType": "font/ttf" } ], "output": { "mediaType": "application/pdf" }, "settings": { "documentLevel": 0, "artboardRange": "1-3", "resolution": 72 } } } } }, "responses": { "202": { "description": "Accepted", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "retry-after": { "description": "Indicates how long to wait before making a new request.", "schema": { "type": "integer" } }, "link": { "description": "Provides a link to related resources.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "integer" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobLinkResponse" }, "example": { "jobId": "f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4", "statusUrl": "https://illustrator-api.adobe.io/v1/status/f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4" } } } }, "400": { "description": "Bad Request", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "integer" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" }, "example": { "error_code": "invalid_json", "message": "Expected ',' or '}' after property value in JSON at position 276" } } } }, "401": { "description": "Unauthorized", "headers": { "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "integer" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LongJobError" }, "example": { "title": "ErrInvalidOauthToken", "status": 401, "error_code": 401013, "message": "Oauth token is not valid" } } } }, "403": { "description": "Forbidden", "headers": { "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "integer" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "Indicates the software used by the origin server to handle the request.", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LongJobError" }, "example": { "title": "ErrMissingAPIKey", "status": 403, "error_code": 403000, "message": "API key is missing" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "integer" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "Indicates the software used by the origin server to handle the request.", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" }, "example": { "error_code": "validation_error", "validation_errors": [ "documentLevel must be one of the following values: 0, 1" ] } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" }, "example": { "error_code": "runtime_error", "message": "An unexpected error occurred while processing your request. Please retry or contact support if the issue persists." } } } } } } }, "/v1/trace-image": { "post": { "tags": [ "Image Trace" ], "operationId": "traceImage", "summary": "Submit a job", "description": "This endpoint allows you to convert a raster image (JPEG/PNG) into vector format (SVG). The request is processed asynchronously and the status of the job can be checked using the status URL provided in the response.", "x-ffs-async-job": true, "x-ffs-job-status-fetcher": "imageTraceJobStatus", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VectorizeRequest" }, "example": { "input": { "source": { "url": "https://your-bucket.s3.amazonaws.com/your-image.png" }, "mediaType": "image/png" }, "settings": { "preset": "enhanced_general" } } } } }, "responses": { "202": { "description": "The request has been accepted and the job is in progress.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobLinkResponse" }, "example": { "jobId": "f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4", "statusUrl": "https://illustrator-api.adobe.io/v1/status/f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4" } } } }, "400": { "description": "Bad Request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" } } } }, "404": { "description": "Resource Not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" } } } }, "500": { "description": "Internal server error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" } } } } } } }, "/v1/status/{jobId}/image-trace": { "get": { "tags": [ "Image Trace" ], "operationId": "imageTraceJobStatus", "summary": "Retrieve job status", "description": "Poll execution status for an Image Trace job. Use this after calling Image Trace. Poll `GET /v1/status/{jobId}` with the job ID from the trace-image response. When the job succeeds, each output item includes a presigned URL and SVG media type (`image/svg+xml`). Image Trace jobs return only `running`, `succeeded`, or `failed`.", "x-ffs-status-fetcher": true, "x-ffs-job-name": "VectorizeAsyncJob", "parameters": [ { "name": "jobId", "required": true, "in": "path", "description": "Job ID returned from an Image Trace job.", "schema": { "type": "string", "example": "f7da0875-7919-486d-b915-7258c89f09e0" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/ImageTraceJobApiResponse" }, { "$ref": "#/components/schemas/JobStatusPollPayload" }, { "$ref": "#/components/schemas/ImageTraceJobFailedResponse" } ] }, "examples": { "succeeded_image_trace": { "summary": "Status: Succeeded", "value": { "jobId": "f7da0875-7919-486d-b915-7258c89f09e0", "status": "succeeded", "outputs": [ { "destination": { "url": "https://example.com/output.svg" }, "mediaType": "image/svg+xml" } ] } }, "running": { "summary": "Status: Running", "value": { "jobId": "48db6300-1cc5-4a31-84f6-5092fbd67484", "status": "running", "Retry-After": "1" } }, "failed": { "summary": "Status: Failed", "value": { "jobId": "fe0f4a1a-a213-44bd-b37b-8aa2f636449c", "status": "failed", "error_code": "runtime_error", "message": "An unexpected error occurred while processing your request." } } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LongJobError" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LongJobError" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" } } } } } } }, "/v1/status/{jobId}": { "get": { "tags": [ "Data Merge & Create Rendition" ], "operationId": "facadeJobStatus", "summary": "Retrieve job status", "description": "Retrieve the status of a job by providing the job ID. The job ID can be obtained from the response of other APIs. For all asynchronous jobs, polling this endpoint can return `running`, `succeeded`, or `failed`. The `partially_succeeded` status is returned only for Data Merge jobs when some CSV rows produce outputs while other rows fail or must be rerun after errors (for example, missing fonts). No other job types return the `partially_succeeded` status.
When `status` is `succeeded`, for Data Merge jobs each item in `outputs` includes a `row` field; for Create Rendition jobs, output items contain `destination` and `mediaType` only.", "x-ffs-status-fetcher": true, "x-ffs-job-name": "FacadeAsyncJob", "parameters": [ { "name": "jobId", "required": true, "in": "path", "description": "The job ID to retrieve the status of.", "schema": { "type": "string", "example": "f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4" } } ], "responses": { "200": { "description": "OK", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "string" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "retry-after": { "description": "Indicates how long to wait before making a new request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "string" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "Indicates the software used by the origin server to handle the request.", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/DataMergeJobApiResponse" }, { "$ref": "#/components/schemas/CreateRenditionJobApiResponse" }, { "$ref": "#/components/schemas/JobStatusPollPayload" }, { "$ref": "#/components/schemas/DataMergeJobFailedResponse" }, { "$ref": "#/components/schemas/DataMergeJobPartiallySucceededResponse" } ] }, "examples": { "succeeded_create_rendition": { "summary": "Status: Succeeded (Create Rendition)", "value": { "jobId": "6f35a027-c578-41e6-9e53-034424c69d14", "status": "succeeded", "outputs": [ { "destination": { "url": "https://example.com/output2.pdf" }, "mediaType": "application/pdf" } ] } }, "succeeded_data_merge": { "summary": "Status: Succeeded (Data Merge)", "value": { "jobId": "856745ce-816e-476b-b517-debd9fd91e3b", "status": "succeeded", "outputs": [ { "row": 1, "destination": { "url": "{your_presigned_get_url}" }, "mediaType": "image/png" }, { "row": 2, "destination": { "url": "{your_presigned_get_url}" }, "mediaType": "image/png" }, { "row": 3, "destination": { "url": "{your_presigned_get_url}" }, "mediaType": "image/png" } ] } }, "running": { "summary": "Status: Running", "value": { "jobId": "48db6300-1cc5-4a31-84f6-5092fbd67484", "status": "running", "Retry-After": "1" } }, "failed": { "summary": "Status: Failed", "value": { "jobId": "ef4f7daa-0d09-4dcf-9884-029bb7f374ac", "status": "failed", "error_code": "runtime_error", "message": "Missing fonts detected: Chabplan-Rg. Please provide font files." } }, "partially_succeeded": { "summary": "Status: Partially Succeeded (Data Merge only)", "value": { "jobId": "1dd551c5-6023-4ff9-b736-bc27b36cbb7f", "status": "partially_succeeded", "outputs": [ { "row": 135, "destination": { "url": "{your_presigned_get_url}" }, "mediaType": "application/pdf" }, { "row": 136, "destination": { "url": "{your_presigned_get_url}" }, "mediaType": "application/pdf" }, { "row": 137, "destination": { "url": "{your_presigned_get_url}" }, "mediaType": "application/pdf" }, { "row": 138, "destination": { "url": "{your_presigned_get_url}" }, "mediaType": "application/pdf" } ], "errors": [ { "row": 47, "error_code": "runtime_error", "message": "Missing fonts detected: Chabplan-Rg. Please provide font files." }, { "row": 113, "error_code": "runtime_error", "message": "Missing fonts detected: Chabplan-Rg. Please provide font files." }, { "row": 211, "error_code": "runtime_error", "message": "Missing fonts detected: Chabplan-Rg. Please provide font files." }, { "row": 427, "error_code": "runtime_error", "message": "Missing fonts detected: Chabplan-Rg. Please provide font files." } ], "needsRerun": [ { "rowRange": { "start": 1, "end": 67 } }, { "rowRange": { "start": 68, "end": 134 } }, { "rowRange": { "start": 202, "end": 268 } }, { "rowRange": { "start": 403, "end": 469 } } ] } } } } } }, "401": { "description": "Unauthorized", "headers": { "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "integer" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "Indicates the software used by the origin server to handle the request.", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LongJobError" }, "example": { "title": "ErrInvalidOauthToken", "status": 401, "error_code": 401013, "message": "Oauth token is not valid" } } } }, "403": { "description": "Forbidden", "headers": { "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "integer" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "Indicates the software used by the origin server to handle the request.", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LongJobError" }, "example": { "title": "ErrMissingAPIKey", "status": 403, "error_code": 403000, "message": "API key is missing" } } } }, "404": { "description": "Not Found", "headers": { "access-control-allow-headers": { "description": "Indicates which headers can be used during the actual request.", "schema": { "type": "string" } }, "access-control-allow-methods": { "description": "Indicates which HTTP methods are allowed when accessing the resource.", "schema": { "type": "string" } }, "access-control-expose-headers": { "description": "Indicates which headers can be exposed as part of the response.", "schema": { "type": "string" } }, "access-control-allow-origin": { "description": "Indicates whether the response can be shared with requesting code from the given origin.", "schema": { "type": "string" } }, "access-control-max-age": { "description": "Indicates how long the results of a preflight request can be cached.", "schema": { "type": "string" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "content-type": { "description": "Indicates the media type of the resource.", "schema": { "type": "string" } }, "content-length": { "description": "Indicates the size of the response body in bytes.", "schema": { "type": "string" } }, "date": { "description": "Indicates the date and time at which the message was originated.", "schema": { "type": "string" } }, "server": { "description": "Indicates the software used by the origin server to handle the request.", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" }, "example": { "error_code": "unknown_job_id", "message": "Job ID does not exist." } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobError" }, "example": { "error_code": "runtime_error", "message": "An unexpected error occurred while processing your request. Please retry or contact support if the issue persists." } } } } } } }, "/run-scripts": { "post": { "tags": [ "Custom Scripts" ], "operationId": "registerCustomScriptCapability", "summary": "Submit a Custom Script", "x-ffs-cxp-ui-group": "customScriptRegisterAndExecute", "description": "Submits Custom Script bundles for registration. Returns a URL for posting execution requests for the registered script.", "security": [ { "AccessToken": [], "X-Api-Key": [] } ], "requestBody": { "required": true, "description": "The custom script bundle, in `multipart/form-data`.", "content": { "multipart/form-data": { "schema": { "type": "object", "description": "The custom script bundle, in ZIP format.", "required": [ "file" ], "properties": { "file": { "type": "string", "format": "binary", "description": "The custom script bundle, in ZIP format. Required contents: `script.jsx` (ExtendScript with `main()` entry point) and `manifest.json` (capability metadata)." } } } } } }, "responses": { "202": { "description": "Accepted", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CapabilityRegistrationResponse" }, "example": { "url": "https://illustrator-api.adobe.io/v3//", "capability": "", "version": "" } } } }, "400": { "description": "Bad Request", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "401": { "description": "Unauthorized", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "403": { "description": "Forbidden", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "404": { "description": "Requested Resource Was Not Found", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "500": { "description": "Internal Server Error", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } } } } }, "/v3/{ownerHash}/{capabilityName}": { "post": { "tags": [ "Custom Scripts" ], "operationId": "executeCustomScriptCapability", "summary": "Submit a custom script execution request", "x-ffs-cxp-ui-group": "customScriptRegisterAndExecute", "description": "Submits execution requests for custom scripts. Defines input assets and parameters that the custom script will use during execution.", "x-ffs-async-job": true, "x-ffs-job-status-fetcher": "customScriptsJobStatus", "security": [ { "AccessToken": [], "X-Api-Key": [] } ], "parameters": [ { "name": "ownerHash", "in": "path", "required": true, "description": "Path segment for the script owner (owner hash), as in the `url` returned in the custom script **Submit a Custom Script** response (same role as a script scope identifier in other Custom Scripts products).", "schema": { "type": "string" } }, { "name": "capabilityName", "in": "path", "required": true, "description": "The name of the custom script, specified in the custom script `manifest.json` and registration response (same idea as a script name in custom script manifest-based APIs).", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "This job request object specifies parameters for the execution of the custom script.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptExecuteRequest" }, "example": { "assets": [ { "source": { "url": "" }, "destination": "template.ai" } ], "params": { "targetDocument": "template.ai", "outputFolderPath": "" } } } } }, "responses": { "202": { "description": "Accepted", "headers": { "link": { "description": "The status URL for a retry.", "schema": { "type": "string" } }, "retry-after": { "description": "The number of seconds until the user should try again.", "schema": { "type": "integer" } }, "Content-Type": { "description": "The type of content that is returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptExecuteResponse" }, "example": { "jobId": "", "statusUrl": "https://illustrator-api.adobe.io/v3/status/" } } } }, "400": { "description": "Bad Request", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "401": { "description": "Unauthorized", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "403": { "description": "Forbidden", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "404": { "description": "Requested Resource Was Not Found", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "500": { "description": "Internal Server Error", "headers": { "Content-Type": { "description": "The type of content returned (e.g., application/json).", "schema": { "type": "string" } }, "Content-Length": { "description": "The length of the response content.", "schema": { "type": "integer" } }, "Access-Control-Allow-Origin": { "description": "The Cross Origin Resource Sharing (CORS) header.", "schema": { "type": "string" } }, "Access-Control-Allow-Methods": { "description": "This header indicates what HTTP methods are allowed.", "schema": { "type": "string" } }, "Access-Control-Allow-Headers": { "description": "This indicates which HTTP headers can be used during the actual request.", "schema": { "type": "string" } }, "Access-Control-Allow-Credentials": { "description": "Indicates whether the browser may send credentials with cross-origin requests.", "schema": { "type": "string" } }, "Access-Control-Max-Age": { "description": "This indicates how long the results of a preflight request can be cached.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } } } } }, "/v3/status/{jobId}": { "get": { "tags": [ "Custom Scripts" ], "operationId": "customScriptsJobStatus", "summary": "Retrieve job status", "description": "Poll execution status for a Custom Scripts job. Use this after calling custom script execute. When the job succeeds, each entry in `outputs` includes a presigned URL to download an output file.", "x-ffs-status-fetcher": true, "x-ffs-job-name": "CxpCustomScriptAsyncJob", "security": [ { "AccessToken": [], "X-Api-Key": [] } ], "parameters": [ { "name": "jobId", "in": "path", "required": true, "description": "Job ID returned from execute capability.", "schema": { "type": "string", "example": "ee45451e-3a84-4a81-aa21-7f00aa3302a4" } } ], "responses": { "200": { "description": "Success", "headers": { "Content-Type": { "description": "Media type of the response.", "schema": { "type": "string", "example": "application/json" } }, "x-request-id": { "description": "Unique identifier for the request.", "schema": { "type": "string" } }, "x-cxp-version": { "description": "Platform version.", "schema": { "type": "string" } }, "x-cxp-environment": { "description": "Deployment environment.", "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/CustomScriptJobSucceededResponse" }, { "$ref": "#/components/schemas/CustomScriptJobRunningResponse" }, { "$ref": "#/components/schemas/CustomScriptJobFailedResponse" } ] }, "examples": { "succeeded": { "summary": "Execution Success", "value": { "jobId": "", "timestamp": "", "status": "succeeded", "data": { "conversionDetails": { "inputFile": "", "outputFolderPath": "", "success": true } }, "outputs": [ { "destination": { "url": "" }, "source": "" } ] } }, "running": { "summary": "Execution Running", "value": { "jobId": "", "timestamp": "", "status": "running" } }, "failed": { "summary": "Execution Failed", "value": { "jobId": "", "timestamp": "", "status": "failed", "errors": [ { "message": "" } ] } } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } }, "404": { "description": "Requested Resource Was Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptJobNotFoundResponse" }, "example": { "message": "JobId ee45451e-3a84-4a81-aa21-7f00aa3302a4 not found", "errorCode": "not_found" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomScriptApiError" } } } } } } } }, "components": { "securitySchemes": { "AccessToken": { "type": "http", "scheme": "bearer", "description": "The Adobe-generated access token, S2S format." }, "X-Api-Key": { "type": "apiKey", "name": "x-api-key", "in": "header", "description": "The client ID for authentication." } }, "schemas": { "DataMergeSourceUrl": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL pointing to the resource. Only the following allow-listed domains can be used: amazonaws.com, windows.net, dropboxusercontent.com, assets.frame.io, storage.googleapis.com.", "example": "https://your-bucket.s3.amazonaws.com/your-file.csv" } }, "required": [ "url" ] }, "DataMergeData": { "type": "object", "properties": { "source": { "description": "The source containing the CSV file with variable data. The media type defaults to `text/csv`.", "allOf": [ { "$ref": "#/components/schemas/DataMergeSourceUrl" } ] } }, "required": [ "source" ] }, "DataMergeTemplate": { "type": "object", "properties": { "source": { "description": "The source containing the Adobe Illustrator template file.", "allOf": [ { "$ref": "#/components/schemas/DataMergeSourceUrl" } ] } }, "required": [ "source" ] }, "DataMergeFontFileMediaType": { "type": "string", "description": "The media type of the font file. Supports font/ttf and font/otf.", "enum": [ "font/ttf", "font/otf" ] }, "DataMergeFontFile": { "type": "object", "properties": { "source": { "description": "The source containing the font file.", "allOf": [ { "$ref": "#/components/schemas/DataMergeSourceUrl" } ] }, "mediaType": { "$ref": "#/components/schemas/DataMergeFontFileMediaType" } }, "required": [ "source", "mediaType" ] }, "DataMergeFontSettings": { "type": "object", "properties": { "autoReduceFontSizeToFit": { "type": "boolean", "description": "Automatically reduce font size to fit text within text boxes. Defaults to false if not specified.", "default": false }, "minFontSize": { "type": "number", "description": "Minimum font size (in points) when `autoReduceFontSizeToFit` is enabled. Must be a positive number.", "example": 8 }, "fallBackFont": { "type": "string", "description": "A case-sensitive PostScript font name (like Roboto-Thin, Oxygen, or SourceSansPro-Bold) to use as a fallback when the fonts are missing in the template file.", "example": "Roboto-Thin" } } }, "DataMergeSettings": { "type": "object", "properties": { "fontSettings": { "description": "Settings for font handling during the merge operation.", "allOf": [ { "$ref": "#/components/schemas/DataMergeFontSettings" } ] } } }, "DataMergeOutputMediaType": { "type": "string", "description": "The desired output media type for the merged documents.", "enum": [ "image/png", "image/jpeg", "application/pdf", "image/svg+xml", "application/illustrator", "application/eps" ] }, "DataMergeOutputSpec": { "type": "object", "properties": { "fileName": { "type": "string", "description": "The output file name. May or may not have an extension. It is recommended to provide with extension (e.g., 'result.png', 'output.pdf').", "example": "your-output.pdf" }, "mediaType": { "$ref": "#/components/schemas/DataMergeOutputMediaType" } }, "required": [ "fileName", "mediaType" ] }, "DataMergeRequest": { "type": "object", "properties": { "data": { "description": "The data source containing variable data. Must be a CSV file.", "allOf": [ { "$ref": "#/components/schemas/DataMergeData" } ] }, "template": { "description": "The template source (Adobe Illustrator file).", "allOf": [ { "$ref": "#/components/schemas/DataMergeTemplate" } ] }, "fontFiles": { "description": "Optional array of font files to be used in the template. Supports .ttf and .otf font formats.", "type": "array", "items": { "$ref": "#/components/schemas/DataMergeFontFile" } }, "settings": { "description": "Settings for the data merge operation.", "allOf": [ { "$ref": "#/components/schemas/DataMergeSettings" } ] }, "output": { "description": "Output specification for the merge operation with file name and media type.", "allOf": [ { "$ref": "#/components/schemas/DataMergeOutputSpec" } ] } }, "required": [ "data", "template", "output" ] }, "JobLinkResponse": { "type": "object", "properties": { "jobId": { "type": "string", "description": "The job ID.", "example": "f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4" }, "statusUrl": { "type": "string", "description": "The status URL.", "example": "https://illustrator-api.adobe.io/v1/status/f246bc8a-45ef-4cdc-8217-6c1ab74c5dc4" } }, "required": [ "jobId", "statusUrl" ] }, "JobError": { "type": "object", "properties": { "error_code": { "type": "string", "description": "The error code.", "example": "validation_error" }, "message": { "type": "string", "description": "The error message.", "example": "Invalid request payload. Check validation_errors for details." }, "validation_errors": { "description": "An array of various validation errors.", "type": "array", "items": { "type": "string" } } }, "required": [ "error_code" ] }, "UnauthorizedError": { "type": "object", "properties": { "title": { "type": "string", "description": "The error title.", "example": "ErrInvalidOauthToken" }, "status": { "type": "integer", "description": "The HTTP status code." }, "error_code": { "type": "integer", "description": "The error code." }, "message": { "type": "string", "description": "The error message.", "example": "Oauth token is not valid" } }, "required": [ "status", "error_code" ] }, "ForbiddenError": { "type": "object", "properties": { "title": { "type": "string", "description": "The error title.", "example": "ErrMissingAPIKey" }, "status": { "type": "integer", "description": "The HTTP status code." }, "error_code": { "type": "integer", "description": "The error code." }, "message": { "type": "string", "description": "The error message.", "example": "API key is missing" } }, "required": [ "status", "error_code" ] }, "LongJobError": { "type": "object", "properties": { "title": { "type": "string", "description": "The error title.", "example": "ErrInvalidOauthToken" }, "status": { "type": "integer", "description": "The HTTP status code." }, "error_code": { "type": "integer", "description": "The error code." }, "message": { "type": "string", "description": "The error message.", "example": "Oauth token is not valid" } }, "required": [ "status", "error_code" ] }, "JobStatus": { "type": "string", "description": "The job status.", "enum": [ "running", "failed", "succeeded" ] }, "DataMergeOutputDestination": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL to the output file.", "example": "https://output-bucket.s3.amazonaws.com/merge-results/row-1.pdf" } }, "required": [ "url" ] }, "DataMergeJobApiResponse": { "type": "object", "title": "Succeeded (Data Merge)", "description": "Returned when a Data Merge job completes successfully. Each output includes the CSV row index.", "properties": { "status": { "type": "string", "description": "The job status.", "enum": [ "succeeded" ] }, "jobId": { "type": "string", "description": "The job ID.", "example": "ef4f7daa-0d09-4dcf-9884-029bb7f374ac" }, "outputs": { "description": "Array of output files from the data merge operation, one per CSV row.", "type": "array", "items": { "$ref": "#/components/schemas/DataMergeOutputWithRow" } } }, "required": [ "status", "jobId", "outputs" ] }, "JobStatusPollPayload": { "type": "object", "title": "Running", "description": "Returned while the job is still processing. Poll again after the interval indicated by `Retry-After`.", "properties": { "status": { "description": "The job status.", "allOf": [ { "$ref": "#/components/schemas/JobStatus" }, { "enum": [ "running" ] } ] }, "jobId": { "type": "string", "description": "The job ID.", "example": "48db6300-1cc5-4a31-84f6-5092fbd67484" }, "Retry-After": { "type": "string", "description": "Suggested number of seconds to wait before sending another request to this endpoint.", "example": "1" } }, "required": [ "status", "jobId", "Retry-After" ], "additionalProperties": false }, "DataMergeJobFailedResponse": { "type": "object", "title": "Failed", "properties": { "jobId": { "type": "string", "description": "The job ID.", "example": "ef4f7daa-0d09-4dcf-9884-029bb7f374ac" }, "status": { "type": "string", "enum": [ "failed" ], "description": "The job status." }, "error_code": { "type": "string", "description": "The error code.", "example": "runtime_error" }, "message": { "type": "string", "description": "The error message.", "example": "Missing fonts detected: Chabplan-Rg. Please provide font files." } }, "required": [ "jobId", "status", "error_code", "message" ] }, "DataMergeRowRange": { "type": "object", "description": "An inclusive range of CSV row indices.", "properties": { "start": { "type": "integer", "description": "The start row index for the range." }, "end": { "type": "integer", "description": "The end row index for the range." } }, "required": [ "start", "end" ] }, "DataMergeNeedsRerunItem": { "type": "object", "description": "A row range that must be rerun after errors are resolved.", "properties": { "rowRange": { "description": "The inclusive range of CSV rows to reprocess.", "allOf": [ { "$ref": "#/components/schemas/DataMergeRowRange" } ] } }, "required": [ "rowRange" ] }, "DataMergePartialSuccessError": { "type": "object", "description": "An error for a specific CSV row when the job completes with partial success.", "properties": { "row": { "type": "integer", "description": "The CSV row index where the error occurred." }, "error_code": { "type": "string", "description": "The error code for this row.", "example": "runtime_error" }, "message": { "type": "string", "description": "The error message for this row.", "example": "Missing fonts detected: Chabplan-Rg. Please provide font files." } }, "required": [ "row", "error_code", "message" ] }, "DataMergeOutputWithRow": { "type": "object", "description": "A merged output file for a specific CSV row.", "properties": { "row": { "type": "integer", "description": "The CSV row index for this output." }, "destination": { "description": "Details of the location where the output is located.", "allOf": [ { "$ref": "#/components/schemas/DataMergeOutputDestination" } ] }, "mediaType": { "type": "string", "description": "Media type of the output.", "example": "application/pdf" } }, "required": [ "row", "destination", "mediaType" ], "additionalProperties": false }, "DataMergeJobPartiallySucceededResponse": { "type": "object", "title": "Partially Succeeded", "description": "Returned ONLY FOR DATA MERGE jobs when some rows produced outputs while others failed or require rerun. Other job types do not use this status.", "properties": { "jobId": { "type": "string", "description": "The job ID.", "example": "1dd551c5-6023-4ff9-b736-bc27b36cbb7f" }, "status": { "type": "string", "enum": [ "partially_succeeded" ], "description": "The job status." }, "outputs": { "type": "array", "description": "Output files produced for successfully merged rows.", "items": { "$ref": "#/components/schemas/DataMergeOutputWithRow" } }, "errors": { "type": "array", "description": "Per-row errors for rows that did not produce outputs.", "items": { "$ref": "#/components/schemas/DataMergePartialSuccessError" } }, "needsRerun": { "type": "array", "description": "Row ranges that must be rerun after addressing errors (for example, missing fonts).", "items": { "$ref": "#/components/schemas/DataMergeNeedsRerunItem" } } }, "required": [ "jobId", "status", "outputs", "errors", "needsRerun" ] }, "CreateRenditionSourceUrl": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL pointing to the Adobe Illustrator file. Only the following allow-listed domains can be used: amazonaws.com, windows.net, dropboxusercontent.com, assets.frame.io, storage.googleapis.com.", "example": "https://your-bucket.s3.amazonaws.com/your-document.ai" } }, "required": [ "url" ] }, "CreateRenditionSourceMediaType": { "type": "string", "description": "The media type of the source file.", "enum": [ "application/illustrator" ] }, "CreateRenditionFontSourceUrl": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL pointing to the resource. Only the following allow-listed domains can be used: amazonaws.com, windows.net, dropboxusercontent.com, assets.frame.io, storage.googleapis.com.", "example": "https://your-bucket.s3.amazonaws.com/your-font.ttf" } }, "required": [ "url" ] }, "CreateRenditionFontFileMediaType": { "type": "string", "description": "The media type of the font file. Supports font/ttf and font/otf.", "enum": [ "font/ttf", "font/otf" ] }, "CreateRenditionFontFile": { "type": "object", "properties": { "source": { "description": "The source containing the font file.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionFontSourceUrl" } ] }, "mediaType": { "$ref": "#/components/schemas/CreateRenditionFontFileMediaType" } }, "required": [ "source", "mediaType" ] }, "CreateRenditionInput": { "type": "object", "properties": { "source": { "description": "The source containing the Adobe Illustrator file.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionSourceUrl" } ] }, "mediaType": { "description": "The media type of the source file. Optional, defaults to application/illustrator.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionSourceMediaType" } ] } }, "required": [ "source" ] }, "CreateRenditionOutputMediaType": { "type": "string", "description": "The desired output media type for the converted file.", "enum": [ "image/png", "image/jpeg", "image/webp", "image/svg+xml", "application/pdf", "application/eps" ] }, "CreateRenditionOutputSpec": { "type": "object", "properties": { "mediaType": { "$ref": "#/components/schemas/CreateRenditionOutputMediaType" } }, "required": [ "mediaType" ] }, "CreateRenditionSettings": { "type": "object", "properties": { "documentLevel": { "type": "number", "description": "Document level - 0 for artboard level, 1 for document level", "enum": [ 0, 1 ] }, "artboardRange": { "type": "string", "description": "Artboard range to export (e.g., '1-3', '1,2,5'). Required when documentLevel is 0.", "example": "1-3" }, "resolution": { "type": "number", "description": "Resolution in DPI (dots per inch) for the output. Must be an integer between 4 and 2400 for PNG, JPEG and WEBP formats. Defaults to 72. Not applicable for other formats (PDF, EPS or SVG).", "minimum": 4, "maximum": 2400, "default": 72 } }, "required": [ "documentLevel" ] }, "CreateRenditionRequest": { "type": "object", "properties": { "input": { "description": "The input object containing source and media type.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionInput" } ] }, "fontFiles": { "description": "Optional array of font files to be used in the rendition. Supports .ttf and .otf font formats.", "type": "array", "items": { "$ref": "#/components/schemas/CreateRenditionFontFile" } }, "output": { "description": "Output specification for the rendition operation with desired media type.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionOutputSpec" } ] }, "settings": { "description": "Settings for controlling the rendition process.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionSettings" } ] } }, "required": [ "input", "output", "settings" ] }, "CreateRenditionOutputDestination": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL to the output file.", "example": "https://output-bucket.s3.amazonaws.com/rendition-output.pdf" } }, "required": [ "url" ] }, "CreateRenditionOutput": { "type": "object", "properties": { "destination": { "description": "Details of the location where the output is located.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionOutputDestination" } ] }, "mediaType": { "type": "string", "description": "Media type of the output.", "example": "application/pdf" } }, "required": [ "destination", "mediaType" ], "additionalProperties": false }, "CreateRenditionJobApiResponse": { "type": "object", "title": "Succeeded (Create Rendition)", "description": "Returned when a Create Rendition job completes successfully. Output items do not include a CSV row index.", "properties": { "status": { "type": "string", "description": "The job status.", "enum": [ "succeeded" ] }, "jobId": { "type": "string", "description": "The job ID.", "example": "6f35a027-c578-41e6-9e53-034424c69d14" }, "outputs": { "type": "array", "description": "Array of converted output files (one for each artboard).", "items": { "$ref": "#/components/schemas/CreateRenditionOutput" } } }, "required": [ "status", "jobId", "outputs" ] }, "VectorizeRequest": { "type": "object", "description": "Request body for an Image Trace job. Input accepts PNG or JPEG; output is SVG.", "properties": { "input": { "description": "Input raster source and media type.", "allOf": [ { "$ref": "#/components/schemas/VectorizeInput" } ] }, "settings": { "description": "Optional vectorization preset (`preset` only).", "allOf": [ { "$ref": "#/components/schemas/VectorizeSettings" } ] } }, "required": [ "input" ] }, "VectorizeSourceUrl": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL pointing to the input raster file.", "example": "https://your-bucket.s3.amazonaws.com/your-image.png" } }, "required": [ "url" ] }, "VectorizeInputMediaType": { "type": "string", "description": "The media type of the input raster file.", "enum": [ "image/png", "image/jpeg" ] }, "VectorizeInput": { "type": "object", "properties": { "source": { "description": "The source containing the raster file to vectorize.", "allOf": [ { "$ref": "#/components/schemas/VectorizeSourceUrl" } ] }, "mediaType": { "description": "The media type of the source file.", "allOf": [ { "$ref": "#/components/schemas/VectorizeInputMediaType" } ] } }, "required": [ "source", "mediaType" ] }, "VectorizeSettings": { "type": "object", "description": "Vectorization preset. Only `preset` is supported.", "additionalProperties": false, "properties": { "preset": { "type": "string", "description": "Vectorization preset. `enhanced_general` favors a clean, vector-style look. `high_fidelity_photo` favors photorealistic tracing. Omit to use the service default. Other values return 400.", "enum": [ "enhanced_general", "high_fidelity_photo" ], "example": "enhanced_general" } } }, "ImageTraceOutput": { "type": "object", "properties": { "destination": { "description": "Details of the location where the output is located.", "allOf": [ { "$ref": "#/components/schemas/CreateRenditionOutputDestination" } ] }, "mediaType": { "type": "string", "enum": [ "image/svg+xml" ], "description": "Media type of the generated output." } }, "required": [ "destination", "mediaType" ], "additionalProperties": false }, "ImageTraceJobApiResponse": { "type": "object", "title": "Succeeded (Image Trace)", "description": "Returned when an Image Trace job completes successfully.", "properties": { "status": { "type": "string", "description": "The job status.", "enum": [ "succeeded" ] }, "jobId": { "type": "string", "description": "The job ID.", "example": "f7da0875-7919-486d-b915-7258c89f09e0" }, "outputs": { "type": "array", "description": "Array of generated SVG output files.", "items": { "$ref": "#/components/schemas/ImageTraceOutput" } } }, "required": [ "status", "jobId", "outputs" ] }, "ImageTraceJobFailedResponse": { "type": "object", "title": "Failed", "properties": { "jobId": { "type": "string", "description": "The job ID.", "example": "fe0f4a1a-a213-44bd-b37b-8aa2f636449c" }, "status": { "type": "string", "enum": [ "failed" ], "description": "The job status." }, "error_code": { "type": "string", "description": "The error code.", "example": "runtime_error" }, "message": { "type": "string", "description": "The error message.", "example": "An unexpected error occurred while processing your request." } }, "required": [ "jobId", "status", "error_code", "message" ] }, "CapabilityRegistrationResponse": { "type": "object", "description": "Response after a successful custom script submit. The `url` is the base URL to use for **Submit a custom script execution request** (append path segments or use it as the execute endpoint, depending on the value returned).", "properties": { "url": { "type": "string", "description": "Base URL for posting custom script execution requests.", "example": "https://illustrator-api.adobe.io/v3//" }, "capability": { "type": "string", "description": "Registered custom script or capability name (from `manifest.json`).", "example": "string" }, "version": { "type": "string", "description": "Registered capability version string.", "example": "string" } }, "required": [ "url", "capability", "version" ] }, "CustomScriptExecuteRequest": { "type": "object", "description": "This job request object specifies parameters for the execution of the custom script.", "properties": { "assets": { "type": "array", "description": "Array of **Input assets**. Information about the assets, which will be used to process the job (for example AI documents, font archives, packaged assets, and so on).", "items": { "type": "object", "description": "Information about an input asset the job will use (file reference and local destination name in the job workspace).", "properties": { "source": { "type": "object", "description": "Presigned URL for the asset.", "properties": { "url": { "type": "string", "description": "Presigned URL pointing to the asset.", "example": "" } }, "required": [ "url" ] }, "destination": { "type": "string", "description": "Local filename for the asset in the job workspace (referenced by `targetDocument` and other params). Path relative to the job workspace. Cannot contain `..`, a leading `/`, or `./`. Must be a valid filename." } }, "required": [ "source", "destination" ] } }, "params": { "type": "object", "properties": { "targetDocument": { "type": "string", "description": "Filename of the Illustrator document to process." }, "outputFolderPath": { "type": "string", "description": "Output folder path for generated files." }, "zip": { "type": "string", "description": "Optional. Destination filename of a zipped asset when inputs are packaged as a ZIP." }, "fontFolderPath": { "type": "string", "description": "Optional. Relative path to a font folder when required by the script. Path relative to the job workspace. Cannot contain `..`, a leading `/`, or `./`. Must be a valid filename. To use this parameter, the `zip` parameter must also be provided." } }, "required": [ "targetDocument", "outputFolderPath" ] } }, "required": [ "assets" ] }, "CustomScriptExecuteResponse": { "type": "object", "description": "Returned when a Custom Scripts execution request is accepted (HTTP 202).", "properties": { "jobId": { "type": "string", "description": "Job identifier. Use with **Retrieve job status** on `GET /v3/status/{jobId}` for Custom Scripts jobs.", "example": "string" }, "statusUrl": { "type": "string", "description": "URL to poll for job status.", "example": "string" } }, "required": [ "jobId", "statusUrl" ] }, "CustomScriptJobConversionDetails": { "type": "object", "description": "Details of the conversion performed during execution.", "properties": { "inputFile": { "type": "string", "description": "Name of the input Illustrator file.", "example": "" }, "outputFolderPath": { "type": "string", "description": "Name of the output folder.", "example": "" }, "success": { "type": "boolean", "description": "Whether conversion succeeded.", "example": true } } }, "CustomScriptOutputItem": { "type": "object", "properties": { "destination": { "type": "object", "description": "Presigned URL to download the output file.", "properties": { "url": { "type": "string", "description": "Presigned download URL.", "example": "" } }, "required": [ "url" ] }, "source": { "type": "string", "description": "Relative path of the output file within the output folder.", "example": "" } }, "required": [ "destination", "source" ] }, "CustomScriptJobSucceededResponse": { "type": "object", "title": "Execution Success", "description": "Returned when the Custom Scripts job completes successfully.", "properties": { "jobId": { "type": "string", "description": "The job ID.", "example": "" }, "timestamp": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp of when the status was recorded.", "example": "" }, "status": { "type": "string", "enum": [ "succeeded" ] }, "data": { "type": "object", "properties": { "conversionDetails": { "$ref": "#/components/schemas/CustomScriptJobConversionDetails" } } }, "outputs": { "type": "array", "description": "Presigned download URLs for each output file.", "items": { "$ref": "#/components/schemas/CustomScriptOutputItem" } } }, "required": [ "jobId", "timestamp", "status", "outputs" ] }, "CustomScriptJobRunningResponse": { "type": "object", "title": "Execution Running", "description": "Returned while the Custom Scripts job is still executing. Poll again after a short interval.", "properties": { "jobId": { "type": "string", "description": "The job ID.", "example": "" }, "timestamp": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp.", "example": "" }, "status": { "type": "string", "enum": [ "running" ] } }, "required": [ "jobId", "timestamp", "status" ] }, "CustomScriptJobFailedResponse": { "type": "object", "title": "Execution Failed", "description": "Returned when the Custom Scripts job has failed.", "properties": { "jobId": { "type": "string", "description": "The job ID.", "example": "" }, "timestamp": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp.", "example": "" }, "status": { "type": "string", "enum": [ "failed" ] }, "errors": { "type": "array", "description": "List of errors describing what went wrong.", "items": { "type": "object", "properties": { "message": { "type": "string", "example": "" } } } } }, "required": [ "jobId", "timestamp", "status", "errors" ] }, "CustomScriptJobNotFoundResponse": { "type": "object", "description": "Returned when the job ID does not exist.", "properties": { "message": { "type": "string", "example": "JobId not found" }, "errorCode": { "type": "string", "example": "" } } }, "CustomScriptApiError": { "type": "object", "properties": { "message": { "type": "string" }, "error_code": { "type": "string" } }, "required": [ "message", "error_code" ] } } } }