Quickstart
Get up and running with ResolveDB in under 5 minutes.
Try It Now
See ResolveDB in action - no signup required. Try the live query below or run dig in your terminal:
You just queried ResolveDB using DNS. Public answers can be served from a nearby recursive resolver when they are cached.
Why DNS?
Public services, public datasets, and operator-managed public-read records can use shared DNS caches according to their TTL:
Your Application
│
▼
┌─────────────────┐
│ Local stub/cache│ ─── Optional local reuse
└────────┬────────┘
│ Cache miss
▼
┌─────────────────┐
│ Configured │ ─── Corporate, ISP, or public recursive
│ recursive │ Each cache instance has its own entry
└────────┬────────┘
│ Cache miss
▼
┌─────────────────┐
│ ResolveDB │ ─── Authoritative origin
│ Public answer │ Queried on each resolver cache miss
└─────────────────┘Each recursive cache has its own miss schedule; a TTL does not imply one global request count. Private hosted records are different: they require a query token and always return TTL 0, which directs compliant recursive caches not to retain them.
1. Create an Account
Sign up for a free ResolveDB account to get your API credentials.
2. Create a Namespace
Hosted records live in a globally unique namespace. Create one in the Namespaces dashboard or through the API:
curl -X POST https://api.resolvedb.com/api/v1/namespaces \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"namespace":{"name":"acme-catalog"}}'Save the namespace id from the response. Replace acme-catalog throughout
this guide with the namespace you created.
3. Create Your First Record
Use the dashboard or API to create a DNS-accessible record.
Via Dashboard
Navigate to Records in the dashboard and click Create Record.
Via API
curl -X POST https://api.resolvedb.com/api/v1/records \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"record": {
"key": "config.acme-catalog.v1",
"data": "eyJoZWxsbyI6IndvcmxkIn0="
}
}'Note: The data field is Base64 encoded. The example above encodes {"hello":"world"}.
4. Create a Query Token
Private DNS reads use a namespace query token. The plaintext token is returned
only once and starts with rdbq:
curl -X POST https://api.resolvedb.com/api/v1/namespaces/NAMESPACE_ID/query_tokens \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"quickstart","expires_in_days":30}'Store the returned token securely:
export RDBQ='rdbq...'5. Query Your Record
The token is a bearer credential embedded in the DNS name. Use DoT or DoH so the query name is encrypted in transit.
Using dig over DoT
dig +tls-ca +tls-hostname=dot.resolvedb.io @dot.resolvedb.io \
TXT "get.auth-${RDBQ}.config.acme-catalog.v1.resolvedb.net" +shortUsing the JSON API (works in browsers)
Can't make DNS queries from your environment? Use our JSON API:
curl --get https://doh.resolvedb.io/resolve \
--data-urlencode "name=get.auth-${RDBQ}.config.acme-catalog.v1.resolvedb.net" \
--data-urlencode "type=TXT"Authenticated answers have TTL 0, directing compliant recursive caches not to
retain them; an intermediary may still apply a brief floor or stale policy.
Rails decodes the submitted Base64 before storage. The DNS response declares
its own encoding as e=plain or e=b64; decode d according to that field.
Next Steps
- Learn the UQRP protocol - Understand query and response formats
- DNS Access Methods - DoH, DoT, and JSON API options
- API Reference - Full REST API documentation
- Security - Authentication and encryption options