Referência API¶
RISK¶
GET https://mantis3-api.safelabs.com.br/risks¶
Objetivo — essa rota tem como objetivo retornar os riscos de acordo com o filtro e paginação.
Query
- Campos vazios não são incluídos na URL.
- Para
asset_type,criticality,event_categoryestatuspode indicar vários valores separados por vírgula.
| Parâmetro | Tipo | Notas | Valor (exemplo) |
|---|---|---|---|
x-api-key |
header | Chave API | |
page |
int | Define a página que deseja visualizar | |
page_size |
int | Define a quantidade de riscos por página | |
asset_type |
enum[] | Valores que deseja pesquisar (ex.: DOMAIN, IP) |
|
criticality |
enum[] | Criticidade dos riscos (ex.: LOW, HIGH) |
|
event_category |
enum[] | Categoria dos riscos (ex.: SOCIAL, FRAUD) |
|
status |
enum[] | Status atual do risco (ex.: IN_PROGRESS, NEW) |
|
date_from |
datetime | Data do início da pesquisa (ex.: yyyy-MM-ddThh-mm-ss) |
|
date_to |
datetime | Data do final da pesquisa (ex.: yyyy-MM-ddThh-mm-ss) |
|
sort |
string | Ordena pelo campo informado (ex.: created_at:desc) |
Respostas
200 (api176), 400 (api016), 422 (validação), 500 (api182).
Exemplos de inserção de parametros
Os parametros deverá seguir um padrão para que as consultas sejam realizadas corretamente, seguem os padrões necessários:
x-api-key — "sk_api_123abc"
page — "1" "2" "3"
page_size — "10" "20" "30"
asset_type — "DOMAIN" "BRAND" "IPV4" "BIN" "APK" "NAME" "CPF" "CNPJ" "EMAIL" "PHONE" "PASSPORT" "RG" "CNH" "ACCOUNT_NAME" "CREDIT_CARD"
criticality — "CRITICAL" "HIGH" "MEDIUM" "LOW"
event_category — "Aplications" "Buckets" "Dataleak" "Ecommerce" "Fraud" "DarkDeepWeb" "Phishing" "Social" "EASM"
status — "IN_PROGRESS" "NEW" "ON_HOLD" "RESOLVED"
date_from — "2010-10-10T10:10:10" "2011-11-11T11:11:11"
date_to — "2010-10-10T10:10:10" "2011-11-11T11:11:11"
sort — "created_at:desc" "financial_impact:asc"
Implementação
// Requer libcurl (compilar com -lcurl)
#include <curl/curl.h>
#include <stdio.h>
int main(void) {
CURL *curl = curl_easy_init();
if (!curl) return 1;
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks?page=1&page_size=10");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks?page=1&page_size=10");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
package main
import (
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET",
"https://mantis3-api.safelabs.com.br/risks?page=1&page_size=10", nil)
req.Header.Set("x-api-key", "SUA_CHAVE_API")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder()
.uri(URI.create("https://mantis3-api.safelabs.com.br/risks?page=1&page_size=10"))
.header("x-api-key", "SUA_CHAVE_API")
.GET()
.build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
Exemplos de corpo da resposta
{
"page_number": 1,
"page_size": 10,
"total_pages": 3,
"total_record": 25,
"total_registers": 10,
"content": [
{
"id": 123,
"status": "NEW",
"created_at": "2025-03-20T14:30:00Z",
"event_url": "https://exemplo.com/alvo",
"event_category": "Phishing",
"asset_type": "DOMAIN",
"criticality": "HIGH",
"financial_impact": null,
"risk_impact_severity": "HIGH",
"impact_calculated_at": "2025-03-20T15:00:00Z",
"assets_list": ["exemplo.com"],
"aggregation": false
}
],
"status_counts": {
"NEW": 8,
"IN_PROGRESS": 4,
"CLOSED": 13
}
}
GET https://mantis3-api.safelabs.com.br/risks/{risk_id}¶
Objetivo — essa rota tem como objetivo retornar os detalhes do risco.
| Parâmetro | Tipo | Notas | Valor (exemplo) |
|---|---|---|---|
x-api-key |
header | Autenticação | |
risk_id |
path | Identificador na URL |
Respostas
200, 404 (api170), 422 (validação de risk_id).
x-api-key — "sk_api_123abc"
risk_id — "1" "2" "3"
Implementação
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://mantis3-api.safelabs.com.br/risks/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://mantis3-api.safelabs.com.br/risks/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
package main
import (
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET", "https://mantis3-api.safelabs.com.br/risks/123", nil)
req.Header.Set("x-api-key", "SUA_CHAVE_API")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
}
import java.net.URI;
import java.net.http.*;
var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder()
.uri(URI.create("https://mantis3-api.safelabs.com.br/risks/123"))
.header("x-api-key", "SUA_CHAVE_API")
.GET()
.build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
Exemplos de corpo da resposta
{
"id": 123,
"event_id": "evt-abc-001",
"asset_type": "DOMAIN",
"event_category": "Phishing",
"event_url": "https://exemplo.com/alvo",
"created_at": "2025-03-20T14:30:00Z",
"impact": "Alto risco de credenciais expostas.",
"description": "Domínio associado a campanha de phishing.",
"recommendation": "Bloquear domínio e notificar usuários.",
"rule": {
"name": "Detecção de phishing",
"description": "Regra de monitoramento de marcas",
"severity": "HIGH"
},
"status": "IN_PROGRESS",
"financial_impact": 5000.0,
"risk_impact_severity": "HIGH",
"impact_calculated_at": "2025-03-20T15:00:00Z",
"event_details": null,
"rule_details": null,
"assets_list": ["exemplo.com"]
}
GET https://mantis3-api.safelabs.com.br/risks/aggregation/{risk_id}¶
Detalhe com informação de agregação e lista de eventos agregados quando aplicável.
Path e exemplos — valores só para esta rota (/risks/aggregation/{risk_id}).
| Parâmetro | Tipo | Notas | Valor (exemplo) |
|---|---|---|---|
x-api-key |
header | Autenticação | |
risk_id |
path | Identificador na URL |
Respostas
200, 404 (api170), 422 (validação de risk_id).
x-api-key — "sk_api_123abc"
risk_id — "1" "2" "3"
Implementação
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks/aggregation/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks/aggregation/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
package main
import (
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET",
"https://mantis3-api.safelabs.com.br/risks/aggregation/123", nil)
req.Header.Set("x-api-key", "SUA_CHAVE_API")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
}
import java.net.URI;
import java.net.http.*;
var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder()
.uri(URI.create("https://mantis3-api.safelabs.com.br/risks/aggregation/123"))
.header("x-api-key", "SUA_CHAVE_API")
.GET()
.build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
Exemplos de corpo da resposta
{
"id": 123,
"event_id": "42",
"asset_type": "EMAIL",
"event_category": "Dataleak",
"event_url": null,
"created_at": "2025-03-18T09:00:00Z",
"impact": null,
"description": "Risco agregado por regra.",
"recommendation": null,
"rule": {
"name": "Vazamento de credenciais",
"description": null,
"severity": "MEDIUM"
},
"status": "NEW",
"event": null,
"financial_impact": null,
"risk_impact_severity": "MEDIUM",
"impact_calculated_at": null,
"event_details": [
{
"event_id": "evt-001",
"created_date": "2025-03-18T09:05:00Z",
"affected_user": "usuario@exemplo.com"
},
{
"event_id": "evt-002",
"created_date": "2025-03-19T11:20:00Z",
"affected_user": null
}
],
"rule_details": null,
"assets_list": [],
"aggregation": true
}
GET https://mantis3-api.safelabs.com.br/risks/timeline/{risk_id}¶
Timeline cronológica (coleta, processamento, histórico de status) e event_timeline.
Path e exemplos — valores só para esta rota (/risks/timeline/{risk_id}).
| Parâmetro | Tipo | Notas | Valor (exemplo) |
|---|---|---|---|
x-api-key |
header | Autenticação | |
risk_id |
path | Identificador na URL |
Respostas
200, 404 (api170), 422 (validação de risk_id).
x-api-key — "sk_api_123abc"
risk_id — "1" "2" "3"
Implementação
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks/timeline/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks/timeline/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
package main
import (
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET",
"https://mantis3-api.safelabs.com.br/risks/timeline/123", nil)
req.Header.Set("x-api-key", "SUA_CHAVE_API")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
}
import java.net.URI;
import java.net.http.*;
var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder()
.uri(URI.create("https://mantis3-api.safelabs.com.br/risks/timeline/123"))
.header("x-api-key", "SUA_CHAVE_API")
.GET()
.build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
Exemplos de corpo da resposta
{
"timeline": [
{
"date": "2025-03-18T08:00:00Z",
"title": "Coleta",
"description": "Evento coletado na fonte.",
"user_name": null
},
{
"date": "2025-03-18T09:15:00Z",
"title": "Processamento",
"description": "Evento processado e associado ao risco.",
"user_name": null
},
{
"date": "2025-03-19T10:00:00Z",
"title": "Disponibilizado",
"description": "Status alterado para em análise.",
"user_name": "Ana Silva"
}
],
"event_timeline": [
{
"event_id": "evt-abc-001",
"collected_at": "2025-03-18T08:00:00Z",
"processed_at": "2025-03-18T09:15:00Z",
"category": "Phishing",
"asset_type": "DOMAIN",
"event_url": "https://exemplo.com/phishing"
}
]
}
GET https://mantis3-api.safelabs.com.br/risks/notes/{risk_id}¶
Lista de notas do risco, ordenadas por created_at ascendente.
Path e exemplos — valores só para esta rota (/risks/notes/{risk_id}).
| Parâmetro | Tipo | Notas | Valor (exemplo) |
|---|---|---|---|
x-api-key |
header | Autenticação | |
risk_id |
path | Identificador na URL |
Respostas
200, 404 (api170), 422 (validação de risk_id).
x-api-key — "sk_api_123abc"
risk_id — "1" "2" "3"
Implementação
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks/notes/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,
"https://mantis3-api.safelabs.com.br/risks/notes/123");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
package main
import (
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET",
"https://mantis3-api.safelabs.com.br/risks/notes/123", nil)
req.Header.Set("x-api-key", "SUA_CHAVE_API")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
}
import java.net.URI;
import java.net.http.*;
var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder()
.uri(URI.create("https://mantis3-api.safelabs.com.br/risks/notes/123"))
.header("x-api-key", "SUA_CHAVE_API")
.GET()
.build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
Exemplos de corpo da resposta
EVENT¶
GET https://mantis3-api.safelabs.com.br/events/{event_id}¶
Objetivo — retorna o documento do evento no OpenSearch pelo identificador, com details mapeados quando existir mapeamento por coletor/tipo e mascaramento de dados sensíveis nos ativos quando aplicável.
| Parâmetro | Tipo | Notas | Valor (exemplo) |
|---|---|---|---|
x-api-key |
header | Autenticação | |
event_id |
path | ID do evento no OpenSearch |
Respostas
200 (corpo _source enriquecido), 404 (api180), 422 (validação de path quando aplicável).
x-api-key — "sk_api_123abc"
event_id — identificador alfanumérico retornado em listagens ou no detalhe de risco (ex.: abc123xyz).
Implementação
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://mantis3-api.safelabs.com.br/events/example-event-id");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://mantis3-api.safelabs.com.br/events/example-event-id");
struct curl_slist *h =
curl_slist_append(NULL, "x-api-key: SUA_CHAVE_API");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, h);
curl_easy_perform(curl);
curl_slist_free_all(h);
curl_easy_cleanup(curl);
return 0;
}
package main
import (
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET", "https://mantis3-api.safelabs.com.br/events/example-event-id", nil)
req.Header.Set("x-api-key", "SUA_CHAVE_API")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
}
import java.net.URI;
import java.net.http.*;
var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder()
.uri(URI.create("https://mantis3-api.safelabs.com.br/events/example-event-id"))
.header("x-api-key", "SUA_CHAVE_API")
.GET()
.build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
Exemplos de corpo da resposta