curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/3fa85f64-5717-4562-b3fc-2c963f66afa6/tags/add/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"tag_uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7"}'import requests
url = "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/"
payload = { "tag_uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({tag_uuid: '7c9e6679-7425-40de-944b-e07fc1f90ae7'})
};
fetch('https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'tag_uuid' => '7c9e6679-7425-40de-944b-e07fc1f90ae7'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/"
payload := strings.NewReader("{\n \"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n}"
response = http.request(request)
puts response.read_body{
"uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"network_id": "N-0042",
"name": null,
"status": "in_review",
"risk": {
"score": 82,
"band": "high",
"bar": 0.82
},
"pattern_types": [
"exact_same_device",
"same_email"
],
"signal_types": [
"device",
"email"
],
"member_counts": {
"total": 3,
"users": 3,
"businesses": 0,
"transaction_parties": 0
},
"member_status": {
"approved": 1,
"declined": 1,
"in_review": 0,
"not_completed": 1
},
"signal_coverage": {
"device": {
"signals": 1,
"subjects": 3,
"coverage": 1
},
"email": {
"signals": 1,
"subjects": 2,
"coverage": 0.6667
}
},
"first_activity_at": "2026-10-01T09:12:44Z",
"last_activity_at": "2026-10-12T16:03:10Z",
"stats": {
"members": {
"total": 3,
"users": 3,
"businesses": 0,
"transaction_parties": 0
},
"member_status": {
"approved": 1,
"declined": 1,
"in_review": 0,
"not_completed": 1
},
"signals": {
"total": 2,
"by_type": {
"device": {
"signals": 1,
"subjects": 3,
"coverage": 1
},
"email": {
"signals": 1,
"subjects": 2,
"coverage": 0.6667
}
}
}
},
"fraud_tags": [],
"risk_signals": {
"residential_proxy_reuse": {
"detected": false,
"signal_count": 0,
"max_subject_count": 0
},
"email_intelligence": {
"enriched_signal_count": 1,
"high_risk_count": 0,
"social_profile_count": 0
},
"phone_intelligence": {
"enriched_signal_count": 0,
"high_risk_count": 0
}
},
"reviewed_at": "2026-10-12T16:30:00Z",
"reviewed_by": "reviewer@example.com",
"review_reason": "Shared device across three new accounts.",
"notes_count": 0,
"sharing_mode": "global",
"cross_org_available": true,
"cross_org_unavailable_reason": null,
"tags": [
{
"uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "SUSPICIOUS",
"color": "#6366F1",
"source": "custom",
"added_by": null,
"added_at": "2026-10-13T08:15:00Z"
}
],
"outcomes": {
"approved": 1,
"declined": 1,
"in_review": 0,
"total": 3
},
"patterns": [
{
"type": "background",
"score": 0.8125,
"members": 3,
"reason": null,
"computed_at": "2026-10-13T08:00:00Z"
}
]
}Add Network Tag
Put one of your application’s tags on the network. Returns the network detail, whose tags lists your application’s tags on the network, with 201 when the tag was added and 200 when it was already on the network. A tag that belongs to another application, or does not exist, returns 404 Tag not found.. Requires a full-access API key, or write:networks for a console member.
curl -X POST 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/3fa85f64-5717-4562-b3fc-2c963f66afa6/tags/add/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"tag_uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7"}'import requests
url = "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/"
payload = { "tag_uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({tag_uuid: '7c9e6679-7425-40de-944b-e07fc1f90ae7'})
};
fetch('https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'tag_uuid' => '7c9e6679-7425-40de-944b-e07fc1f90ae7'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/"
payload := strings.NewReader("{\n \"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/tags/add/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tag_uuid\": \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n}"
response = http.request(request)
puts response.read_body{
"uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"network_id": "N-0042",
"name": null,
"status": "in_review",
"risk": {
"score": 82,
"band": "high",
"bar": 0.82
},
"pattern_types": [
"exact_same_device",
"same_email"
],
"signal_types": [
"device",
"email"
],
"member_counts": {
"total": 3,
"users": 3,
"businesses": 0,
"transaction_parties": 0
},
"member_status": {
"approved": 1,
"declined": 1,
"in_review": 0,
"not_completed": 1
},
"signal_coverage": {
"device": {
"signals": 1,
"subjects": 3,
"coverage": 1
},
"email": {
"signals": 1,
"subjects": 2,
"coverage": 0.6667
}
},
"first_activity_at": "2026-10-01T09:12:44Z",
"last_activity_at": "2026-10-12T16:03:10Z",
"stats": {
"members": {
"total": 3,
"users": 3,
"businesses": 0,
"transaction_parties": 0
},
"member_status": {
"approved": 1,
"declined": 1,
"in_review": 0,
"not_completed": 1
},
"signals": {
"total": 2,
"by_type": {
"device": {
"signals": 1,
"subjects": 3,
"coverage": 1
},
"email": {
"signals": 1,
"subjects": 2,
"coverage": 0.6667
}
}
}
},
"fraud_tags": [],
"risk_signals": {
"residential_proxy_reuse": {
"detected": false,
"signal_count": 0,
"max_subject_count": 0
},
"email_intelligence": {
"enriched_signal_count": 1,
"high_risk_count": 0,
"social_profile_count": 0
},
"phone_intelligence": {
"enriched_signal_count": 0,
"high_risk_count": 0
}
},
"reviewed_at": "2026-10-12T16:30:00Z",
"reviewed_by": "reviewer@example.com",
"review_reason": "Shared device across three new accounts.",
"notes_count": 0,
"sharing_mode": "global",
"cross_org_available": true,
"cross_org_unavailable_reason": null,
"tags": [
{
"uuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "SUSPICIOUS",
"color": "#6366F1",
"source": "custom",
"added_by": null,
"added_at": "2026-10-13T08:15:00Z"
}
],
"outcomes": {
"approved": 1,
"declined": 1,
"in_review": 0,
"total": 3
},
"patterns": [
{
"type": "background",
"score": 0.8125,
"members": 3,
"reason": null,
"computed_at": "2026-10-13T08:00:00Z"
}
]
}tag_uuid.
A tag that belongs to another application returns 404, the same as a tag that does not exist.
The response is the full network detail, with 201 when the tag was added and 200 when it was already on the network.
Calling it again with the same tag changes nothing, so you can retry safely.
tags lists your application’s tags on the network, oldest first.
added_by is null when an API key added the tag, and the console member’s email when a member did.
The network’s fraud_tags, the tags its members carry, are not affected.
Related
Authorizations
Your application's API key, from Developers -> API keys in the Business Console. The primary key has full access. A named key can be scoped: none, read or write per resource, limited to some workflows or to approved sessions, to a list of IP addresses, and to an expiry date. 401 means the key is missing, wrong, revoked or expired; 403 means the key has no access to this resource or action, or the request came from an address outside its IP list; 404 on a session route means the session is outside the key's workflows or statuses. A key without media access receives image, video and PDF URLs as null, and a key without sessions write receives session links and tokens as null. See https://docs.didit.me/console/api-keys.
Path Parameters
Organization UUID.
Application UUID.
Network UUID.
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
Body
UUID of one of your application's tags.
Response
The tag was already on the network and is left as it is. Returns the network detail.
The network detail, plus the organization's sharing mode, whether cross-organization signals apply to it, your application's tags on the network, member outcomes and pattern scores.
Human-readable per-organization sequential id, e.g. N-0001.
Network lifecycle status. Distinct from the per-applicant outcome_status inside a network (approved/in_review/declined/not_completed).
active, in_review, resolved, dismissed Show child attributes
Show child attributes
The clustering patterns detected in this network.
exact_same_device, similar_device, same_ip_address, same_address, similar_selfie_backgrounds, similar_poa_documents, same_document_number, same_phone_number, same_email The distinct signal types present in this network.
ip_address, device, face, document_number, phone, email, address Counts of members by category (e.g. total, per outcome_status).
Breakdown of members by outcome_status.
Per signal_type coverage of this network's members.
Aggregate stats for the network (e.g. member totals).
Fraud-pattern tags surfaced on the network.
Risk-signal summaries: residential_proxy_reuse, email_intelligence, phone_intelligence.
Number of private analyst notes in this investigation.
x >= 0The organization's cross-organization sharing mode. Only global compares networks across organizations; private and off keep them to the organization's own history.
off, private, global "global"
Whether cross-organization signals apply to this organization. They need both the Identity Enterprise plan and the global sharing mode.
true
Why cross-organization signals do not apply, checked in this order. plan: the organization's Identity plan does not include the cross-organization fraud network (it needs Identity Enterprise), whatever the sharing mode. sharing_mode: the plan includes it, but the sharing mode is private or off. Null when cross_org_available is true.
plan, sharing_mode null
Your application's tags on the network, oldest first. Each application sees only its own tags. fraud_tags is separate and unchanged: the tags the network's members carry.
Show child attributes
Show child attributes
Where the network's people and businesses stand. Each member you may see counts once, by the status of their most recent verification that reached a decision. Transaction parties are not counted.
Show child attributes
Show child attributes
Pattern scores over the whole network. Today one item, background.
Show child attributes
Show child attributes