Webhook targets
Hand a callback a name to type while the address behind it is still moving.
Web - DNS
The free Temporary DNS Name API endpoint puts a public hostname on an address you already control, for 24 hours. Send the address last in the path and the answer is a name on 53for24h.com that resolves through public resolvers and then expires on its own.
Put the address the name should point at straight after /dns/. It has to be a public unicast address, IPv4 or IPv6, and it is never taken from the caller, because the machine asking is usually not the machine the name should reach.
curl "https://aisenseapi.com/services/v1/dns/203.0.113.10"{
"ok": true,
"name": "aisense-t1mpdqk.53for24h.com",
"slug": "t1mpdqk",
"ip": "203.0.113.10",
"record": "A",
"ttl": 60,
"nameservers": ["ns1.aisenseapi.com", "ns2.aisenseapi.com"],
"expire_at": "2026-09-24T18:42:17Z",
"dns_token": "shown once",
"serial": 9
}The name is assigned, never chosen. Keep the dns_token: it is shown once and is the only way to move or remove the name before it expires.
Every call is a GET with its arguments in the path. A seven character slug names an existing record; an address creates a new one. The two can never be confused, because a slug has no dots or colons.
| Call | Token | Does |
|---|---|---|
GET /dns/{ip} | None | Creates a name pointing at the address. 201 with the name and the token |
GET /dns/{slug} | None | Reads what the name points at and when it expires |
GET /dns/{slug}/update/{ip} | Bearer | Moves the name to another address. The expiry does not move |
GET /dns/{slug}/delete | Bearer | Removes the name; the primary at once, the secondary as replication reaches it |
The token goes in an Authorization: Bearer header, never in the path, so it stays out of access logs. Only the holder of the token can move or delete a name. Reading is open, because everything a read returns is already public in DNS.
| Field | Type | Description |
|---|---|---|
| name | string | The full hostname, aisense-<slug>.53for24h.com. |
| slug | string | The seven character handle used to read, move or delete the name. |
| ip | string | The address the name resolves to. |
| record | string | A for IPv4, AAAA for IPv6. |
| ttl | integer | Always 60. The served value never exceeds the time the name has left. |
| nameservers | array | The two name servers that answer for the zone. |
| expire_at | string | The ISO 8601 instant the name stops answering, 24 hours after creation. |
| dns_token | string | Shown once on creation. The only key to move or delete the name. |
Every name stops answering 24 hours after it was created, and nothing extends that. Never print one on a poster, a slide or a badge. The TTL menu has one item, 60 seconds, because a short-lived name with a long TTL is a name that keeps answering after it is gone.
The countdown starts when the API answers. A name is for the length of a task, not for publishing. When the work is done, GET /dns/{slug}/delete with the token removes it early; otherwise it clears itself. A resolver that already holds the answer keeps it for the rest of its TTL, at most 60 seconds.
The endpoint assigns aisense-<slug>.53for24h.com and writes it to both name servers.
The zone is delegated at the registry, so public resolvers answer the name within a second, not just our own servers.
Twenty-four hours later the name is gone from both servers, whether or not anyone deletes it.
The zone is served by ns1.aisenseapi.com and ns2.aisenseapi.com, on separate machines at separate sites. A create or a delete is applied to the primary at once and reaches the secondary by replication. A secondary that is briefly disconnected may keep answering an old name until it reconnects or the name expires. An unknown name in the zone answers NXDOMAIN; a name outside the zone answers REFUSED, which is what an authoritative server should say.
Failures arrive as JSON with an error string. Check the status code rather than the text.
| Status | When |
|---|---|
| 400 | The address is not a public unicast address: private, loopback, link-local, multicast or malformed |
| 401 | An update or delete without a valid bearer token |
| 403 | A token that does not match the name |
| 404 | An unknown or expired name, or a route that is neither an address nor a slug |
| 429 | More than 10 names from one address in an hour, or a change less than 10 seconds after the last |
| 503 | The zone is briefly unavailable. Retry |
A name is a DNS record only: no tunnel, no hosting, no certificate and no HTTPS. The zone is not on the Public Suffix List, so every name shares one certificate quota and browsers treat them as one site. Do not put a login behind one.
Use it where a name, not a service, is what is missing: a webhook target someone has to type, a staging box whose address moves, a service two agents must reach by the same name. The address it points at is yours to run and to secure.
Hand a callback a name to type while the address behind it is still moving.
Reach a box by name for a day without touching a registrar.
Let two agents reach the same machine by one name for the length of a job.
Point a name at a test host, run the test, and let the name expire.
Names are public. They are in DNS, anyone watching can enumerate them, and nothing private belongs in one. The zone is public and can be watched.
The pilot allows 10 names per client address per hour, one change per name per 10 seconds, and 100 active names in total. Responses set no-store cache headers. The service-wide ceiling is 5000 requests per IP per 24 hours across every endpoint.