Base URL:https://api.cybertemp.xyzFree tier has standard processing speed; subscribe for priority access.
Public API: Accessing General Email Data
Endpoints like getMail or getDomains have two modes:
X-API-KEY header. This gives you instant responses and higher limits based on your subscription plan.X-API-KEY: your_subscription_api_key_hereBearer Token (for Private Endpoint)
Use the Authorization: Bearer <token> header only for the private endpoint /private/emails. Generate this token in your dashboard. It authenticates you as a specific user to access your personal emails via the API.
Authorization: Bearer your_generated_dashboard_token_hereHow to Obtain an API Key
API keys are available to all users. Note: instant/no-delay access is only granted when the API key is linked to an active paid subscription plan - otherwise requests are treated as public (subject to standard speed and free-tier rate limits).
Login to Your Account
Sign in to your CyberTemp account using your email and password.
Access Settings
Click your profile avatar in the top-right corner, then select "Settings" from the dropdown menu.
Generate API Key
Scroll down to the "API Keys" section and click the "Generate New Key" button. Copy and securely store your API key.
X-API-KEY = FREE (Non-Priority Queue). With active paid subscription = PRIORITY (Instant)./private/emails): Use Authorization: Bearer <token> (required).Need instant API access? Subscribe to a plan:
View subscription plansOur API requires an API key for all access. The free tier runs at standard processing speed on every request and rate limits apply. Subscribers get instant access with higher rate limits:
Free Tier
API key required
Eco Plan
€1.99/month
Core Plan
€2.99/month
Elite Plan
€4.99/month
Team
€49/month · 5 seats · Elite features for every seat
// Public endpoint: Use X-API-KEY
async function getEmails(email, apiKey = null, limit = 25, offset = 0) {
const headers = apiKey ? { 'X-API-KEY': apiKey } : {};
const params = new URLSearchParams({ email });
if (limit !== 25) params.append('limit', limit.toString());
if (offset > 0) params.append('offset', offset.toString());
const url = `https://api.cybertemp.xyz/getMail?${params}`;
const response = await fetch(url, { headers });
if (!response.ok) { const err = await response.text(); throw new Error('HTTP error! ' + response.status + ': ' + err); }
return response.json();
}Prefer a client library? Jump to Client libraries
message.receivedA new email lands in one of your inboxes.inbox.createdA new inbox was provisioned on your account.test.pingFired from the dashboard 'Test' button — useful for verifying your endpoint before real mail arrives.{
"event": "message.received",
"delivery_id": "7c4f...",
"timestamp": 1731234567,
"data": {
"inbox_id": "5d2f...",
"inbox": "[email protected]",
"message_id": "9a1b...",
"from": "[email protected]",
"to": ["[email protected]"],
"subject": "Your verification code",
"received_at": "2026-05-17T09:31:00Z",
"size_bytes": 4732,
"encrypted": true
}
}HMAC the raw request body with your signing secret and compare against the X-Cybertemp-Signature header using constant-time compare.
import crypto from "node:crypto";
import express from "express";
const app = express();
app.use("/webhooks/cybertemp",
express.raw({ type: "application/json" }));
app.post("/webhooks/cybertemp", (req, res) => {
const header = req.header("x-cybertemp-signature") || "";
const expected = "sha256=" + crypto
.createHmac("sha256", process.env.CT_WEBHOOK_SECRET)
.update(req.body)
.digest("hex");
if (!crypto.timingSafeEqual(
Buffer.from(header), Buffer.from(expected)
)) return res.status(401).end();
const event = JSON.parse(req.body.toString("utf8"));
// ...handle event...
res.status(200).end();
});On 5xx or timeout we retry with exponential backoff (1m, 5m, 30m, 6h). After 10 consecutive failures we auto-pause the webhook and show a banner in the dashboard. 2xx is treated as success and resets the failure counter.
Manage your webhook endpoints + signing secrets
Open Settings → Webhookspip install cybertempfrom cybertemp import CyberTemp
client = CyberTemp(api_key="tk_...")
emails = client.get_email_content("[email protected]")
domains = client.get_domains()go get github.com/sexfrance/cybertemp-goimport cybertemp "github.com/sexfrance/cybertemp-go"
c := cybertemp.New("tk_...")
inbox, _ := c.CreateInbox(ctx, nil)
msg, _ := c.WaitForMessage(ctx, inbox.ID, 60*time.Second, nil)cargo add cybertemp tokio --features tokio/fulluse cybertemp::Client;
use std::time::Duration;
let client = Client::new("tk_...");
let inbox = client.create_inbox().await?;
let msg = client.wait_for_message(&inbox.id, Duration::from_secs(60)).await?;No package needed: Node 18+ has fetch built in.
const res = await fetch(
"https://api.cybertemp.xyz/[email protected]",
{ headers: { "X-API-KEY": process.env.CYBERTEMP_API_KEY! } },
);
const emails = await res.json(); // [{ id, from, subject, text, html, date }]All-in-one Email API! This single endpoint does everything you need:
How getEmails Works:
Authentication:
emailTarget email address (e.g. [email protected]). Auto-created if new.
limitNumber of emails to return (default 25, max 100).
offsetPagination offset (default 0).
GET /[email protected]&limit=50&offset=100
X-API-KEY: your_api_key_here[
{
"id": "email:xyz",
"from": "[email protected]",
"to": "[email protected]",
"subject": "Test Email",
"text": "Email content",
"html": "<p>Email content</p>",
"date": "2024-01-01T00:00:00.000Z"
}
]