Use my API to build stuff. I don't make guarantees about uptime and might make breaking changes. Your code should handle my API being shit — good luck!

Rate limits: 60 requests/minute on the search endpoints (/mentions, /stalk, /stalksearch), and 300 requests per 15 minutes across everything.

Ordering: the message search endpoints (/mentions, /stalk, /stalksearch, /convo) page backwards from the newest message, but return each page sorted oldest first. All dates are JS .getTime() milliseconds.

Returns a random ferret image from the collection.

urlLink to the ferret image
lastDeprecated — ignore this
Try it

Returns recent DGG messages mentioning any of the given usernames.

usernamesRequired. 1–10 comma-separated usernames. Duplicates are ignored (case-insensitive); more than 10 is a 400
sizeNumber of messages to return (default: 100, silently capped at 800)
offsetFor pagination with size
countSet to true to get {"count": N} instead of messages

Response is a flat array with the same fields as /mentions/:username — messages from all the usernames are interleaved, so check text to see who was mentioned.

Try it

Returns the most recent DGG messages containing the specified username.

idRow ID of the message — use it with around_id on /daylogs and /convo
dateTimestamp in JS .getTime() format
textMessage contents
nickAuthor's username
flairsComma-separated flairs at time of message. See dgg flair mapping
sizeNumber of messages to return (default: 100, silently capped at 800)
offsetFor pagination with size
countSet to true to get {"count": N} instead of messages
Try it

Returns the most recent DGG messages sent by the specified user.

Response fields and query params are the same as /mentions.

Try it

Returns messages sent by a user that also contain a keyword.

Response fields and query params are the same as /mentions.

Try it

Bulk /stalk — grabs messages for several users at once.

usersRequired. Comma-separated usernames. Anything past the first 10 is silently dropped
sizeMessages per user (default: 100, capped at 800)
offsetFor pagination with size
around_idMessage id to centre each user's window on, for jumping to a linked message instead of paging to it

An object keyed by username. The value shape changes depending on whether you passed around_id:

without around_id{"user": [ …messages… ]}
with around_id{"user": {"messages": [ … ], "startOffset": N}}

Messages have the same fields as /mentions. Cached for 5 minutes.

Try it

Returns a single day of chat, oldest first. This one really is chronological — unlike the search endpoints, it pages forward from the start of the day.

dateRequired. YYYY-MM-DD, UTC. Anything else is a 400
sizeMessages to return (default: 500, capped at 1000)
offsetFor pagination with size
around_idMessage id to centre the window on
countSet to true to get {"count": N} for the day

Normally a flat array of messages (id, date, nick, flairs, text). With around_id you instead get {"messages": [ … ], "startOffset": N}. Use /api/logs to find out which days exist.

Try it

Every day that has logged messages, as an array of YYYY-MM-DD strings, newest first. Also see: /api/daylogs. Cached for an hour.

Try it

Email me.

Old memes that probably no one on DGG will understand at this point. Most browsers disable autoplay so half of these are broken anyway.