Caputchin
Guides d'intégration

Exemples d'intégration backend

L'intégration côté serveur est un simple POST JSON, donc il n'y a aucun SDK propriétaire dans le moindre langage : utilise le client HTTP que ton backend a déjà. Chaque exemple ci-dessous envoie ton secret et le token du formulaire, puis lit success dans la réponse. Tous supposent que le secret est dans une variable d'environnement, jamais dans le code.

Node (fetch, intégré depuis la 18)

const res = await fetch("https://caputchin.com/api/v1/siteverify", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ secret: process.env.CAPUTCHIN_SECRET, response: token }),
});
const result = await res.json();
if (!result.success) throw new Error("verification failed");

Python (requests)

import os, requests

res = requests.post(
    "https://caputchin.com/api/v1/siteverify",
    json={"secret": os.environ["CAPUTCHIN_SECRET"], "response": token},
    timeout=10,
)
res.raise_for_status()
if not res.json()["success"]:
    raise RuntimeError("verification failed")

PHP (cURL)

$ch = curl_init("https://caputchin.com/api/v1/siteverify");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
    CURLOPT_POSTFIELDS => json_encode([
        "secret" => getenv("CAPUTCHIN_SECRET"),
        "response" => $token,
    ]),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (!$result["success"]) throw new Exception("verification failed");

Go (net/http)

body, _ := json.Marshal(map[string]string{
    "secret":   os.Getenv("CAPUTCHIN_SECRET"),
    "response": token,
})
res, err := http.Post("https://caputchin.com/api/v1/siteverify", "application/json", bytes.NewReader(body))
if err != nil {
    return err
}
defer res.Body.Close()
var result struct {
    Success bool `json:"success"`
}
json.NewDecoder(res.Body).Decode(&result)
if !result.Success {
    return fmt.Errorf("verification failed")
}

Ruby (Net::HTTP)

require "net/http"
require "json"

uri = URI("https://caputchin.com/api/v1/siteverify")
res = Net::HTTP.post(
  uri,
  { secret: ENV["CAPUTCHIN_SECRET"], response: token }.to_json,
  "Content-Type" => "application/json",
)
raise "verification failed" unless JSON.parse(res.body)["success"]

.NET (HttpClient)

using var http = new HttpClient();
var payload = JsonSerializer.Serialize(new {
    secret = Environment.GetEnvironmentVariable("CAPUTCHIN_SECRET"),
    response = token,
});
var res = await http.PostAsync(
    "https://caputchin.com/api/v1/siteverify",
    new StringContent(payload, Encoding.UTF8, "application/json"));
var result = JsonSerializer.Deserialize<JsonElement>(await res.Content.ReadAsStringAsync());
if (!result.GetProperty("success").GetBoolean()) throw new Exception("verification failed");

curl (pour un test rapide)

curl -sS https://caputchin.com/api/v1/siteverify \
  -H "Content-Type: application/json" \
  -d "{\"secret\":\"$CAPUTCHIN_SECRET\",\"response\":\"$TOKEN\"}"

Un client typé

Si tu préfères travailler avec un client typé, pointe un générateur OpenAPI vers la référence de l'API Runtime ; /siteverify vit dans la spec runtime, pas celle de gestion. Le contrat est petit, donc la sortie générée est courte.

Voir aussi

Sur cette page