API Reference
Base URL: https://www.publicsofttools.com · All endpoints return JSON · CORS enabled
Authentication
Pass your API key in the X-Api-Key request header. Alternatively, append ?api_key=YOUR_KEY as a query parameter (less secure — use only for testing).
# Header (recommended)
curl https://www.publicsofttools.com/api/v1/util/uuid \
-H "X-Api-Key: YOUR_API_KEY"
# Query param (testing only)
curl "https://www.publicsofttools.com/api/v1/util/uuid?api_key=YOUR_API_KEY"No key yet? Email us to get a free key (1,500 calls/month) instantly.
Rate Limits
| Plan | Monthly calls | Per-hour limit | Price |
|---|---|---|---|
| Free | 1,500 | 50 | $0 |
| Starter | 15,000 | 200 | $9/mo |
| Pro | 100,000 | 1,000 | $49/mo |
| Business | 1,000,000 | 5,000 | $199/mo |
When you exceed the rate limit, the API returns HTTP 429 with a Retry-After header indicating seconds to wait.
Error Codes
All errors return a consistent JSON body:
{
"success": false,
"error": "Human-readable message",
"code": "MACHINE_READABLE_CODE",
"docs": "https://www.publicsofttools.com/developers/docs"
}| Code | HTTP Status | Meaning |
|---|---|---|
MISSING_KEY | 401 | X-Api-Key header or ?api_key= param is absent. |
UNAUTHORIZED | 401 | API key is invalid or has been revoked. |
RATE_LIMITED | 429 | Too many requests. Check X-RateLimit-Reset header. |
MISSING_PARAM | 400 | A required request parameter is absent. |
INVALID_PARAM | 400 | A parameter value is out of range or malformed. |
INVALID_JSON | 400 | POST body is not valid JSON. |
PARAM_TOO_LONG | 400 | A string parameter exceeds the maximum length. |
NOT_FOUND | 404 | The requested resource (domain, IP) was not found. |
UPSTREAM_ERROR | 502 | An external service returned an unexpected error. |
/api/v1/util/qrQR Code Generator
Generate a QR code from any text or URL. Returns a base64 PNG data URL or raw SVG string.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | Yes | Content to encode. Max 2,048 characters. |
format | "png" | "svg" | No | Output format. Default: "png". |
size | number | No | Width/height in pixels (64–1024). Default: 256. |
dark | string | No | Hex colour for dark modules. Default: "#000000". |
light | string | No | Hex colour for light modules. Default: "#ffffff". |
error_correction | "L" | "M" | "Q" | "H" | No | Error correction level. Default: "M". |
Example Request
{
"text": "https://publicsofttools.com",
"size": 256,
"format": "png"
}Example Response
{
"success": true,
"data": {
"image": "data:image/png;base64,iVBORw0KGgo...",
"format": "png",
"size": 256
}
}/api/v1/util/hashHash Generator
Compute cryptographic hashes of a string. Omit `algorithm` to receive all five hashes in one response.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | Yes | Input string. Max 100,000 characters. |
algorithm | "md5" | "sha1" | "sha256" | "sha384" | "sha512" | No | Hash algorithm. Omit to get all five. |
encoding | "hex" | "base64" | No | Output encoding. Default: "hex". |
Example Request
{ "text": "hello world" }Example Response
{
"success": true,
"data": {
"hashes": {
"md5": "5eb63bbbe01eeed093cb22bb8f5acdc3",
"sha1": "2aae6c69ec0821c0d6d8e9a9b1c0e8a7...",
"sha256": "b94d27b9934d3e08a52e52d7da7dabfa...",
"sha384": "fdbd8e75a67f29f701a4e040385e2e23...",
"sha512": "309ecc489c12d6eb4cc40f50c902f2b4..."
},
"encoding": "hex",
"input_length": 11
}
}/api/v1/util/uuidUUID Generator
Generate one or more cryptographically random UUID v4 values.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
count | number | No | Number of UUIDs to generate (1–100). Default: 1. |
uppercase | boolean | No | Return UUIDs in uppercase. Default: false. |
Example Request
GET /api/v1/util/uuid?count=3Example Response
{
"success": true,
"data": {
"uuids": [
"a3bb189e-8bf9-3888-9912-ace4e6543002",
"b5c2a9f1-2d3e-4a5b-8c9d-0e1f2a3b4c5d",
"c7d4e8f2-3e4f-5b6c-9d0e-1f2a3b4c5d6e"
],
"count": 3
}
}/api/v1/util/base64Base64 Encode / Decode
Encode a string to Base64 or decode Base64 back to plaintext. Supports standard and URL-safe variants.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | Yes | Input string. Max 500,000 characters. |
action | "encode" | "decode" | No | Operation to perform. Default: "encode". |
url_safe | boolean | No | Use URL-safe alphabet (replaces +/= with -_). Default: false. |
Example Request
{
"text": "Hello, World!",
"action": "encode"
}Example Response
{
"success": true,
"data": {
"result": "SGVsbG8sIFdvcmxkIQ==",
"action": "encode",
"url_safe": false,
"input_length": 13,
"output_length": 20
}
}/api/v1/util/passwordPassword Generator
Generate cryptographically secure passwords with configurable character sets and length.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
length | number | No | Password length (8–128). Default: 16. |
count | number | No | Number of passwords to generate (1–50). Default: 1. |
uppercase | boolean | No | Include uppercase letters. Default: true. |
lowercase | boolean | No | Include lowercase letters. Default: true. |
digits | boolean | No | Include digits 0–9. Default: true. |
symbols | boolean | No | Include symbols !@#$%^&* etc. Default: false. |
exclude_ambiguous | boolean | No | Remove O, 0, I, l to avoid confusion. Default: false. |
Example Request
{
"length": 20,
"count": 3,
"symbols": true,
"exclude_ambiguous": true
}Example Response
{
"success": true,
"data": {
"passwords": ["Xk#9mP@2nQw!rY5vZe&J", "..."],
"count": 3,
"length": 20,
"charset_size": 88
}
}/api/v1/ip/lookupIP Lookup
Get geolocation, ISP, ASN and proxy/VPN detection for any IPv4 or IPv6 address. Omit `ip` to look up the caller's own IP.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
ip | string | No | IPv4 or IPv6 address. Omit to look up caller IP. |
Example Request
GET /api/v1/ip/lookup?ip=8.8.8.8Example Response
{
"success": true,
"data": {
"ip": "8.8.8.8",
"country": "United States",
"country_code": "US",
"region": "Virginia",
"city": "Ashburn",
"zip": "20149",
"lat": 39.03,
"lon": -77.5,
"timezone": "America/New_York",
"isp": "Google LLC",
"org": "Google Public DNS",
"asn": "AS15169 Google LLC",
"is_mobile": false,
"is_proxy": false,
"is_hosting": true
}
}/api/v1/domain/dnsDNS Records
Query DNS records for any domain. Returns all record types by default or a specific type via the `type` parameter.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name to query (e.g. example.com). |
type | "A" | "AAAA" | "MX" | "TXT" | "CNAME" | "NS" | "SOA" | "PTR" | No | Record type. Omit to return all available types. |
Example Request
GET /api/v1/domain/dns?domain=github.com&type=MXExample Response
{
"success": true,
"data": {
"domain": "github.com",
"records": {
"MX": [
{ "exchange": "aspmx.l.google.com", "priority": 1 },
{ "exchange": "alt1.aspmx.l.google.com", "priority": 5 }
]
},
"queried_at": "2026-05-24T10:00:00.000Z"
}
}/api/v1/domain/sslSSL Certificate Checker
Retrieve SSL certificate details for any HTTPS domain including issuer, expiry date, SAN list and days remaining.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name to check (e.g. example.com). |
Example Request
GET /api/v1/domain/ssl?domain=github.comExample Response
{
"success": true,
"data": {
"domain": "github.com",
"is_valid": true,
"days_remaining": 287,
"valid_from": "2025-03-10T00:00:00.000Z",
"valid_to": "2026-03-10T23:59:59.000Z",
"subject": {
"common_name": "github.com",
"org": "GitHub, Inc.",
"country": "US"
},
"issuer": {
"common_name": "DigiCert TLS RSA SHA256 2020 CA1",
"org": "DigiCert Inc",
"country": "US"
},
"san": ["github.com", "www.github.com"]
}
}/api/v1/domain/whoisWHOIS Lookup
Look up domain registration data via RDAP — the modern HTTPS replacement for raw WHOIS. Returns registrar, registrant, dates, nameservers and status flags.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name to look up (e.g. example.com). |
Example Request
GET /api/v1/domain/whois?domain=github.comExample Response
{
"success": true,
"data": {
"domain": "github.com",
"status": ["client delete prohibited", "client transfer prohibited"],
"registered_at": "2007-10-09T18:20:50Z",
"updated_at": "2024-09-08T09:18:27Z",
"expires_at": "2026-10-09T18:20:50Z",
"registrar": { "name": "MarkMonitor Inc.", "org": null, "email": null },
"registrant": null,
"nameservers": ["dns1.p08.nsone.net", "dns2.p08.nsone.net"],
"queried_at": "2026-05-24T10:00:00.000Z"
}
}