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:

Live DNS Query
dig TXT
Query breakdown:
operation:getparams:quebecresource:weathernamespace:publicversion:v1

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.

Create Account

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" +short

Using 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