🔐 Authentification
Toutes les requêtes vers l'API d'ancrage (sauf les endpoints publics) nécessitent une clé API dans le header X-API-Key.
X-API-Key: votre-clé-api-ici
Endpoints publics (sans authentification) :
GET /health- Vérification de santé (API d'ancrage)GET /health/detailed- Vérification de santé détaillée avec état mutex et UTXOsGET /api/anchor/locked-utxos- Liste des UTXO verrouillésGET /health- Vérification de santé (API faucet)
Endpoints nécessitant une clé API :
POST /api/anchor/document- Ancrer un documentPOST /api/anchor/verify- Vérifier un hashPOST /api/faucet/request- Demander des satsPOST /api/watermark/document- Ajouter un filigrane et ancrer un document
⚠️ Important : Conservez votre clé API secrète et ne la partagez jamais publiquement.
Vérifie l'état de santé de l'API. Cet endpoint est public et ne nécessite pas d'authentification.
Réponse (200 OK)
{
"ok": true,
"service": "anchor-api",
"bitcoin": {
"connected": true,
"blocks": 12345
},
"timestamp": "2026-01-25T12:00:00.000Z"
}
Réponse (503 Service Unavailable) - Bitcoin non connecté
{
"ok": false,
"service": "anchor-api",
"error": "Bitcoin RPC connection failed",
"timestamp": "2026-01-25T12:00:00.000Z"
}
Vérifie l'état détaillé de l'API, incluant l'état du mutex, des UTXOs verrouillés et de la connexion Bitcoin. Cet endpoint est public et ne nécessite pas d'authentification.
Réponse (200 OK) - Tout fonctionne
{
"ok": true,
"service": "anchor-api",
"mutex": {
"locked": false,
"waiting": 0,
"timeout": 180000
},
"utxos": {
"locked": 0,
"locked_since": null,
"stale_locks": 0,
"stale_locks_details": []
},
"bitcoin": {
"connected": true,
"blocks": 12345,
"chain": "signet",
"rpc_timeout": 60000
},
"timestamp": "2026-01-25T12:00:00.000Z"
}
Réponse (200 OK) - Warning (UTXOs verrouillés mais < 10 min)
{
"ok": true,
"service": "anchor-api",
"mutex": {
"locked": false,
"waiting": 0,
"timeout": 180000
},
"utxos": {
"locked": 3,
"locked_since": "2026-01-25T11:55:00.000Z",
"stale_locks": 0,
"stale_locks_details": []
},
"bitcoin": {
"connected": true,
"blocks": 12345,
"chain": "signet",
"rpc_timeout": 60000
},
"timestamp": "2026-01-25T12:00:00.000Z"
}
Réponse (503 Service Unavailable) - UTXOs verrouillés depuis > 10 min
{
"ok": false,
"service": "anchor-api",
"mutex": {
"locked": false,
"waiting": 0,
"timeout": 180000
},
"utxos": {
"locked": 5,
"locked_since": "2026-01-25T11:45:00.000Z",
"stale_locks": 5,
"stale_locks_details": [
{
"txid": "abc123...",
"vout": 0,
"minutes_locked": 15.5
}
]
},
"bitcoin": {
"connected": true,
"blocks": 12345,
"chain": "signet",
"rpc_timeout": 60000
},
"timestamp": "2026-01-25T12:00:00.000Z"
}
Codes de statut :
200- Tout fonctionne correctement200- Warning si 5-10 UTXOs verrouillés (mais < 10 min)503- Service Unavailable si UTXOs verrouillés depuis > 10 min ou > 10 UTXOs verrouillés503- Service Unavailable si Bitcoin non connecté
Ancre un document sur la blockchain Bitcoin Signet en créant une transaction qui inclut le hash du document dans un OP_RETURN.
Paramètres (Body JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| hash | string | Oui | Hash SHA256 du document en hexadécimal (64 caractères) |
| documentUid | string | Non | Identifiant optionnel du document (pour le logging) |
| skipIfExists | boolean | Non | Si true, ne réancrera pas un hash déjà ancré ; retourne les infos existantes en base avec old: true. Défaut false. |
Exemple de requête
curl -X POST https://certificator.4nkweb.com/api/anchor/document \
-H "Content-Type: application/json" \
-H "X-API-Key: votre-clé-api" \
-d '{
"hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"documentUid": "doc-12345",
"skipIfExists": true
}'
Réponse (200 OK) – nouvelle transaction
{
"ok": true,
"txid": "abc123def456...",
"status": "pending",
"confirmations": 0,
"block_height": null,
"outputs": [...],
"fee": 0.000012,
"fee_sats": 1200,
"old": false
}
Réponse (200 OK) – hash déjà ancré (skipIfExists: true)
{
"ok": true,
"txid": "abc123def456...",
"status": "confirmed",
"confirmations": 42,
"block_height": 12345,
"old": true
}
Aucune transaction n'est créée ; les données viennent de la base. old: true indique un ancrage préexistant.
Codes de statut possibles
- 200 Succès – transaction créée et envoyée au mempool (
old: false), ou hash déjà ancré avecskipIfExists: true(old: true) - 400 Requête invalide - Hash manquant ou format incorrect
- 401 Non autorisé - Clé API manquante ou invalide
- 402 Solde insuffisant - Pas assez de fonds pour créer la transaction
- 503 Service indisponible - Erreur "too-long-mempool-chain" (trop d'ancêtres non confirmés)
- 500 Erreur serveur - Erreur interne lors de la création de la transaction
Exemple d'erreur (402 Payment Required)
{
"error": "Insufficient Balance",
"message": "Insufficient balance to create anchor transaction"
}
Exemple d'erreur (503 Service Unavailable) - Too Long Mempool Chain
{
"error": "Service Unavailable",
"message": "too-long-mempool-chain, too many unconfirmed ancestors [limit: 25]"
}
Cette erreur se produit lorsque l'API tente d'utiliser un UTXO non confirmé qui a trop d'ancêtres non confirmés dans le mempool. Bitcoin Core limite la chaîne d'ancêtres à 25 transactions pour éviter les attaques par spam.
Solution : L'API utilise maintenant uniquement des UTXOs confirmés (au moins 1 confirmation) pour éviter cette erreur. Attendez qu'un bloc soit miné pour que les UTXOs soient confirmés.
ℹ️ skipIfExists
- Avec
skipIfExists: true, l'API consulte la base ; si le hash existe déjà, elle retourneold: trueet les infos (txid, block_height, confirmations, etc.) sans créer de transaction. - Utile pour éviter les réancrages en double (retries, idempotence). Par défaut
false: comportement inchangé.
ℹ️ Gestion des UTXOs
- L'API utilise uniquement des UTXOs confirmés (au moins 1 confirmation) pour éviter les erreurs "too-long-mempool-chain"
- Les UTXOs non confirmés sont automatiquement exclus de la sélection
- Chaque transaction d'ancrage provisionne automatiquement 7 UTXOs de 2500 sats pour les ancrages futurs
- Les UTXOs provisionnés deviendront utilisables après confirmation dans un bloc
Vérifie si un hash est ancré sur la blockchain Bitcoin Signet. Recherche dans les transactions OP_RETURN pour trouver le hash.
Paramètres (Body JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| hash | string | Oui | Hash SHA256 à vérifier (64 caractères hex) |
| txid | string | Non | ID de transaction optionnel pour accélérer la recherche |
Exemple de requête
curl -X POST https://certificator.4nkweb.com/api/anchor/verify \
-H "Content-Type: application/json" \
-H "X-API-Key: votre-clé-api" \
-d '{
"hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"txid": "abc123def456..."
}'
Réponse (200 OK) - Hash trouvé
{
"found": true,
"txid": "abc123def456...",
"block_height": 12345,
"confirmations": 100,
"timestamp": "2026-01-25T10:00:00.000Z"
}
Réponse (200 OK) - Hash non trouvé
{
"found": false,
"txid": null,
"block_height": null,
"confirmations": null,
"timestamp": null
}
Codes de statut possibles
- 200 Succès - Vérification effectuée
- 400 Requête invalide - Hash manquant ou format incorrect
- 401 Non autorisé - Clé API manquante ou invalide
- 500 Erreur serveur - Erreur interne lors de la vérification
Retourne la liste des UTXO actuellement verrouillés par le mutex de l'API. Cet endpoint est public et ne nécessite pas d'authentification.
Exemple de requête
curl -X GET https://certificator.4nkweb.com/api/anchor/locked-utxos
Réponse (200 OK)
{
"locked": [
{
"txid": "abc123def456...",
"vout": 0
},
{
"txid": "def456abc123...",
"vout": 1
}
],
"count": 2
}
Demande des sats (testnet coins) via le faucet. Distribue 50 000 sats (0.0005 BTC) par défaut sur une adresse Bitcoin Signet valide. Nécessite une clé API valide dans le header x-api-key.
Paramètres (Body JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| address | string | Oui | Adresse Bitcoin Signet valide (commence par tb1, bcrt1, 2 ou 3) |
Exemple de requête
curl -X POST https://certificator.4nkweb.com/api/faucet/request \
-H "Content-Type: application/json" \
-H "x-api-key: votre-clé-api" \
-d '{
"address": "tb1qwe0nv3s0ewedd63w20r8kwnv22uw8dp2tnj3qc"
}'
Réponse (200 OK)
{
"success": true,
"txid": "a1b2c3d4e5f6789012345678901234567890123456789012345678901234567890",
"address": "tb1qwe0nv3s0ewedd63w20r8kwnv22uw8dp2tnj3qc",
"amount": 0.0005,
"amount_sats": 50000,
"status": "pending",
"confirmations": 0,
"block_height": null
}
Codes de statut possibles
- 200 Succès - Transaction créée et envoyée au mempool
- 400 Requête invalide - Adresse manquante ou format incorrect
- 401 Non autorisé - Clé API manquante ou invalide
- 503 Service indisponible - Solde insuffisant dans le wallet du faucet
- 500 Erreur serveur - Erreur interne lors de la création de la transaction
Exemple d'erreur (401 Unauthorized)
{
"error": "Unauthorized",
"message": "Invalid or missing API key"
}
Exemple d'erreur (503 Service Unavailable)
{
"error": "Insufficient Balance",
"message": "Insufficient balance to send coins"
}
ℹ️ Notes importantes
- Le montant par défaut est de 50 000 sats (0.0005 BTC)
- L'adresse doit être une adresse Bitcoin Signet valide
- La transaction est envoyée au mempool immédiatement
- Le statut "pending" signifie que la transaction est dans le mempool mais pas encore confirmée
- Les confirmations augmentent à mesure que les blocs sont minés
Ajoute un filigrane à un document, le convertit en PDF, et l'ancre sur la blockchain Bitcoin Signet. Les fichiers sont automatiquement scannés avec ClamAV avant traitement.
Paramètres (Body JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| apiKey | string | Oui | Clé API pour l'authentification (peut aussi être dans le header X-API-Key) |
| fileData | string | Conditionnel | Fichier encodé en base64 (requis si textContent n'est pas fourni) |
| fileName | string | Non | Nom du fichier (requis si fileData est fourni) |
| mimeType | string | Non | Type MIME du fichier (requis si fileData est fourni) |
| textContent | string | Conditionnel | Contenu texte à convertir en PDF (requis si fileData n'est pas fourni) |
| watermarkOptions | object | Oui | Options de filigrane (voir détails ci-dessous) |
Structure de watermarkOptions
| Paramètre | Type | Description |
|---|---|---|
| enabled | boolean | Doit être true |
| text | string | Texte libre du filigrane (optionnel) |
| signature | string | Signature cryptographique (optionnel) |
| depositor | string | Nom du dépositaire (optionnel) |
| dateUTC | boolean | Ajouter la date UTC dans le filigrane |
| dateLocal | boolean | Ajouter la date locale dans le filigrane |
| blockNumber | boolean | Ajouter le numéro de bloc dans le filigrane |
| blockHash | boolean | Ajouter le hash du bloc dans le filigrane |
| documentHash | boolean | Ajouter le hash du document d'origine dans le filigrane |
Exemple de requête
curl -X POST https://watermark.certificator.4nkweb.com/api/watermark/document \
-H "Content-Type: application/json" \
-H "X-API-Key: votre-clé-api" \
-d '{
"apiKey": "votre-clé-api",
"fileData": "base64_encoded_file_data",
"fileName": "document.pdf",
"mimeType": "application/pdf",
"watermarkOptions": {
"enabled": true,
"text": "Document confidentiel",
"depositor": "John Doe",
"dateUTC": true,
"dateLocal": true,
"blockNumber": true,
"documentHash": true
}
}'
Réponse (200 OK)
{
"success": true,
"antivirusScan": {
"scanned": true,
"clean": true,
"infected": false,
"viruses": [],
"error": null
},
"original": {
"txid": "abc123def456...",
"status": "pending",
"confirmations": 0,
"hash": "a1b2c3d4e5f6...",
"file": {
"name": "document.pdf",
"extension": "pdf",
"data": "base64_encoded_pdf"
}
},
"watermarked": {
"txid": "def456abc123...",
"status": "pending",
"confirmations": 0,
"hash": "b2c3d4e5f6a1...",
"file": {
"name": "document.pdf",
"extension": "pdf",
"data": "base64_encoded_pdf"
}
},
"certificate": {
"name": "certificat-document.pdf",
"extension": "pdf",
"data": "base64_encoded_pdf"
},
"merged": {
"name": "document-avec-certificat.pdf",
"extension": "pdf",
"data": "base64_encoded_pdf"
}
}
Codes de statut possibles
- 200 Succès - Document filigrané et ancré
- 400 Requête invalide - Fichier infecté, paramètres manquants ou incorrects
- 401 Non autorisé - Clé API manquante ou invalide
- 500 Erreur serveur - Erreur interne lors du traitement
Exemple d'erreur (400 Bad Request) - Fichier infecté
{
"error": "Bad Request",
"message": "File contains viruses",
"viruses": ["Trojan.Example"],
"antivirusScan": {
"scanned": true,
"clean": false,
"infected": true,
"viruses": ["Trojan.Example"],
"error": null
}
}
ℹ️ Notes importantes
- Tous les fichiers sont automatiquement scannés avec ClamAV avant traitement
- Les fichiers infectés sont rejetés avec une erreur 400
- Si ClamAV est indisponible, le traitement continue en mode dégradé (antivirusScan.scanned = false)
- Le résultat inclut 4 fichiers PDF : original, filigrané, certificat, et fusionné (filigrané + certificat)
- Les fichiers sont retournés en base64 dans le champ
data - Les TXID sont des liens cliquables vers mempool.4nkweb.com dans les résultats
Scanne un buffer de données (base64) pour détecter les virus avec ClamAV. Cette API est utilisée en interne par l'API filigrane.
Base URL : https://antivir.certificator.4nkweb.com
Paramètres (Body JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| data | string | Oui | Données encodées en base64 à scanner |
| filename | string | Non | Nom du fichier (pour le logging) |
Exemple de requête
curl -X POST https://antivir.certificator.4nkweb.com/api/scan/buffer \
-H "Content-Type: application/json" \
-d '{
"data": "base64_encoded_data",
"filename": "document.pdf"
}'
Réponse (200 OK) - Fichier propre
{
"clean": true,
"infected": false,
"viruses": [],
"filename": "document.pdf",
"size": 12345
}
Réponse (200 OK) - Fichier infecté
{
"clean": false,
"infected": true,
"viruses": ["Trojan.Example"],
"filename": "document.pdf",
"size": 12345
}
Codes de statut possibles
- 200 Succès - Scan effectué (fichier propre ou infecté)
- 400 Requête invalide - Données manquantes ou format incorrect
- 503 Service indisponible - ClamAV non disponible
- 500 Erreur serveur - Erreur interne lors du scan
ℹ️ Notes importantes
- Cette API est principalement utilisée en interne par l'API filigrane
- Le port fixe est 3023
- Si ClamAV est indisponible, l'API retourne une erreur 503
- Les fichiers sont scannés en mémoire (pas de fichiers temporaires sur disque)
📊 API Dashboard (signet-dashboard)
Les endpoints ci-dessous sont servis par le Dashboard (https://dashboard.certificator.4nkweb.com, port 3020). Données issues de la base SQLite et du RPC Bitcoin. Pas d’authentification requise.
Retourne uniquement les compteurs UTXO (ancrages, disponibles pour ancrage, confirmés). Optimisé pour éviter de charger la liste complète.
Base URL : https://dashboard.certificator.4nkweb.com
Exemple de requête
curl -X GET https://dashboard.certificator.4nkweb.com/api/utxo/count
Réponse (200 OK)
{
"availableForAnchor": 180,
"confirmedAvailableForAnchor": 175,
"anchors": 150
}
ℹ️ Notes
anchors: UTXOs catégorie ancrages (≥ 2000 sats, confirmés, non dépensés, non verrouillés)confirmedAvailableForAnchor: commeavailableForAnchormais avec ≥ 6 confirmations
Liste des UTXOs du wallet par catégorie, avec pagination côté serveur. Données en base SQLite.
Base URL : https://dashboard.certificator.4nkweb.com
Paramètres (query)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| category | string | Non | all (défaut) | bloc_rewards | ancrages | changes | fees. anchor / change acceptés. |
| page | number | Non | Numéro de page (défaut 1). Ignoré si category=all. |
| limit | number | Non | Éléments par page (défaut 50, max 1000). Ignoré si category=all. |
Exemple (counts seulement, category=all)
curl -X GET "https://dashboard.certificator.4nkweb.com/api/utxo/list"
Réponse (200 OK) – category=all
{
"blocRewards": [],
"anchors": [],
"changes": [],
"fees": [],
"counts": {
"blocRewards": 10,
"anchors": 150,
"changes": 25,
"fees": 5,
"total": 190,
"availableForAnchor": 180,
"confirmedAvailableForAnchor": 175
},
"page": 1,
"limit": 0,
"totalPages": 0,
"message": "Use ?category=bloc_rewards|ancrages|changes|fees&page=X&limit=Y to get paginated data"
}
Exemple (données paginées)
curl -X GET "https://dashboard.certificator.4nkweb.com/api/utxo/list?category=ancrages&page=1&limit=50"
Réponse (200 OK) – category=ancrages (ex.)
{
"blocRewards": [],
"anchors": [{"txid":"...","vout":0,"address":"...","amount":0.000025,"confirmations":12,"category":"ancrages","isSpentOnchain":false,"isLockedInMutex":false,"blockHeight":null,"blockTime":1234567890,"isAnchorChange":false}],
"changes": [],
"fees": [],
"counts": {...},
"pagination": {
"category": "ancrages",
"page": 1,
"limit": 50,
"total": 150,
"totalPages": 3
}
}
ℹ️ Notes
category=fees: objetstxid,fee,fee_sats,blockHeight,blockTime,confirmations,changeAddress,changeAmount.availableForAnchor/confirmedAvailableForAnchor: mêmes définitions que/api/utxo/count.- Tri : bloc_rewards/ancrages par montant décroissant ; changes par
is_anchor_changepuis montant ; fees parblock_heightdécroissant.
Obtient les informations sur les UTXOs de moins de 2500 sats disponibles pour consolidation (nombre et montant total).
Base URL : https://dashboard.certificator.4nkweb.com
Exemple de requête
curl -X GET https://dashboard.certificator.4nkweb.com/api/utxo/small-info
Réponse (200 OK)
{
"count": 45,
"totalAmount": 0.0001125,
"totalSats": 11250
}
ℹ️ Notes importantes
- Seuls les UTXOs confirmés (< 2500 sats, non dépensés, non verrouillés) sont comptés
count: Nombre d'UTXOs disponibles pour consolidationtotalAmount: Montant total en BTCtotalSats: Montant total en satoshis
Consolide tous les UTXOs de moins de 2500 sats en un seul gros UTXO. Cette opération optimise le wallet en réduisant le nombre de petits UTXOs.
Base URL : https://dashboard.certificator.4nkweb.com
Exemple de requête
curl -X POST https://dashboard.certificator.4nkweb.com/api/utxo/consolidate
Réponse (200 OK) - Succès
{
"success": true,
"txid": "a1b2c3d4e5f6...",
"inputCount": 45,
"totalInputAmount": 0.0001125,
"changeAmount": 0.0001025,
"estimatedFee": 0.00001
}
Réponse (500) - Erreur
{
"success": false,
"error": "No small UTXOs available for consolidation"
}
Codes de statut possibles
- 200 Succès - Consolidation effectuée
- 500 Erreur - Aucun UTXO disponible ou erreur lors de la consolidation
ℹ️ Notes importantes
- Seuls les UTXOs confirmés de moins de 2500 sats sont consolidés
- Les UTXOs verrouillés ou déjà dépensés sont exclus
- La transaction est envoyée au mempool immédiatement
- Le montant consolidé est retourné comme change (moins les frais estimés)
- Cette opération optimise le wallet en réduisant le nombre de petits UTXOs
Liste des frais issus des transactions d'ancrage (métadonnées OP_RETURN). Données fournies par le RPC / cache.
Base URL : https://dashboard.certificator.4nkweb.com
Réponse (200 OK)
{
"fees": [
{"txid":"...","fee":0.000012,"fee_sats":1200,"blockHeight":12345,"blockTime":1234567890,"confirmations":10,"changeAddress":"...","changeAmount":0.00002}
],
"count": 1
}
Récupère les frais depuis les transactions d'ancrage (OP_RETURN) et les enregistre. Optionnel : limite au bloc donné.
Base URL : https://dashboard.certificator.4nkweb.com
Paramètres (Body JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| sinceBlockHeight | number | Non | Ne traiter que les ancrages depuis ce bloc (inclus). Si absent, tous. |
Réponse (200 OK)
{
"success": true,
"newFees": 5,
"totalFees": 120,
"processed": 50
}
Réponse (500)
{
"success": false,
"error": "Error message"
}
Liste des hash ancrés, paginée (base SQLite).
Base URL : https://dashboard.certificator.4nkweb.com
Paramètres (query)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| page | number | Non | Numéro de page (défaut 1). |
| limit | number | Non | Éléments par page (défaut 50, max 1000). |
Exemple
curl -X GET "https://dashboard.certificator.4nkweb.com/api/hash/list?page=1&limit=50"
Réponse (200 OK)
{
"hashes": [
{"hash":"a1b2...","txid":"...","blockHeight":12345,"confirmations":10,"date":"2026-01-28T12:00:00.000Z"}
],
"count": 50,
"total": 32000,
"page": 1,
"limit": 50,
"totalPages": 640
}
Calcule le hash SHA256 d'un texte ou d'un fichier (base64). Un seul des deux doit être fourni.
Base URL : https://dashboard.certificator.4nkweb.com
Paramètres (Body JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| text | string | Conditionnel | Texte UTF-8 à hasher. Exclure si fileContent fourni. |
| fileContent | string | Conditionnel | Contenu fichier (base64 ou UTF-8). Exclure si text fourni. |
| isBase64 | boolean | Non | Si true, fileContent est décodé en base64 avant hash. Sinon traité en UTF-8. |
Réponse (200 OK)
{
"hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"
}
Codes de statut
- 200 Succès
- 400
textetfileContentabsents ou tous deux fournis ; format invalide. - 500 Erreur serveur
Difficulté de minage courante (RPC getblockchaininfo).
Base URL : https://dashboard.certificator.4nkweb.com
Réponse (200 OK)
{
"difficulty": 0.0002441371325370144
}
État du miner : inféré depuis l’âge du dernier bloc. active si le dernier bloc a moins de 30 minutes, sinon inactive.
Base URL : https://dashboard.certificator.4nkweb.com
Réponse (200 OK)
{
"status": "active",
"blocks": 11535,
"lastBlockTime": 1769730315,
"lastBlockAgeSeconds": 120,
"message": "Dernier bloc récent, miner probablement actif"
}
Temps moyen entre blocs (source : Mempool /api/v1/difficulty-adjustment).
Base URL : https://dashboard.certificator.4nkweb.com
Réponse (200 OK)
{
"timeAvg": 600000,
"timeAvgSeconds": 600,
"formatted": "10m"
}
Frais moyen (sats) et montant moyen (sats) pour les ancrages. Valeurs fixes (1200 sats / 1000 sats) pour ce contexte.
Base URL : https://dashboard.certificator.4nkweb.com
Réponse avg-fee (200 OK)
{
"avgFee": 1200,
"avgFeeRate": 0,
"txCount": 0
}
Réponse avg-amount (200 OK)
{
"avgAmount": 1000,
"txCount": 0
}
Exemple de transaction d'ancrage (la plus récente de la liste des hash) : txid, bloc, confirmations, entrées/sorties. Pour la page Learn.
Base URL : https://dashboard.certificator.4nkweb.com
Réponse (200 OK)
{
"txid": "...",
"blockHeight": 12345,
"confirmations": 10,
"hash": "a1b2...",
"inputs": [{"txid":"...","vout":0,"value":0.001}],
"outputs": [{"address":"...","value":0.000025,"type":"nulldata","isOpReturn":true}]
}
Réponse (404)
{
"error": "No anchor transactions found"
}
ℹ️ Informations Complémentaires
Format du Hash
Le hash doit être un hash SHA256 en format hexadécimal, exactement 64 caractères.
Exemple valide: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456 Longueur: 64 caractères Format: hexadécimal (0-9, a-f, A-F)
Format de la Transaction
Les transactions d'ancrage incluent :
- Un output OP_RETURN contenant "ANCHOR:" suivi du hash
- Un output d'ancrage de 2500 sats
- 7 outputs de provisionnement de 2500 sats chacun
- Un output de change (si nécessaire)
Base URLs
Les APIs sont accessibles aux adresses suivantes :
Dashboard : https://dashboard.certificator.4nkweb.com (port 3020) API d'Ancrage : https://anchorage.certificator.4nkweb.com (port 3010, machine bitcoin 192.168.1.105) API Faucet : https://faucet.certificator.4nkweb.com (port 3021) API Filigrane : https://watermark.certificator.4nkweb.com (port 3022) API ClamAV : https://antivir.certificator.4nkweb.com (port 3023)
/health est exposé par l’API d’Ancrage et l’API Faucet, pas par le Dashboard.
Ports fixes
Tous les ports sont fixes et ne peuvent pas être modifiés :
- Dashboard : Port 3020
- API d'Ancrage : Port 3010
- API Faucet : Port 3021
- API Filigrane : Port 3022
- API ClamAV : Port 3023
⚠️ Notes importantes
- Les transactions sont envoyées au mempool immédiatement
- Le statut "pending" signifie que la transaction est dans le mempool mais pas encore confirmée
- Les confirmations augmentent à mesure que les blocs sont minés
- En cas d'erreur 402 (Solde insuffisant), vous devez approvisionner le wallet de l'API