by KeyID-AI
Free email for AI agents. No signup, no human needed. Install → provision → send and receive. Ed25519 keypair auth.
# Add to your Claude Code skills
git clone https://github.com/KeyID-AI/sdk-pyLast scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T06:47:21.264Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}sdk-py is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by KeyID-AI. Free email for AI agents. No signup, no human needed. Install → provision → send and receive. Ed25519 keypair auth. It has 316 GitHub stars.
Yes. sdk-py passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/KeyID-AI/sdk-py" and add it to your Claude Code skills directory (see the Installation section above).
sdk-py is primarily written in Python. It is open-source under KeyID-AI on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh sdk-py against similar tools.
No comments yet. Be the first to share your thoughts!
Free email addresses for AI agents. No signup. No human needed.
Your agent gets a real email address in 3 lines of code. Send, receive, reply, search — full email capabilities with zero registration, zero cost, zero human involvement.
KeyID.ai handles everything: domain management, rotation, reputation monitoring, deliverability. Your agent just generates a keypair and calls provision().
pip install keyid
from keyid import KeyID
agent = KeyID()
# Register — get an email address instantly
result = agent.provision()
print(f"Agent email: {result['email']}")
# Read inbox
inbox = agent.get_inbox()
for msg in inbox["messages"]:
print(f"{msg['from']}: {msg['subject']}")
# Send email
agent.send("user@example.com", "Hello", "Message body")
# Reply to a message
agent.reply(inbox["messages"][0]["id"], "Thanks!")
KeyID uses Ed25519 challenge-response authentication. The SDK handles this automatically:
provision() registers the public key and returns an email address# Option 1: Auto-generate keypair (default)
agent = KeyID()
# Option 2: Provide existing keypair
agent = KeyID(public_key="...hex...", private_key="...hex...")
# Option 3: Custom base URL
agent = KeyID(base_url="https://your-instance.com")
| Method | Description |
|---|---|
provision() |
Register agent, get email address |
get_identity() |
Get agent identity info |
get_addresses() |
List all addresses (current + historical) |
get_recovery_token() |
Get recovery token for key rotation |
| Method | Description |
|---|---|
get_inbox(**kwargs) |
Fetch inbox with pagination, filtering, search |
get_message(id) |
Get single message detail |
update_message(id, **kwargs) |
Update labels, read/starred status |
get_unread_count() |
Count unread inbound messages |
send(to, subject, body, **kwargs) |
Send email (HTML, CC/BCC, scheduled) |
reply(message_id, body, **kwargs) |
Reply to a message |
reply_all(message_id, body, **kwargs) |
Reply-all |
forward(message_id, to, body=None) |
Forward a message |
| Method | Description |
|---|---|
list_threads(**kwargs) |
List conversation threads |
get_thread(thread_id) |
Get thread with all messages |
delete_thread(thread_id, permanent=False) |
Delete thread |
| Method | Description |
|---|---|
create_draft(**kwargs) |
Create a draft |
get_draft(draft_id) |
Get draft detail |
update_draft(draft_id, **kwargs) |
Update draft |
delete_draft(draft_id) |
Delete draft |
send_draft(draft_id) |
Send a draft |
| Method | Description |
|---|---|
get_signature() |
Get email signature |
set_signature(text, html=None) |
Set email signature |
get_forwarding() |
Get forwarding settings |
set_forwarding(**kwargs) |
Configure email forwarding |
get_auto_reply() |
Get auto-reply/vacation settings |
set_auto_reply(**kwargs) |
Configure auto-reply |
| Method | Description |
|---|---|
list_contacts(**kwargs) |
List saved contacts |
create_contact(**kwargs) |
Create a contact |
get_contact(contact_id) |
Get contact detail |
update_contact(contact_id, **kwargs) |
Update contact |
delete_contact(contact_id) |
Delete contact |
| Method | Description |
|---|---|
list_webhooks() |
List webhooks |
create_webhook(url, events=None) |
Create webhook |
get_webhook(webhook_id) |
Get webhook detail |
update_webhook(webhook_id, **kwargs) |
Update webhook |
delete_webhook(webhook_id) |
Delete webhook |
get_webhook_deliveries(**kwargs) |
Delivery history |
| Method | Description |
|---|---|
add_to_list(direction, type, entry) |
Add to allow/blocklist |
remove_from_list(direction, type, entry) |
Remove from list |
get_list(direction, type) |
Get list entries |
get_metrics(**kwargs) |
Query usage metrics |
agent.send("to@x.com", "Sub", "Body", scheduled_at="2025-01-01T10:00:00Z")agent.get_inbox(search="invoice")agent.update_message(id, is_starred=True)agent.set_auto_reply(enabled=True, body="Out of office")agent.send("to@x.com", "Sub", "text", html="<h1>Hello</h1>")httpx (installed automatically)MIT