Processes

Support DQE
Support DQE
  • Updated
Processes - DQE One Standalone API

Create, update, run and delete data-quality processes on your self-hosted DQE One Standalone server. A process ties a data source (a CSV file, a database or a CRM) to an action such as checking emails, phones, addresses, names or companies, or finding duplicates.

{DOMAIN} is the host name of your own DQE One Standalone server — it is self-hosted, so this value depends on your deployment. {EMAIL} is your DQE One login and {API_TOKEN} the token generated in My Account > API Token.
Typical order: upload a file (Files) or create a credential (Credentials) → createProcess → runProcess → poll the run (Runs) → download the result.
Related documentation: DQE One Standalone API — Introduction, Files, Credentials, Runs & results, RuleSets.
Two operations change data with a GET: runProcess and deleteProcess are GET requests even though they start a run and delete a process. Never put these URLs in a crawler, a link prefetcher or anything that replays GET requests.
List processes - DQE One Standalone API

Lists the processes you own, in no particular order.

listProcesses

Request

Send a GET request with your Basic credentials. There are no parameters.

GEThttps://{DOMAIN}/api/Process/list

Code examples

List your processes

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Process/list"
fetch("https://{DOMAIN}/api/Process/list", { method: "GET", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") } }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.get( "https://{DOMAIN}/api/Process/list", auth=("{EMAIL}", "{API_TOKEN}"), ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Process/list"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "get", url: "https://{DOMAIN}/api/Process/list", auth: { username: "{EMAIL}", password: "{API_TOKEN}" } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Process/list")) .header("Authorization", "Basic " + auth) .method("GET", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Get, "https://{DOMAIN}/api/Process/list"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "fmt" "io" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://{DOMAIN}/api/Process/list", nil) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Parameters

This endpoint takes no parameters.

Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

Response

Array. HTTP status 200.

The body is a JSON array; each element has these keys.

Key Description Type
id Integer
name String
type String
isDraft Boolean
lastRunId Integer

Response example

Example response
[ { "id": 42, "name": "Email check", "type": "check_email", "isDraft": false, "lastRunId": 101 } ]

Errors

HTTP Body / meaning
401 Unauthorized
500 Unexpected error

Test the API

Click the button below to test this endpoint live in your browser.

Heads-up: this console sends a real request to your own server from your browser, with your real API token.
Open console
Get a process - DQE One Standalone API

Returns the details of one process. A process owned by another user answers 404.

getProcess

Request

Send a GET request with the process id.

Known issue: for a process that has no linked file (any non-CSV source), this endpoint can answer with an unformatted HTTP 500 instead of JSON.
GEThttps://{DOMAIN}/api/Process/get?id={id}

Code examples

Get a process

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Process/get?id=42"
fetch("https://{DOMAIN}/api/Process/get?id=42", { method: "GET", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") } }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.get( "https://{DOMAIN}/api/Process/get", auth=("{EMAIL}", "{API_TOKEN}"), params={"id": "42"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Process/get?id=42"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "get", url: "https://{DOMAIN}/api/Process/get", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "id": "42" } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Process/get?id=42")) .header("Authorization", "Basic " + auth) .method("GET", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Get, "https://{DOMAIN}/api/Process/get?id=42"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "fmt" "io" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://{DOMAIN}/api/Process/get?id=42", nil) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Parameters

Field Description Type Mand / Opt
id Process id. Integer Mandatory
Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

Response

Process. HTTP status 200.

Key Description Type
id Integer
name String
type Process kind. String
source String
description String
file Integer
credentials Integer
ruleSet Integer
lastRunId Integer
createdBy String
updatedBy String
createdOn String
updatedOn String

Response example

The response is a file attachment, not JSON.

Errors

HTTP Body / meaning
400 No id found.
401 Unauthorized
404 Process not found

Test the API

Click the button below to test this endpoint live in your browser.

Heads-up: this console sends a real request to your own server from your browser, with your real API token.
Open console
Create a process - DQE One Standalone API

Creates a process that is immediately ready to run (it is not saved as a draft). Validation is strict and checks the live source, so a wrong credential, object or field is reported at creation time.

createProcess

Request

Send a JSON body. Required: name, kind, source, primaryKey and fields; the rest depends on the source and the kind (tables below).

POSThttps://{DOMAIN}/api/Process/create

Code examples

Create a process

curl -u "{EMAIL}:{API_TOKEN}" -X POST \ -H "Content-Type: application/json" \ -d '{ "name": "Email check", "kind": "check_email", "source": "csv", "file": 12, "primaryKey": "Id", "fields": { "FieldLabel": "Email" } }' \ "https://{DOMAIN}/api/Process/create"
fetch("https://{DOMAIN}/api/Process/create", { method: "POST", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}"), "Content-Type": "application/json" }, body: JSON.stringify({ "name": "Email check", "kind": "check_email", "source": "csv", "file": 12, "primaryKey": "Id", "fields": { "FieldLabel": "Email" } }) }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.post( "https://{DOMAIN}/api/Process/create", auth=("{EMAIL}", "{API_TOKEN}"), json={"name": "Email check", "kind": "check_email", "source": "csv", "file": 12, "primaryKey": "Id", "fields": {"FieldLabel": "Email"}}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Process/create"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); $data = ['name' => 'Email check', 'kind' => 'check_email', 'source' => 'csv', 'file' => 12, 'primaryKey' => 'Id', 'fields' => ['FieldLabel' => 'Email']]; curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "post", url: "https://{DOMAIN}/api/Process/create", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, data: { "name": "Email check", "kind": "check_email", "source": "csv", "file": 12, "primaryKey": "Id", "fields": { "FieldLabel": "Email" } } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); String body = "{\"name\":\"Email check\",\"kind\":\"check_email\",\"source\":\"csv\",\"file\":12,\"primaryKey\":\"Id\",\"fields\":{\"FieldLabel\":\"Email\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Process/create")) .header("Authorization", "Basic " + auth) .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(body)) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Post, "https://{DOMAIN}/api/Process/create"); request.Content = new StringContent("{\"name\":\"Email check\",\"kind\":\"check_email\",\"source\":\"csv\",\"file\":12,\"primaryKey\":\"Id\",\"fields\":{\"FieldLabel\":\"Email\"}}", Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "bytes" "fmt" "io" "net/http" ) func main() { body := []byte(`{"name":"Email check","kind":"check_email","source":"csv","file":12,"primaryKey":"Id","fields":{"FieldLabel":"Email"}}`) req, _ := http.NewRequest("POST", "https://{DOMAIN}/api/Process/create", bytes.NewBuffer(body)) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") req.Header.Set("Content-Type", "application/json") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Parameters

Field Description Type Mand / Opt
name String Mandatory
kind
Values: find_and_replace, format, audit, check_address, check_b2b, check_email, check_phone, check_name, check_duplicate
String Mandatory
source
Values: salesforce, dynamics, postgres, snowflake, bigquery, sftp, csv
String Mandatory
primaryKey Must exist in the file headers / source object. For Salesforce and Dynamics it must be the object's real primary key. String Mandatory
fields Shape depends on 'kind' - see the Processes article ('fields' per kind). Object Mandatory
description String Optional
file csv only: id from /api/File/add. The file is CLONED and linked to the process. Integer Optional
credential Every source except csv. Its type must match 'source'. Integer Optional
object Table / sObject / entity. Required for salesforce, dynamics, postgres, snowflake, bigquery. String Optional
ruleSet check_duplicate only: the numeric 'id' from /api/Ruleset/list (NOT the string setId). Integer Optional
input_file_path String Optional
output_dir_path String Optional
reject_dir_path String Optional
filters List of blocks, each a list of rows. [[]] means no filter. Array Optional
sync
Default: false
Boolean Optional
allowEmpty
Default: false
Boolean Optional
autoMerge
Default: false
Boolean Optional
mergeThreshold
Default: 100
Integer Optional
mergeB2BCode
Allowed items: A+, A, B+, B, C+, C, D+, D
Array Optional
mergeRNVPCode
Allowed items: 10, 20, 21, 22, 23, 24, 25, 30, 31, 40, 41, 50, 51, 60, 61, 70, 71, 80, 81, 90
Array Optional
updateChildToInactive
Default: false
Boolean Optional
deleteSFTP
Default: false
Boolean Optional
metaToReparent Object Optional
next Id of a process to chain after this one. Integer Optional
Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

The fields object, per kind

Every value is the name of a column (CSV) or field (database/CRM) that must exist in the source; primaryKey too.

kind Keys in fields
check_email FieldLabel
check_phone CountryField, FieldLabel, Format
check_name Salutation, FirstName, LastName
check_address City, Country, DefaultCountry, FieldTag, PostalCode, Street; optional State
check_b2b City, CompanyName, Country, PostalCode, Siret, Street; optional State, plus DQE_<field> keys for the extra B2B notice fields
check_duplicate One key = the RuleSet's string setId; its value is the list of matching-rule labels to use, which must be among the RuleSet's matching.Labels[].value (read them with /api/Ruleset/get). Example: {"RS_ABC": ["Email + Name"]}
find_and_replace, format, audit Not usable through the API today — see Known limitations below.

Required keys, per source

source Keys required in addition to name, kind, source, primaryKey, fields
salesforce, dynamics, postgres, bigquery object, credential (its type must match the source)
snowflake Same, but Snowflake processes currently fail validation (see limitations)
sftp credential, input_file_path, output_dir_path, reject_dir_path (the three paths must exist on the SFTP server)
csv file — the id returned by /api/File/add. The file is cloned and the clone is linked to the process; the original stays free and deletable.
Any source, with kind = check_duplicate plus ruleSet — the numeric id from /api/Ruleset/list (not the string setId)

Filters

filters is a list of blocks, each block a list of rows {"field","operator","value"}. Every row after the first in a block also needs "relation" (AND or OR). [[]] means “no filter”.

{ "filters": [[ { "field": "Country", "operator": "equals", "value": "FR" }, { "relation": "AND", "field": "Email", "operator": "is empty", "value": "" } ]] }

How validation proceeds

The server checks JSON types first, then required keys, then looks up the credential, the object and the file on the live source, then validates fields and filters. Because types are checked first, a missing required key is reported as Key name must be a String.; the ... need to be set message only appears when the key is present but empty. Defaults when a key is absent: booleans false, mergeThreshold 100. autoMerge: true switches on all three automatic merges at once.

Response

Created. HTTP status 201.

Key Description Type
status
Values: success
String
id Integer

Response example

Example response
{ "status": "success", "id": 42 }

Errors

HTTP Body / meaning
400 Key name must be a String.
401 Unauthorized
404 Credential not found.
500 Selected Credential seem to be Expired.

Known limitations

  • find_and_replace and format processes fail with a 500 when created through the API; audit is accepted but has not been verified. Create these in the web interface.
  • Snowflake processes always fail validation through the API (and a Snowflake credential also needs a browser login).
  • maxRecords and backup are accepted but have no effect.

Test the API

Click the button below to test this endpoint live in your browser.

Heads-up: this console sends a real request to your own server from your browser, with your real API token. Creating a process validates against your real data source.
Open console
Update a process - DQE One Standalone API

Changes an existing process. It re-runs the full creation validation.

updateProcess

Request

Send a PUT with the same JSON body as creation plus the process id. kind, source, object, the SFTP paths and file cannot be changed.

Read this before updating: (1) an empty or false value falls back to the current value, so a boolean such as sync or autoMerge cannot be set back to false and a list cannot be cleared; (2) the process is rebuilt from the values you send, so fields you do not list — including its link to the last run — return to their defaults, which also lifts the “Process already running” protection; (3) success is HTTP 201, not 200.
PUThttps://{DOMAIN}/api/Process/update

Code examples

Update a process

curl -u "{EMAIL}:{API_TOKEN}" -X PUT \ -H "Content-Type: application/json" \ -d '{ "id": 42, "name": "Email check (renamed)", "kind": "check_email", "source": "csv", "primaryKey": "Id", "fields": { "FieldLabel": "Email" } }' \ "https://{DOMAIN}/api/Process/update"
fetch("https://{DOMAIN}/api/Process/update", { method: "PUT", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}"), "Content-Type": "application/json" }, body: JSON.stringify({ "id": 42, "name": "Email check (renamed)", "kind": "check_email", "source": "csv", "primaryKey": "Id", "fields": { "FieldLabel": "Email" } }) }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.put( "https://{DOMAIN}/api/Process/update", auth=("{EMAIL}", "{API_TOKEN}"), json={"id": 42, "name": "Email check (renamed)", "kind": "check_email", "source": "csv", "primaryKey": "Id", "fields": {"FieldLabel": "Email"}}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Process/update"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); $data = ['id' => 42, 'name' => 'Email check (renamed)', 'kind' => 'check_email', 'source' => 'csv', 'primaryKey' => 'Id', 'fields' => ['FieldLabel' => 'Email']]; curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "put", url: "https://{DOMAIN}/api/Process/update", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, data: { "id": 42, "name": "Email check (renamed)", "kind": "check_email", "source": "csv", "primaryKey": "Id", "fields": { "FieldLabel": "Email" } } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); String body = "{\"id\":42,\"name\":\"Email check (renamed)\",\"kind\":\"check_email\",\"source\":\"csv\",\"primaryKey\":\"Id\",\"fields\":{\"FieldLabel\":\"Email\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Process/update")) .header("Authorization", "Basic " + auth) .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString(body)) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Put, "https://{DOMAIN}/api/Process/update"); request.Content = new StringContent("{\"id\":42,\"name\":\"Email check (renamed)\",\"kind\":\"check_email\",\"source\":\"csv\",\"primaryKey\":\"Id\",\"fields\":{\"FieldLabel\":\"Email\"}}", Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "bytes" "fmt" "io" "net/http" ) func main() { body := []byte(`{"id":42,"name":"Email check (renamed)","kind":"check_email","source":"csv","primaryKey":"Id","fields":{"FieldLabel":"Email"}}`) req, _ := http.NewRequest("PUT", "https://{DOMAIN}/api/Process/update", bytes.NewBuffer(body)) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") req.Header.Set("Content-Type", "application/json") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Parameters

Field Description Type Mand / Opt
name String Mandatory
kind
Values: find_and_replace, format, audit, check_address, check_b2b, check_email, check_phone, check_name, check_duplicate
String Mandatory
source
Values: salesforce, dynamics, postgres, snowflake, bigquery, sftp, csv
String Mandatory
primaryKey Must exist in the file headers / source object. For Salesforce and Dynamics it must be the object's real primary key. String Mandatory
fields Shape depends on 'kind' - see the Processes article ('fields' per kind). Object Mandatory
description String Optional
file csv only: id from /api/File/add. The file is CLONED and linked to the process. Integer Optional
credential Every source except csv. Its type must match 'source'. Integer Optional
object Table / sObject / entity. Required for salesforce, dynamics, postgres, snowflake, bigquery. String Optional
ruleSet check_duplicate only: the numeric 'id' from /api/Ruleset/list (NOT the string setId). Integer Optional
input_file_path String Optional
output_dir_path String Optional
reject_dir_path String Optional
filters List of blocks, each a list of rows. [[]] means no filter. Array Optional
sync
Default: false
Boolean Optional
allowEmpty
Default: false
Boolean Optional
autoMerge
Default: false
Boolean Optional
mergeThreshold
Default: 100
Integer Optional
mergeB2BCode
Allowed items: A+, A, B+, B, C+, C, D+, D
Array Optional
mergeRNVPCode
Allowed items: 10, 20, 21, 22, 23, 24, 25, 30, 31, 40, 41, 50, 51, 60, 61, 70, 71, 80, 81, 90
Array Optional
updateChildToInactive
Default: false
Boolean Optional
deleteSFTP
Default: false
Boolean Optional
metaToReparent Object Optional
next Id of a process to chain after this one. Integer Optional
id Integer Mandatory
Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

Response

Updated (note: 201, not 200). HTTP status 201.

Key Description Type
status
Values: success
String
id Integer

Response example

Example response
{ "status": "success", "id": 42 }

Errors

HTTP Body / meaning
400 No id found.
401 Unauthorized
404 Process not found.

Test the API

Click the button below to test this endpoint live in your browser.

Heads-up: this console sends a real request to your own server from your browser, with your real API token. Updating changes your real process.
Open console
Run a process - DQE One Standalone API

Queues a run of the process and returns immediately. The work is asynchronous: follow it with the Runs endpoint.

runProcess

Request

Send a GET request with the process id.

What happens: a run is created with status Started and queued. Jobs run one at a time per user, so a second run waits for the first. The RuleSet linked to a deduplication process is locked (not editable) from the moment a run is queued. There is no endpoint to cancel a run.
Always read the body, not just the HTTP status. Some failures — draft process, no SFTP file to process, queue failure — come back as HTTP 200 with {"status":"error","message":"..."}. run_id is a string.
GEThttps://{DOMAIN}/api/Process/run?id={id}

Code examples

Run a process

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Process/run?id=42"
fetch("https://{DOMAIN}/api/Process/run?id=42", { method: "GET", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") } }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.get( "https://{DOMAIN}/api/Process/run", auth=("{EMAIL}", "{API_TOKEN}"), params={"id": "42"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Process/run?id=42"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "get", url: "https://{DOMAIN}/api/Process/run", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "id": "42" } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Process/run?id=42")) .header("Authorization", "Basic " + auth) .method("GET", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Get, "https://{DOMAIN}/api/Process/run?id=42"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "fmt" "io" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://{DOMAIN}/api/Process/run?id=42", nil) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Parameters

Field Description Type Mand / Opt
id Process id. Integer Mandatory
Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

Response

Enqueued (or soft error). HTTP status 200.

Key Description Type
status HTTP 200 is returned even when status is 'error' (draft process, no SFTP file, queue failure).
Values: success, error
String
message String
run_id Run id, as a string. String

Response example

Example response
{ "status": "success", "message": "Process Enqueue", "run_id": "101" }

Errors

HTTP Body / meaning
400 Process already running
401 Unauthorized
404 Process not found
500

Test the API

Click the button below to test this endpoint live in your browser.

Heads-up: this console sends a real request to your own server from your browser, with your real API token. This starts a real run on your data.
Open console
Delete a process - DQE One Standalone API

Deletes a process. Allowed when the process is a draft, has never run, or its last run is Finished or Failed.

deleteProcess

Request

Send a GET request with the process id (yes, GET).

GEThttps://{DOMAIN}/api/Process/delete?id={id}

Code examples

Delete a process

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Process/delete?id=42"
fetch("https://{DOMAIN}/api/Process/delete?id=42", { method: "GET", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") } }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.get( "https://{DOMAIN}/api/Process/delete", auth=("{EMAIL}", "{API_TOKEN}"), params={"id": "42"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Process/delete?id=42"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "get", url: "https://{DOMAIN}/api/Process/delete", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "id": "42" } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Process/delete?id=42")) .header("Authorization", "Basic " + auth) .method("GET", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Get, "https://{DOMAIN}/api/Process/delete?id=42"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "fmt" "io" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://{DOMAIN}/api/Process/delete?id=42", nil) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Parameters

Field Description Type Mand / Opt
id Process id. Integer Mandatory
Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

Response

Deleted. HTTP status 200.

Key Description Type
status
Values: success
String

Response example

Example response
{ "status": "success" }

Errors

HTTP Body / meaning
400 No id found.
401 Unauthorized
404 Process not found
423 Process is not in a state that allows deletion
500 Failed to delete the Process

Test the API

Click the button below to test this endpoint live in your browser.

Heads-up: this console sends a real request to your own server from your browser, with your real API token. This permanently deletes the process.
Open console

See also

Related to

Was this article helpful?

0 out of 0 found this helpful