RuleSets

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

Import, export and read the deduplication RuleSets that check_duplicate processes rely on.

{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.
Two different ids. Each RuleSet has a numeric id and a string setId. createProcess expects the numeric id in ruleSet; getRuleset expects the string in set_id; and in a check_duplicate process the key of fields is the string setId. Both come from listRulesets.
List RuleSets - DQE One Standalone API

Lists your RuleSets, most recently updated first.

listRulesets

Request

Send a GET request. There are no parameters.

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

Code examples

List your RuleSets

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Ruleset/list"
fetch("https://{DOMAIN}/api/Ruleset/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/Ruleset/list", auth=("{EMAIL}", "{API_TOKEN}"), ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Ruleset/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/Ruleset/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/Ruleset/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/Ruleset/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/Ruleset/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 Numeric id - what /api/Process/create expects in 'ruleSet'. Integer
setId String id - what /api/Ruleset/get expects in 'set_id'. String
label String
updatedOn String
source String

Response example

Example response
[ { "id": 7, "setId": "RS_ABC", "label": "Contacts email+name", "updatedOn": "2026-11-01T10:00:00Z", "source": "postgres" } ]

Errors

HTTP Body / meaning
401 Unauthorized

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 RuleSet - DQE One Standalone API

Returns the full definition of one RuleSet, including the matching rule labels you need for a check_duplicate process.

getRuleset

Request

Send a GET request with the string set_id.

Where the labels are: the values in matching.Labels[].value are what you list in fields when creating the process, e.g. {"RS_ABC": ["Email + Name"]}.
GEThttps://{DOMAIN}/api/Ruleset/get?set_id={set_id}

Code examples

Get a RuleSet

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Ruleset/get?set_id=RS_ABC"
fetch("https://{DOMAIN}/api/Ruleset/get?set_id=RS_ABC", { 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/Ruleset/get", auth=("{EMAIL}", "{API_TOKEN}"), params={"set_id": "RS_ABC"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Ruleset/get?set_id=RS_ABC"); 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/Ruleset/get", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "set_id": "RS_ABC" } }) .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/Ruleset/get?set_id=RS_ABC")) .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/Ruleset/get?set_id=RS_ABC"); 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/Ruleset/get?set_id=RS_ABC", 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
set_id The setId string from the list. String Mandatory
Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

Response

RuleSet. HTTP status 200.

Key Description Type
setId String
isEditable Boolean
label String
updatedOn String
source String
matching Object
filtering Object
parenting Object
merging Object
objectsNames Array
multiobjectsMapping Object
isPublished Boolean

Response example

The response is a file attachment, not JSON.

Errors

HTTP Body / meaning
400 set_id parameter is required
401 Unauthorized
404 RuleSet 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
Export RuleSets - DQE One Standalone API

Downloads all your RuleSets as one JSON file keyed by set_id. There is no filter and no pagination.

exportRulesets

Request

Send a GET request. The response is a JSON file attachment.

GEThttps://{DOMAIN}/api/Ruleset/export

Code examples

Export all your RuleSets

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Ruleset/export"
fetch("https://{DOMAIN}/api/Ruleset/export", { 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/Ruleset/export", auth=("{EMAIL}", "{API_TOKEN}"), ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Ruleset/export"); 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/Ruleset/export", 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/Ruleset/export")) .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/Ruleset/export"); 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/Ruleset/export", 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

JSON attachment. HTTP status 200.

Binary/attachment response (application/octet-stream).

Response example

The response is a file attachment, not JSON.

Errors

HTTP Body / meaning
401 Unauthorized

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
Import RuleSets - DQE One Standalone API

Imports one or more RuleSets from a JSON file in the export format.

importRuleset

Request

Send a multipart/form-data POST with one field named file (a .json file).

Behaviour to know: custom-code rules (a rule with a Definition key, or Custom: true) are rejected. An existing editable RuleSet with the same set_id is overwritten. A file can partly succeed: you then get partial success with the list of errors. When every RuleSet fails, the status is 500 and error is a list (unlike every other endpoint, where it is a string). A RuleSet that points to a file or credential must reference one that exists.
POSThttps://{DOMAIN}/api/Ruleset/import

Code examples

Import RuleSets

curl -u "{EMAIL}:{API_TOKEN}" -X POST \ -F "file=@rulesets.json" \ "https://{DOMAIN}/api/Ruleset/import"
const form = new FormData(); form.append("file", fileInput.files[0]); // <input type="file"> fetch("https://{DOMAIN}/api/Ruleset/import", { method: "POST", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") }, body: form }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.post( "https://{DOMAIN}/api/Ruleset/import", auth=("{EMAIL}", "{API_TOKEN}"), files={"file": open("rulesets.json", "rb")}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Ruleset/import"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => new CURLFile("rulesets.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'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('file', fs.createReadStream("rulesets.json")); axios({ method: "post", url: "https://{DOMAIN}/api/Ruleset/import", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, headers: form.getHeaders(), data: form }) .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 boundary = "----dqe" + System.nanoTime(); byte[] content = java.nio.file.Files.readAllBytes(java.nio.file.Path.of("rulesets.json")); var out = new java.io.ByteArrayOutputStream(); out.write(("--" + boundary + "\r\nContent-Disposition: form-data; name=\"file\"; filename=\"" + "rulesets.json" + "\"\r\n\r\n").getBytes()); out.write(content); out.write(("\r\n--" + boundary + "--\r\n").getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Ruleset/import")) .header("Authorization", "Basic " + auth) .header("Content-Type", "multipart/form-data; boundary=" + boundary) .method("POST", HttpRequest.BodyPublishers.ofByteArray(out.toByteArray())) .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/Ruleset/import"); var form = new MultipartFormDataContent(); form.Add(new ByteArrayContent(File.ReadAllBytes("rulesets.json")), "file", "rulesets.json"); request.Content = form; var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "bytes" "fmt" "io" "mime/multipart" "net/http" "os" ) func main() { var buf bytes.Buffer w := multipart.NewWriter(&buf) part, _ := w.CreateFormFile("file", "rulesets.json") f, _ := os.Open("rulesets.json") io.Copy(part, f) w.Close() req, _ := http.NewRequest("POST", "https://{DOMAIN}/api/Ruleset/import", &buf) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") req.Header.Set("Content-Type", w.FormDataContentType()) 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
file A .json RuleSet export. String (file) Mandatory
Authentication: HTTP Basic — your DQE One email and your API token (My Account > API Token). See the Introduction article.

Response

Imported (success or partial success). HTTP status 200.

Key Description Type
status
Values: success, partial success, error
String
id Array
error A LIST here (unlike every other endpoint). Array

Response example

Example response
{ "status": "success", "id": [ 7 ] }

Errors

HTTP Body / meaning
400 API only accept .json file.
401 Unauthorized
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 creates or overwrites real RuleSets.
Open console

See also

Related to

Was this article helpful?

0 out of 0 found this helpful