License History Report CSV API
<!-- MarkdownTOC -->
<!-- /MarkdownTOC -->
Organization admins can export their full license/usage history as CSV files. The API accepts a date range and optional filters and delivers output via pre-signed S3 URLs.
Before you begin
Use of this API requires Adobe Stock enterprise customers to first create a Server-to-Server integration in the Developer Console, and then promote the API integration to be an administrator for the organization. Please follow the steps found in Creating an API integration for the License History Report CSV API.
Workflow
-
Client sends
POST /1/Enterprise/ReportCsv/Reportswith date range and optional filters. -
If
immediate: true: API returns 200 with download URLs in a single call. -
If async (default): API returns 201 with an
enterprise_report_idand a polling URL. -
Client polls
GET /1/Enterprise/ReportCsv/Reports/:iduntilstatusiscompleted. -
Client presents the pre-signed S3 URLs to the admin for download (valid for 7 days).
-
Admin can view past jobs via
GET /1/Enterprise/ReportCsv/Reports(list) or cancel one viaDELETE.
API endpoints
The API provides the following endpoints in the https://stock.adobe.io/Rest namespace.
POST/1/Enterprise/ReportCsv/ReportsGET/1/Enterprise/ReportCsv/ReportsGET/1/Enterprise/ReportCsv/Reports/:enterprise_report_idDELETE/1/Enterprise/ReportCsv/Reports/:enterprise_report_idAuthentication
The Authorization header is required for any of the licensing calls. The API uses the header to determine the user's member number, licensing status, and default locale. See Authentication for API Access.
Request Headers
See Headers for Stock API Calls for details about header content.
-
Required headers:
x-Product, x-api-key, Authorization -
Optional headers:
X-Product-Location, X-Request-Id
API actions
Enqueue a job
Method: POST
Path: /1/Enterprise/ReportCsv/Reports
Enqueue a job: Request Headers
AuthorizationBearer <ims_token>Content-Typeapplication/jsonx-api-keyRequest Body Parameters
starting_dateending_datedate_orderasc or desc (default: desc)localeen_USfilters.keywordisSUDExportWithKeywordEnabled flag is onSuccess responses:
enterprise_report_id + reportStatus_urlError responses:
date_order, or an active job already exists for this orgGet job details
Method: GET
Path: /1/Enterprise/ReportCsv/Reports/:enterprise_report_id
Success response (200)
enterprise_report_idmember_idorganization_idreport_typepurchases, users, or groupsrequeststatus.statuspending, in_progress, completed, failedstatus.created_atstatus.completed_atresultparts_count, parts[] (with s3_url, row_count), combinedGet job details: Error responses
Delete job
Method: DELETE
Path: /1/Enterprise/ReportCsv/Reports/:enterprise_report_id
Removes the job record for the authenticated org.
Delete job: Error responses
Get job list
API Spec
Method: GET
Path: /1/Enterprise/ReportCsv/Reports
Returns all non-expired jobs for the org, newest first. Each item is the same shape as the Get Job Details response. Empty array if no jobs exist within the last 7 days.
Example (curl)
This is a GET request which should fetch the list of current jobs. To create a job, use a POST method instead.
curl --location --request GET 'https:// stock.adobe.io/Rest/1/Enterprise/ReportCsv/Reports' \--header 'x-api-key: <API key>' \--header 'Authorization: <Bearer Token>' \--header 'Content-Type: application/json' \--data '{"starting_date": "12/10/2025","ending_date": "4/2/2026","date_order": "desc","filters": {"keyword": ""},"locale": "en_US"}'
Limits
Rate Limits / Data Retention Policy
-
Concurrency limit: one active job per org at a time.
-
The API checks for any
pendingorin_progressrow created within the last 4 hours before accepting a new POST. -
Returns 422 if an active job exists.
-
Rows older than 4 hours are treated as stale (hung worker) and do not block new submissions.
-
Data retention: jobs older than 7 days are hidden from all API responses. S3 signed URLs share the same 7-day TTL — files are accessible for exactly as long as the job is visible.