{ "openapi": "3.0.0", "info": { "title": "Illustrator API - Firefly Services", "description": "Illustrator API allows you to perform various operations with an Adobe Illustrator template. 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." } ], "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-beta.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" }, "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-beta.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." } } } } } } } }, "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-beta.adobe.io/beta/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" ] }, "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 and JPEG formats. Defaults to 72. Not applicable for other formats (PDF, EPS, SVG, or WEBP).", "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" } ] }, "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" ] } } } }