This page describes every endpoint of the Domain Feed API. To get started, authenticate, check your plan’s limits or understand the errors, go to getting started. The values in the examples are made up.
Conventions
- Base URL:
https://api.cifradia.com. Every data endpoint lives under/v1. - Authentication: send the key in the
Authorization: Bearer <your key>header, never in the URL. The examples read it from theKEYvariable. - Format: responses are JSON (
/v1/dailyzip/returns a ZIP). Parameters go in the query string; encode values with special characters such as%or|(curl --data-urlencodedoes it for you). For example, the wildcard%is written%25in the URL:?kw=%25bank%25. - Dates:
yyyymmddin requests (for example20260115) andyyyy-mm-ddin responses. All are UTC. - Plan: your plan limits how far back you can go, which TLDs you can query and whether you can download the daily ZIP. Outside your plan, the API answers
403. - Specification: the OpenAPI document is at api.cifradia.com/openapi.json.
export KEY="<your key>"
GET /v1/tlds
Lists the TLDs the feed works with, with their cumulative totals and the counts of each one’s latest update.
Parameters
| Parameter | Type | Default | Values and notes |
|---|---|---|---|
listall | boolean | false | With |
Example
curl -H "Authorization: Bearer $KEY" "https://api.cifradia.com/v1/tlds"
Response
{
"status": true,
"records": 2,
"data": [
{
"tld": "com",
"domaincount": 1000,
"total_added_count": 1200,
"total_deleted_count": 200,
"latest_add_count": 30,
"latest_delete_count": 10,
"last_processed": "2026-01-15"
},
{
"tld": "net",
"domaincount": 400,
"total_added_count": 450,
"total_deleted_count": 50,
"latest_add_count": 12,
"latest_delete_count": 4,
"last_processed": "2026-01-15"
}
]
}
Notes
- On a plan limited to certain TLDs, the list contains only those TLDs.
recordsis the number of TLDs returned.domaincountis the cumulative net (added minus deleted);total_added_countandtotal_deleted_countare the cumulative gross figures;latest_add_countandlatest_delete_countrefer only to the latest processed update (last_processed).
GET /v1/added
Returns the domains newly registered on a date or over a date range, with filters by keyword, TLD and IDN.
Parameters
| Parameter | Type | Default | Values and notes |
|---|---|---|---|
date | text | latest day with data | Reference date. If you leave it out, the latest day with data is used among the TLDs you ask for or, if you ask for none, among those of your plan. |
kw | text | none | Keyword filter on the domain name, without the TLD. Separate alternatives
with |
tlds | text | all in your plan | Comma-separated TLDs, without the dot and case-insensitive, for example
|
dcm | text | eq | Date comparison mode: |
idn | integer | 2 |
|
sorton | text | date | Field the results are sorted by, highest first: |
dm | text | data |
|
limit | integer | 50000 | Maximum number of domains to return. The cap is |
offset | integer | 0 | How many domains to skip, for paging. Minimum |
Example
curl -G -H "Authorization: Bearer $KEY" \
--data-urlencode "kw=%bank%" \
--data-urlencode "tlds=com,net" \
--data-urlencode "date=20260115" \
"https://api.cifradia.com/v1/added"
Response
{
"status": true,
"date": "2026-01-15",
"records": 2,
"source": "added domains",
"data": [
{
"domain": "example.com",
"name": "example",
"tld": "com",
"length": 7,
"idn": 0,
"ipv4": null,
"date": "2026-01-15"
},
{
"domain": "example.net",
"name": "example",
"tld": "net",
"length": 7,
"idn": 0,
"ipv4": null,
"date": "2026-01-15"
}
]
}
Notes
recordsis the total number of domains that match the filters, regardless oflimitandoffset. To walk a large result, repeat the request addinglimittooffsetuntil you reachrecords, and usesorton=domain: with the default order there are ties, so pages can repeat or skip domains.- The response
dateis the reference date; each domain carries its owndate, which matters when you ask for a range. domainis the full name (example.com) andnameis the name without the TLD.idnis0or1.ipv4is optional and isnullwhen there is no value.- Added domains: a domain counts on the day we first detect it. The previous day’s changes are usually available around 07:30 UTC; this is a typical timing, not a guarantee.
- Your plan limits the history: a date before that limit gives
403, and a range that crosses it is clipped to the limit.
GET /v1/deleted
Returns the domains deleted on a date or over a date range, with filters by keyword, TLD and IDN.
Parameters
| Parameter | Type | Default | Values and notes |
|---|---|---|---|
date | text | latest day with data | Reference date. If you leave it out, the latest day with data is used among the TLDs you ask for or, if you ask for none, among those of your plan. |
kw | text | none | Keyword filter on the domain name, without the TLD. Separate alternatives
with |
tlds | text | all in your plan | Comma-separated TLDs, without the dot and case-insensitive, for example
|
dcm | text | eq | Date comparison mode: |
idn | integer | 2 |
|
sorton | text | date | Field the results are sorted by, highest first: |
dm | text | data |
|
limit | integer | 50000 | Maximum number of domains to return. The cap is |
offset | integer | 0 | How many domains to skip, for paging. Minimum |
Example
curl -G -H "Authorization: Bearer $KEY" \
--data-urlencode "kw=%bank%" \
--data-urlencode "tlds=com,net" \
--data-urlencode "date=20260115" \
"https://api.cifradia.com/v1/deleted"
Response
{
"status": true,
"date": "2026-01-15",
"records": 2,
"source": "deleted domains",
"data": [
{
"domain": "example.com",
"name": "example",
"tld": "com",
"length": 7,
"idn": 0,
"ipv4": null,
"date": "2026-01-15"
},
{
"domain": "example.net",
"name": "example",
"tld": "net",
"length": 7,
"idn": 0,
"ipv4": null,
"date": "2026-01-15"
}
]
}
Notes
recordsis the total number of domains that match the filters, regardless oflimitandoffset. To walk a large result, repeat the request addinglimittooffsetuntil you reachrecords, and usesorton=domain: with the default order there are ties, so pages can repeat or skip domains.- The response
dateis the reference date; each domain carries its owndate, which matters when you ask for a range. domainis the full name (example.com) andnameis the name without the TLD.idnis0or1.ipv4is optional and isnullwhen there is no value.- Deleted domains: a domain counts on the day we first detect it or it stops appearing. The previous day’s changes are usually available around 07:30 UTC; this is a typical timing, not a guarantee.
- Your plan limits the history: a date before that limit gives
403, and a range that crosses it is clipped to the limit.
GET /v1/history
Returns every added and deleted event of one domain, oldest first. If the domain was registered and removed several times, all of them appear.
Parameters
| Parameter | Type | Default | Values and notes |
|---|---|---|---|
domain | text | required | Full domain name, for example |
Example
curl -G -H "Authorization: Bearer $KEY" \
--data-urlencode "domain=example.com" \
"https://api.cifradia.com/v1/history"
Response
{
"status": true,
"domain": "example.com",
"records": 2,
"data": [
{ "event_type": "added", "date": "2024-03-02" },
{ "event_type": "deleted", "date": "2025-03-05" }
]
}
Notes
event_typeisaddedordeleted.- Only events within your plan’s history are returned. If the domain’s TLD is not in your plan, the API answers
403. - A domain with no events returns
records: 0and an emptydata.
GET /v1/keywords
Counts how many added or deleted domains contain each keyword: at the start of the name, at the end, in the middle or anywhere. It counts non-IDN domains only.
Parameters
| Parameter | Type | Default | Values and notes |
|---|---|---|---|
source | text | added |
|
dm | text | data | What to return: |
kw | text | the keywords Cifradia tracks | One or more words separated by |
tlds | text | all in your plan | Comma-separated TLDs. It filters only with |
date | text | latest day with data | Reference date. |
dcm | text | eq | Date comparison mode: |
limit | integer | 100 | Maximum rows for |
Example
curl -G -H "Authorization: Bearer $KEY" \
--data-urlencode "kw=bank|insurance" \
--data-urlencode "dm=data" \
--data-urlencode "source=added" \
"https://api.cifradia.com/v1/keywords"
Response
{
"status": true,
"date": "2026-01-15",
"records": 2,
"data": [
{
"keyword": "bank",
"tld": "com",
"domains_starting_with_word": 12,
"domains_ending_with_word": 5,
"domains_with_word_in_middle": 3,
"domains_containing_word_anywhere": 20
},
{
"keyword": "insurance",
"tld": "com",
"domains_starting_with_word": 8,
"domains_ending_with_word": 2,
"domains_with_word_in_middle": 1,
"domains_containing_word_anywhere": 11
}
]
}
Notes
- Rows are ordered from most to fewest domains containing the word (
domains_containing_word_anywhere). - With
dm=statsthe response hasstatus,dateandrecords, withoutdata. Withdm=aggregate,datahas a single row and notld. domains_containing_word_anywherecounts every domain that contains the word, wherever it is. A name that both starts and ends with it counts in both position counters.
GET /v1/dailyzip/
Downloads a ZIP with every domain added or deleted on one day, one full name per line, in a text file. It is meant for whoever needs the whole day without paging.
Parameters
| Parameter | Type | Default | Values and notes |
|---|---|---|---|
date | text | the previous day (UTC) | Day to download the list for. |
source | text | added |
|
latest | boolean | false | With |
Example
curl -H "Authorization: Bearer $KEY" \
-o added_20260115.zip \
"https://api.cifradia.com/v1/dailyzip/?date=20260115&source=added"
Response
added_20260115.zip
└── added_2026-01-15.txt # one domain per line, for example:
# example.com
# example.net
Notes
- The path has a trailing slash:
/v1/dailyzip/. - It is only in the plans that include it (Pro and Business). On Starter the API answers
403. - The file is generated while it downloads, so its size is not known in advance. It respects your plan’s history and includes only the TLDs your plan allows.