> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raykoi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Backend Languages

> cURL, Python, PHP, Ruby, Go, Java, C# — the raw HTTP contract.

This exact shape — one POST, Bearer auth, JSON body — works from any language capable of an HTTP request. An API key (server-side only, create one in the dashboard's [API Keys](/dashboard/api-keys) settings) skips CAPTCHA entirely.

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.raykoi.com/api/v1/submit/p/YOUR_PUBLIC_ID" \
      -H "Authorization: Bearer rk_live_YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: $(uuidgen)" \
      -d '{"data": {"email": "user@example.com", "name": "Alice"}}'
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests
    import uuid

    response = requests.post(
        "https://api.raykoi.com/api/v1/submit/p/YOUR_PUBLIC_ID",
        headers={
            "Authorization": "Bearer rk_live_YOUR_API_KEY",
            "Content-Type": "application/json",
            "Idempotency-Key": str(uuid.uuid4()),
        },
        json={"data": {"email": "user@example.com", "name": "Alice"}},
    )
    result = response.json()
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    <?php
    $ch = curl_init("https://api.raykoi.com/api/v1/submit/p/YOUR_PUBLIC_ID");
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer rk_live_YOUR_API_KEY",
            "Content-Type: application/json",
            "Idempotency-Key: " . bin2hex(random_bytes(16)),
        ],
        CURLOPT_POSTFIELDS => json_encode([
            "data" => ["email" => "user@example.com", "name" => "Alice"],
        ]),
    ]);
    $result = json_decode(curl_exec($ch), true);
    curl_close($ch);
    ```
  </Tab>

  <Tab title="Ruby">
    ```ruby theme={null}
    require 'net/http'
    require 'json'
    require 'securerandom'

    uri = URI("https://api.raykoi.com/api/v1/submit/p/YOUR_PUBLIC_ID")
    req = Net::HTTP::Post.new(uri)
    req["Authorization"] = "Bearer rk_live_YOUR_API_KEY"
    req["Content-Type"] = "application/json"
    req["Idempotency-Key"] = SecureRandom.uuid
    req.body = { data: { email: "user@example.com", name: "Alice" } }.to_json

    res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
    result = JSON.parse(res.body)
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    package main

    import (
        "bytes"
        "crypto/rand"
        "encoding/json"
        "fmt"
        "net/http"
    )

    func newIdempotencyKey() string {
        b := make([]byte, 16)
        rand.Read(b)
        return fmt.Sprintf("%x", b)
    }

    func main() {
        body, _ := json.Marshal(map[string]any{
            "data": map[string]string{"email": "user@example.com", "name": "Alice"},
        })
        req, _ := http.NewRequest("POST", "https://api.raykoi.com/api/v1/submit/p/YOUR_PUBLIC_ID", bytes.NewBuffer(body))
        req.Header.Set("Authorization", "Bearer rk_live_YOUR_API_KEY")
        req.Header.Set("Content-Type", "application/json")
        req.Header.Set("Idempotency-Key", newIdempotencyKey())

        resp, err := http.DefaultClient.Do(req)
        if err != nil {
            panic(err)
        }
        defer resp.Body.Close()
    }
    ```
  </Tab>

  <Tab title="Java">
    ```java theme={null}
    import java.net.URI;
    import java.net.http.*;
    import java.util.UUID;

    HttpClient client = HttpClient.newHttpClient();
    String body = "{\"data\":{\"email\":\"user@example.com\",\"name\":\"Alice\"}}";

    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.raykoi.com/api/v1/submit/p/YOUR_PUBLIC_ID"))
        .header("Authorization", "Bearer rk_live_YOUR_API_KEY")
        .header("Content-Type", "application/json")
        .header("Idempotency-Key", UUID.randomUUID().toString())
        .POST(HttpRequest.BodyPublishers.ofString(body))
        .build();

    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    ```
  </Tab>

  <Tab title="C# / .NET">
    ```csharp theme={null}
    using System.Net.Http.Json;

    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer rk_live_YOUR_API_KEY");
    client.DefaultRequestHeaders.Add("Idempotency-Key", Guid.NewGuid().ToString());

    var response = await client.PostAsJsonAsync(
        "https://api.raykoi.com/api/v1/submit/p/YOUR_PUBLIC_ID",
        new { data = new { email = "user@example.com", name = "Alice" } }
    );
    var result = await response.Content.ReadFromJsonAsync<object>();
    ```
  </Tab>
</Tabs>
