This guide documents the current IRC Log API surface.
https://tools.tornevall.net/irc/api
GET /irc/api/networks?source=productionGET /irc/api/networks/{network_id}/channels?source=productionfirst_date, last_date, event_count)GET /irc/api/networks/{network_id}/date-interval?source=productionGET /irc/api/networks/{network_id}/channels/date-intervals?source=productionGET /irc/api/nicknames?q={term}&network_id={id?}&channel_id={id?}&limit=25&source=productionGET /irc/api/logs?network_id={id}&channel_id={id}&source=production&limit=100&offset=0GET /irc/api/networks/{network_id}/date-interval?source=productionResponse:
{
"success": true,
"source": "production",
"network_id": 1,
"first_date": "1999-04-14 13:55:00",
"last_date": "1999-04-29 04:11:00",
"event_count": 123456,
"total_channels": 42,
"channels_with_data": 31
}
GET /irc/api/networks/{network_id}/channels/date-intervals?source=productionResponse contains:
channels_with_datachannels[] with id, name, first_date, last_date, event_countsource=production (default)source=sandboxUse the same source consistently in networks/channels/logs requests.
/irc/api/nicknames)GET /irc/api/nicknamesq (string, required in practice; empty returns no rows)network_id (int, optional)channel_id (int, optional)limit (1-100, default 20)source (production|sandbox){
"success": true,
"source": "production",
"query": "to",
"count": 2,
"nicknames": [
{ "nick": "Tompavall", "occurrences": 1204, "last_seen": "2026-07-22 08:10:00" },
{ "nick": "topi", "occurrences": 231, "last_seen": "2004-03-15 12:02:10" }
]
}
/irc/api/logs)network_id (int)channel_id (int)q (string, free text, also supports +include / -exclude, including quoted phrases)include_terms (string, explicit include terms; space/comma separated)exclude_terms (string, explicit exclude terms; space/comma separated)event_types (string, comma-separated event types, e.g. PRIVMSG,NOTICE,JOIN)nick (string, alias-aware)user / username (string, IRC username; supports * wildcard)host / hostname (string, host or user@host; supports * wildcard)recipient (string)private_only (true|false)date (YYYY-MM-DD)date_from / date_to (YYYY-MM-DD)datetime_from / datetime_to (YYYY-MM-DD HH:MM:SS)limit (1-1000, default 100)offset (>=0, default 0)source (production|sandbox)format (json default, or plain/plaintext/text/txt)date is set, that day is used.datetime_from / datetime_to are used when present.date_from / date_to are used.curl "https://tools.tornevall.net/irc/api/logs?network_id=1&channel_id=1&source=production&q=nu+d%C3%A5&limit=50&offset=0"
curl "https://tools.tornevall.net/irc/api/logs?network_id=1&channel_id=1&source=production&q=%2Bflood+-%22received+server%22&include_terms=1999&exclude_terms=bot"
curl "https://tools.tornevall.net/irc/api/logs?network_id=1&channel_id=1&source=production&datetime_from=1999-04-14+13:55:00&datetime_to=1999-04-14+16:08:00"
curl -H "Accept: text/plain" "https://tools.tornevall.net/irc/api/logs?network_id=1&channel_id=1&source=production&format=plain&limit=4"
Plain output row format:
[YYYYMMDD HH:MM:SS] <nick:#channel> <text>
Authorization: Bearer <token> may still be sent when your client already uses token auth./irc/privacy-request where users can request nickname protection.redact_snippets: redact nickname mentions in snippets/text.hide_from_public: hide matching row content for anonymous visitors.GET /irc/api/logs.privacy_redacted (true|false)privacy_hidden (true|false)privacy_requested_nick (which nickname triggered policy){
"success": true,
"source": "production",
"total": 1234,
"limit": 100,
"offset": 0,
"results": [],
"nick_profile": null
}
results contains log rows (e.*) plus channel_name.
When privacy policy matches, each row may also include privacy_redacted, privacy_hidden, and privacy_requested_nick.
Our IRC log import process employs duplicate detection to maintain data quality. While this significantly reduces redundant entries, it may also result in the filtering of legitimate repeated content in the following scenarios:
Recommendation: IRC logs recorded with second-level precision (HH:MM:SS) will experience significantly fewer false-positive duplicates and provide more complete event coverage. For archival completeness, consider logs with sub-minute timestamp granularity.
Older /api/irclog/* examples should be treated as legacy. Use /irc/api/* for new integrations.
Version: 2.3
Updated: 2026-07-23