Réseaux privés
Vos réseaux privés entre VPS d’une même région : réseau, VPS reliés et routes statiques.
Lister les réseaux privés
/v1/network/private-networksPermission : network:read
Paramètres de requête
| Champ | Type | Description |
|---|---|---|
region | texte | |
limit | entier | Nombre d’éléments par page (1 à 100) Par défaut : 20. De 1 à 100. |
cursor | texte | Curseur renvoyé par la page précédente (`next_cursor`) |
Réponse 200
| Champ | Type | Description |
|---|---|---|
data | liste de objet | |
data[].id | texte | Exemple : "pn-4f2a9c1e". |
data[].name | texte | Exemple : "production". |
data[].region | texte ou null | Exemple : "fr-lys-1". |
data[].cidr | texte | Exemple : "10.20.1.0/24". |
data[].mtu | entier | Exemple : 1450. |
data[].default_config_mode | texte | Valeurs : auto, reboot, manual. |
data[].members_count | entier | Exemple : 3. |
data[].status | texte | Valeurs : active, provisioning, suspended, error, deleting. |
data[].billing | objet | |
data[].billing.billing_cycle | texte | Valeurs : monthly, quarterly, semiannually, annually, biennially, triennially, one_time. |
data[].billing.price | objet | |
data[].billing.next_due_date | texte ou null | |
data[].billing.renewal | texte | Réglé par la carte par défaut, ou à chaque facture. Valeurs : automatic, invoice. |
data[].created_at | texte | Date de création. |
has_more | booléen | |
next_cursor | texte ou null |
Erreurs
invalid_cursorCurseur invalide- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl "https://api.corcelink.fr/v1/network/private-networks" \
-H "Authorization: Bearer $CORCELINK_API_KEY"
import os, uuid, requests
r = requests.get(
"https://api.corcelink.fr/v1/network/private-networks",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}` },
});
console.log(res.status, await res.json());
Réponse 200
{
"data": [
{
"id": "pn-721ac835",
"name": "production",
"region": "fr-lys-1",
"cidr": "10.20.1.0/24",
"mtu": 1450,
"default_config_mode": "auto",
"members_count": 1,
"status": "active",
"billing": {
"billing_cycle": "monthly",
"price": {
"amount": 400,
"currency": "EUR"
},
"next_due_date": "2026-11-08",
"renewal": "invoice"
},
"created_at": "2026-10-08T10:12:00Z"
}
],
"has_more": false,
"next_cursor": null
}
Essayer avec votre clé
Votre clé reste dans ce navigateur et n’est envoyée qu’à api.corcelink.fr.
Lire un réseau privé
/v1/network/private-networks/{network_id}Permission : network:read
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
Réponse 200
| Champ | Type | Description |
|---|---|---|
id | texte | Exemple : "pn-4f2a9c1e". |
name | texte | Exemple : "production". |
region | texte ou null | Exemple : "fr-lys-1". |
cidr | texte | Exemple : "10.20.1.0/24". |
mtu | entier | Exemple : 1450. |
default_config_mode | texte | Valeurs : auto, reboot, manual. |
members_count | entier | Exemple : 3. |
status | texte | Valeurs : active, provisioning, suspended, error, deleting. |
billing | objet | |
billing.billing_cycle | texte | Valeurs : monthly, quarterly, semiannually, annually, biennially, triennially, one_time. |
billing.price | objet | |
billing.price.amount | entier | Montant en centimes. Exemple : 790. |
billing.price.currency | texte | Devise ISO 4217. Exemple : "EUR". |
billing.next_due_date | texte ou null | |
billing.renewal | texte | Réglé par la carte par défaut, ou à chaque facture. Valeurs : automatic, invoice. |
created_at | texte | Date de création. |
Erreurs
not_foundRessource introuvable- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e" \
-H "Authorization: Bearer $CORCELINK_API_KEY"
import os, uuid, requests
r = requests.get(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}` },
});
console.log(res.status, await res.json());
Réponse 200
{
"id": "pn-721ac835",
"name": "production",
"region": "fr-lys-1",
"cidr": "10.20.1.0/24",
"mtu": 1450,
"default_config_mode": "auto",
"members_count": 1,
"status": "active",
"billing": {
"billing_cycle": "monthly",
"price": {
"amount": 400,
"currency": "EUR"
},
"next_due_date": "2026-11-08",
"renewal": "invoice"
},
"created_at": "2026-10-08T10:12:00Z"
}
Essayer avec votre clé
Votre clé reste dans ce navigateur et n’est envoyée qu’à api.corcelink.fr.
Modifier un réseau privé
/v1/network/private-networks/{network_id}Permission : network:write
Nom et mode de configuration par défaut.
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
If-Match | texte | `ETag` reçu à la lecture : la modification est refusée (412) si la ressource a changé entre-temps. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
name | texte | 40 caractères au plus. |
default_config_mode | texte | Valeurs : auto, reboot, manual. |
Réponse 200
| Champ | Type | Description |
|---|---|---|
id | texte | Exemple : "pn-4f2a9c1e". |
name | texte | Exemple : "production". |
region | texte ou null | Exemple : "fr-lys-1". |
cidr | texte | Exemple : "10.20.1.0/24". |
mtu | entier | Exemple : 1450. |
default_config_mode | texte | Valeurs : auto, reboot, manual. |
members_count | entier | Exemple : 3. |
status | texte | Valeurs : active, provisioning, suspended, error, deleting. |
billing | objet | |
billing.billing_cycle | texte | Valeurs : monthly, quarterly, semiannually, annually, biennially, triennially, one_time. |
billing.price | objet | |
billing.price.amount | entier | Montant en centimes. Exemple : 790. |
billing.price.currency | texte | Devise ISO 4217. Exemple : "EUR". |
billing.next_due_date | texte ou null | |
billing.renewal | texte | Réglé par la carte par défaut, ou à chaque facture. Valeurs : automatic, invoice. |
created_at | texte | Date de création. |
Erreurs
not_foundRessource introuvablevalidation_failedDonnées invalidesinvalid_stateAction impossible dans l’état actuelprecondition_failedLa ressource a changéresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X PATCH "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
import os, uuid, requests
r = requests.patch(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e", {
method: "PATCH",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID() },
});
console.log(res.status, await res.json());
Réponse 200
{
"id": "pn-721ac835",
"name": "Production Lyon",
"region": "fr-lys-1",
"cidr": "10.20.1.0/24",
"mtu": 1450,
"default_config_mode": "reboot",
"members_count": 1,
"status": "active",
"billing": {
"billing_cycle": "monthly",
"price": {
"amount": 400,
"currency": "EUR"
},
"next_due_date": "2026-11-08",
"renewal": "invoice"
},
"created_at": "2026-10-08T10:12:00Z"
}
Lister les VPS reliés
/v1/network/private-networks/{network_id}/membersPermission : network:read
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
Réponse 200
| Champ | Type | Description |
|---|---|---|
data | liste de objet | |
data[].vps_id | texte | Exemple : "vps-7c2e4a91". |
data[].hostname | texte | Exemple : "vps-7c2e4a91.vps.corce.link". |
data[].address | texte | Exemple : "10.20.1.11". |
data[].interface | texte ou null | Exemple : "ens19". |
data[].config_mode | texte | Valeurs : auto, reboot, manual. |
data[].state | texte | connected : raccordé ; manual : raccordé, adresse à configurer dans le système ; pending : raccordement en cours ; removing : retrait en cours. Valeurs : connected, pending, manual, removing, suspended, error. |
data[].secondary_addresses | liste de texte | |
data[].source_dest_check | booléen |
Erreurs
not_foundRessource introuvable- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members" \
-H "Authorization: Bearer $CORCELINK_API_KEY"
import os, uuid, requests
r = requests.get(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}` },
});
console.log(res.status, await res.json());
Réponse 200
{
"data": [
{
"vps_id": "vps-7c2e4a91",
"hostname": "vps-7c2e4a91.vps.corce.link",
"address": "10.20.1.11",
"interface": "net1",
"config_mode": "auto",
"state": "connected",
"secondary_addresses": [],
"source_dest_check": true
}
]
}
Essayer avec votre clé
Votre clé reste dans ce navigateur et n’est envoyée qu’à api.corcelink.fr.
Relier un VPS
/v1/network/private-networks/{network_id}/membersPermission : network:write
Le VPS doit être dans la même région que le réseau.
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
vps_idobligatoire | texte | Exemple : "vps-3b81f0d6". |
address | texte | Adresse voulue ; à défaut, la première libre. |
config_mode | texte | Valeurs : auto, reboot, manual. |
Réponse 202
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant de l’opération. Exemple : "op-01JB7X5R1M". |
type | texte | Nature de l’opération (vps.reboot…). Exemple : "vps.reinstall". |
status | texte | État. Valeurs : pending, running, succeeded, failed. |
resource | objet | Ressource concernée. |
resource.type | texte | Valeurs : vps, private_network, dedicated_server, web_hosting, email, domain, other, backup. |
resource.id | texte | Exemple : "vps-7c2e4a91". |
created_at | texte | Date de création. |
started_at | texte ou null | Date de création. |
completed_at | texte ou null | Date de création. |
error | objet ou null | Erreur au format RFC 9457. |
error.type | texte | Adresse de la page de documentation de l’erreur. Exemple : "https://docs.corcelink.fr/api/erreurs/#vps_not_found". |
error.title | texte | Résumé de l’erreur, dans la langue demandée. Exemple : "VPS introuvable". |
error.status | entier | Code HTTP. Exemple : 404. |
error.code | texte | Code stable, à utiliser dans vos programmes. Exemple : "vps_not_found". |
error.detail | texte | Explication et correction possible. Exemple : "Aucun VPS vps-7c2e4a91 sur ce compte.". |
error.request_id | texte | Identifiant de la requête, à citer au support. Exemple : "req-01JB7X4M2Q9KZ3". |
error.errors | liste de objet | Erreurs de validation, champ par champ. |
error.errors[].field | texte | Exemple : "rules[0].ports". |
error.errors[].code | texte | Exemple : "invalid_port". |
error.errors[].message | texte | Exemple : "Port invalide : utilisez 443, 80,443 ou 8000:8100.". |
result | objet | Résultat propre à certaines opérations ; absent sinon. |
result.password_url | texte | Lien à usage unique vers le nouveau mot de passe root (réinstallation). |
result.password_expires_at | texte | Date de création. |
Erreurs
not_foundRessource introuvablevalidation_failedDonnées invalidesinvalid_stateAction impossible dans l’état actuelresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X POST "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"vps_id": "vps-3b81f0d6"}'
import os, uuid, requests
r = requests.post(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={"vps_id": "vps-3b81f0d6"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID(), "Content-Type": "application/json" },
body: JSON.stringify({"vps_id": "vps-3b81f0d6"}),
});
console.log(res.status, await res.json());
Réponse 202
{
"id": "op-01M5Z52KV05KVQHC",
"type": "private_network.member_add",
"status": "running",
"resource": {
"type": "private_network",
"id": "pn-721ac835"
},
"created_at": "2026-10-27T17:03:40Z",
"started_at": "2026-10-27T17:03:40Z",
"completed_at": null,
"error": null
}
Modifier un VPS relié
/v1/network/private-networks/{network_id}/members/{member_vps_id}Permission : network:write
Adresse, mode de configuration, adresses secondaires et contrôle source/destination.
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
member_vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-3b81f0d6". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
address | texte | |
config_mode | texte | Valeurs : auto, reboot, manual. |
secondary_addresses | liste de texte | |
source_dest_check | booléen |
Réponse 202
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant de l’opération. Exemple : "op-01JB7X5R1M". |
type | texte | Nature de l’opération (vps.reboot…). Exemple : "vps.reinstall". |
status | texte | État. Valeurs : pending, running, succeeded, failed. |
resource | objet | Ressource concernée. |
resource.type | texte | Valeurs : vps, private_network, dedicated_server, web_hosting, email, domain, other, backup. |
resource.id | texte | Exemple : "vps-7c2e4a91". |
created_at | texte | Date de création. |
started_at | texte ou null | Date de création. |
completed_at | texte ou null | Date de création. |
error | objet ou null | Erreur au format RFC 9457. |
error.type | texte | Adresse de la page de documentation de l’erreur. Exemple : "https://docs.corcelink.fr/api/erreurs/#vps_not_found". |
error.title | texte | Résumé de l’erreur, dans la langue demandée. Exemple : "VPS introuvable". |
error.status | entier | Code HTTP. Exemple : 404. |
error.code | texte | Code stable, à utiliser dans vos programmes. Exemple : "vps_not_found". |
error.detail | texte | Explication et correction possible. Exemple : "Aucun VPS vps-7c2e4a91 sur ce compte.". |
error.request_id | texte | Identifiant de la requête, à citer au support. Exemple : "req-01JB7X4M2Q9KZ3". |
error.errors | liste de objet | Erreurs de validation, champ par champ. |
error.errors[].field | texte | Exemple : "rules[0].ports". |
error.errors[].code | texte | Exemple : "invalid_port". |
error.errors[].message | texte | Exemple : "Port invalide : utilisez 443, 80,443 ou 8000:8100.". |
result | objet | Résultat propre à certaines opérations ; absent sinon. |
result.password_url | texte | Lien à usage unique vers le nouveau mot de passe root (réinstallation). |
result.password_expires_at | texte | Date de création. |
Erreurs
not_foundRessource introuvablevalidation_failedDonnées invalidesinvalid_stateAction impossible dans l’état actuelresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X PATCH "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members/vps-3b81f0d6" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
import os, uuid, requests
r = requests.patch(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members/vps-3b81f0d6",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members/vps-3b81f0d6", {
method: "PATCH",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID() },
});
console.log(res.status, await res.json());
Réponse 202
{
"id": "op-01M5Z52KV5V8JACB",
"type": "private_network.member_update",
"status": "running",
"resource": {
"type": "private_network",
"id": "pn-721ac835"
},
"created_at": "2026-10-27T17:03:40Z",
"started_at": "2026-10-27T17:03:40Z",
"completed_at": null,
"error": null
}
Retirer un VPS
/v1/network/private-networks/{network_id}/members/{member_vps_id}Permission : network:write
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
member_vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-3b81f0d6". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
Réponse 202
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant de l’opération. Exemple : "op-01JB7X5R1M". |
type | texte | Nature de l’opération (vps.reboot…). Exemple : "vps.reinstall". |
status | texte | État. Valeurs : pending, running, succeeded, failed. |
resource | objet | Ressource concernée. |
resource.type | texte | Valeurs : vps, private_network, dedicated_server, web_hosting, email, domain, other, backup. |
resource.id | texte | Exemple : "vps-7c2e4a91". |
created_at | texte | Date de création. |
started_at | texte ou null | Date de création. |
completed_at | texte ou null | Date de création. |
error | objet ou null | Erreur au format RFC 9457. |
error.type | texte | Adresse de la page de documentation de l’erreur. Exemple : "https://docs.corcelink.fr/api/erreurs/#vps_not_found". |
error.title | texte | Résumé de l’erreur, dans la langue demandée. Exemple : "VPS introuvable". |
error.status | entier | Code HTTP. Exemple : 404. |
error.code | texte | Code stable, à utiliser dans vos programmes. Exemple : "vps_not_found". |
error.detail | texte | Explication et correction possible. Exemple : "Aucun VPS vps-7c2e4a91 sur ce compte.". |
error.request_id | texte | Identifiant de la requête, à citer au support. Exemple : "req-01JB7X4M2Q9KZ3". |
error.errors | liste de objet | Erreurs de validation, champ par champ. |
error.errors[].field | texte | Exemple : "rules[0].ports". |
error.errors[].code | texte | Exemple : "invalid_port". |
error.errors[].message | texte | Exemple : "Port invalide : utilisez 443, 80,443 ou 8000:8100.". |
result | objet | Résultat propre à certaines opérations ; absent sinon. |
result.password_url | texte | Lien à usage unique vers le nouveau mot de passe root (réinstallation). |
result.password_expires_at | texte | Date de création. |
Erreurs
not_foundRessource introuvableoperation_in_progressOpération déjà en coursinvalid_stateAction impossible dans l’état actuelresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X DELETE "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members/vps-3b81f0d6" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
import os, uuid, requests
r = requests.delete(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members/vps-3b81f0d6",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=30,
)
r.raise_for_status()
print(r.status_code)
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/members/vps-3b81f0d6", {
method: "DELETE",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID() },
});
console.log(res.status, "");
Réponse 202
{
"id": "op-01JB7X5R1M",
"type": "vps.reinstall",
"status": "pending",
"resource": {
"type": "vps",
"id": "vps-7c2e4a91"
},
"created_at": "texte",
"started_at": "texte",
"completed_at": "texte",
"error": {
"type": "https://docs.corcelink.fr/api/erreurs/#vps_not_found",
"title": "VPS introuvable",
"status": 404,
"code": "vps_not_found",
"detail": "Aucun VPS vps-7c2e4a91 sur ce compte.",
"request_id": "req-01JB7X4M2Q9KZ3",
"errors": [
{
"field": "rules[0].ports",
"code": "invalid_port",
"message": "Port invalide : utilisez 443, 80,443 ou 8000:8100."
}
]
},
"result": {
"password_url": "texte",
"password_expires_at": "texte"
}
}
Lister les routes
/v1/network/private-networks/{network_id}/routesPermission : network:read
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
Réponse 200
| Champ | Type | Description |
|---|---|---|
data | liste de objet | |
data[].id | texte | Exemple : "rt-71b2". |
data[].destination | texte | Adresse ou réseau en notation CIDR. Exemple : "10.20.1.0/24". |
data[].next_hop | texte | VPS du réseau qui relaie le trafic. Exemple : "vps-7c2e4a91". |
data[].next_hop_address | texte | Exemple : "10.20.1.11". |
Erreurs
not_foundRessource introuvable- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes" \
-H "Authorization: Bearer $CORCELINK_API_KEY"
import os, uuid, requests
r = requests.get(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}` },
});
console.log(res.status, await res.json());
Réponse 200
{
"data": [
{
"id": "rt-6ab87c",
"destination": "192.168.50.0/24",
"next_hop": "vps-7c2e4a91",
"next_hop_address": "10.20.1.11"
}
]
}
Essayer avec votre clé
Votre clé reste dans ce navigateur et n’est envoyée qu’à api.corcelink.fr.
Ajouter une route
/v1/network/private-networks/{network_id}/routesPermission : network:write
Jusqu’à 20 routes par réseau.
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
destinationobligatoire | texte | Adresse ou réseau en notation CIDR. Exemple : "10.20.1.0/24". |
next_hopobligatoire | texte | Exemple : "vps-7c2e4a91". |
Réponse 202
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant de l’opération. Exemple : "op-01JB7X5R1M". |
type | texte | Nature de l’opération (vps.reboot…). Exemple : "vps.reinstall". |
status | texte | État. Valeurs : pending, running, succeeded, failed. |
resource | objet | Ressource concernée. |
resource.type | texte | Valeurs : vps, private_network, dedicated_server, web_hosting, email, domain, other, backup. |
resource.id | texte | Exemple : "vps-7c2e4a91". |
created_at | texte | Date de création. |
started_at | texte ou null | Date de création. |
completed_at | texte ou null | Date de création. |
error | objet ou null | Erreur au format RFC 9457. |
error.type | texte | Adresse de la page de documentation de l’erreur. Exemple : "https://docs.corcelink.fr/api/erreurs/#vps_not_found". |
error.title | texte | Résumé de l’erreur, dans la langue demandée. Exemple : "VPS introuvable". |
error.status | entier | Code HTTP. Exemple : 404. |
error.code | texte | Code stable, à utiliser dans vos programmes. Exemple : "vps_not_found". |
error.detail | texte | Explication et correction possible. Exemple : "Aucun VPS vps-7c2e4a91 sur ce compte.". |
error.request_id | texte | Identifiant de la requête, à citer au support. Exemple : "req-01JB7X4M2Q9KZ3". |
error.errors | liste de objet | Erreurs de validation, champ par champ. |
error.errors[].field | texte | Exemple : "rules[0].ports". |
error.errors[].code | texte | Exemple : "invalid_port". |
error.errors[].message | texte | Exemple : "Port invalide : utilisez 443, 80,443 ou 8000:8100.". |
result | objet | Résultat propre à certaines opérations ; absent sinon. |
result.password_url | texte | Lien à usage unique vers le nouveau mot de passe root (réinstallation). |
result.password_expires_at | texte | Date de création. |
Erreurs
not_foundRessource introuvablevalidation_failedDonnées invalidesinvalid_stateAction impossible dans l’état actuelresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X POST "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"destination": "10.20.1.0/24", "next_hop": "vps-7c2e4a91"}'
import os, uuid, requests
r = requests.post(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={"destination": "10.20.1.0/24", "next_hop": "vps-7c2e4a91"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID(), "Content-Type": "application/json" },
body: JSON.stringify({"destination": "10.20.1.0/24", "next_hop": "vps-7c2e4a91"}),
});
console.log(res.status, await res.json());
Réponse 202
{
"id": "op-01M5Z52KVBRNAAYG",
"type": "private_network.route_create",
"status": "running",
"resource": {
"type": "private_network",
"id": "pn-721ac835"
},
"created_at": "2026-10-27T17:03:40Z",
"started_at": "2026-10-27T17:03:40Z",
"completed_at": null,
"error": null
}
Supprimer une route
/v1/network/private-networks/{network_id}/routes/{route_id}Permission : network:write
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
network_idobligatoire | texte | Format : ^pn-[0-9a-z]{8}$. Exemple : "pn-4f2a9c1e". |
route_idobligatoire | texte | Exemple : "rt-71b2". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
Réponse 202
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant de l’opération. Exemple : "op-01JB7X5R1M". |
type | texte | Nature de l’opération (vps.reboot…). Exemple : "vps.reinstall". |
status | texte | État. Valeurs : pending, running, succeeded, failed. |
resource | objet | Ressource concernée. |
resource.type | texte | Valeurs : vps, private_network, dedicated_server, web_hosting, email, domain, other, backup. |
resource.id | texte | Exemple : "vps-7c2e4a91". |
created_at | texte | Date de création. |
started_at | texte ou null | Date de création. |
completed_at | texte ou null | Date de création. |
error | objet ou null | Erreur au format RFC 9457. |
error.type | texte | Adresse de la page de documentation de l’erreur. Exemple : "https://docs.corcelink.fr/api/erreurs/#vps_not_found". |
error.title | texte | Résumé de l’erreur, dans la langue demandée. Exemple : "VPS introuvable". |
error.status | entier | Code HTTP. Exemple : 404. |
error.code | texte | Code stable, à utiliser dans vos programmes. Exemple : "vps_not_found". |
error.detail | texte | Explication et correction possible. Exemple : "Aucun VPS vps-7c2e4a91 sur ce compte.". |
error.request_id | texte | Identifiant de la requête, à citer au support. Exemple : "req-01JB7X4M2Q9KZ3". |
error.errors | liste de objet | Erreurs de validation, champ par champ. |
error.errors[].field | texte | Exemple : "rules[0].ports". |
error.errors[].code | texte | Exemple : "invalid_port". |
error.errors[].message | texte | Exemple : "Port invalide : utilisez 443, 80,443 ou 8000:8100.". |
result | objet | Résultat propre à certaines opérations ; absent sinon. |
result.password_url | texte | Lien à usage unique vers le nouveau mot de passe root (réinstallation). |
result.password_expires_at | texte | Date de création. |
Erreurs
not_foundRessource introuvableinvalid_stateAction impossible dans l’état actueloperation_refusedOpération refuséeresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X DELETE "https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes/rt-3f9a1c" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
import os, uuid, requests
r = requests.delete(
"https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes/rt-3f9a1c",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=30,
)
r.raise_for_status()
print(r.status_code)
const res = await fetch("https://api.corcelink.fr/v1/network/private-networks/pn-4f2a9c1e/routes/rt-3f9a1c", {
method: "DELETE",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID() },
});
console.log(res.status, "");
Réponse 202
{
"id": "op-01JB7X5R1M",
"type": "vps.reinstall",
"status": "pending",
"resource": {
"type": "vps",
"id": "vps-7c2e4a91"
},
"created_at": "texte",
"started_at": "texte",
"completed_at": "texte",
"error": {
"type": "https://docs.corcelink.fr/api/erreurs/#vps_not_found",
"title": "VPS introuvable",
"status": 404,
"code": "vps_not_found",
"detail": "Aucun VPS vps-7c2e4a91 sur ce compte.",
"request_id": "req-01JB7X4M2Q9KZ3",
"errors": [
{
"field": "rules[0].ports",
"code": "invalid_port",
"message": "Port invalide : utilisez 443, 80,443 ou 8000:8100."
}
]
},
"result": {
"password_url": "texte",
"password_expires_at": "texte"
}
}