Skip to main content

[FR] Changelog API 2.38.0

Journal des modifications de l'API — Module EASM (gestion de la surface d'attaque)

Written by Helyette Mehouelley

Ce changelog décrit les endpoints REST livrés avec le module EASM (Attack Surface Management). Une nouvelle famille d'endpoints (montés directement sous /api/auth/) remplace progressivement les endpoints historiques asm/*, avec des données plus riches et plus cohérentes. Les endpoints asm/* restent disponibles pendant la période de transition.

URL de base : https://dashboard.cloud.patrowl.io/api/auth/

Authentification : chaque requête nécessite un jeton API dans l'en-tête Authorization :

Authorization: Token <your-API-token>

Portée : sauf mention contraire, chaque ressource EASM est restreinte aux assets que vous pouvez voir. Tous les endpoints de liste/détail/export acceptent les mêmes paramètres de filtrage de base :

Paramètre

Type

Description

org_id

integer

Restreint les résultats à l'une de vos organisations. Par défaut : toutes les organisations dont vous êtes membre.

asset_ids

string

Liste d'IDs d'Asset séparés par des virgules. Restreint les résultats aux ressources possédées via ces assets.

protections

string

Liste de protections séparées par des virgules (ex. easm,pentested). Restreint aux assets ayant l'une de ces protections.

outside_business_hours

integer

Restreint les résultats aux assets ayant ce réglage de plage horaire.

teams

string

Liste d'IDs d'équipe séparés par des virgules (Technologies et Technology detections uniquement). Restreint aux assets appartenant à ces équipes.

La plupart des endpoints de liste sont paginés par numéro de page (count/next/previous/results) ; les CVE sont paginées par curseur (next/previous/results, avec un paramètre cursor). Chaque ressource expose un endpoint GET .../export (basé sur les filtres) et POST .../export (liste explicite d'IDs) retournant un fichier CSV (ou JSON, via export_format=json).


1. Domains

Domaines (et sous-domaines) découverts sur votre surface d'attaque, avec les données WHOIS et les enregistrements DNS.

1.1 List Domains

Item

Value

Method

GET

URL

/api/auth/domains

Permission

Membre de l'organisation

Paginé par numéro de page (count/next/previous/results).

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs de Domain séparés par des virgules.

search

string

No

Recherche insensible à la casse sur le nom de domaine.

is_top_domain

boolean

No

true pour les domaines apex uniquement (sans parent) ; false pour les sous-domaines uniquement.

parent_domain_id

integer

No

Uniquement les sous-domaines directs de ce Domain ID.

parent_asset_id

integer

No

Uniquement les sous-domaines directs du Domain possédé par cet Asset ID.

top_domain_id

integer

No

Uniquement les sous-domaines appartenant à ce Domain ID apex.

ipv4_id

integer

No

Uniquement les Domains résolvant actuellement vers cet IPv4 ID (résolution vue au cours des 90 derniers jours).

sorted_by

string

No

id, value, created_at, updated_at (préfixer par - pour l'ordre décroissant).

limit / page

integer

No

Pagination.

Example request

GET /api/auth/domains?org_id=1&is_top_domain=true Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 42,       "value": "example.com",       "top_domain": null,       "parent_domain": null,       "www_domain": 43,       "registrar": ["Example Registrar Inc."],       "registrar_id": 292,       "registrar_url": ["https://www.example-registrar.com"],       "registrar_status": ["clientTransferProhibited"],       "registrant_name": ["REDACTED FOR PRIVACY"],       "registrant_country": ["FR"],       "registrant_state_province": ["Ile-de-France"],       "dnsrecords": [         { "record_type": "A", "value": "203.0.113.10" },         { "record_type": "MX", "value": "mail.example.com" }       ],       "creation_dates": ["1997-08-14T04:00:00Z"],       "updated_dates": ["2025-08-10T09:12:00Z"],       "expiration_dates": ["2026-08-14T04:00:00Z"],       "name_servers": ["ns1.example.com", "ns2.example.com"],       "whois_text": "Domain Name: EXAMPLE.COM\n...",       "created_at": "2025-01-10T09:00:00Z",       "updated_at": "2025-08-10T09:12:00Z"     }   ] }

top_domain, parent_domain et www_domain sont des IDs de Domain (ou null). dnsrecords est une liste aplatie construite à partir de la résolution DNS brute ; registrar*/registrant*/creation_dates/updated_dates/expiration_dates/name_servers sont des tableaux car le WHOIS peut renvoyer plusieurs valeurs par champ.

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


1.2 Get a Domain by ID

Item

Value

Method

GET

URL

/api/auth/domains/{id}

Permission

Membre de l'organisation

Même forme de réponse qu'un élément de la liste ci-dessus.

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

Domain introuvable ou non accessible.


1.3 Export Domains

Item

Value

Method

GET or POST

URL

/api/auth/domains/export

Permission

Membre de l'organisation

GET exporte tous les Domains correspondant aux filtres de liste ci-dessus (y compris parent_asset_id/parent_domain_id pour exporter les sous-domaines, ou ipv4_id pour exporter les Domains résolvant vers une IPv4). POST n'exporte que les IDs donnés.

Query parameters : identiques à List, plus export_format (csv par défaut, ou json).

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de Domain à exporter. Au moins un.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

404

Un ou plusieurs IDs demandés ne sont pas accessibles.


2. IPv4 addresses

Adresses IPv4 possédées par vos assets, ainsi que les adresses contextualisées (IPs tierces vers lesquelles vos domaines résolvent, que vous ne possédez pas).

2.1 List IPv4 addresses

Item

Value

Method

GET

URL

/api/auth/ipv4s

Permission

Membre de l'organisation

Inclut à la fois les adresses que vous possédez et les IPs contextualisées vers lesquelles vos domaines résolvent. Filtrez sur is_owned pour ne garder que les adresses que vous possédez.

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs d'IPv4 séparés par des virgules.

search

string

No

Recherche texte sur la valeur de l'IP.

value

string

No

Adresse IPv4 exacte.

type

string

No

Type d'IP : cdn, saas, waf, cloud, static, other, private, unknown.

in_blocklist

boolean

No

Uniquement les IPs présentes sur une liste de blocage.

asn_id

integer

No

Filtre par ID d'ASN.

is_owned

boolean

No

true : uniquement les IPs que vous possédez. false : uniquement les IPs contextualisées.

domain_asset_id

integer

No

Uniquement les IPs résolues depuis le Domain possédé par cet Asset ID.

sorted_by

string

No

id, value, type, created_at, updated_at.

Example request

GET /api/auth/ipv4s?org_id=1&is_owned=true Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 501,       "value": "203.0.113.10",       "asn": 64500,       "type": "static",       "in_blocklist": false,       "blocklists": [],       "provider": {         "cdn": null,         "cloud": "AWS",         "saas": null,         "waf": null       },       "created_at": "2026-01-05T09:00:00Z",       "updated_at": "2026-08-14T07:12:00Z"     }   ] }

asn est l'ID numérique de l'ASN (utilisez GET /api/auth/asns/{asn} pour en obtenir le détail), pas le numéro d'AS lui-même.

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


2.2 Retrieve an IPv4 address

Item

Value

Method

GET

URL

/api/auth/ipv4s/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

IPv4 introuvable ou non accessible.


2.3 Export IPv4 addresses

Item

Value

Method

GET or POST

URL

/api/auth/ipv4s/export

Permission

Membre de l'organisation

GET — mêmes filtres que List, plus export_format. POST — liste explicite d'IDs.

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs d'IPv4 à exporter.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.

404

POST : un ou plusieurs ids ne sont pas accessibles.


3. Resolutions

Les liens entre un Domain et les adresses IPv4 vers lesquelles il résout.

Fenêtre de visibilité : GET /api/auth/resolutions ne renvoie que les résolutions observées au cours des 90 derniers jours. Une résolution devenue obsolète au-delà de cette fenêtre n'est plus renvoyée par l'API (bien que l'enregistrement soit conservé en interne). Dans cette fenêtre de 90 jours, le champ resolves indique si la résolution est toujours considérée comme actuelle (revue au cours des 15 derniers jours) — voir ci-dessous.

3.1 List resolutions

Item

Value

Method

GET

URL

/api/auth/resolutions

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs de résolution séparés par des virgules.

search

string

No

Recherche texte sur la valeur du domaine ou de l'IPv4.

domain_id

integer

No

Filtre par ID de Domain.

ipv4_id

integer

No

Filtre par ID d'IPv4.

domain_value

string

No

Valeur exacte du domaine (insensible à la casse).

ipv4_value

string

No

Adresse IPv4 exacte.

resolves

boolean

No

true : résolution observée au cours des 15 derniers jours. false : plus ancienne (mais toujours dans la fenêtre de visibilité de 90 jours).

first_resolved_at__gte / __lte

datetime

No

Première observation le/après ou le/avant cette date.

last_resolved_at__gte / __lte

datetime

No

Dernière observation le/après ou le/avant cette date.

sorted_by

string

No

id, domain_value, ipv4_value, first_resolved_at, last_resolved_at, created_at, updated_at.

Example request

GET /api/auth/resolutions?org_id=1&resolves=true Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 9001,       "domain": {         "id": 12,         "value": "www.acme.example"       },       "ipv4": {         "id": 501,         "value": "203.0.113.10",         "type": "static"       },       "first_resolved_at": "2026-01-05T09:00:00Z",       "last_resolved_at": "2026-09-20T03:00:00Z",       "resolves": true,       "created_at": "2026-01-05T09:00:00Z",       "updated_at": "2026-09-20T03:00:00Z"     }   ] }

Il n'y a pas de champ state sur cette ressource : la fraîcheur est exprimée uniquement via resolves et l'horodatage last_resolved_at.

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


3.2 Retrieve a resolution

Item

Value

Method

GET

URL

/api/auth/resolutions/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

Resolution introuvable, non accessible, ou en dehors de la fenêtre de visibilité de 90 jours.


3.3 Export resolutions

Item

Value

Method

GET or POST

URL

/api/auth/resolutions/export

Permission

Membre de l'organisation

GET — mêmes filtres que List, plus export_format. POST — liste explicite d'IDs.

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de résolution à exporter.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.

404

POST : un ou plusieurs ids ne sont pas accessibles.


4. ASNs

Systèmes autonomes (ASN) associés aux adresses IPv4 de vos assets.

4.1 List ASNs

Item

Value

Method

GET

URL

/api/auth/asns

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs d'ASN séparés par des virgules.

search

string

No

Recherche texte sur le numéro, la description, le CIDR ou le registre.

number

string

No

Numéro d'ASN, brut (64500) ou préfixé (AS64500), insensible à la casse.

cidr

string

No

Correspondance partielle (contient) sur le bloc CIDR.

registry

string

No

Registre exact (ex. RIPE, ARIN), insensible à la casse.

country_code

string

No

Code pays exact, insensible à la casse.

sorted_by

string

No

id, number, cidr, registry, country_code, ipv4_count, created_at, updated_at.

Example request

GET /api/auth/asns?org_id=1&country_code=FR Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 77,       "number": "AS64500",       "cidr": "203.0.113.0/24",       "registry": "RIPE",       "description": "ACME-NET",       "country_code": "FR",       "ipv4_count": 12,       "created_at": "2026-01-05T09:00:00Z",       "updated_at": "2026-08-14T07:12:00Z"     }   ] }

number est une chaîne lisible préfixée par AS (ex. "AS64500"), pas un simple entier. ipv4_count est le nombre d'adresses IPv4 visibles par l'appelant appartenant à cet ASN.

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


4.2 Retrieve an ASN

Item

Value

Method

GET

URL

/api/auth/asns/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

ASN introuvable ou non accessible.


4.3 Export ASNs

Item

Value

Method

GET or POST

URL

/api/auth/asns/export

Permission

Membre de l'organisation

GET — mêmes filtres que List, plus export_format. POST — liste explicite d'IDs.

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs d'ASN à exporter.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.

404

POST : un ou plusieurs ids ne sont pas accessibles.


5. Services

Services réseau (ports ouverts) détectés sur les assets scannés.

5.1 List Services

Item

Value

Method

GET

URL

/api/auth/services

Permission

Membre de l'organisation

Paginé par numéro de page. Le texte de la bannière n'est servi que par la route de détail ; la liste n'en indique que la présence via has_banner.

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs de Service séparés par des virgules.

search

string

No

Recherche dans le nom du service, le texte de la bannière et le numéro de port.

webserver

integer

No

Uniquement les Services exposant ce WebServer ID.

has_certificate

boolean

No

Uniquement les Services avec (ou sans) certificat TLS.

certificate_ids

string

No

Liste d'IDs de Certificate séparés par des virgules.

technology_ids

string

No

Liste d'IDs de Technology séparés par des virgules, détectées sur le service.

asset_type

string

No

Type d'asset sous-jacent (Domain, IPv4, ...).

protocol

string

No

tcp ou udp.

state

string

No

open ou closed. Un Service non réobservé pendant 14 jours est fermé automatiquement.

availability

string

No

Liste de valeurs de disponibilité d'asset séparées par des virgules.

is_ssl

boolean

No

Uniquement les services utilisant TLS.

port_number

integer

No

Numéro de port exact.

sorted_by

string

No

id, value, name, port_number, protocol, state, last_seen, created_at, updated_at.

Example request

GET /api/auth/services?org_id=1&state=open&protocol=tcp Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 501,       "value": "203.0.113.10",       "asset_type": "ipv4",       "name": "https",       "protocol": "tcp",       "port_number": 443,       "state": "open",       "is_ssl": true,       "has_banner": true,       "certificate": {         "id": 88,         "serial_number": "0A1B2C3D4E5F",         "is_expired": false,         "is_mismatched": false,         "is_selfsigned": false       },       "webservers": [         {           "id": 77,           "url": "https://example.com/",           "server": "nginx",           "title": "Example Domain",           "path": "/",           "jarm": "27d27d27d29d27d1dc27d27d27d27d..."         }       ],       "last_seen": "2026-09-20T06:00:00Z",       "created_at": "2025-01-10T09:00:00Z",       "updated_at": "2026-09-20T06:00:00Z"     }   ] }

Un state à closed signifie que le Service n'a pas été réobservé au cours des 14 derniers jours (ou est confirmé fermé d'une autre manière).

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


5.2 Get a Service by ID

Item

Value

Method

GET

URL

/api/auth/services/{id}

Permission

Membre de l'organisation

Mêmes champs que l'élément de liste, plus le texte complet de la banner.

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

Service introuvable ou non accessible.


5.3 Export Services

Item

Value

Method

GET or POST

URL

/api/auth/services/export

Permission

Membre de l'organisation

GET n'exporte que les Services ouverts, selon les filtres de liste. POST exporte la liste explicite d'IDs quel que soit l'état. Les deux incluent le texte complet de la banner.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

404

Un ou plusieurs IDs demandés ne sont pas accessibles.


6. Web servers

Serveurs web détectés sur les services exposés par vos assets.

6.1 List Web servers

Item

Value

Method

GET

URL

/api/auth/webservers

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs de Web server séparés par des virgules.

search

string

No

Recherche texte sur la valeur de l'asset, l'URL, le titre, le chemin et le serveur.

value

string

No

Valeur exacte de l'asset (insensible à la casse).

url

string

No

URL exacte (insensible à la casse).

server

string

No

Filtre exact sur l'en-tête serveur.

title

string

No

Filtre exact sur le titre de la page.

jarm

string

No

Filtre exact sur l'empreinte JARM.

status_code

integer

No

Filtre exact sur le code de statut HTTP renvoyé.

service_id

integer

No

Filtre sur l'ID du Service associé.

is_ssl

boolean

No

Filtre selon que le Service sous-jacent utilise SSL.

state

string

No

Filtre sur l'état du Service sous-jacent (open/closed).

asset_id

integer

No

Restreint aux Web servers appartenant à cet Asset.

sorted_by

string

No

id, value, url, server, title, status_code, port_number, created_at, updated_at.

Example request

GET /api/auth/webservers?org_id=1&is_ssl=true Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 42,       "value": "www.acme.example",       "service": {         "id": 100,         "port_number": 443,         "protocol": "tcp",         "is_ssl": true,         "state": "open"       },       "url": "https://www.acme.example/",       "server": "nginx/1.25.3",       "path": "/",       "title": "Acme — Home",       "response_time": 0.183,       "status_code": 200,       "content_length": 15234,       "content_type": "text/html; charset=utf-8",       "jarm": "27d3ed3ed0003ed1dc42d43d00041d4689e...",       "favicon_hash": "-1179287843",       "created_at": "2026-02-20T10:00:00Z",       "updated_at": "2026-08-14T07:12:00Z"     }   ] }

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


6.2 Retrieve a Web server

Item

Value

Method

GET

URL

/api/auth/webservers/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

Web server introuvable ou non accessible.


6.3 Export Web servers

Item

Value

Method

GET or POST

URL

/api/auth/webservers/export

Permission

Membre de l'organisation

GET exporte selon les mêmes filtres que List, plus export_format. POST exporte une liste explicite d'IDs.

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de Web server à exporter.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.

404

POST : un ou plusieurs ids ne sont pas accessibles.


7. Certificates

Certificats TLS détectés sur les services de vos assets. Un Certificate est unique par numéro de série et n'est renvoyé qu'une seule fois, quel que soit le nombre de Services qui le présentent. Chaque ligne porte la matière première du certificat.

7.1 List Certificates

Item

Value

Method

GET

URL

/api/auth/certificates

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs de Certificate séparés par des virgules.

search

string

No

Recherche dans le numéro de série, le texte brut du certificat et la valeur des assets qui le présentent.

serial_number

string

No

Correspondance exacte sur le numéro de série (insensible aux deux-points et à la casse).

is_expired

boolean

No

Filtre les certificats expirés / non expirés.

is_mismatched

boolean

No

Filtre les certificats dont le nom ne correspond pas au domaine.

is_selfsigned

boolean

No

Filtre les certificats auto-signés.

asset_value

string

No

Correspondance exacte (insensible à la casse) sur la valeur d'un asset présentant le certificat.

port_number

integer

No

Filtre par le port d'un service présentant le certificat.

sorted_by

string

No

id, serial_number, port_number, asset_value, created_at, updated_at.

Example request

GET /api/auth/certificates?is_expired=false&sorted_by=-created_at Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 42,       "serial_number": "0A:1B:2C:3D:4E:5F",       "services": [         {           "id": 501,           "value": "app.example.com",           "asset_type": "domain",           "protocol": "tcp",           "port_number": 443         }       ],       "is_expired": false,       "is_mismatched": false,       "is_selfsigned": false,       "created_at": "2026-08-01T09:00:00Z",       "updated_at": "2026-09-10T09:00:00Z",       "data_text": "Certificate:\n    Data:\n        Version: 3 ...",       "data_pem": "-----BEGIN CERTIFICATE-----\nMIIC...\n-----END CERTIFICATE-----",       "data_parsed": {         "subject": { "CN": "app.example.com" },         "issuer": { "CN": "Let's Encrypt" },         "not_before": "2026-08-01T00:00:00Z",         "not_after": "2026-10-30T00:00:00Z"       }     }   ] }

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.


7.2 Retrieve a Certificate

Item

Value

Method

GET

URL

/api/auth/certificates/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.

404

Certificate introuvable ou non accessible.


7.3 Export Certificates

GET exporte selon les mêmes filtres que List ; POST n'exporte que les IDs donnés. Les champs bruts du certificat (data_text, data_pem, data_parsed) sont exclus de l'export.

Item

Value

Method

GET or POST

URL

/api/auth/certificates/export

Permission

Membre de l'organisation

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de Certificate à exporter. Au moins un.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.

404

Un ou plusieurs ids demandés ne sont pas accessibles.


8. Vendors

Le catalogue des éditeurs des technologies détectées sur vos assets (un catalogue global, non restreint par organisation ni par asset).

8.1 List Vendors

Item

Value

Method

GET

URL

/api/auth/vendors

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

ids

string

No

Liste d'IDs de Vendor séparés par des virgules.

search

string

No

Recherche insensible à la casse sur le nom de l'éditeur.

sorted_by

string

No

id, name, products_count, created_at, updated_at.

Example request

GET /api/auth/vendors?search=microsoft&sorted_by=-products_count Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 7,       "name": "Microsoft",       "products_count": 12,       "created_at": "2026-08-01T09:00:00Z",       "updated_at": "2026-09-10T09:00:00Z"     }   ] }

products_count est le nombre de Products référencés pour cet éditeur.

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.


8.2 Retrieve a Vendor

Item

Value

Method

GET

URL

/api/auth/vendors/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.

404

Vendor introuvable.


8.3 Export Vendors

GET exporte selon les mêmes filtres que List ; POST n'exporte que les IDs donnés.

Item

Value

Method

GET or POST

URL

/api/auth/vendors/export

Permission

Membre de l'organisation

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de Vendor à exporter. Au moins un.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.

404

Un ou plusieurs ids demandés ne sont pas accessibles.


9. Products

Le catalogue des produits (application, système d'exploitation, matériel) appartenant à un Vendor, utilisé pour identifier les technologies détectées sur vos assets (un catalogue global, non restreint par organisation ni par asset).

9.1 List Products

Item

Value

Method

GET

URL

/api/auth/products

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

ids

string

No

Liste d'IDs de Product séparés par des virgules.

search

string

No

Recherche insensible à la casse sur le nom du produit ou celui de son éditeur.

vendor

string

No

Liste d'IDs de Vendor séparés par des virgules. Restreint aux produits de ces éditeurs.

type

string

No

Type de produit : application, operating_system, hardware.

sorted_by

string

No

id, name, vendor, type, created_at, updated_at.

Example request

GET /api/auth/products?type=operating_system&vendor=7 Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 101,       "vendor": { "id": 7, "name": "Microsoft" },       "name": "Windows Server",       "type": "operating_system",       "partial_cpe": "cpe:2.3:o:microsoft:windows_server",       "created_at": "2026-08-01T09:00:00Z",       "updated_at": "2026-09-10T09:00:00Z"     }   ] }

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.


9.2 Retrieve a Product

Item

Value

Method

GET

URL

/api/auth/products/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.

404

Product introuvable.


9.3 Export Products

GET exporte selon les mêmes filtres que List ; POST n'exporte que les IDs donnés.

Item

Value

Method

GET or POST

URL

/api/auth/products/export

Permission

Membre de l'organisation

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de Product à exporter. Au moins un.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes membre d'aucune organisation.

404

Un ou plusieurs ids demandés ne sont pas accessibles.


10. Technologies

Technologies (produits logiciels/matériels et versions) détectées sur vos assets. Une ligne par combinaison produit/version distincte — voir §11 pour la vue par détection (quel asset, quel service, quand).

10.1 List Technologies

Item

Value

Method

GET

URL

/api/auth/technologies

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours, teams

—

No

Voir les paramètres de portée de base ci-dessus.

product_ids

string

No

Liste d'IDs de Product séparés par des virgules.

vendor_ids

string

No

Liste d'IDs de Vendor séparés par des virgules.

version

string

No

Correspondance de sous-chaîne insensible à la casse sur la version détectée.

product_type

string

No

Catégorie de produit (voir la ressource Products).

is_relevant

boolean

No

Uniquement les Technologies ayant au moins une détection marquée comme pertinente/non pertinente.

source

string

No

Uniquement les Technologies ayant une détection de cette source : auto ou custom.

search

string

No

Correspond au nom du produit, au nom de l'éditeur ou à la version (termes séparés par des espaces, ET entre les mots).

asset_id

integer

No

Uniquement les Technologies détectées sur cet Asset ID.

sorted_by

string

No

vendor, product, version.

Example request

GET /api/auth/technologies?org_id=1&product_ids=12 Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 900,       "product": {         "id": 12,         "name": "nginx",         "vendor": { "id": 4, "name": "F5, Inc." }       },       "version": "1.25.3",       "partial_cpe": "cpe:2.3:a:f5:nginx:1.25.3",       "created_at": "2025-01-10T09:00:00Z",       "updated_at": "2026-09-20T06:00:00Z"     }   ] }

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


10.2 Get a Technology by ID

Item

Value

Method

GET

URL

/api/auth/technologies/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

Technology introuvable ou non accessible.


10.3 Retrieve aggregates for a list of Technologies

Renvoie le nombre d'assets, le nombre de CVE et la date de dernière observation pour un lot d'IDs de Technology — utile pour construire une vue de synthèse sans une requête par Technology.

Item

Value

Method

POST

URL

/api/auth/technologies/aggregates

Permission

Membre de l'organisation

Query parameters : mêmes paramètres de portée que List (org_id, asset_ids, protections, outside_business_hours, teams).

Request body (JSON)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de Technology pour lesquels calculer les compteurs. Au moins un, max 500.

Example request

POST /api/auth/technologies/aggregates?org_id=1 Authorization: Token <your-API-token> Content-Type: application/json Accept: application/json  {   "ids": [900, 901] }

Example response 200 OK

{   "counts": [     {       "id": 900,       "assets": 12,       "cves": 3,       "last_seen_at": "2026-09-20T06:00:00Z"     },     {       "id": 901,       "assets": 0,       "cves": 0,       "last_seen_at": null     }   ] }

Possible status codes

Code

Description

200

Succès.

400

Payload invalide (ids manquant/vide, ou plus de 500).

401

Non autorisé.


10.4 Export Technologies

GET exporte selon les mêmes filtres que List ; POST n'exporte que les IDs donnés.

Item

Value

Method

GET or POST

URL

/api/auth/technologies/export

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

404

Un ou plusieurs IDs demandés ne sont pas accessibles.


11. Technology Detections — nouveau

Nouvelle ressource. Là où le §10 (Technologies) vous donne une ligne par combinaison produit/version distincte, cette ressource vous donne chaque détection individuelle : sur quel asset, quel service, quel scanner, et quand. Utilisez-la pour répondre à « où exactement cette technologie tourne-t-elle » plutôt qu'à « cette technologie est-elle présente ».

Cycle de vie automatique : une détection automatique (source autre que CUSTOM) qui n'a pas été réobservée depuis 14 jours est automatiquement marquée is_relevant: false — à l'image du comportement de fermeture automatique des Services décrit au §5. Les détections que vous avez ajoutées manuellement (source: "custom") ne sont jamais rétrogradées automatiquement de cette façon, et une détection sur un asset qui n'est plus scanné est laissée telle quelle plutôt que d'être supposée obsolète.

11.1 List Technology detections

Item

Value

Method

GET

URL

/api/auth/technology-detections

Permission

Membre de l'organisation

Query parameters

Parameter

Type

Required

Description

org_id, asset_ids, protections, outside_business_hours, teams

—

No

Voir les paramètres de portée de base ci-dessus.

ids

string

No

Liste d'IDs de Technology detection séparés par des virgules.

technology_ids

string

No

Liste d'IDs de Technology séparés par des virgules.

product_ids

string

No

Liste d'IDs de Product séparés par des virgules.

vendor_ids

string

No

Liste d'IDs de Vendor séparés par des virgules.

service_ids

string

No

Liste d'IDs de Service séparés par des virgules.

version

string

No

Correspondance de sous-chaîne insensible à la casse sur la version détectée.

is_relevant

boolean

No

Uniquement les détections marquées comme pertinentes (ou non pertinentes).

source

string

No

Uniquement les détections de cette source : auto ou custom.

search

string

No

Correspond à la valeur de l'asset, au nom de l'éditeur, au nom du produit, à la version ou au nom du service (termes séparés par des espaces, ET entre les mots).

first_seen_at__gte / __lte

datetime

No

Première observation le/après ou le/avant cette date.

last_seen_at__gte / __lte

datetime

No

Dernière observation le/après ou le/avant cette date.

sorted_by

string

No

id, value, vendor, product, version, port_number, source, confidence, is_relevant, first_seen_at, last_seen_at.

Example request

GET /api/auth/technology-detections?org_id=1&technology_ids=900 Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "count": 1,   "next": null,   "previous": null,   "results": [     {       "id": 5001,       "value": "203.0.113.10",       "asset_type": "ipv4",       "technology": {         "id": 900,         "product": {           "id": 12,           "name": "nginx",           "vendor": { "id": 4, "name": "F5, Inc." }         },         "version": "1.25.3",         "partial_cpe": "cpe:2.3:a:f5:nginx:1.25.3",         "created_at": "2025-01-10T09:00:00Z",         "updated_at": "2026-09-20T06:00:00Z"       },       "service": {         "id": 501,         "name": "https",         "protocol": "tcp",         "port_number": 443       },       "source": "auto",       "confidence": 90,       "is_relevant": true,       "first_seen_at": "2026-01-10T09:00:00Z",       "last_seen_at": "2026-09-20T06:00:00Z",       "created_at": "2026-01-10T09:00:00Z",       "updated_at": "2026-09-20T06:00:00Z"     }   ] }

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.


11.2 Get a Technology detection by ID

Item

Value

Method

GET

URL

/api/auth/technology-detections/{id}

Permission

Membre de l'organisation

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

Technology detection introuvable ou non accessible.


11.3 Export Technology detections

Item

Value

Method

GET or POST

URL

/api/auth/technology-detections/export

Permission

Membre de l'organisation

GET exporte selon les mêmes filtres que List, plus export_format. POST exporte une liste explicite d'IDs.

Request body (JSON, POST only)

Field

Type

Required

Description

ids

array of integers

Yes

IDs de Technology detection à exporter. Au moins un.

Colonnes exportées : value, vendor, product, version, cves (nombre de CVE), service_name, service_protocol, service_port_number, is_relevant, first_seen_at, last_seen_at.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.

403

Vous n'êtes pas membre de l'organisation demandée.

404

POST : un ou plusieurs ids ne sont pas accessibles.


12. CVEs

Le catalogue des CVE croisé avec les Technologies détectées sur vos assets.

12.1 List CVEs

Item

Value

Method

GET

URL

/api/auth/cves

Permission

Membre de l'organisation

Paginé par curseur (pas par numéro de page) : utilisez le paramètre de requête cursor renvoyé dans la réponse pour récupérer la page suivante.

Query parameters

Parameter

Type

Required

Description

after / before

date

No

Restreint aux CVE publiées le/après ou le/avant (inclus) cette date.

severity

string

No

Liste de sévérités séparées par des virgules : info, low, medium, high, critical.

search

string

No

Correspondance de sous-chaîne sur l'identifiant de la CVE.

is_exploitable, is_in_the_news, is_in_the_wild, is_kev

boolean

No

Indicateurs de threat intelligence.

technology_ids

string

No

Liste d'IDs de Technology séparés par des virgules.

product_ids

string

No

Liste d'IDs de Product séparés par des virgules.

vendor_ids

string

No

Liste d'IDs de Vendor séparés par des virgules.

asset_id

integer

No

Uniquement les CVE affectant des Technologies détectées sur cet Asset ID.

related_to_org_assets

boolean

No

Uniquement les CVE affectant au moins une Technology détectée sur vos assets.

asset_availability

string

No

Combiné avec related_to_org_assets : restreint à une disponibilité d'asset donnée.

teams

string

No

Liste d'IDs d'équipe séparés par des virgules. Appliqué uniquement quand related_to_org_assets=true.

org_id

integer

No

Appliqué uniquement quand related_to_org_assets=true.

sorted_by

string

No

identifier, severity, cvss3_score, published_at, description.

cursor / limit

string / integer

No

Pagination par curseur.

Example request

GET /api/auth/cves?severity=critical,high&is_kev=true Authorization: Token <your-API-token> Accept: application/json

Example response 200 OK

{   "next": "https://dashboard.cloud.patrowl.io/api/auth/cves?cursor=cD0yMDI2LTA5LTIw",   "previous": null,   "results": [     {       "id": 55123,       "identifier": "CVE-2026-12345",       "published_at": "2026-09-15T00:00:00Z",       "description": "A stack buffer overflow in ...",       "severity": "critical",       "cvss": { "score": 9.8, "version": 3 },       "threat_info": {         "is_exploitable": true,         "is_in_the_news": false,         "is_in_the_wild": true,         "is_kev": true       },       "technologies": [         { "id": 900, "product": "nginx", "version": "1.25.3", "vendor": "F5, Inc.", "partial_cpe": "cpe:2.3:a:f5:nginx:1.25.3" }       ],       "references": ["https://nvd.nist.gov/vuln/detail/CVE-2026-12345"]     }   ] }

cvss indique le score et la version majeure du CVSS (2, 3 ou 4, sous forme d'entier) de la version CVSS la plus élevée disposant d'un score (v4 > v3 > v2) ; null si aucun score n'est disponible.

Possible status codes

Code

Description

200

Succès. Page vide si les filtres ne correspondent à rien.

401

Non autorisé.


12.2 Retrieve a CVE by identifier

Item

Value

Method

GET

URL

/api/auth/cves/{identifier}

Permission

Membre de l'organisation

{identifier} est l'identifiant de la CVE lui-même (ex. CVE-2026-12345), pas un ID numérique.

Example response 200 OK — mêmes champs de base que la liste, plus cwe, cwe_name, exploits (chacun avec reference, notes, trust_level, tlp_level, source, availability, type, maturity, relevancy_level, published_at, modified_at), les vecteurs/scores CVSS par version (cvss2_vector, cvss2_score, cvss3_vector, cvss3_score, cvss4_vector, cvss4_score), epss_score, epss_percentile, hears_score, created_at, updated_at.

Possible status codes

Code

Description

200

Succès.

401

Non autorisé.

404

CVE introuvable.


12.3 Count CVEs

GET /api/auth/cves/count — renvoie {"count": <int>} pour les CVE correspondant aux mêmes filtres que List. Permission : Membre de l'organisation.

12.4 Count CVEs by severity

GET /api/auth/cves/by-severity — renvoie les comptes regroupés par sévérité pour les CVE correspondant aux filtres de List :

{ "info": 0, "low": 12, "medium": 34, "high": 9, "critical": 2 }

12.5 Exploitability statistics

GET /api/auth/cves/statistics — compte, parmi les CVE correspondant aux filtres de List, celles potentiellement exploitables et celles qui sont des Known Exploited Vulnerabilities (KEV), chacune avec un total et un compte sur la dernière semaine :

{   "potentially_exploitable": { "total": 15, "since_last_week": 2 },   "kev": { "total": 3, "since_last_week": 0 } }

12.6 Count CVEs by qualification

GET /api/auth/cves/by-qualification?org_id=1&related_to_org_assets=false — répartit le compte entre les CVE propres à votre organisation et l'ensemble du catalogue, plus le nombre potentiellement exploitables :

{ "my_cve": 8, "all": 128340, "potentially_exploitable": 15 }

12.7 Related assets count

POST /api/auth/cves/related-assets-count?org_id=1 avec le corps {"ids": [55123, 55124]} — renvoie, pour chaque CVE ID demandé, le nombre de vos assets affectés :

{ "counts": [{ "id": 55123, "count": 4 }, { "id": 55124, "count": 0 }] }

Possible status codes (les quatre endpoints ci-dessus)

Code

Description

200

Succès.

400

Payload ou paramètres de requête invalides.

401

Non autorisé.


12.8 Export CVEs — mis à jour

Item

Value

Method

GET or POST

URL

/api/auth/cves/export

Permission

Membre de l'organisation

Mêmes filtres que List, plus export_format (csv par défaut, ou json). Corps de la requête POST : {"ids": [...]}.

La forme de l'export diffère désormais selon le format :

  • Colonnes CSV : identifier, severity, cvss2_score, cvss3_score, cvss4_score, published_at, is_exploitable, is_in_the_news, is_in_the_wild, is_kev. Chaque version de CVSS a désormais sa propre colonne, au lieu d'une seule colonne cvss3_score.

  • Colonnes JSON (export_format=json) : identifier, severity, cvss, published_at, is_exploitable, is_in_the_news, is_in_the_wild, is_kev. cvss reflète l'objet {score, version} du payload de la liste (la version CVSS la plus élevée disponible) au lieu de trois colonnes de score à plat.

Note pour les intégrations existantes : si vous analysez l'export CSV, la colonne cvss3_score est désormais rejointe par cvss2_score et cvss4_score — passez d'un parsing basé sur la position des colonnes à un parsing basé sur le nom des colonnes si ce n'est pas déjà le cas.

Possible status codes

Code

Description

200

Fichier renvoyé.

400

ids invalide/vide (POST).

401

Non autorisé.


13. Asset service & topology aggregates — considérablement enrichi

Un moyen léger d'obtenir, pour un lot d'assets, un ensemble d'indicateurs de synthèse EASM sans lister chaque enregistrement Domain/IPv4/Service sous-jacent. La forme de la réponse de cet endpoint s'est considérablement étoffée : en plus du résumé des services ouverts, il renvoie désormais aussi des agrégats de topologie/DNS (domaines résolvants, sous-domaines liés, IPs résolues) et des informations de regroupement par sous-réseau.

Item

Value

Method

POST

URL

/api/auth/assets/aggregates

Permission

Utilisateur authentifié (la visibilité des assets s'applique par asset)

Request body (JSON)

Field

Type

Required

Description

asset_ids

array of integers

Yes

IDs d'Asset pour lesquels calculer les agrégats. Au moins un, max 500.

filters

object (string → string)

No

Les mêmes paramètres de requête que ceux acceptés par l'endpoint de liste des Assets (ex. search, type). Restreint subnet.count pour qu'il corresponde à une liste d'Assets récupérée avec les mêmes filtres. Les paramètres de pagination/tri/regroupement par sous-réseau sont ignorés s'ils sont présents.

Example request

POST /api/auth/assets/aggregates Authorization: Token <your-API-token> Content-Type: application/json Accept: application/json  {   "asset_ids": [100, 101],   "filters": { "availability": "available" } }

Example response 200 OK

{   "aggregates": {     "100": {       "open_service_count": 3,       "top_service": { "name": "https", "port_number": 443 },       "resolving_domains": {         "count": 2,         "top": {           "id": 55,           "value": "www.acme.example",           "protection": { "status": "easm", "availability": "available" },           "outside_business_hours": 0         }       },       "related_subdomains": null,       "resolved_ips": null,       "subnet": {         "group_id": 9,         "cidr": "203.0.113.0/24",         "count": 14       }     },     "101": {       "open_service_count": 0,       "top_service": null,       "resolving_domains": null,       "related_subdomains": {         "count": 5,         "top": {           "id": 61,           "value": "blog.acme.example",           "protection": { "status": "unprotected", "availability": "available" },           "outside_business_hours": 0         }       },       "resolved_ips": {         "count": 1,         "top": {           "ownership": "contextualized",           "id": null,           "value": "198.51.100.7",           "protection": null,           "outside_business_hours": null         }       },       "subnet": null     }   } }

Champs, par asset demandé :

Field

Description

open_service_count

Nombre de Services ouverts sur l'asset.

top_service

Le Service ouvert avec le port le plus bas (name, port_number), ou null si aucun.

resolving_domains

Assets IP uniquement. Nombre et dernier vu des assets de type domaine résolvant actuellement vers cette IP (résolution vue au cours des 15 derniers jours). null pour les assets non-IP.

related_subdomains

Assets de type domaine uniquement. Nombre et premier (par ordre alphabétique) des assets de type domaine qui sont des enfants directs de ce domaine. null pour les assets non-domaine.

resolved_ips

Assets de type domaine uniquement. Nombre et dernière résolution des adresses IPv4 (possédées ou contextualisées) vers lesquelles ce domaine résout. null pour les assets non-domaine.

subnet

Assets IP uniquement. Le groupe de sous-réseau le plus spécifique auquel appartient cette IP (group_id, cidr, count — le nombre de vos assets visibles, restreints par filters, dans ce même sous-réseau). null si l'IP n'appartient à aucun groupe de sous-réseau visible, ou pour les assets non-IP.

Chaque agrégat de topologie (resolving_domains, related_subdomains, resolved_ips) suit la forme {count, top}, où top est :

  • id, value, protection: {status, availability}, outside_business_hours — pour resolving_domains/related_subdomains (toujours un Asset réel) ;

  • les mêmes champs plus ownership ("owned" ou "contextualized") pour resolved_ips — une entrée "contextualized" (une IP résolue que vous ne possédez pas) porte id, protection et outside_business_hours à null, puisqu'aucun Asset ne se trouve derrière.

Possible status codes

Code

Description

200

Succès.

400

Payload invalide (asset_ids manquant/vide, filters invalide).

401

Non autorisé.


14. Breaking changes

Ces changements affectent les intégrations existantes et nécessitent une action si vous dépendez des endpoints ou champs ci-dessous.

14.1 POST /api/auth/assets/{id}/ supprimé

La route de mise à jour d'un asset n'accepte plus POST. Utilisez PATCH /api/auth/assets/{id}/ pour mettre à jour un asset existant ; les corps de requête/réponse sont par ailleurs inchangés. GET /api/auth/assets/{id}/ (détail) n'est pas affecté.

14.2 Tableau assets et champ is_owned supprimés des ressources EASM

Les ressources suivantes ne renvoient plus de tableau assets (la liste des assets pouvant voir l'enregistrement) ni de champ is_owned (indiquant si l'enregistrement appartient à votre organisation) dans leurs payloads : Domains, IPv4 addresses, Services, Web servers, Certificates, Resolutions. Ces données inter-organisations ont été retirées des réponses EASM. Si vous utilisiez is_owned pour distinguer vos propres assets des assets tiers/contextuels, utilisez plutôt le filtre d'appartenance spécifique à la ressource lorsqu'il existe (ex. is_owned en tant que paramètre de requête sur GET /api/auth/ipv4s fonctionne toujours — seul le champ de réponse a été supprimé).

14.3 Champ state supprimé des Resolutions

easm.Resolution n'expose plus de champ state, et le filtre ?state=, l'option de tri correspondante ainsi que la colonne d'export ont tous été supprimés. Ce champ ne renvoyait de toute façon jamais que active et n'apportait pas d'information utile. Utilisez à la place le nouveau champ booléen resolves (true si la résolution a été observée au cours des 15 derniers jours). Notez également la fenêtre de visibilité de 90 jours décrite au §3 : les résolutions non réobservées dans cette fenêtre cessent complètement d'être renvoyées par l'API.

14.4 Domain.expiration_date renommé en expiration_dates

Le champ d'expiration WHOIS sur GET /api/auth/domains s'appelle désormais expiration_dates (au pluriel, cohérent avec les autres champs tableaux WHOIS creation_dates/updated_dates). Mettez à jour toute intégration lisant expiration_date.

14.5 Colonnes de l'export CSV des CVE modifiées

L'export CSV de GET/POST /api/auth/cves/export comporte désormais trois colonnes de score CVSS (cvss2_score, cvss3_score, cvss4_score) au lieu d'une seule (cvss3_score) — voir §12.8. Si vous analysez ce CSV par position de colonne plutôt que par nom d'en-tête, il s'agit d'un changement cassant.


15. Common error response format

Les erreurs de validation et de permission sont généralement renvoyées sous forme d'un corps JSON :

{   "detail": "Human-readable description of the error." }

ou, pour les erreurs de validation spécifiques à un champ :

{   "<field_name>": "Human-readable description of the error." }

Codes de statut HTTP utilisés dans ce document :

Code

Usage

200

Succès (y compris les exports).

400

Requête invalide (paramètres ou corps invalides/manquants).

401

Non autorisé (jeton manquant/invalide).

403

Interdit (vous n'êtes pas membre de l'organisation demandée).

404

Introuvable (la ressource n'existe pas, ou est en dehors de votre périmètre visible).


16. Summary table

Resource

List

Retrieve

Export (GET/POST)

Domains

GET /api/auth/domains

GET /api/auth/domains/{id}

/api/auth/domains/export

IPv4 addresses

GET /api/auth/ipv4s

GET /api/auth/ipv4s/{id}

/api/auth/ipv4s/export

Resolutions

GET /api/auth/resolutions

GET /api/auth/resolutions/{id}

/api/auth/resolutions/export

ASNs

GET /api/auth/asns

GET /api/auth/asns/{id}

/api/auth/asns/export

Services

GET /api/auth/services

GET /api/auth/services/{id}

/api/auth/services/export

Web servers

GET /api/auth/webservers

GET /api/auth/webservers/{id}

/api/auth/webservers/export

Certificates

GET /api/auth/certificates

GET /api/auth/certificates/{id}

/api/auth/certificates/export

Vendors

GET /api/auth/vendors

GET /api/auth/vendors/{id}

/api/auth/vendors/export

Products

GET /api/auth/products

GET /api/auth/products/{id}

/api/auth/products/export

Technologies

GET /api/auth/technologies

GET /api/auth/technologies/{id}

/api/auth/technologies/export (+ POST .../technologies/aggregates)

Technology detections (nouveau)

GET /api/auth/technology-detections

GET /api/auth/technology-detections/{id}

/api/auth/technology-detections/export

CVEs

GET /api/auth/cves

GET /api/auth/cves/{identifier}

/api/auth/cves/export (+ count, by-severity, statistics, by-qualification, related-assets-count)

Asset aggregates

—

—

POST /api/auth/assets/aggregates

Supprimé : POST /api/auth/assets/{id}/ (utilisez PATCH à la place, voir §14.1).

Nouveautés de cette version : la ressource Technology detections (§11) ; les champs resolving_domains, related_subdomains, resolved_ips et subnet sur POST /api/auth/assets/aggregates (§13) ; les colonnes CVSS par version sur l'export CSV des CVE (§12.8).

Did this answer your question?