Production APIs,
documented and metered.
A curated catalogue of APIs with real documentation, one key that works everywhere, per-request pricing you can read off the response header, and a hosted MCP server for every listing.
Free monthly allowance on every API · No subscription · Credit never expires
curl -X GET "https://www.twotic.dev/v1/web-extract/extract?url=https://example.com" \
-H "Authorization: Bearer $TWOTIC_KEY"const res = await fetch("https://www.twotic.dev/v1/web-extract/extract?url=https://example.com", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.TWOTIC_KEY}`,
},
})
if (!res.ok) throw new Error(await res.text())
const data = await res.json()
console.log(res.headers.get("X-Twotic-Cost"))import os, requests
res = requests.get(
"https://www.twotic.dev/v1/web-extract/extract?url=https://example.com",
headers={"Authorization": f"Bearer {os.environ['TWOTIC_KEY']}"},
)
res.raise_for_status()
data = res.json()
print(res.headers["X-Twotic-Cost"])package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("GET", "https://www.twotic.dev/v1/web-extract/extract?url=https://example.com", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("TWOTIC_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
fmt.Println(res.Header.Get("X-Twotic-Cost"))
}<?php
$ch = curl_init("https://www.twotic.dev/v1/web-extract/extract?url=https://example.com");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("TWOTIC_KEY"),
],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);require "net/http"
require "json"
uri = URI("https://www.twotic.dev/v1/web-extract/extract?url=https://example.com")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{ENV.fetch('TWOTIC_KEY')}"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(req)
end
puts JSON.parse(res.body)
puts res["X-Twotic-Cost"]{
"mcpServers": {
"web-extract": {
"type": "http",
"url": "https://www.twotic.dev/api/mcp/web-extract",
"headers": { "Authorization": "Bearer tk_live_your_key" }
}
}
}APIs ready to call
Every listing ships with full reference documentation, worked examples, and an MCP server.
Three steps to your first call
No sales call, no contract, no per-API onboarding.
Create one key
Sign in and generate a key. It works across every API in the catalogue — subscribing to a new one never means a new credential.
Fund your balance
Top up with a card in US dollars. Credit is prepaid, spent per request, and never expires. Every API includes a free monthly allowance before you spend anything.
Call and watch the meter
Each response carries the exact cost and your remaining rate limit. The dashboard breaks spend down per endpoint and per day.
Every API is also an agent tool
Each listing publishes a hosted MCP server. Point Claude, Cursor or any MCP client at it and the endpoints appear as callable tools — with descriptions written for a model deciding which one to reach for, not lifted from the developer docs.
Agent calls run through the same gateway as everything else, so they are authenticated, rate limited, priced and logged identically. No separate integration and no separate bill.
- GET
email-verify_verify
Verify a single email address
- POST
email-verify_verify-batch
Verify up to 100 addresses in one call
- GET
link-preview_preview
Unfurl a URL into link card metadata
- GET
qr_generate
Generate a QR code
By category
Before you integrate
How does pricing work?+
Every API is priced per request, and each one includes a free monthly allowance. You buy credit up front and each call draws from it — there is no subscription, no monthly minimum, and unused credit does not expire. A call that fails because our gateway or the upstream service failed is refunded automatically.
Do I need a separate key for each API?+
No. One Twotic key works across every API in the catalogue. Subscribe to an API from its page and your existing key starts working against it immediately.
What is the MCP server for?+
Every API on Twotic is also published as a Model Context Protocol server, so Claude, Cursor, ChatGPT and other agents can call its endpoints as tools without you writing an integration. Point the client at https://twotic.dev/api/mcp/<api> with your key and the endpoints appear as callable tools.
What happens if I run out of credit?+
Calls return HTTP 402 with a message telling you the balance and the cost of the call. Nothing is deleted and no keys are revoked — top up and the same key resumes working immediately.
Can I see what I am being charged for?+
Yes. Every response carries an X-Twotic-Cost header with the exact amount debited, and the dashboard breaks usage down per API, per endpoint and per day alongside a log of recent requests.