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
- List available domains (optional — you can also let SolverCF auto-pick one).
- Create an inbox to get an email address.
- Use that address wherever the target site asks for an email.
- Read the inbox, polling until the verification email arrives.
- Optionally, list your live inboxes later to revisit one you created earlier.
List available domains
GET https://solvercf.com/email/domain-avaiable
No parameters. Returns the domains you can create an inbox on.
{ "status": "success", "domains": ["example-mail.com", "..."] }
Create an inbox
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) |
{ "clientKey": "YOUR_CLIENT_KEY", "language": "en" }
{
"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
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 |
{
"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
POST https://solvercf.com/email/live
| Field | Type | Required | Description |
|---|---|---|---|
clientKey |
string | yes | Your account API key |
{
"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 -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 -X POST https://solvercf.com/email/mailbox \
-H "Content-Type: application/json" \
-d '{ "clientKey": "YOUR_CLIENT_KEY", "email": "abc123@example-mail.com" }'
Example: 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
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#
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))}");