curl -X POST 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/notes/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"note": "Customer confirmed the withdrawal by phone.", "mentioned_emails": ["analyst@example.com"]}'import os
import requests
transaction_id = 'abcdef12-3456-7890-abcd-ef1234567890'
resp = requests.post(
f'https://verification.didit.me/v3/transactions/{transaction_id}/notes/',
headers={'x-api-key': os.environ['DIDIT_API_KEY']},
json={
'note': 'Customer confirmed the withdrawal by phone.',
'mentioned_emails': ['analyst@example.com'],
},
timeout=10,
)
resp.raise_for_status()
note = resp.json()
print(note['uuid'], note['created_at'])const transactionId = 'abcdef12-3456-7890-abcd-ef1234567890';
const resp = await fetch(`https://verification.didit.me/v3/transactions/${transactionId}/notes/`, {
method: 'POST',
headers: {
'x-api-key': process.env.DIDIT_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
note: 'Customer confirmed the withdrawal by phone.',
mentioned_emails: ['analyst@example.com'],
}),
});
if (!resp.ok) throw new Error(`Create note failed: ${resp.status}`);
const note = await resp.json();
console.log(note.uuid, note.created_at);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/transactions/{transaction_id}/notes/",
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([
'note' => 'Customer confirmed the withdrawal by phone.',
'mentioned_emails' => [
'analyst@example.com'
]
]),
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/transactions/{transaction_id}/notes/"
payload := strings.NewReader("{\n \"note\": \"Customer confirmed the withdrawal by phone.\",\n \"mentioned_emails\": [\n \"analyst@example.com\"\n ]\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/transactions/{transaction_id}/notes/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"note\": \"Customer confirmed the withdrawal by phone.\",\n \"mentioned_emails\": [\n \"analyst@example.com\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/transactions/{transaction_id}/notes/")
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 \"note\": \"Customer confirmed the withdrawal by phone.\",\n \"mentioned_emails\": [\n \"analyst@example.com\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"uuid": "c1111111-2222-4333-8444-555555555555",
"note": "Customer confirmed the withdrawal by phone.",
"actor_email": null,
"actor_name": null,
"metadata": {
"mentioned_emails": [
"analyst@example.com"
]
},
"created_at": "2026-10-16T10:05:12.481203Z"
}Create Transaction Note
Add a plain-text note, with optional member mentions, to a monitored transaction’s review timeline from your own systems.
curl -X POST 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/notes/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"note": "Customer confirmed the withdrawal by phone.", "mentioned_emails": ["analyst@example.com"]}'import os
import requests
transaction_id = 'abcdef12-3456-7890-abcd-ef1234567890'
resp = requests.post(
f'https://verification.didit.me/v3/transactions/{transaction_id}/notes/',
headers={'x-api-key': os.environ['DIDIT_API_KEY']},
json={
'note': 'Customer confirmed the withdrawal by phone.',
'mentioned_emails': ['analyst@example.com'],
},
timeout=10,
)
resp.raise_for_status()
note = resp.json()
print(note['uuid'], note['created_at'])const transactionId = 'abcdef12-3456-7890-abcd-ef1234567890';
const resp = await fetch(`https://verification.didit.me/v3/transactions/${transactionId}/notes/`, {
method: 'POST',
headers: {
'x-api-key': process.env.DIDIT_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
note: 'Customer confirmed the withdrawal by phone.',
mentioned_emails: ['analyst@example.com'],
}),
});
if (!resp.ok) throw new Error(`Create note failed: ${resp.status}`);
const note = await resp.json();
console.log(note.uuid, note.created_at);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/transactions/{transaction_id}/notes/",
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([
'note' => 'Customer confirmed the withdrawal by phone.',
'mentioned_emails' => [
'analyst@example.com'
]
]),
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/transactions/{transaction_id}/notes/"
payload := strings.NewReader("{\n \"note\": \"Customer confirmed the withdrawal by phone.\",\n \"mentioned_emails\": [\n \"analyst@example.com\"\n ]\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/transactions/{transaction_id}/notes/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"note\": \"Customer confirmed the withdrawal by phone.\",\n \"mentioned_emails\": [\n \"analyst@example.com\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/transactions/{transaction_id}/notes/")
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 \"note\": \"Customer confirmed the withdrawal by phone.\",\n \"mentioned_emails\": [\n \"analyst@example.com\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"uuid": "c1111111-2222-4333-8444-555555555555",
"note": "Customer confirmed the withdrawal by phone.",
"actor_email": null,
"actor_name": null,
"metadata": {
"mentioned_emails": [
"analyst@example.com"
]
},
"created_at": "2026-10-16T10:05:12.481203Z"
}status, score or alerts. Reviewers see it under Notes on the transaction detail in the Console, and the transaction’s activities gain a TRANSACTION_NOTE_ADDED entry, which you can read with Get transaction.
Because the note comes from an API key, it carries no author: actor_email and actor_name are null. If you need to show who wrote it, include that in the note text. Read the full timeline back with List transaction notes.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
Didit transaction UUID: the uuid returned by POST /v3/transactions/ and GET /v3/transactions/. Your own txn_id is not accepted.
Body
Response
The note was created.
One note on a monitored transaction's review timeline.
Note identifier.
Plain-text note body.
Email of the Console user who wrote the note or changed the status. null for notes created with an API key and for notes Didit adds automatically.
Display name of the Console user (their email when they have no name). Rule Engine on notes Didit adds automatically. null for notes created with an API key.
Tells the note types apart. Notes written through the API or the Console carry mentioned_emails. A status change made in the Console carries type: status_change with previous_status, new_status, reason_code and reason_label. Notes Didit adds carry source: rule_action (with rule_uuid) for a rule's add_note action, or remediation_session for a problem creating the user-action verification session.
Show child attributes
Show child attributes
When the note was stored.