AccessGate AML API Reference
Real-time sanctions screening and PEP checks for financial institutions. Screen customers against global sanctions lists, detect relationships to sanctioned individuals, and integrate with AI agents for intelligent compliance workflows.
Direct AML Base URL: https://ag-aml.runloci.com
Loci Platform Proxy: https://api.runloci.com/aml
All API requests require an API key passed in the header:
X-Org-ID: your_aml_org_id
X-API-Key: your_aml_api_key
Keep your API key secure. Do not expose it in client-side code or public repositories.
Screening Endpoints
Screen Customer
/v1/aml/screenScreen Customer Real-time screening against all sanctions lists with relationship detection.
Headers:
X-Org-ID(required for direct service calls) — Your AML organization IDX-API-Key(required for direct service calls) — Your AML API keyContent-Type: application/json
Request Body:
name(string, required) — Full name to screendob(string, optional) — Date of birth (YYYY-MM-DD)nationality(string, optional) — ISO 2-letter country codecustomer_id(string, optional) — Your internal customer IDamount(number, optional) — Transaction amountcurrency(string, optional) — ISO currency code
Response: 200 OK
{
"name": "John Smith",
"dob": "1985-03-15",
"nationality": "US",
"customer_id": "cust_12345",
"amount": 50000,
"currency": "USD"
}
Response — No Match:
{
"decision": "CLEAR",
"audit_id": "aud_7f8a9b2c",
"match": null,
"relationship_match": null,
"processing_time_ms": 32,
"list_version": "abc123@2026-01-24T03:00:00Z"
}
Response — Direct Match:
{
"decision": "BLOCK",
"audit_id": "aud_7f8a9b2c",
"match": {
"entity_id": "ofac-12345",
"entity_name": "SANI ABACHA",
"source": "OFAC",
"score": 0.97,
"list_type": "sanctions"
},
"processing_time_ms": 35
}
Response — Relationship Match:
{
"decision": "REVIEW",
"audit_id": "aud_7f8a9b2c",
"match": null,
"relationship_match": {
"related_to": {
"entity_id": "ofac-12345",
"entity_name": "SANI ABACHA",
"source": "OFAC"
},
"relationship": {
"type": "family_member",
"detail": "child of",
"confidence": "stated"
},
"score": 0.94
},
"processing_time_ms": 38
}
Decision Values
| Decision | Meaning | Recommended Action |
|---|---|---|
CLEAR |
No match found | Proceed with transaction |
REVIEW |
Potential match or relationship | Manual review required |
BLOCK |
High-confidence sanctions match | Block transaction |
Batch Screening
/v1/aml/screen/batchBatch Screen Screen multiple names in a single request (up to 100).
Headers:
X-Org-ID(required for direct service calls) — Your AML organization IDX-API-Key(required for direct service calls) — Your AML API key
Request Body:
names(array, required) — Array of names to screen
Response: 200 OK
{
"names": [
"John Smith",
"Jane Doe",
"Acme Corporation"
]
}
Response:
{
"results": [
{ "name": "John Smith", "decision": "CLEAR", "match": null },
{ "name": "Jane Doe", "decision": "CLEAR", "match": null },
{ "name": "Acme Corporation", "decision": "REVIEW", "match": {...} }
],
"count": 3,
"processing_time_ms": 145
}
Agentic Search Endpoints
These endpoints are designed for investigation workflows, case enrichment, and AI-assisted review. For usage patterns, see AML Agentic Search.
Agent Lookup
/v1/aml/agent/lookupAgent Lookup Retrieve detailed entity information for investigation and AI-assisted review workflows. Returns rich context including markdown profiles, relationship graphs, and citations.
Headers:
X-Org-ID(required for direct service calls) — Your AML organization IDX-API-Key(required for direct service calls) — Your AML API key
Request Body:
query(string, required) — Name to look upinclude_related(boolean, optional) — Include related entities. Default:trueinclude_reverse_relationships(boolean, optional) — Include entities related TO this person. Default:falseformat(string, optional) — Response format:markdownorjson. Default:markdownmax_results(number, optional) — Max related entities (1-20). Default:10
Response: 200 OK
{
"query": "Sani Abacha",
"include_related": true,
"include_reverse_relationships": false,
"format": "markdown",
"max_results": 10
}
Response — Direct Match:
{
"match": true,
"direct_match": true,
"entity_id": "ofac-12345",
"confidence": 0.97,
"entity": {
"id": "ofac-12345",
"name": "Sani ABACHA",
"source": "OFAC",
"list_type": "sanctions"
},
"markdown_profile": "# [INDIVIDUAL] Sani ABACHA\n\n**ID:** ofac-12345...",
"related_entities": [
{
"id": "related_1",
"name": "Mohammed ABACHA",
"relationship": "child of",
"relationship_type": "family_member",
"confidence": "stated",
"source": "OFAC",
"direction": "outbound"
}
],
"relationship_summary": "Sani ABACHA (OFAC): Known family members: Mohammed ABACHA, Abba ABACHA.",
"relationship_match": null,
"citations": [
"OFAC Consolidated List, Entry 12345 (accessed 2026-01-24)"
],
"processing_time_ms": 42
}
Response — Relationship Match:
{
"match": false,
"direct_match": false,
"entity_id": null,
"confidence": null,
"markdown_profile": null,
"relationship_match": {
"query_name": "Amina Abacha",
"matched_name": "Amina ABACHA",
"match_score": 0.94,
"sanctioned_entity": {
"entity_id": "ofac-12345",
"entity_name": "Sani ABACHA",
"source": "OFAC",
"markdown_profile": "# [INDIVIDUAL] Sani ABACHA..."
},
"relationship": {
"type": "family_member",
"detail": "child of",
"extraction_confidence": "stated"
}
},
"relationship_summary": "\"Amina Abacha\" is not directly sanctioned, but matches \"Amina ABACHA\" who is a known child of Sani ABACHA (OFAC).",
"citations": [
"OFAC Consolidated List, Entry 12345 (accessed 2026-01-24)"
],
"processing_time_ms": 38
}
Response — No Match:
{
"match": false,
"direct_match": false,
"entity_id": null,
"confidence": null,
"markdown_profile": null,
"relationship_match": null,
"relationship_summary": null,
"related_entities": [],
"citations": [],
"processing_time_ms": 25
}
Batch Agent Lookup
/v1/aml/agent/batchBatch Agent Lookup Look up multiple names with relationship detection (up to 20). Requires the scope for direct AML API keys.
Headers:
X-Org-ID(required for direct service calls) — Your AML organization IDX-API-Key(required for direct service calls) — Your AML API key
Request Body:
queries(array, required) — Array of names to look up
Response: 200 OK
{
"queries": ["Sani Abacha", "Amina Abacha", "John Smith"]
}
Response:
{
"results": [
{ "query": "Sani Abacha", "match": true, "entity_id": "ofac-12345", "confidence": 0.97 },
{ "query": "Amina Abacha", "match": false, "relationship_match": true, "related_to": "Sani ABACHA" },
{ "query": "John Smith", "match": false }
],
"count": 3,
"direct_matches": 1,
"relationship_matches": 1,
"processing_time_ms": 95
}
Relationship Endpoints
Search Relationships
/v1/aml/relationships/searchSearch Relationships Search for potential relationships to sanctioned entities by name.
Headers:
X-Org-ID(required for direct service calls) — Your AML organization IDX-API-Key(required for direct service calls) — Your AML API key
Request Body:
name(string, required) — Name to searchmin_score(number, optional) — Minimum match score (0-1). Default:0.85
Response: 200 OK
{
"name": "Viktor Bout",
"min_score": 0.85
}
Response:
{
"query": "Viktor Bout",
"has_matches": true,
"match_count": 2,
"matches": [
{
"matched_name": "Viktor BOUT",
"score": 0.98,
"related_to": {
"entity_id": "ofac-11111",
"entity_name": "Alla BOUT",
"source": "OFAC"
},
"relationship": {
"type": "family_member",
"detail": "spouse of",
"confidence": "stated"
}
}
],
"processing_time_ms": 12
}
Get Entity Relationships
/v1/aml/entity/{id}/relationshipsGet Entity Relationships Retrieve all known relationships for a specific sanctioned entity.
Parameters:
id(path, required) — The entity ID (e.g.,ofac-12345)
Response: 200 OK
Response:
{
"entity": {
"id": "ofac-12345",
"name": "Sani ABACHA",
"type": "individual",
"source": "OFAC"
},
"total_relationships": 5,
"relationships": {
"family_member": [
{
"target_entity_name": "Mohammed ABACHA",
"relationship_detail": "parent of",
"confidence": "stated"
}
],
"owner": [
{
"target_entity_name": "ABACHA HOLDINGS LTD",
"relationship_detail": "beneficial owner of",
"confidence": "stated"
}
]
}
}
Relationship Statistics
/v1/aml/relationships/statsRelationship Statistics Get statistics about the relationship graph.
Response: 200 OK
Response:
{
"total_relationships": 1523,
"by_type": {
"family_member": 456,
"associate": 312,
"owner": 234,
"employee": 189,
"agent_of": 156,
"linked_to": 176
},
"by_source": {
"OFAC": 892,
"UN": 234,
"EU": 197,
"HMT": 200
}
}
Data Types Reference
Relationship Types
| Type | Description | Example Patterns |
|---|---|---|
family_member |
Blood relative or spouse | son, daughter, wife, husband, sibling |
associate |
Known business/personal associate | business partner, close associate |
owner |
Owns or controls | shareholder, beneficial owner |
owned_by |
Owned or controlled by | subsidiary, controlled entity |
employee |
Employment relationship | director, CEO, works for |
agent_of |
Acts on behalf of | representative, nominee, agent |
linked_to |
Generic connection | linked to, connected to |
Confidence Levels
| Level | Meaning |
|---|---|
stated |
Explicitly stated in source data |
inferred |
Derived from context patterns |
weak |
Low confidence, needs verification |
Error Responses
All endpoints may return these error responses:
| Status | Description |
|---|---|
| 400 | Bad Request — Invalid parameters |
| 401 | Unauthorized — Missing or invalid API key |
| 403 | Forbidden — Insufficient permissions |
| 404 | Not Found — Resource doesn't exist |
| 429 | Rate Limited — Too many requests |
| 500 | Server Error — Something went wrong |
Error Response Format:
{
"error": "Invalid JSON body",
"message": "Request body must be valid JSON",
"request_id": "req_abc123"
}
Rate limiting is enforced based on your plan. See Rate Limits section for details.
Rate Limits
| Plan | Requests/Second | Requests/Day |
|---|---|---|
| Starter | 10 | 10,000 |
| Professional | 50 | 100,000 |
| Enterprise | 200 | Unlimited |
Rate limit headers are included in all responses:
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 49
X-RateLimit-Reset: 1706140800
Code Examples
JavaScript/Node.js
const axios = require('axios');
const amlOrgId = 'your_aml_org_id';
const apiKey = 'your_aml_api_key';
const baseUrl = 'https://ag-aml.runloci.com';
async function screenCustomer(name, dob = null) {
const response = await axios.post(
`${baseUrl}/v1/aml/screen`,
{ name, dob },
{ headers: { 'X-Org-ID': amlOrgId, 'X-API-Key': apiKey } }
);
return response.data;
}
// Usage
const result = await screenCustomer('John Smith');
if (result.decision === 'BLOCK') {
console.log(`BLOCKED: Matched ${result.match.entity_name}`);
} else if (result.decision === 'REVIEW') {
console.log('Manual review required');
} else {
console.log('Customer cleared');
}
Python
import requests
AML_ORG_ID = "your_aml_org_id"
API_KEY = "your_aml_api_key"
BASE_URL = "https://ag-aml.runloci.com"
def screen_customer(name: str, dob: str = None) -> dict:
response = requests.post(
f"{BASE_URL}/v1/aml/screen",
headers={"X-Org-ID": AML_ORG_ID, "X-API-Key": API_KEY},
json={"name": name, "dob": dob}
)
return response.json()
# Usage
result = screen_customer("John Smith", "1985-03-15")
if result["decision"] == "BLOCK":
print(f"BLOCKED: Matched {result['match']['entity_name']}")
elif result["decision"] == "REVIEW":
print("Manual review required")
else:
print("Customer cleared")
cURL
# Basic screening
curl -X POST "https://ag-aml.runloci.com/v1/aml/screen" \
-H "X-Org-ID: your_aml_org_id" \
-H "X-API-Key: your_aml_api_key" \
-H "Content-Type: application/json" \
-d '{"name": "John Smith"}'
# Agent lookup with relationships
curl -X POST "https://ag-aml.runloci.com/v1/aml/agent/lookup" \
-H "X-Org-ID: your_aml_org_id" \
-H "X-API-Key: your_aml_api_key" \
-H "Content-Type: application/json" \
-d '{"query": "Sani Abacha", "include_related": true}'
All code examples include error handling best practices. Click to copy!
Sanctions Coverage
| List | Source | Update Frequency |
|---|---|---|
| OFAC SDN | US Treasury | Daily |
| OFAC Non-SDN | US Treasury (SSI, FSE, CAPTA, etc.) | Daily |
| UN Consolidated | UN Security Council | Daily |
| EU Sanctions | European Commission | Daily |
| UK Sanctions | FCDO/HMT | Daily |
| Nigeria NIGSAC | Nigeria Sanctions Committee | Daily |
| Nigeria PEPs | OpenSanctions | Daily |
Support
- Documentation: https://docs.runloci.com/guides/accessgate-aml
- Email: [email protected]
- Status Page: https://status.runloci.com