Time
See the time API guide for datetime, timestamp and timezone examples.
Datetime REST API Endpoint
GET /datetime[/{offset}]
Current date and time in ISO 8601. The optional offset is a four-digit UTC offset with an optional sign - +0200, -0530 or 0100. An hour-only value such as 1 is not a valid route.
curl https://aisenseapi.com/services/v1/datetime/+0200
{ "datetime": "2026-08-16T11:44:35+02:00" }
Timestamp REST API Endpoint
GET /timestamp
Current Unix timestamp in seconds. Response key: timestamp.
{ "timestamp": 1786873261 }
Microtimestamp REST API Endpoint
GET /microtimestamp
Unix timestamp with microsecond precision. Response key: microtimestamp.
{ "microtimestamp": 1786873474.745043 }
Timezones REST API Endpoint
GET /timezones[/{offset}]
All available timezones, optionally filtered by a four-digit offset. The list contains objects, not strings.
{
"timezones": [
{ "timezone": "Africa/Abidjan", "offset": "+0000" },
{ "timezone": "Africa/Blantyre", "offset": "+0200" }
]
}
Swatchinternettime REST API Endpoint
GET /swatchinternettime
Swatch Internet Time. The day is divided into 1000 .beats of 86.4 seconds each, based on Biel Meantime, with no time zones. beat is a string with a leading @, not a number.
{ "beat": "@444", "date": "2026-08-16" }
Timestamp Convert REST API Endpoint
POST /timestamp_convert
One time value in, every representation out. Accepts unix seconds, unix milliseconds (13 digits and up, the Date.now() format, detected automatically), ISO 8601, RFC 2822, or "now". The optional offset uses the same four digit form as /datetime. Bad input returns HTTP 400.
Request: { "data": "1700000000123", "offset": "+0100" }
Response: { "input": "1700000000123", "detected": "unix_ms", "timestamp": 1700000000,
"datetime": "2023-11-14T23:13:20+01:00", "rfc2822": "Tue, 14 Nov 2023 23:13:20 +0100",
"utc_datetime": "2023-11-14T22:13:20+00:00" }
Random
See the random generator API guide for UUID, GUID, password, number and color endpoints.
Random Number REST API Endpoint
GET /random_number[/{from}[/{to}]]
Random integer, inclusive of both bounds. No arguments gives 1 - 6. A single argument is treated as the upper bound with the lower bound fixed at 1.
curl https://aisenseapi.com/services/v1/random_number/1/100
{ "random_number": 73, "range": { "from": 1, "to": 100 } }
Random Color REST API Endpoint
GET /random_color
Random hex colour, always six digits. Response key: random_color.
{ "random_color": "#9b6bbf" }
UUID REST API Endpoint
GET /uuid
Generate a UUID version 4. Response key: uuid.
{ "uuid": "429151ee-82a1-4438-b2f1-b6b9c9e4a41f" }
GUID REST API Endpoint
GET /guid
Generate a GUID. Response key: guid.
{ "guid": "750dd9a6-a507-4a89-b4ec-8cd71fc115b7" }
Password REST API Endpoint
GET /password[/{length}]
Random password including punctuation, twelve characters by default.
curl https://aisenseapi.com/services/v1/password/16
{ "password": "jFehS]AKGx9wl[jp", "password_length": 16 }
Hash
All hash endpoints are POST and accept JSON, plain text or a file upload. Each returns a key named after the algorithm - never hash.
See the hashing API guide for all five algorithms and input formats.
Hash endpoints, response keys and example digests
| Endpoint | Response key | Digest of "Hello" |
/md5_hash | md5_hash | 8b1a9953c4611296a827abf8c47804d7 |
/sha1_hash | sha1_hash | f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 |
/sha256_hash | sha256_hash | 185f8db32271fe25f561a6fc938b2e26... |
/sha512_hash | sha512_hash | 3615f80c9d293ed7402687f94b22d58e... |
/crc32_checksum | crc32_checksum | 4157704578 |
MD5, SHA1, SHA256 and SHA512 Hash REST API Endpoints
POST /md5_hash - /sha1_hash - /sha256_hash - /sha512_hash
curl -X POST https://aisenseapi.com/services/v1/sha256_hash \
-H "Content-Type: application/json" -d '{"data": "Hello"}'
{ "sha256_hash": "185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" }
CRC32 Checksum REST API Endpoint
POST /crc32_checksum
Returns an integer, not a hex string.
Request: { "data": "Hello" }
Response: { "crc32_checksum": 4157704578 }
Hash Verify REST API Endpoint
POST /hash_verify
Verify data against a hash from any endpoint above. The algorithm is recognized from the hash itself: an integer means crc32, hex strings map by length (8 crc32, 32 md5, 40 sha1, 64 sha256, 128 sha512). A mismatch is a result with match: false, and computed is always included so the difference is visible. JSON only.
Request: { "data": "Hello", "hash": "185f8db32271fe25f561a6fc938b2e26..." }
Response: { "match": true, "algorithm": "sha256", "computed": "185f8db3..." }
Web
Ping REST API Endpoint
GET /ping
Connectivity check. Response key: ping.
{ "ping": "pong" }
Health REST API Endpoint
GET /health
Service health with a high-precision timestamp. The second key is microtimestamp, not timestamp.
{ "status": "ok", "microtimestamp": 1786873258.589068 }
Client IP REST API Endpoint
GET /client_ip
The public IP address of the caller.
{ "ip": "203.0.113.42" }
User Agent REST API Endpoint
GET /user_agent
{ "user_agent": "curl/8.5.0" }
GET /ip_reverse_lookup/{ip}
Geolocates an IP address. city and place are frequently null, and the coordinates fall back to the country centroid when the city is unknown. Latitude and longitude are strings.
curl https://aisenseapi.com/services/v1/ip_reverse_lookup/8.8.8.8
{
"ip": "8.8.8.8",
"country": "United States",
"city": null,
"location": { "lat": "37.751000", "lng": "-97.822000" },
"place": null,
"timezone": "America/Chicago"
}
Domain IP Lookup REST API Endpoint
GET /domain_ip_lookup/{domain}
{ "domain": "example.com", "ip": "104.20.23.154" }
Email Validate REST API Endpoint
POST /email_validate
Syntax check, then DNS through the host resolver - nothing goes to a third party. has_mx means the domain publishes MX records; has_address_record covers the RFC 5321 fallback, so a missing MX alone does not prove an address dead. A failing address is a result with valid_syntax: false, and the endpoint never opens an SMTP conversation.
Request: { "data": "test@gmail.com" }
Response: { "email": "test@gmail.com", "valid_syntax": true, "domain": "gmail.com",
"has_mx": true, "mx_hosts": ["gmail-smtp-in.l.google.com", "..."], "has_address_record": true }
Validate REST API Endpoint
POST /validate/{type}
Check-digit validation for iban, card, orgnr, kontonummer and phone. Pure arithmetic - nothing is looked up, so valid means well-formed with a correct check digit. An invalid value is a result with valid: false, and the card number is never echoed back. Full details.
POST /validate/iban { "data": "NO9386011117947" }
-> { "type": "iban", "valid": true, "country": "NO", "checksum_ok": true }
POST /storage - GET /storage/{storage_id}
Temporary key-value storage for JSON, text or files. Post any body, get a UUID, retrieve it from anywhere - another machine, a later pipeline step, a different agent call. No database and no credentials.
The body is stored verbatim: whatever you send is exactly what comes back, with no wrapper added or removed. Everything expires after 24 hours.
curl -X POST https://aisenseapi.com/services/v1/storage \
-H "Content-Type: application/json" -d '{"result": 42}'
{ "storage_id": "123e4567-e89b-12d3-a456-426614174000", "expire_timestamp": 1738457158 }
curl https://aisenseapi.com/services/v1/storage/123e4567-e89b-12d3-a456-426614174000
Response: {"result": 42}
GET /url_shortener/{url}
The target URL goes inline in the path. Links expire after 24 hours.
curl "https://aisenseapi.com/services/v1/url_shortener/https://example.com/some/long/path"
{ "short_url": "https://307.fi/KtNshX2B", "expire_timestamp": 1786959715 }
POST /webhook_capture - GET /webhook_capture/{capture_id}
Create a capture session, get a unique URL, point any external service at it - Stripe, GitHub, Shopify - and read back the full inbound request: method, headers, query parameters, client IP and parsed body. No ngrok, no local tunnel, no server. Expires after 24 hours.
# 1. create
curl -X POST https://aisenseapi.com/services/v1/webhook_capture
{ "ok": true, "capture_id": "6f8c9e52-...", "update_url": ".../update", "read_url": "...", "expire_timestamp": ... }
# 2. point any HTTP method at update_url
# 3. read it back
{
"ok": true,
"capture_id": "6f8c9e52-...",
"captured_at_datetime": "2026-08-16T09:41:56Z",
"request": {
"method": "POST",
"headers": { "content-type": "application/json" },
"client_ip": "203.0.113.10",
"body": { "json": { "event": "payment.created" }, "text": null, "base64": null, "raw_length": 28 }
}
}
POST /webhook_action - GET /webhook_action/{action_id}
Human-in-the-loop for automated pipelines. When a process needs a person to decide before it continues, this handles the whole pattern with no backend of your own: post a form definition, send the resulting form_url to a human, and poll result_url until status becomes answered.
Field types are radio, select, text, textarea and checkbox. options accepts plain strings or {"value": ..., "label": ...} objects. Expires after 24 hours.
{
"title": "Approve deployment to production?",
"fields": [
{ "type": "radio", "name": "decision", "label": "Decision", "required": true,
"options": [ { "value": "approve", "label": "Approve" },
{ "value": "reject", "label": "Reject" } ] },
{ "type": "textarea", "name": "comment", "label": "Notes" }
]
}
{ "ok": true, "action_id": "9e0e6d3b-...", "form_url": ".../form", "result_url": "...",
"expire_timestamp": ..., "expire_datetime": "2026-08-17T09:45:12Z" }
# poll the result
{ "ok": true, "action_id": "9e0e6d3b-...", "status": "answered",
"answered_at_datetime": "2026-08-16T15:13:20Z",
"response": { "decision": "approve", "comment": "Looks good" } }
POST /webhook_schedule - GET /webhook_schedule/{schedule_id}
The timer an agent does not have. POST a URL and payload with delay_seconds or fire_at, and the payload is delivered at that time with one retry. The horizon is one minute to 24 hours, and delivery lands on the next whole minute after the job falls due rather than at the exact second. The target must resolve to a public address; private, loopback and reserved ranges are refused at creation and again at delivery, and redirects are never followed. Full details.
POST /webhook_schedule { "url": "https://example.com/hook", "delay_seconds": 1200, "payload": { "job": 42 } }
-> { "ok": true, "schedule_id": "1f1d7b8b-...", "status": "scheduled", "result_url": "..." }
GET /webhook_schedule/{id}
-> { "status": "fired", "attempts": 1, "http_status": 200 }
Crypto
Wallet generation is for development and testing only. A private key produced by a public HTTP endpoint has crossed a network you do not control. Never fund a wallet generated this way.
Solana Generate New Wallet REST API Endpoint
GET /solana/generate_new_wallet
{ "private_key": "...", "public_address": "..." }
Bitcoin Generate New Wallet REST API Endpoint
GET /bitcoin/generate_new_wallet
Follows Bitcoin's secp256k1 standard, with the private key in hexadecimal and WIF form.
{ "private_key": "...", "private_key_wif": "...", "public_address": "..." }
Ethereum Generate New Wallet REST API Endpoint
GET /ethereum/generate_new_wallet
{ "private_key": "0x...", "public_address": "0x..." }
Solana, Bitcoin and Ethereum Balance REST API Endpoints
GET /{chain}/balance/{address}
Ethereum returns both balances as strings, because Wei routinely exceeds 253 - the largest integer a JSON number survives in a JavaScript client. Bitcoin and Solana return numbers. Their smallest units stay inside the safe range.
/solana/balance/{address}
{ "wallet": "So1111...", "balance_sol": 1694.799038633, "balance_lamports": 1694799038633 }
/bitcoin/balance/{address}
{ "wallet": "1A1zP1...", "final_balance_btc": 107.36719456, "final_balance_sats": 10736719456 }
/ethereum/balance/{address}
{ "wallet": "0xd8dA...", "balance_eth": "6.634527787345637061", "balance_wei": "6634527787345637061" }
Quick start
curl
curl https://aisenseapi.com/services/v1/uuid
Python
Zero dependencies, standard library only.
from aisense_api import AISenseAPI
api = AISenseAPI()
print(api.get_uuid()["uuid"])
print(api.hash_sha256("Hello")["sha256_hash"])
print(api.ip_reverse_lookup("8.8.8.8")["country"])
JavaScript
Node 18 or later, and every modern browser. Native fetch, no dependencies.
import { AISenseAPI } from './aisense-api.js'
const api = new AISenseAPI()
console.log((await api.getUUID()).uuid)
console.log((await api.hashSHA256('Hello')).sha256_hash)
LLM function calling
The repository includes openai-tools.json with tool definitions for any model that supports function calling, and SKILL.md for Claude.
import json
from openai import OpenAI
with open("openai-tools.json") as f:
tools = json.load(f)
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o", tools=tools,
messages=[{"role": "user", "content": "Generate a UUID and hash Hello with SHA256"}]
)
Client libraries, tool definitions and a test suite that verifies every response format against production: github.com/aisenseapi/aisense-free-public-rest-apis