> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.ada.cx/reference/end-users/bulk-deletion/get-a-deletion-job/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ada.cx/_mcp/server. # Get a deletion job GET https://example.ada.support/api/v2/jobs/{job_id} Returns the current state of a deletion job, including the per-identifier dispositions. A job for an unknown or unowned `job_id` returns `404`. Reference: https://docs.ada.cx/reference/end-users/bulk-deletion/get-a-deletion-job ## Request ### Path parameters - `job_id` (string, required) — Identifier of the deletion job returned when the request was submitted. ## Response ### 200 The deletion job was found. - `job_id` (string, optional) — Identifier of the deletion job. - `type` (string, optional) — The job type. - `client_reference` (string, optional, nullable) — The caller-supplied reference from the original request, or null. - `status` (enum, optional) — Lifecycle state of a deletion job. `queued` and `in_progress` are non-terminal; `completed`, `partial`, and `failed` are terminal. - Allowed values: `queued`, `in_progress`, `completed`, `partial`, `failed` - `identifiers` (list of IdentifierDisposition, optional) — Per-identifier outcomes. Inspect this array to understand exactly what was erased, rather than relying on the top-level status alone. - `created_at` (string, optional) — Time the job was created, in ISO 8601 format. - `completed_at` (string, optional, nullable) — Time the job reached a terminal state, in ISO 8601 format, or null while the job is still running. - `failure_reason` (string, optional, nullable) — Opaque, machine-readable diagnostic present only when `status` is `failed`, or null otherwise. This value is subject to change; to understand outcomes per identifier, inspect each identifier's `disposition` and `reason`. ## Errors ### 401 Unauthorized Error Authentication token is missing or invalid. Try generating a new token. - `any` ### 404 Not Found Error No deletion job exists for the supplied `job_id` under this AI Agent. - `any` ### 429 Too Many Requests Error Too many requests. Retry after slowing the request rate. - `any` ### 500 Internal Server Error Something went wrong on Ada's end. - `any` ## Types ### IdentifierDisposition The outcome for one submitted identifier. - `type` (enum, optional) — The kind of identifier supplied. `variable_match` selects every end user whose stored variable equals the value. - Allowed values: `email`, `chatter_id`, `external_id`, `end_user_id`, `variable_match` - `value` (string, optional) — The identifier value as submitted. - `variable` (string, optional, nullable) — The matched variable name, or null when not applicable. - `disposition` (enum, optional) — How the identifier was handled. `accepted` identifiers are queued for erasure; the other values indicate the identifier contributed no erasure. - Allowed values: `accepted`, `not_found`, `invalid`, `exceeds_limit`, `duplicate` - `matched_chatters` (integer, optional) — Number of end users matched by this identifier. - `reason` (string, optional, nullable) — Human-readable explanation for a non-accepted disposition. Always set for `invalid` and `exceeds_limit`, and for `not_found` on ID-based identifiers; may be null for a `not_found` `email` or `variable_match` selector, and for `accepted`/`duplicate`. Do not assume it is non-null from `disposition` alone. ## Examples **Response** ```json { "job_id": "job_01HXW...ZK", "type": "end_user_deletion", "client_reference": "ticket-4821", "status": "queued", "identifiers": [ { "type": "email", "value": "end-user@example.com", "variable": null, "disposition": "accepted", "matched_chatters": 1, "reason": null } ], "created_at": "2026-07-10T14:05:00Z", "completed_at": null, "failure_reason": null } ``` **SDK Code** ```python import requests url = "https://example.ada.support/api/v2/jobs/job_id" response = requests.get(url) print(response.json()) ``` ```javascript const url = 'https://example.ada.support/api/v2/jobs/job_id'; const options = {method: 'GET'}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://example.ada.support/api/v2/jobs/job_id" req, _ := http.NewRequest("GET", url, nil) res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://example.ada.support/api/v2/jobs/job_id") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://example.ada.support/api/v2/jobs/job_id") .asString(); ``` ```php request('GET', 'https://example.ada.support/api/v2/jobs/job_id'); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://example.ada.support/api/v2/jobs/job_id"); var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let request = NSMutableURLRequest(url: NSURL(string: "https://example.ada.support/api/v2/jobs/job_id")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```