Jobs
Returns the available filter values (aggregations) for job searches.
Only administrators and service accounts receive facet values. Any other caller receives an empty object (data: {}) instead of a 403 Forbidden.
Request body (all fields optional):
filters(optional, object) – Current filter criteria, used to compute the aggregation scope.must(optional, object) – Mandatory conditions combined with AND.
For admin and service callers, the response lists the distinct values and counts the caller can still select for each facet given the current search context. When both filters and must are omitted, the endpoint returns the available values without additional narrowing.
The exact set of facets returned depends on the search implementation and on the caller's permission scope over the underlying sources.
Job filter search response
Unauthorized
Unprocessable Entity
Internal Server Error
POST /api/job_filters/search HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 74
{
"filters": {
"status": [
"PENDING"
]
},
"must": {
"source.external_id": "src-crm"
}
}{
"data": {
"status": {
"buckets": [
{
"count": 5,
"key": "PENDING"
},
{
"count": 3,
"key": "COMPLETED"
}
],
"values": [
"PENDING",
"COMPLETED"
]
},
"type": {
"buckets": [
{
"count": 4,
"key": "profile"
}
],
"values": [
"profile"
]
}
}
}Searches jobs against the jobs Elasticsearch index using the request body.
Requires administrative priveleges (administrator or service account)
Request body:
query(optional, string) – Full-text search across job fields.page(optional, integer, default0) – Page number.size(optional, integer, default50, maximum100) – Page size.must(optional, object) – Mandatory filters combined with AND.filters(optional, object) – Exact-match criteria.
Response: Includes an x-total-count header with the total number of matching jobs. For non-admin/service callers, data is an empty array and x-total-count is 0.
The maximum page size is enforced by the schema, not by the controller. The listing is capped at the value supplied in size per page; there is no additional limit inside the search module.
Page number (0-indexed). If omitted, the default is 0.
0Search query text
Number of jobs per page. If omitted, the default is 50; the maximum is 100.
50Job search response
Unauthorized
Forbidden
Internal Server Error
POST /api/jobs/search HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 78
{
"must": {
"source.external_id": "src-crm"
},
"page": 0,
"query": "job-001",
"size": 50
}{
"data": [
{
"_embedded": {
"source": {
"external_id": "src-crm",
"id": 1,
"type": "salesforce"
}
},
"external_id": "job-001",
"id": 1,
"inserted_at": "2026-05-12T10:00:00Z",
"source_id": 1,
"start_date": "2026-05-12T10:00:00Z",
"status": "COMPLETED",
"type": "profile"
}
]
}Starts a background job to reindex all jobs in the search index. The endpoint returns 202 Accepted immediately after the task is queued.
Requires administrative privileges (administrator or service account).
Jobs become searchable as the background job completes. Search results may be temporarily incomplete while the index is being rebuilt.
Accepted
No content
Unauthorized
Forbidden
Internal Server Error
GET /api/jobs/search/reindex_all HTTP/1.1
Accept: */*
No content
Fetches a single job by its external ID, including its source and available events.
Requires the 'Execute structure profiling' permission. The check is global: the caller must hold the permission in at least one domain. Administrators and service accounts are always allowed.
Job external ID
Job
Unauthorized
Forbidden
Not found
Internal Server Error
GET /api/jobs/{external_id} HTTP/1.1
Accept: */*
{
"data": {
"_embedded": {
"source": {
"active": true,
"external_id": "src-crm",
"id": 1,
"type": "salesforce"
}
},
"external_id": "job-001",
"id": 1,
"inserted_at": "2026-05-12T10:00:00Z",
"source": {
"external_id": "src-crm",
"type": "salesforce"
},
"source_id": 1,
"start_date": "2026-05-12T10:00:00Z",
"status": "COMPLETED",
"type": "profile"
}
}Returns all jobs associated with a source. The query is run against the jobs search index and is scoped to the specified source's external ID. If the source has no jobs, the response contains an empty list.
Requires administrative privileges (administrator or service account).
The underlying search is capped at 10,000 results. No pagination is offered through this endpoint; use the general job search for paginated listing.
Source external ID
Jobs
Unauthorized
Forbidden
Internal Server Error
GET /api/sources/{source_external_id}/jobs HTTP/1.1
Accept: */*
{
"data": [
{
"external_id": "job-001",
"id": 1,
"inserted_at": "2026-05-12T10:00:00Z",
"source_id": 1,
"start_date": "2026-05-12T10:00:00Z",
"status": "COMPLETED",
"type": "profile"
}
]
}Creates a job for a source.
Requires the 'Execute structure profiling' permission. The check is global: the caller must hold the permission in at least one domain. Administrators and service accounts are always allowed.
Request body:
job(required) – Object containing:type(required, string) – Job type.parameters(optional, object) – Job-specific parameters.
Source external ID
Created
Unauthorized
Forbidden
Not found
Unprocessable Entity
Internal Server Error
POST /api/sources/{source_external_id}/jobs HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 53
{
"job": {
"parameters": {
"full": true
},
"type": "profile"
}
}{
"data": {
"_embedded": {
"source": {
"active": true,
"external_id": "src-crm",
"id": 1,
"type": "salesforce"
}
},
"external_id": "job-001",
"id": 1,
"inserted_at": "2026-05-12T10:00:00Z",
"source": {
"external_id": "src-crm",
"type": "salesforce"
},
"source_id": 1,
"start_date": "2026-05-12T10:00:00Z",
"status": "COMPLETED",
"type": "profile"
}
}Last updated