ALLOD API

v1.0.0 https://swg.your-domainhttps://vrm.your-domain

Servers

  • https://swg.your-domain
  • https://vrm.your-domain

The ALLOD platform runs entirely in your own infrastructure. Every API call stays inside your network - no vendor cloud in the path. This reference covers two products: - **ALLOD | SWG** - the Secure Web Gateway and its admin API - **ALLOD | VRM** - Allod Vendor Risk Management and its governance API

SWG - System

Health check and metrics endpoints.

200 Text/plain metric lines
200 Server is healthy

Returns whether initial setup has been completed and what steps remain.

200 Setup state object
application/json
object
200 OK
200 JSON with level field (debug, info, warn, error)
application/json
object
level * string enum: debug | info | warn | error
200 OK

Forces an immediate sync of the license and catalog data from allodlicense.

200 Sync result with license details
200 License settings object (token redacted)
application/json
object
license_server_url string
license_token string
200 OK
200 Integrations config object
application/json
object
200 OK

Generates and streams a ZIP archive containing logs, config (secrets redacted), and diagnostic info for support.

200 ZIP archive (application/zip)

SWG - Firewall

Firewall rules, default policy and domain allow/deny management.

200 Array of rule objects
application/json
object
default_tls_inspection boolean
rules array
204 Saved
200 JSON with default_policy, default_tls_inspection and rules
application/json
object
default_policy string enum: allow | deny
default_tls_inspection boolean
200 Updated

SWG - IDS/IPS

Suricata-syntax content/header signature matching against decrypted traffic - custom rule import, per-rule action overrides, and the curated abuse.ch URLhaus feed status.

Returns whether IDS/IPS is enabled, every Source==custom rule individually, and a count+version summary for the curated URLhaus feed (never listed rule-by-rule - it can carry tens of thousands of entries).

200 { enabled, custom_rules: [...], urlhaus_count, urlhaus_version }

Accepts raw Suricata .rules text (Content-Type: text/plain) or a multipart/form-data upload with field name "file", and replaces the entire Source==custom rule set. A malformed line is reported per-line in the response rather than failing the whole import.

multipart/form-data
object
file string(binary)
text/plain
string
200 { imported: <count>, errors: [{ line, text, err }, ...] }

The single on/off switch for Suricata rule evaluation (both custom rules and the curated feed). Off by default. Rules keep loading/refreshing regardless of this setting, so toggling it takes effect immediately with nothing to reload.

application/json
object
enabled boolean
204 Saved

Overrides the effective action for one rule by Suricata sid, regardless of source. Uses this API's own block/alert/allow vocabulary (not Suricata's drop/alert/pass keywords).

NameInTypeDescription
sid * path integer The rule's Suricata sid
application/json
object
action string - "" clears the override enum: block | alert | allow |
204 Saved
400 Invalid action

Custom-source only - a rule loaded from the curated URLhaus feed can't be deleted this way (the feed would just reload it on its next refresh); use PATCH with an "alert" override to silence a specific noisy URLhaus sid instead.

NameInTypeDescription
sid * path integer
204 Deleted
404 Not found, or not a custom-source rule

SWG - DLP

Data Loss Prevention - events, configuration, body samples.

200 S3 config object (secret_key redacted)
application/json
object
access_key string
bucket string
enabled boolean
endpoint string
prefix string
region string
retention_days integer
secret_key string
200 OK

Cursor-paginated list of DLP upload/download events.

NameInTypeDescription
before query string(date-time)
before_id query string
limit query integer
200 JSON with events array, has_more, next_before, next_before_id
200 DLP config with mode, action, rules, keyword_lists, post_detection_window
application/json
object
204 Saved

Called by the agent when a screenshot is taken while the device has an active sensitive-context resource (ZTNA/VRM). ocr_text is matched against DLP rules; the event is dropped (not stored) when no sensitive context is active. process/window_title (the foreground window at the moment of capture) are best-effort and may be empty on a headless session. The domain the device was browsing (host/domain_category) is attached server-side from the navigation heatmap, not sent by the agent. Also covers screenshots that never touch disk - a capture pasted straight to the clipboard (PrtScn, Cmd+Ctrl+Shift+3/4) is reported the same way, with path empty and filename set to the synthetic "clipboard-image.png".

application/json
object
device_id * string
filename * string - Screenshot filename, or the synthetic "clipboard-image.png" for a clipboard-only capture (there's no real file to name).
ocr_text string
path string - On-disk path of the screenshot file. Empty for a clipboard-only capture that was never saved as a file.
process string - Foreground window's process/app name at screenshot time (best-effort)
sha256 string
user string
window_title string - Foreground window's title, or browser tab URL when the app is a known browser (best-effort)
200 JSON with action ("alert", "block", or "dropped") and event_id (empty when dropped). On "block" (ocr_text matched a block-severity DLP rule), the agent removes the artifact - deleting the file, or clearing the clipboard for a clipboard-only capture, since there's nothing on disk to remove.

Fetches the body sample from S3 and streams it inline, decompressing gzip/zstd/deflate automatically.

NameInTypeDescription
id * path string
200 Body sample (Content-Type reflects the original transfer)
404 Event not found or no stored content

SWG - CASB

Cloud Access Security Broker - shadow IT, app usage, tenant discovery.

Same as /api/casb/shadow-it but authenticated with a license-bearer token rather than an API key. Used by the allodlicense server to aggregate cross-deployment analytics.

NameInTypeDescription
days query integer
limit query integer
200 Shadow IT report

Returns hosts observed in the last 30 days that fall under the configured internal DNS zone and have no saascat catalog match - internal tools (e.g. a self-hosted git server) that shadow-IT detection can't see because they aren't SaaS apps. Matching is DNS-zone-based, not IP/CIDR-based, to avoid ever matching a private IP range an employee's home network happens to reuse. Consumed by Allod VRM's swgsync poller for asset discovery.

200 Object with since (RFC3339) and domains (array of per-host traffic summaries)

Returns per-app traffic aggregates for the last 30 days, including apps used only through desktop clients. Authenticated with a license-bearer token. Byte totals cover every source (browser and desktop/CLI) and match the Corporate IT view for the same app. BytesUp/BytesDown are wire bytes on the client connection (client to proxy / proxy to client, TLS overhead included) measured by the proxy for every connection, not just inspected ones.

200 Array of app usage objects

Returns tenant identifiers extracted from proxied traffic, grouped by cloud app.

NameInTypeDescription
days query integer
200 Array of {app_id, tenant, last_seen, user_count} objects

Returns non-IdP accounts used by more than two distinct people across devices, aggregated from tenant sightings - a shadow-IT and credential-sharing signal.

200 Array of {AppID, AppName, Tenant, DistinctUsers, Users, DeviceCount, LastSeen} objects
NameInTypeDescription
days query integer
limit query integer
200 Array of discovered service objects with app, category, bytes, users

Returns network activity for the last 30 days broken down by originating (non-browser) process name, sorted by DevicePct (share of the fleet running that process) descending. Paginated - use limit/offset to page past the first window. BytesUp/BytesDown are wire bytes on the client connection (client to proxy / proxy to client, TLS overhead included) measured by the proxy for every connection, not just inspected ones.

NameInTypeDescription
limit query integer
offset query integer
200 Object with processes (array of {Process, Connections, Devices, Apps, BytesUp, BytesDown, LastSeen, DevicePct} objects, this page only) and total (total matching entries across all pages)
NameInTypeDescription
days query integer
limit query integer
200 Array of firewall block events with CASB app metadata

Returns per-extension connection activity for the last 30 days, aggregated from requests carrying an Origin: chrome-extension://... or moz-extension://... header (i.e. actually initiated by the extension's own script, not a page/user directly). Fleet-wide visibility into which extensions talk to the network, independent of whether any firewall extension_initiated rule exists. Sorted by DevicePct descending; paginated - use limit/offset to page past the first window. BytesUp/BytesDown are the request and response bytes of the extension-initiated requests.

NameInTypeDescription
limit query integer
offset query integer
200 Object with extensions (array of {ExtensionID, Connections, Devices, Domains, BytesUp, BytesDown, LastSeen, DevicePct} objects, this page only) and total (total matching entries across all pages)

Returns connection counts for the last 30 days split by inspection category (managed SaaS, unmanaged SaaS, unknown).

200 Coverage object with bucket counts
NameInTypeDescription
days query integer
limit query integer
200 Array of managed app usage objects
200 CASB config object
application/json
object
200 OK

SWG - ZTNA

Zero Trust Network Access settings.

WebSocket upgrade for reverse tunnels. Agent registers the local ports it listens on (e.g. debug port). On-prem processes can then connect back to agent localhost through the connector hub.

101 Switching Protocols

WebSocket upgrade for on-prem connector daemons. After upgrade, connector sends a register message with its name and the CIDRs it can reach. The hub then routes proxy connections for those CIDRs through the connector. Protocol: JSON control frames + binary data frames with uint32 conn_id prefix.

101 Switching Protocols
200 JSON with access_routes array and virtual_subnet CIDR
application/json
object
access_routes string[] - CIDRs pushed to agents for transparent proxy interception
string[] - CIDRs pushed to agents for transparent proxy interception
items
string
virtual_subnet string - CIDR for device virtual IPs
200 OK

SWG - Access

Step-up SSO and just-in-time access requests - approval workflow and self-service resource discovery.

Powers the Access Requests admin page. Requires an authenticated admin session - not currently available via X-Api-Key.

200 JSON with requests array (id, device_id, user, resource, justification, ttl, requested_at)

Powers the end-user self-service page for pre-provisioning a step-up SSO or JIT grant before opening a non-HTTP client. Requires an authenticated session - not currently available via X-Api-Key.

NameInTypeDescription
device_id * query string
200 JSON with resources array (kind, target, description, auth, jit_approval, sign_in_url)

Same decision path used by the Slack, Teams, and PagerDuty approval buttons. Requires an authenticated admin session - not currently available via X-Api-Key.

NameInTypeDescription
id * path string
application/json
object
decision * string enum: approve | deny
200 Decision applied
404 Request not found or already decided

SWG - Events

Unified event log - firewall blocks and DLP events.

Cursor-paginated event log. Returns DLP upload/download events and firewall block events.

NameInTypeDescription
before query string(date-time) Cursor: timestamp of last event on previous page
before_id query string Cursor: event_id tie-breaker
limit query integer
type query string
200 JSON with events array, has_more, next_before, next_before_id

Returns the weight table behind Controller.ScoreEmailAuthenticity, keyed by signal name (e.g. display_name_mismatch). Used by the events admin UI to render a full per-signal score breakdown for a flagged email.

200 Object mapping signal name to integer weight
200 Connection test result

Returns configuration for the external event store (ClickHouse or compatible).

200 Event store config object (password redacted)
application/json
object
dsn string
enabled boolean
200 OK

Returns configuration for structured event log sinks: local file, Elastic Beats, syslog.

200 Event log config object
application/json
object
200 OK

Returns recent proxy request log entries (all traffic, not just blocked/DLP). Cursor-paginated.

NameInTypeDescription
before query string(date-time)
before_id query string
limit query integer
search query string
200 JSON with entries array, has_more, next_before, next_before_id
NameInTypeDescription
id * path string
200 Event object
404 Not found

SWG - Devices

Enrolled agent devices and their status.

application/json
object
user_id * string
200 ZIP archive of all data associated with the user

Irreversibly deletes all events, access log entries, and device records associated with the given user.

application/json
object
user_id * string
200 Confirmation of erasure
200 Array of device objects with device_id, name, platform, last_seen_at

Returns last-known geographic locations of enrolled devices derived from their IP addresses.

200 Array of {device_id, country, city, lat, lon, last_seen_at} objects

SWG - Agent

Agent lifecycle - enroll, heartbeat, config distribution, upgrade.

WebSocket upgrade. Agents use this for real-time config pushes and DLP local-path enrichment. Requires Upgrade: websocket header.

101 Switching Protocols

Agents post SNI hostname observations gathered during QUIC downgrade mode so the proxy can log them for shadow-IT purposes.

application/json
object
entries array
204 Accepted

Called by agents during TLS inspection to obtain a CA-signed leaf certificate for a given hostname. Returns PEM-encoded certificate and private key.

NameInTypeDescription
host * query string
200 JSON with cert and key PEM fields

Sent periodically by enrolled agents. Response includes config push: block_quic, proxy_token, access_routes (CIDRs for transparent proxy), windivert_url (Windows only), and local_path_enabled.

application/json
object
compliance_ok boolean
compliance_output string
device_id * string
200 Config push payload

Called by the allodswg agent on first run to register the device.

application/json
object
device_id * string
name string
platform string
200 Enrollment confirmed

Returns CA cert and proxy address for the agent to configure the OS proxy.

200 Config object

Used by agents to self-update. Returns the binary for the requesting platform.

200 Binary file
404 No binary available for this platform
200 Array of {filename, platform, version, size} objects

Multipart upload. The binary filename must follow the pattern allodswg-agent-<platform>[.exe].

multipart/form-data
object
file string(binary)
200 JSON with filename, platform, version, sha256

Sends an upgrade command to all agents connected via WebSocket. Each agent will download the latest binary and restart.

200 JSON with count of agents signaled

Broadcasts the current firewall rules, CA cert, and proxy settings to all agents connected via WebSocket.

200 JSON with count of agents notified

Serves files from the controller assets directory. Used by Windows agents to auto-download WinDivert.dll and WinDivert64.sys on startup.

NameInTypeDescription
name * path string Filename (alphanumeric, dots, hyphens, underscores only)
200 File contents
404 Asset not found

SWG - CA

Certificate Authority - TLS inspection cert and SCEP for MDM.

Simple Certificate Enrollment Protocol (RFC 8894). MDMs use this to automatically fetch and install the proxy CA as a trusted root. Supports GetCACaps and GetCACert operations.

NameInTypeDescription
operation * query string
200 GetCACaps: plain-text capability list. GetCACert: DER-encoded CA certificate (application/x-x509-ca-cert).
400 Unsupported operation
503 CA not yet generated

Generates a new CA key and self-signed certificate. Pushes the new cert to all connected agents. Optional body fields override server-configured defaults.

application/json
object
algorithm string enum: ecdsa-p256 | ecdsa-p384 | rsa-2048 | rsa-4096
ca_validity_days integer - CA cert validity in days (recommend ≥730 when using SCEP)
common_name string
country string - ISO 3166-1 alpha-2 country code
leaf_validity_days integer - Per-session leaf cert validity in days
locality string
organization string
province string
200 New CA info object

Returns metadata about the currently active CA certificate: algorithm, subject (CN, O, C, ST, L), validity period, and fingerprint.

200 CA info object
503 CA not yet generated

PEM-encoded CA certificate. Add to OS/browser trust stores, or point MDM to the /scep endpoint for automatic distribution.

200 PEM certificate

SWG - Domains

Domain category classification and overrides.

NameInTypeDescription
domain * query string
200 JSON with category and metadata

Returns the full list of domain category identifiers and their display names used by the firewall and domain classifier.

200 Array of {id, name} objects
NameInTypeDescription
domain * query string
200 JSON with domain, category, source, override fields
200 Array of override objects
application/json
object
category * string
domain * string
200 OK
NameInTypeDescription
domain * query string
200 OK

SWG - Identity

OIDC SSO, SCIM sync, GDPR data export/erase.

200 Array of SCIM user objects
200 Connection test result with user count
200 Sync result
200 Array of SCIM group objects
200 SCIM config (token redacted)
application/json
object
enabled boolean
tenant_id string
token string
200 OK

Attempts discovery and a client credentials check against the configured OIDC issuer.

200 Test result
200 OIDC config (client_secret redacted)
application/json
object
client_id string
client_secret string
enabled boolean
issuer string
200 OK

SWG - Proxy

Proxy and GeoDNS configuration.

200 JSON with require_agent, quic_mode, quic_mode_unsupported, enable_h2, smtp_inspection, isolate_rooted_android, typosquat_check
application/json
object
enable_h2 boolean
isolate_rooted_android boolean - Automatically revoke proxy access for Android devices that report root/jailbreak indicators at heartbeat. Default true.
quic_mode string - "inspect" decrypts QUIC/HTTP-3 like ordinary TLS inspection via a local per-device relay - supported on Linux and Windows agents (see isQUICInspectUnsupported); macOS agents still get the quic_mode_unsupported fallback, since no redirect mechanism exists there yet enum: bypass | downgrade | inspect
quic_mode_unsupported string - Fallback used for agent platforms where quic_mode "inspect" isn't supported - currently macOS only enum: downgrade | metadata
require_agent boolean
require_idp_user boolean
smtp_inspection boolean
typosquat_check boolean - Block connections to domains that look like a typosquat of a known catalog domain. Default true.
200 OK

SWG - Compliance

Device compliance posture configuration.

200 JSON with config and devices array
application/json
object
204 Saved

SWG - Alerts

Alert configuration and test delivery.

200 Syslog config object
application/json
object
address string - host:port of syslog receiver
enabled boolean
format string enum: rfc5424 | cef
protocol string enum: udp | tcp
200 OK
200 OK
200 Alert config object (webhook URL, enabled actions)
application/json
object
200 OK

SWG - Keys

API key management for the SWG controller.

200 Array of key objects (key value redacted)
application/json
object
name * string
role string enum: superadmin | enrollment
201 Created key including plaintext value (shown once)
NameInTypeDescription
id * path string
200 OK
NameInTypeDescription
id * path string
200 OK
NameInTypeDescription
id * path string
200 OK

SWG - AI

AI translation and enrichment.

Returns whether an AI provider is configured and the translation feature is enabled.

200 JSON with available boolean

Proxies a translation request to the configured AI provider (OpenAI-compatible). Used by the browser extension to translate page content.

application/json
object
target_language * string
text * string
200 JSON with translated text
503 AI translation not configured
200 AI config object (api_key redacted)
application/json
object
api_key string
base_url string
enabled boolean
model string
provider string
200 OK

VRM - Systems

Vendor systems under governance - the core inventory of third-party SaaS/cloud services.

200 Array of system objects
201 Created system object

Admin only. Systems in use (not inactive, rejected or pending) and their providers; providers are ordered by how many critical (high or critical) systems depend on them. A provider used by at least 3 critical systems and at least half of them gets an organisation-wide auto:concentration:<provider> Risk.

200 {systems, critical_systems, providers: [{provider, kinds, countries, systems: [{id, name, critical, kinds}], critical_systems, critical_share}]}
NameInTypeDescription
id * path string
200 Array of similar system objects
NameInTypeDescription
id * path string
200 GDPR Article 30 Record of Processing Activities entry
NameInTypeDescription
id * path string
200 Updated RoPA entry
NameInTypeDescription
id * path string
200 Array of probe result objects (TLS, geo, SPF, MX, privacy policy, DPA, sanctions)
NameInTypeDescription
id * path string
202 Scan queued
NameInTypeDescription
id * path string
200 Import result

Hosting, CDN, DNS and mail providers from the vendor probes, and sub-processors from the RoPA record and the DPA and privacy policy analyses, each mapped to the company behind it.

NameInTypeDescription
id * path string
200 Array of {provider, kind: hosting|cdn|dns|mail|subprocessor, country}
404 System not found

From the vendor's CSAF advisories, only the products that belong to this system: SBOM purl matches, plus product names matching csaf_products (or the system name when csaf_products is empty). Counts are distinct CVEs; one CVE can be in several buckets when it affects one product version and is fixed in another. updated_at is zero when the feed has never been crawled.

NameInTypeDescription
id * path string
200 {cves, affected, fixed, not_affected, under_investigation, unfixed_high_critical, unfixed_exploited, exploited_cves, out_of_scope_cves, products, scope_names, entries: [{cve_id, purl, product_name, status, severity, document_url, sbom_match}], updated_at}. exploited_cves lists in-scope CVEs on CISA KEV or ENISA EUVD's exploited list.
404 System not found
NameInTypeDescription
id * path string
200 System object

Partial update: fields left out keep their value. csaf_products (array of strings) lists the product names in the vendor's CSAF advisories that belong to this system; empty matches on the system name.

NameInTypeDescription
id * path string
200 Updated system object
NameInTypeDescription
id * path string
204 Deleted
NameInTypeDescription
id * path string
type * path string Probe type, e.g. tls, geo, spf, mx, privacy, dpa, sanctions, gleif
202 Scan queued

VRM - Contacts

Vendor contacts and DPO information per system.

NameInTypeDescription
id * path string
200 Array of contact objects
NameInTypeDescription
id * path string
200 Contact object
NameInTypeDescription
cid * path string
id * path string
200 Updated contact object
NameInTypeDescription
cid * path string
id * path string
204 Deleted

VRM - Documents

Contracts, DPAs and other documents attached to a system.

NameInTypeDescription
id * path string
200 Array of document metadata objects
NameInTypeDescription
id * path string
201 Document metadata object
NameInTypeDescription
did * path string
id * path string
204 Deleted

VRM - Reviews

Privacy and security review workflows per system.

200 Array of review objects
NameInTypeDescription
id * path string
200 Array of review objects
NameInTypeDescription
id * path string
201 Created review object
NameInTypeDescription
id * path string
200 Review object
NameInTypeDescription
id * path string
200 Updated review object

VRM - Cycle Types

Review cycle definitions (e.g. Annual GDPR review).

200 Array of cycle type objects
201 Created cycle type object
NameInTypeDescription
id * path string
200 Cycle type object
NameInTypeDescription
id * path string
200 Updated cycle type object
NameInTypeDescription
id * path string
204 Deleted

VRM - Classifications

Data classification levels (e.g. Public, Internal, Confidential).

200 Array of classification level objects
201 Created classification object
NameInTypeDescription
id * path string
200 Updated classification object
NameInTypeDescription
id * path string
204 Deleted

VRM - Keys

API key management for Allod VRM.

200 Array of API key objects (secret value redacted)
201 API key object including the one-time secret value
NameInTypeDescription
id * path string
204 Deleted

VRM - Notifications

In-app notifications for governance events.

204 All marked as read
200 Array of notification objects
NameInTypeDescription
id * path string
204 Marked as read

VRM - Identity

OIDC SSO and SCIM identity sync configuration.

200 Array of user objects from SCIM
200 Array of group objects from SCIM
200 SCIM push config
200 Updated config
200 Connection test result
202 Sync queued
200 SCIM pull config
200 Updated config
200 Connection test result
200 OIDC config object
200 Updated OIDC config

VRM - Admin

License, SWG integration, probe scans, OSCAL imports and vendor catalog.

202 Scan queued
202 Scan queued

Returns status of GLEIF, EU sanctions list and other intelligence sources.

200 Intel status object
NameInTypeDescription
q query string Search query
200 Array of catalog entries

Called by allodswg to fold VRM-classified systems into its own sensitive-context detection. Only systems with a completed RoPA entry (a linked DataRecord with a classification set) are included - systems without one are simply absent from the map, not an error. Authenticated with the shared license key, not an admin API key.

200 Object mapping saascat_id to classification_level_id (e.g. public/internal/confidential/restricted), plus a count

Called by allodswg to fetch the approved-app list. Authenticated with the shared license key, not an admin API key.

200 Array of approved app domain entries
202 Sync queued
200 SWG sync config (endpoint + license key)
200 Updated config
200 Updated license status

Vendors

Admin only. Each vendor with system_count and sovereignty_level, the lowest assessed level among its systems (omitted when none is assessed).

200 Array of vendors

Admin only. Body: {name, website_domain, hq_country, ultimate_owner_country, privacy_policy_url, dpa_url, notes}; name is required.

201 Created vendor
400 name required
NameInTypeDescription
id * path string
200 Array of reviews

Body: {"cycle_type_id", "due_date": "YYYY-MM-DD"}. The cycle type must be vendor-scoped; due_date defaults to the cycle interval from today.

NameInTypeDescription
id * path string
201 Created review
400 cycle_type_id required, or a system-scoped cycle type
404 Cycle type not found
409 A pending review for this cycle type already exists
NameInTypeDescription
id * path string
200 Array of probe results

Body: {"into": "<vendor id>"}. Moves systems, probes, contracts, contacts and reviews to the target vendor, keeps the merged name as an alias of it, and deletes the merged vendor.

NameInTypeDescription
id * path string
204 Merged
400 into required, or merging a vendor into itself
404 Target vendor not found
NameInTypeDescription
id * path string
200 Array of contract documents

Multipart form: file, label, doc_type. Requires docstorage.

NameInTypeDescription
id * path string
201 Created contract document
503 docstorage not configured
NameInTypeDescription
id * path string
200 Array of contacts
NameInTypeDescription
id * path string
200 Saved contact
NameInTypeDescription
id * path string
200 {vendor, systems}
404 Vendor not found

Admin only. Replaces the vendor's fields with the body, same shape as create; fields left out are cleared. Systems that don't override a field show the new value.

NameInTypeDescription
id * path string
204 Updated
400 name required
404 Vendor not found
NameInTypeDescription
id * path string
204 Deleted
409 Vendor still has systems or contracts; merge it instead

Body: {"signer_email"}. Emails a one-time signing link when SMTP is configured. Requires docstorage.

NameInTypeDescription
did * path string
id * path string
200 {token_id, expires_at, sign_url, emailed}
404 Document not found for this vendor
503 docstorage not configured
NameInTypeDescription
cid * path string
id * path string
200 Saved contact
NameInTypeDescription
cid * path string
id * path string
204 Deleted

Sustainability

Admin only. Per vendor with a system in use: climate maturity (0-4), SBTi status, net-zero year, usage footprint (kgCO2e/month, Sustainable Web Design Model v4 from data transfer measured by SWG, or summed from firewall/SSE log byte counts when SWG has no fresh figure), annual spend in EUR and its emissions (vendor's own intensity, else the industry-average factor), and contracts without a known value. ?format=csv downloads it as CSV.

NameInTypeDescription
format query string
200 {vendors: [...], total_usage_kg_per_year, total_spend_eur_per_year, total_spend_kg_per_year, rates_date, usage_method, default_factor}

Admin only. climate: the effective values (sources tells which came from the sustainability report and which were entered), score 0-4, supplier_factor (kgCO2e per EUR of revenue), and manual: the entered values. contracts: each in-force contract's annual cost in EUR.

NameInTypeDescription
id * path string
200 {climate, contracts}
404 Vendor not found

Admin only. Body: {sbti_status: ""|committed|near_term|net_zero, net_zero_year, scope1, scope2, scope3 (tCO2e), reporting_year, renewable_share (0-1), revenue_eur, report_url, notes}. Each non-zero field overrides the sustainability report analysis.

NameInTypeDescription
id * path string
204 Saved
400 Invalid sbti_status or renewable_share
NameInTypeDescription
id * path string
200 {usage: {day, window_days, bytes_up, bytes_down, bytes_unsplit (transfer a log source reported without direction), source (swg|logs), estimate: {method, gb, kwh, kg_co2e, hosting_intensity, world_intensity, green_hosting}} or null, vendor_climate}
404 System not found

Admin only. Body: {amount, currency (ISO 4217), billing_period: month|year|once, term_months}. Overrides the value the contract analysis extracted; a one-off amount is spread over term_months.

NameInTypeDescription
did * path string
204 Saved
400 Invalid amount, currency or period
404 Document not found
NameInTypeDescription
did * path string
204 Removed

DORA

Admin only. Body: {lei, name, country, entity_type, competent_authority, consolidated, currency, hierarchy, parent_lei, integration_date, total_assets, definitions: [19 texts for B_99.01]}. Enumerations take the EBA codes (e.g. eba_CT:x12), countries and currencies ISO codes.

204 Saved
400 Invalid JSON

Admin only. The register as the EBA plain-csv reporting package (taxonomy 4.0, DORA module DORA010100): a ZIP named LEI.CON|IND_Country_DORA010100_DORA_RefDate_Timestamp.zip with META-INF/reportPackage.json, reports/report.json, parameters.csv, FilingIndicators.csv and one CSV per template. Refused with 422 while a finding would make the ESAs reject the file; data quality findings do not block it.

NameInTypeDescription
ref_date query string(date)
200 application/zip
404 DORA is turned off
422 {issues}: the findings that would reject the file

Admin only. register: every template (B_01.01-B_99.01) as rows of column codes (c0010...) with each value's source (manual, default, derived, contract, gleif, vendor, system) and the record it was built from. issues: findings of the validation (severity reject = the ESAs would refuse the file, error = data quality finding, warning). records: what was entered. suggestions: systems in use not in the register, vendors' sub-processors not in the supply chain. Also code_lists, templates (column types and keys), names, next_function_id and the reporting currency.

NameInTypeDescription
ref_date query string(date) Reference date, YYYY-MM-DD. Default: 31 December of the previous year.
200 {register, issues, records, suggestions, code_lists, templates, names, next_function_id, currency}
400 Invalid ref_date
404 DORA is turned off

Admin only. kind: entity (B_01.02), branch (B_01.03), provider (B_05.01; id = the vendor's id for one of allodvrm's vendors), arrangement (B_02.01-B_04.01; id = the reference number), service (B_02.02, B_07.01), function (B_06.01; id = F<n>), chain (B_05.02 rank 2+). Empty fields are prefilled when the register is built. Unknown fields are refused.

NameInTypeDescription
id * path string
kind * path string
200 The stored record
400 Invalid record
404 Unknown kind, or DORA is turned off
NameInTypeDescription
id * path string
kind * path string
204 Removed
404 Not found

DNS Discovery

Runs in the background; poll GET /api/v1/admin/org-domains for the outcome.

202 Scan started
503 DNS discovery not configured
200 {domains: [{domain, status, sources, first_seen, last_scanned, last_error}], status: {running, last_run, last_error, domains, created} | null}

Body: {"domain"}. Only confirmed domains are scanned; their SPF, MX, DMARC, DKIM, NS, CAA, SRV, TXT verification tokens and CT-logged subdomain CNAMEs become pending-triage systems.

201 {domain} as normalised
400 Not a public domain

The organisation's DNS records and Content-Security-Policy sources that still point at a decommissioning or inactive system's vendor, from the latest DNS discovery scan. hijackable marks a CSP script source whose domain is not registered.

NameInTypeDescription
id * path string
200 Array of {system_id, domain, kind, host, record, hijackable, first_seen, last_seen}
404 System not found

Body: {"status": "confirmed" | "ignored" | "suggested"}.

NameInTypeDescription
domain * path string
204 Saved
400 Invalid domain or status
NameInTypeDescription
domain * path string
204 Deleted

Log Sources

Body: {"vendor", "label"}. The response is the only time the push token is returned.

200 {source, token, path}
400 Vendor can't push over HTTPS
200 Flush outcome
200 Syslog sender mappings, push sources (without tokens), supported vendors, per-source ingest status and last flush

Body: {"syslog_sources": [{"ip", "vendor", "label"}]}. Applied immediately. Push sources are not affected.

200 Saved
400 Invalid IP or a vendor that can't send syslog

Authenticated by the push source's token, in the path or as Authorization: Bearer on POST /ingest/logs - not by an API key. Body: newline-delimited JSON, concatenated JSON objects or a JSON array, optionally gzip-compressed. Max 32 MiB as sent, 256 MiB decompressed; 600 requests per minute per IP.

NameInTypeDescription
token * path string
200 {records, hits}
400 Invalid JSON
401 Unknown or missing token
413 Body too large
429 Rate limited
NameInTypeDescription
id * path string
200 {source, token, path} with the new token
404 Unknown source
NameInTypeDescription
id * path string
200 Deleted
404 Unknown source

Features

Admin only. {sovereignty, dora}: each feature applies only to some organisations, so all are off until turned on. sovereignty is the EU Cloud Sovereignty Framework (CSF SEAL) assessment - its score, fields and auto-risks; dora is the DORA register of information. While DORA is off, every /api/v1/dora endpoint and the /dora page answer 404.

200 {sovereignty: bool, dora: bool}

Admin only. Body: {feature: bool}; a feature left out keeps its state. Turning one off keeps its data. Turning sovereignty off closes its open auto-risks; turning it on again reopens those, while their condition holds.

204 Saved
400 Invalid JSON or unknown feature