Scheduled imports allow you to automate the execution of your Assets imports at regular intervals, eliminating the need for manual triggering. This feature is particularly useful for keeping your Assets data synchronized with external systems that are frequently updated.
With scheduled imports, you can:
Scheduled imports are supported for the following import types:
Scheduled imports are not supported for discovery imports as Discovery tool already provides scheduling capabilities.
The scheduled import feature is managed by the Assets backend infrastructure using an internal scheduling service. When you create a schedule, the system:
Scheduled imports support the following cadences:
All times are stored and processed in UTC, but you can specify your preferred timezone when creating a schedule.
All scheduled import endpoints use the following base path:
1 2/jsm/assets/workspace/{workspaceId}/v1/importsource/{importSourceId}
Create a new schedule for an import source.
Endpoint: POST /importsource/{importSourceId}/importschedule
Request body:
1 2{ "runFrequency": "DAILY", "startTime": "2025-12-30T03:50:33Z", "timezone": "America/New_York", "callbackUrl": "https://your-app-callback-url.com" }
Parameters:
runFrequency (required): One of ONCE, DAILY, WEEKLY, MONTHLYstartTime (required): ISO 8601 formatted datetime string in UTCtimezone (required): IANA timezone identifier (e.g., "America/New_York", "Europe/London")callbackUrl (optional): Required only for external imports (Forge apps). This is the URL that will be called when the schedule triggersResponse:
1 2{ "id": "schedule-uuid", "importSourceId": "import-source-uuid", "runFrequency": "DAILY", "startTime": "2025-12-30T03:50:33Z", "timezone": "America/New_York", "isActive": true, "createdAt": "2025-12-30T10:00:00Z", "updatedAt": "2025-12-30T10:00:00Z" }
The response includes an id field (the importScheduleId) which is required for subsequent GET, PUT, and DELETE operations.
Retrieve the details of an existing schedule.
Endpoint: GET /importsource/{importSourceId}/importschedule/{importScheduleId}
Response:
1 2{ "id": "schedule-uuid", "importSourceId": "import-source-uuid", "runFrequency": "DAILY", "startTime": "2025-12-30T03:50:33Z", "timezone": "America/New_York", "isActive": true, "createdAt": "2025-12-30T10:00:00Z", "updatedAt": "2025-12-30T10:00:00Z" }
Update an existing schedule configuration.
Endpoint: PUT /importsource/{importSourceId}/importschedule/{importScheduleId}
Request body:
1 2{ "runFrequency": "WEEKLY", "startTime": "2025-12-31T08:00:00Z", "timezone": "Europe/London" }
All fields that were provided during schedule creation can be updated.
Delete an existing schedule. This will stop all future scheduled executions.
Endpoint: DELETE /importsource/{importSourceId}/importschedule/{importScheduleId}
External applications (such as Forge apps) need to implement additional logic to handle scheduled import callbacks.
Before setting up scheduled imports for an external application:
When a scheduled import is triggered:
workspaceId and importsourceId in the request body"scheduled": true in the request bodyWhen your callback is triggered, you must create a new execution and include the scheduled flag:
Endpoint: POST /jsm/assets/workspace/{workspaceId}/v1/importsource/{importsourceId}/executions
Request body:
1 2{ "scheduled": true }
Important: Always include "scheduled": true in the request body when creating an execution from a scheduled import callback. This is required for proper tracking and display in the import history.
If your application encounters errors during the scheduled import process, you should report these failures so they are visible to users in the import history.
Endpoint: POST /jsm/assets/workspace/{workspaceId}/v1/importsource/{importsourceId}/executions/{executionId}/history/failed
Request body:
1 2{ "failureReason": "Failed to fetch data from third-party API: Connection timeout" }
Parameters:
failureReason (required): A string describing why the import failed. Maximum length is 1024 characters.This endpoint can only be called before data completion has been signalled. Once you've indicated that all data has been submitted, you cannot report failures for that execution.
Common scenarios to report failures:
Always provide clear, actionable error messages to help users troubleshoot issues with their scheduled imports.
When your external application receives a callback from the Assets backend, follow these REST API calls:
Step 1: Create a new execution
1 2POST /jsm/assets/workspace/{workspaceId}/v1/importsource/{importsourceId}/executions Content-Type: application/json { "scheduled": true }
Response:
1 2{ "links": { "submitResults": "https://api.atlassian.com/jsm/assets/workspace/{workspaceId}/v1/importsource/{importsourceId}/executions/{executionId}/data" } }
Step 2: Submit your data chunks
1 2POST /jsm/assets/workspace/{workspaceId}/v1/importsource/{importsourceId}/executions/{executionId}/data Content-Type: application/json { "objectTypeId": "object-type-id", "objects": [ { "externalId": "asset-1", "label": "Asset Name", "attributes": { "attributeKey1": ["value1"], "attributeKey2": ["value2"] } } ] }
Step 3a: Signal completion (success)
After all data chunks have been submitted:
1 2POST /jsm/assets/workspace/{workspaceId}/v1/importsource/{importsourceId}/executions/{executionId}/history/completed Content-Type: application/json
Step 3b: Report failure (if errors occur)
If your application encounters errors before completion:
1 2POST /jsm/assets/workspace/{workspaceId}/v1/importsource/{importsourceId}/executions/{executionId}/history/failed Content-Type: application/json { "failureReason": "Failed to fetch data from third-party API: Connection timeout" }
When implementing scheduled imports, consider the following best practices:
Rate this page: