Créez des intégrations pour Skysnag avec des jetons API aux permissions limitées.
Authentifiez-vous avec X-Api-Token En-tête — pas d'authentification Bearer. Toutes les réponses sont au format JSON avec des structures d'erreur prévisibles.
Trois étapes pour votre première requête authentifiée.
Demander l'accès à l'API — Soumettre depuis Demandes d'accès à l'API. Un administrateur active l'accès à l'API sur votre compte.
Créer un jeton à portée limitée — Ouvrez Jetons d'API, sélectionnez les autorisations et copiez immédiatement le jeton complet (affiché une seule fois).
Envoyer des requêtes authentifiées — Inclure X-Api-Token: sk_snag_… dans chaque appel protégé.
cURL — vérification de l'état (sans authentification)
Télécharger l'environnement — Skysnag-API-v1.postman_environment.json (prérempli avec l'URL de base de cette application : https://developers.skysnag.com/api/v1)
Importer les deux fichiers dans Postman → Importer → faites glisser les fichiers JSON ou sélectionnez-les.
Configurez votre jeton — Dans l'environnement, définissez api_token sur votre jeton complet issu de Jetons d'API.
Exécuter les requêtes — Commencez par System → Health, puis Authentication → Get Me.
Collez un jeton pour activer la console Essayez-le sur les points de terminaison Obtenir ci‑dessous (lecture seule). Les requêtes sont exécutées contre votre compte en production sur https://developers.skysnag.com/api/v1. Le jeton est stocké uniquement dans ce navigateur (localStorage) et n'est jamais envoyé ailleurs que vers cette API.
Aucune clé définie
URL de base et en-têtes
Tous les chemins v1 sont relatifs à l'URL de base indiquée ci-dessous.
https://developers.skysnag.com/api/v1
https://api.skysnag.com/v1
En-tête
Valeur
Notes
Accepter
application/json
Toujours
Type de contenu
application/json
lors de l'envoi d'un corps
X-Api-Token
Votre jeton d'API
Points de terminaison protégés
X-Request-Id
UUID (facultatif)
Corréler les journaux ; affiché dans les erreurs
Réponses
Success payloads are wrapped in a data envelope.
JSON — enveloppe de succès
{
"data": { ... }
}
JSON — GET /health
{
"data": {
"status": "ok",
"version": "v1"
}
}
Erreurs
Errors return a stable code, human message, and request_id for support.
Each token is limited to 60 requests per minute by default.
Lorsque le seuil est dépassé, l'API renvoie HTTP 429. Mettez en œuvre un backoff exponentiel. Contactez le support pour obtenir des limites supérieures.
Autorisations
Les jetons se voient attribuer des autorisations avec une portée. Les points de terminaison rejettent les requêtes lorsque la portée requise est absente.
API v1 scopes
Périmètre
Description
account:read
Read account and token metadata
me:read
Read current user profile, permissions, domains, and security
me:write
Update current user profile
users:read
List account users and domain access
users:write
Create, update, and delete account users
tokens:read
List active API tokens
tokens:write
Create and revoke API tokens
domains:read
List and read domains
domains:write
Create, update, and delete domains
Legacy scopes
Valide pour les jetons existants des intégrations plus anciennes. Non requis pour les nouveaux points de terminaison d'authentification v1.
Périmètre
Description
email-trust:read
Read DMARC/SPF/BIMI trust data
reports:read
Read aggregate and compliance reports
integrations:read
Read integration settings
integrations:write
Manage integrations
Référence de l'API
Documentation des points de terminaison de la surface v1 actuelle.
Contrôle de santé
GET/health
Vérification publique de l'état. Aucune authentification requise.
Gérer les membres de l'équipe du compte. Exige que le compte authentifié soit le propriétaire de l'équipe. Schémas : users, roles, teams, domain_accesses, password_securities, webauthn_credentials, user_detail_changes_history.
GET/rolesusers:read
Listez les rôles pouvant être attribués lors de l'invitation ou de la mise à jour des membres de l'équipe. Propriétaire, Administrateur et Éditeur sont exclus.
GET/roles/{role_id}users:read
Obtenir les détails d'un seul rôle assignable.
GET/usersusers:read
Lister les utilisateurs du compte dans l'équipe actuelle.
POST/usersusers:write
Créer une invitation pour un membre du compte. Par défaut, un e-mail d'invitation est envoyé.
GET/users/{user_id}users:read
Obtenir les détails de l'utilisateur.
PATCH/users/{user_id}users:write
Mettre à jour les informations de l'utilisateur.
DELETE/users/{user_id}users:write
Supprimer un membre de l'équipe.
PATCH/users/{user_id}/statususers:write
Basculer l'état de l'utilisateur. Corps : {"enabled": true}
PATCH/users/{user_id}/roleusers:write
Modifier le rôle. Corps : {"role_id": 5}
PATCH/users/{user_id}/enforce-2fausers:write
Basculer l'application de l'authentification à deux facteurs (2FA). Corps: {"enabled": true}
POST/users/{user_id}/reinvite-userusers:write
Renvoyer l'e-mail d'invitation au compte à un membre d'équipe existant.
GET/users/{user_id}/domainsusers:read
Lister les accès aux domaines pour un utilisateur.
API de gestion des domaines
Gérer les domaines du compte. Les opérations d'écriture nécessitent le compte du propriétaire de l'équipe. Schémas : domains, domain_groups, domain_accesses, domain_states, domain_snapshot, parked_domains, license_domain, domains_services, cloudflare_records.
GET/domainsdomains:read
Liste les domaines visibles par le compte. Prend en charge page et limit.
POST/domainsdomains:write
Créer un domaine. Corps : {"fqdn": "example.com", "parent_domain_id": null}
POST/domains/bulkdomains:write
Ajouter des domaines en masse. Corps : {"domains": ["example.com", "example.org"]}. Retourne un ID de tâche.
GET/domains/bulk/{job_id}domains:read
Obtenir le statut de la tâche d'ajout en masse et les résultats par domaine.
GET/domains/{domain_id}domains:read
Obtenir les détails du domaine, y compris le DNS et l'état de vérification.
PATCH/domains/{domain_id}domains:write
Modifier les métadonnées du domaine (groupe, statut, statut d'intégration, domaine parent)
DELETE/domains/{domain_id}domains:write
Supprimer un domaine et les enregistrements hébergés associés.
POST/domains/{domain_id}/verifydomains:write
Vérifier les enregistrements DNS du domaine. Champs facultatifs dans le corps : dmarc_record, spf_record, bimi_record, tls_rpt_record, mta_sts_record.
POST/domains/{domain_id}/check-dnsdomains:write
Effectuer une requête/contrôle DNS et stocker le résultat pour consultation ultérieure.
Récupère le dernier résultat de récupération DNS stocké par check-dns (mis en cache pendant 7 jours). Le corps de la réponse de check-dns contient déjà le résultat complet ; utilisez ce point de terminaison pour le récupérer plus tard sans relancer la vérification.
GET/domains/{domain_id}/statusdomains:read
Obtenir le statut de vérification des protocoles (DMARC, SPF, MTA-STS, TLS-RPT, BIMI).
GET/domains/{domain_id}/servicesdomains:read
Obtenir les services d'envoi d'e-mails associés.
PATCH/domains/{domain_id}/servicesdomains:write
Remplacer les services attachés. Corps : {"service_ids": [1, 2]}
API des groupes de domaines
Organiser les domaines en groupes. Les groupes appartiennent à l'équipe du compte ; un propriétaire d'équipe est requis pour les opérations d'écriture.
GET/domain-groupsdomains:read
Lister les groupes de domaines du compte avec le nombre de domaines.
POST/domain-groupsdomains:write
Créer un groupe de domaines. Corps : {"name": "Production", "status": "active"} (status optionnel).
GET/domain-groups/{group_id}domains:read
Récupérer un seul groupe de domaines.
PATCH/domain-groups/{group_id}domains:write
Modifier un groupe de domaines. Corps : {"name": "New name", "status": "active"} (les deux facultatifs).
DELETE/domain-groups/{group_id}domains:write
Supprimer un groupe de domaines. Les domaines membres sont retirés du groupe, pas supprimés.
Supprimer un domaine du groupe (le domaine ne sera plus associé au groupe)
API DMARC hébergée
Gérez les enregistrements DNS DMARC hébergés par Skysnag, la politique d'application, l'historique et les recommandations pour un domaine. Un propriétaire d'équipe est requis pour effectuer des opérations d'écriture.
GET/domains/{domain_id}/hosted-dmarcdomains:read
Renvoie le nom de l'enregistrement hébergé, sa valeur, son état d'activation et la politique actuelle.
Niveau d'application suggéré basé sur les statistiques d'alignement et la période de surveillance.
API SPF hébergée
Gérez les enregistrements SPF hébergés par Skysnag, les includes, les actions d'autorisation IP et le flattening pour un domaine. Un propriétaire de l'équipe est requis pour les opérations d'écriture.
GET/domains/{domain_id}/hosted-spfdomains:read
Renvoie le nom/valeur de l'enregistrement SPF hébergé, l'enregistrement à publier sur votre domaine, le statut d'activation, le qualificateur terminal all et le nombre de requêtes.
POST/domains/{domain_id}/hosted-spfdomains:write
Configurez l'enregistrement SPF hébergé par Skysnag pour le domaine.
PATCH/domains/{domain_id}/hosted-spfdomains:write
Modifier les paramètres SPF avancés. Corps : {"all": "~all"} (l'une des options -all, ~all, ?all, +all).
Autoriser ou bloquer une IP. Body: {"ip": "203.0.113.10", "type": "Allow"} (type = Allow ou Reject).
POST/domains/{domain_id}/spf/flattendomains:read
Génère un enregistrement SPF aplati en résolvant les includes en plages d'IP. Renvoie l'enregistrement aplati, les listes IPv4/IPv6 et le nombre de requêtes DNS par rapport à la limite.
API BIMI / VMC
Gérer les enregistrements BIMI, les logos SVG, les certificats VMC et les vérifications de préparation. Le propriétaire de l'équipe est requis pour les opérations d'écriture.
GET/bimi/registrationsaccount:read
Lister les demandes d'enregistrement BIMI des partenaires pour l'équipe des comptes.
GET/domains/{domain_id}/bimidomains:read
Retourne les détails de l'enregistrement BIMI, les cibles DNS, le statut du logo/VMC et les résultats de l'inspection SVG.
POST/domains/{domain_id}/bimidomains:write
Provisionner BIMI hébergé pour le domaine.
PATCH/domains/{domain_id}/bimidomains:write
Resynchroniser ou modifier BIMI. Republie à partir des fichiers téléchargés, ou transmettez record_value pour un remplacement manuel.
DELETE/domains/{domain_id}/bimidomains:write
Supprimer la configuration BIMI, les fichiers hébergés et l'enregistrement Route53.
Liste de contrôle de préparation BIMI/VMC avec score, statut du protocole et réussite/échec par contrôle
API MTA-STS
Gérer le MTA-STS et TLS-RPT hébergés pour un domaine. Le propriétaire de l'équipe est requis pour les opérations d'écriture.
GET/domains/{domain_id}/mta-stsdomains:read
Renvoie l'état MTA-STS, le mode de la politique, les cibles CNAME du client, les enregistrements DNS hébergés et les métadonnées de la vérification de synchronisation.
Fournir des enregistrements MTA-STS et TLS-RPT hébergés. Crée une politique par défaut (mode: none) à partir des enregistrements MX actifs si nécessaire.
Mettre à jour uniquement le mode de la politique. Corps : {\"mode\": \"none|testing|enforce\"}. Les enregistrements MX sont rafraîchis depuis le DNS en direct.
Exécutez la validation MTA-STS et TLS-RPT via le service de vérification. Corps optionnel : verify_dns, require_caa, deploy_policy (par défaut true lors de la vérification DNS).
API TLS-RPT
Configurer le TLS‑RPT hébergé et consulter les rapports TLS reçus. Le propriétaire de l'équipe est requis pour les opérations d'écriture.
GET/domains/{domain_id}/tls-rptdomains:read
Renvoie la configuration TLS-RPT, les cibles DNS, l'état de vérification et le nombre total de rapports.
Lignes paginées avec échecs TLS (nombre d'échecs non nul ou codes de raison d'échec)
API du score de santé et de sécurité du domaine
Read-only domain health, email security score, mail volume, sending services, failing sources, and cached dashboard data. All endpoints are scoped to {domain_id} and require domains:read. Volume/source endpoints accept optional start_date/end_date (YYYY-MM-DD, default last 30 days).
Obtenir l'état du domaine
get/domains/{domain_id}/healthdomains:read
Aperçu actuel de la santé du domaine : une cartographie succès/échec par protocole, une étiquette qualitative result, le fournisseur de messagerie détecté et l’enregistrement DMARC en direct. Issu du dernier scan Domain Guard ; en l’absence de scan, les vérifications en direct sont utilisées (le source indique la source).
Retours
source (guard_history | live), result, mail_provider, une map protocols de valeurs booléennes, protocols_passing/total_protocols, le dmarc_record et scanned_at.
Historique paginé des instantanés de santé de Domain Guard, du plus récent au plus ancien. Chaque ligne capture l'état réussite/échec du protocole et le libellé du résultat au moment de l'analyse, vous permettant de suivre l'évolution de la protection dans le temps.
Paramètres de requête
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
page:
FACULTATIFinteger
Numéro de page, indexé à partir de 1 (par défaut : 1).
limit:
FACULTATIFinteger
Éléments par page (1–100, par défaut 25).
Retours
Un tableau paginé de lignes de snapshot (id, result, mail_provider, la map protocols, protocols_passing/total_protocols, scanned_at) ainsi que pagination.
Le score actuel de sécurité des e-mails (0–10) avec une interprétation et un message lisibles par un humain. Calculé à la demande à partir de résultats mis en cache de vérificateurs externes, le premier appel après une absence dans le cache peut donc être plus lent. Renvoie 503score_unavailable s'il ne peut pas être calculé.
Retours
score, max_score (10), interpretation (par ex. excellent), un message et computed_at.
Une série de score de sécurité dérivée calculée à partir des instantanés de Domain Guard, où derived_score = passing protocols / 5 × 10. Utilisez-la comme courbe de tendance lorsque vous n'avez pas besoin du score complet du live-checker.
Paramètres de requête
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
limit:
FACULTATIFinteger
Nombre maximum de lignes à renvoyer (1–100, valeur par défaut : 10).
Retours
max_score, une note explicative et un tableau history de points (derived_score, protocols_passing/total_protocols, result, scanned_at).
Historique quotidien du volume de courriels dérivé des données agrégées DMARC : décomptes livrés / mis en quarantaine / rejetés et résultat DMARC (pass/échec) par jour, ainsi que totaux consolidés pour l’ensemble de la période.
Paramètres de requête
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
Retours
Un objet totals et un tableau timeline, chaque entrée indexée par date contenant le volume ainsi que le nombre de réussites/échecs.
Envoi des sources avec volume, métriques DMARC, un pourcentage de compliance et un status de compliant, partial ou failing. Le marqueur is_registered_threat signale les sources connues comme malveillantes.
Paramètres de requête
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
limit:
FACULTATIFinteger
Nombre maximum de lignes à renvoyer (1–100, valeur par défaut : 10).
Retours
Un tableau de services, chacun avec source_name, l'objet de métriques, compliance, status et is_registered_threat.
Sources ayant échoué à l'alignement DMARC sur la période, classées par volume d'échecs. Ce sont les sources prioritaires à investiguer — soit des expéditeurs légitimes dont l'authentification doit être corrigée, soit des usurpateurs.
Paramètres de requête
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
limit:
FACULTATIFinteger
Nombre maximum de lignes à renvoyer (1–100, valeur par défaut : 10).
Retours
Un tableau de failed_sources ayant la même structure que sending-services, trié par volume d'échecs décroissant.
Renvoie la charge utile (payload) de l'instantané du tableau de bord précalculé pour le domaine, si elle existe. C'est le moyen le plus rapide d'afficher un tableau de bord sans recalculer les agrégats. Lorsqu'aucun instantané n'existe, cached vaut false et data vaut null.
Paramètres de requête
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
Retours
cached (booléen), cached_at, la fenêtre demandée et la charge utile de l'instantané data (ou null).
Read-only DNS connect/disconnect timeline, current records, record-value history, change events, and stored snapshots. All endpoints are scoped to {domain_id} and require domains:read. Filterable by record_type and start_date/end_date (YYYY-MM-DD).
Obtenir la chronologie du DNS
get/domains/{domain_id}/dns/timelinedomains:read
Un résumé d'état par protocole (état actuel, horodatages des dernières connexions/déconnexions et nombre de connexions) ainsi que les événements récents de connexion/déconnexion. Il s'agit de la vue principale montrant comment chaque enregistrement de protocole s'est connecté et déconnecté au fil du temps.
Paramètres de requête
record_type:
FACULTATIFstring
Filtrer les événements selon l'un des éléments suivants : dmarc, spf, mta_sts, tls_rpt, bimi.
action:
FACULTATIFstring
Filtrer par connected ou disconnected.
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
limit:
FACULTATIFinteger
Nombre maximum de lignes à renvoyer (1–100, valeur par défaut : 10).
Retours
Un summary indexé par protocole et un tableau events (id, record_type, action, record_value, status_before/status_after, occurred_at).
L'état actuel de chaque enregistrement de protocole : statut de connexion, indicateur de vérification, horodatages de dernière connexion/déconnexion et la dernière valeur connue de l'enregistrement. SPF rapporte en outre son lookup_count DNS (la limite de 10 requêtes DNS est importante pour la validité).
Retours
Une map protocols indexée par protocole, chaque entrée contenant current_status, verified, status, last_connected/last_disconnected et record_value.
Un historique unifié, paginé et chronologique des valeurs des enregistrements — fusionnant les instantanés DMARC et SPF pour que vous puissiez voir exactement ce que chaque enregistrement contenait à chaque instant. Les lignes SPF incluent lookup_count.
Paramètres de requête
record_type:
FACULTATIFstring
Limiter à dmarc ou spf (par défaut : les deux).
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
page:
FACULTATIFinteger
Numéro de page, indexé à partir de 1 (par défaut : 1).
limit:
FACULTATIFinteger
Éléments par page (1–100, par défaut 25).
Retours
Un tableau paginé de lignes d'historique (record_type, record_value, occurred_at ; pour SPF, ajout de lookup_count) ainsi que pagination.
Un flux paginé d'événements de connexion/déconnexion de changement sur tous les protocoles, avec la transition d'état (status_before → status_after). Utilisez ceci pour un flux d'activité de type audit de la santé DNS.
Paramètres de requête
record_type:
FACULTATIFstring
L'un des dmarc, spf, mta_sts, tls_rpt, bimi.
action:
FACULTATIFstring
Filtrer par connected ou disconnected.
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
page:
FACULTATIFinteger
Numéro de page, indexé à partir de 1 (par défaut : 1).
limit:
FACULTATIFinteger
Éléments par page (1–100, par défaut 25).
Retours
Un tableau paginé d'événements de modification (id, record_type, action, record_value, status_before/status_after, occurred_at) ainsi que pagination.
Les lignes de snapshot brutes stockées, regroupées par type d'enregistrement. Contrairement à /dns/history (qui fusionne et pagine), cela renvoie séparément les tableaux de snapshots sous-jacents dmarc et spf.
Paramètres de requête
record_type:
FACULTATIFstring
Limiter à dmarc ou spf (par défaut : les deux).
start_date:
FACULTATIFstring · date
Début inclusif de la fenêtre (YYYY-MM-DD). Par défaut : il y a 30 jours.
end_date:
FACULTATIFstring · date
Fin de la fenêtre inclusive (YYYY-MM-DD). Par défaut : aujourd'hui.
limit:
FACULTATIFinteger
Nombre maximum de lignes à renvoyer (1–100, valeur par défaut : 10).
Retours
Un tableau dmarc et un tableau spf de lignes d'instantané (id, record_value, occurred_at ; SPF ajoute lookup_count).
Read-only account API audit logs — every mutating API request (POST/PUT/PATCH/DELETE) plus sensitive reads are recorded with method, path, status, IP, token, and timestamp. Scoped to the token owner's account and require the account:read scope.
The audit log object
Chaque endpoint de cette section renvoie des lignes de cette forme. action est un libellé stable et lisible par des humains pour l'opération ; request_id correspond au request_id renvoyé dans l'enveloppe de réponse de l'appel original.
Journaux d'audit paginés pour le compte, du plus récent au plus ancien. Combinez les filtres pour affiner le flux — par ex., toutes les opérations d'écriture ayant échoué dans une plage de dates.
Paramètres de requête
method:
FACULTATIFstring
Méthode HTTP, par ex. POST.
action:
FACULTATIFstring
Libellé d'action exact, par exemple : domain.hosted_spf.update.
path:
FACULTATIFstring
Correspondance de sous-chaîne dans le chemin de la requête.
status_code:
FACULTATIFinteger
Code d'état HTTP exact, p. ex. 200.
status_class:
FACULTATIFstring
Famille de codes d'état : 2xx, 3xx, 4xx, 5xx.
ip_address:
FACULTATIFstring
Adresse IP exacte du client
token_id:
FACULTATIFinteger
Filtrer sur un seul jeton d'API.
q:
FACULTATIFstring
Recherche en texte libre sur l'action, le chemin et l'adresse IP.
start_date:
FACULTATIFstring · date
Début de la fenêtre inclusif (YYYY-MM-DD).
end_date:
FACULTATIFstring · date
Date de fin incluse (YYYY-MM-DD).
page:
FACULTATIFinteger
Numéro de page (par défaut : 1).
limit:
FACULTATIFinteger
Éléments par page (1–100, par défaut 25).
Retours
Un tableau paginé de objets du journal d'audit et un objet pagination.
Recherchez les journaux d'audit via un corps JSON en utilisant les mêmes filtres que l'endpoint de liste. Préférez cette méthode à la liste par query-string lorsque vous devez passer method en tant que tableau ou construire des requêtes longues et structurées.
Paramètres du corps (JSON)
q:
FACULTATIFstring
Recherche en texte libre sur l'action, le chemin et l'adresse IP.
method:
FACULTATIFstring | array
Une seule méthode ou un tableau, par exemple ["POST","PATCH","DELETE"].
action:
FACULTATIFstring
Libellé exact de l'action.
path:
FACULTATIFstring
Correspondance de sous-chaîne dans le chemin de la requête.