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
⬇ Download OpenAPI 1.0.0 spec (JSON) — this endpoint only ⬇ Download AI/LLM reference (.md)
Request
Send a GET request. There are no parameters.
GET https://{DOMAIN}/api/Ruleset/list
Code examples
List your RuleSets
cURL JavaScript Python PHP Node.js Java C# Go
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
⬇ Download OpenAPI 1.0.0 spec (JSON) — this endpoint only ⬇ Download AI/LLM reference (.md)
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"]}.
GET https://{DOMAIN}/api/Ruleset/get?set_id={set_id}
Code examples
Get a RuleSet
cURL JavaScript Python PHP Node.js Java C# Go
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
⬇ Download OpenAPI 1.0.0 spec (JSON) — this endpoint only ⬇ Download AI/LLM reference (.md)
Request
Send a GET request. The response is a JSON file
attachment.
GET https://{DOMAIN}/api/Ruleset/export
Code examples
Export all your RuleSets
cURL JavaScript Python PHP Node.js Java C# Go
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
⬇ Download OpenAPI 1.0.0 spec (JSON) — this endpoint only ⬇ Download AI/LLM reference (.md)
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.
POST https://{DOMAIN}/api/Ruleset/import
Code examples
Import RuleSets
cURL JavaScript Python PHP Node.js Java C# Go
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