Solver Cloudflare

Temporary Email

Disposable inboxes for receiving verification emails — useful when automating signups that require confirming an email address. This uses clientKey the same way as every other endpoint — see Authentication.

Typical workflow

  1. List available domains (optional — you can also let SolverCF auto-pick one).
  2. Create an inbox to get an email address.
  3. Use that address wherever the target site asks for an email.
  4. Read the inbox, polling until the verification email arrives.
  5. Optionally, list your live inboxes later to revisit one you created earlier.

List available domains

Code
GET https://solvercf.com/email/domain-avaiable

No parameters. Returns the domains you can create an inbox on.

JSON
{ "status": "success", "domains": ["example-mail.com", "..."] }

Create an inbox

Code
POST https://solvercf.com/email/create
Field Type Required Description
clientKey string yes Your account API key
username string no Leave empty to auto-generate
domain string no One of the domains from domain-avaiable; leave empty to auto-pick
language string no en or vn (default en)
JSON
{ "clientKey": "YOUR_CLIENT_KEY", "language": "en" }
JSON
{
  "taskId": "…",
  "status": "success",
  "email": "abc123@example-mail.com",
  "password": "…"
}

This is a billed action — your balance is checked against the temporary email service price before creating the inbox. taskId here identifies the mailbox record (not a captcha task) and shows up when you list your live inboxes.

Read an inbox

Code
POST https://solvercf.com/email/mailbox
Field Type Required Description
clientKey string yes Your account API key
email string yes The inbox address, from email/create
JSON
{
  "status": "success",
  "messages": [
    {
      "from": "no-reply@example.com",
      "to": "abc123@example-mail.com",
      "subject": "Verify your account",
      "snippet": "Your code is 123456",
      "textPlain": "Your code is 123456",
      "textHtml": "<p>Your code is 123456</p>"
    }
  ]
}

messages is the full inbox, newest and oldest together — there's no "unread only" or pagination filter, so if you're polling for one specific email (e.g. a signup OTP), filter client-side by from/subject and take the most recent match. messages is empty (not an error) if nothing has arrived yet — this is a billed action each time you call it, so poll at a reasonable interval (a few seconds) rather than tightly looping.

List your live inboxes

Code
POST https://solvercf.com/email/live
Field Type Required Description
clientKey string yes Your account API key
JSON
{
  "status": "success",
  "mailLives": [
    { "taskId": "…", "email": "abc123@example-mail.com", "password": "…", "createAt": 1732000000000 }
  ]
}

Free to call — listing your existing inboxes doesn't consume balance. Useful for recovering the address/password of an inbox you created in an earlier session without having to track it yourself.

Example: create an inbox and wait for a verification code

Example: cURL

cURL
curl -X POST https://solvercf.com/email/create \
  -H "Content-Type: application/json" \
  -d '{ "clientKey": "YOUR_CLIENT_KEY" }'

Take the email from the response, then poll this every few seconds until the verification message shows up in messages:

cURL
curl -X POST https://solvercf.com/email/mailbox \
  -H "Content-Type: application/json" \
  -d '{ "clientKey": "YOUR_CLIENT_KEY", "email": "abc123@example-mail.com" }'

Example: Python

Python
import re
import time
import requests

CLIENT_KEY = "YOUR_CLIENT_KEY"
BASE_URL = "https://solvercf.com"

def create_inbox():
    r = requests.post(f"{BASE_URL}/email/create", json={"clientKey": CLIENT_KEY}).json()
    if r["status"] != "success":
        raise Exception(r["status"])
    return r["email"]

def wait_for_code(email, timeout_seconds=120):
    deadline = time.time() + timeout_seconds
    while time.time() < deadline:
        r = requests.post(f"{BASE_URL}/email/mailbox", json={"clientKey": CLIENT_KEY, "email": email}).json()
        for message in r.get("messages", []):
            match = re.search(r"\b\d{6}\b", message.get("textPlain") or "")
            if match:
                return match.group(0)
        time.sleep(3)
    raise TimeoutError("no verification email arrived in time")

email = create_inbox()
print("Sign up with:", email)
code = wait_for_code(email)
print("Verification code:", code)

Example: JavaScript

JavaScript
const CLIENT_KEY = "YOUR_CLIENT_KEY";
const BASE_URL = "https://solvercf.com";

async function createInbox() {
  const r = await fetch(`${BASE_URL}/email/create`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ clientKey: CLIENT_KEY }),
  }).then((res) => res.json());

  if (r.status !== "success") throw new Error(r.status);
  return r.email;
}

async function waitForCode(email, timeoutMs = 120_000) {
  const deadline = Date.now() + timeoutMs;

  while (Date.now() < deadline) {
    const r = await fetch(`${BASE_URL}/email/mailbox`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ clientKey: CLIENT_KEY, email }),
    }).then((res) => res.json());

    for (const message of r.messages ?? []) {
      const match = (message.textPlain ?? "").match(/\b\d{6}\b/);
      if (match) return match[0];
    }

    await new Promise((r) => setTimeout(r, 3000));
  }

  throw new Error("no verification email arrived in time");
}

const email = await createInbox();
console.log("Sign up with:", email);
const code = await waitForCode(email);
console.log("Verification code:", code);

Example: C#

C#
using System.Net.Http.Json;
using System.Text.Json;
using System.Text.RegularExpressions;

const string clientKey = "YOUR_CLIENT_KEY";
const string baseUrl = "https://solvercf.com";
using var client = new HttpClient();

async Task<string> CreateInboxAsync()
{
    var response = await client.PostAsJsonAsync($"{baseUrl}/email/create", new { clientKey });
    var json = await response.Content.ReadFromJsonAsync<JsonElement>();
    if (json.GetProperty("status").GetString() != "success")
        throw new Exception(json.GetProperty("status").GetString());
    return json.GetProperty("email").GetString()!;
}

async Task<string> WaitForCodeAsync(string email, TimeSpan timeout)
{
    var deadline = DateTime.UtcNow + timeout;

    while (DateTime.UtcNow < deadline)
    {
        var response = await client.PostAsJsonAsync($"{baseUrl}/email/mailbox", new { clientKey, email });
        var json = await response.Content.ReadFromJsonAsync<JsonElement>();

        foreach (var message in json.GetProperty("messages").EnumerateArray())
        {
            var text = message.GetProperty("textPlain").GetString() ?? "";
            var match = Regex.Match(text, @"\b\d{6}\b");
            if (match.Success) return match.Value;
        }

        await Task.Delay(3000);
    }

    throw new TimeoutException("no verification email arrived in time");
}

var email = await CreateInboxAsync();
Console.WriteLine($"Sign up with: {email}");
Console.WriteLine($"Verification code: {await WaitForCodeAsync(email, TimeSpan.FromSeconds(120))}");