Quick Start
Get your first API request working in 5 minutes.
1. Get an API Key
- Go to /account/api-keys
- Enter your email
- Select your plan (Free, Starter, Pro, or Business)
- Copy your API key
2. Make Your First Request
curl -X POST https://www.publicsofttools.com/api/tools/jwt-verify \
-H "x-api-key: pst_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"secret": "your-secret-key"
}'3. Handle the Response
{
"valid": true,
"payload": {
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
},
"expires_in": 3600
}Authentication
All API requests require an API key. Include it in the request header:
x-api-key: pst_live_your_key_hereExample with cURL
curl -H "x-api-key: pst_live_your_key_here" \
https://www.publicsofttools.com/api/tools/endpointExample with JavaScript
const response = await fetch('https://www.publicsofttools.com/api/tools/endpoint', {
method: 'POST',
headers: {
'x-api-key': 'pst_live_your_key_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({ /* data */ })
});
const data = await response.json();Example with Python
import requests
headers = {
'x-api-key': 'pst_live_your_key_here',
'Content-Type': 'application/json'
}
response = requests.post(
'https://www.publicsofttools.com/api/tools/endpoint',
headers=headers,
json={ /* data */ }
)
data = response.json()Rate Limits & Plans
API calls are counted monthly and reset on the 1st of each month (UTC).
| Plan | Monthly Limit | Price | Best For |
|---|---|---|---|
| Free | 1,500 calls | $0 | Learning & testing |
| Starter | 15,000 calls | $29/month | Indie apps & projects |
| Pro | 100,000 calls | $99/month | Growing applications |
| Business | 1,000,000+ calls | Custom | Enterprise & scale |
What Counts as a Call?
- Each API request = 1 call
- Batch requests = 1 call per item processed
- Failed requests = 1 call (even if you get an error)
- Retries = 1 call each
Rate Limit Headers
Every response includes rate limit information:
X-RateLimit-Limit: 100000
X-RateLimit-Used: 1250
X-RateLimit-Reset: 2026-07-01T00:00:00ZExceeding Your Limit
If you exceed your limit, you'll get a 429 Too Many Requests response:
{
"error": "Rate limit exceeded",
"limit": 1500,
"used": 1501,
"reset_at": "2026-07-01T00:00:00Z",
"upgrade": "https://www.publicsofttools.com/pricing"
}Error Handling
The API uses standard HTTP status codes to indicate success or failure.
| Code | Meaning | Example |
|---|---|---|
200 | Success | Request processed successfully |
400 | Bad Request | Missing required field |
401 | Unauthorized | Invalid or missing API key |
403 | Forbidden | Plan doesn't have access |
429 | Too Many Requests | Rate limit exceeded |
500 | Server Error | Internal server error |
Error Response Format
{
"error": "Description of what went wrong",
"code": "ERROR_CODE",
"details": { /* additional info */ }
}API Endpoints
File Converter
POST /api/tools/file-converter
Convert between JSON, YAML, XML, and CSV formats.
Request
{
"input": "{ \"name\": \"John\" }",
"from_format": "json",
"to_format": "yaml"
}Response
{
"output": "name: John",
"from_format": "json",
"to_format": "yaml"
}Supported Formats
JSON, YAML, XML, CSV
JWT Verify
POST /api/tools/jwt-verify
Decode and verify JWT tokens with HMAC or RSA signatures.
Request
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"algorithm": "HS256",
"secret": "your-secret-key"
}Response
{
"valid": true,
"payload": { /* decoded data */ },
"expires_in": 3600,
"expired": false
}HTTP Status Checker
POST /api/tools/http-checker
Check HTTP status codes and analyze redirect chains.
Request
{
"urls": ["https://example.com", "https://example.com/page"]
}Response
{
"results": [
{
"url": "https://example.com",
"status": 200,
"status_text": "OK",
"response_time": 145,
"redirects": []
}
]
}Cron Parser
POST /api/tools/cron-parser
Parse cron expressions and get next execution times.
Request
{
"expression": "0 9 * * 1-5"
}Response
{
"valid": true,
"description": "At 9:00 AM, Monday to Friday",
"next_executions": [
"2026-06-08T09:00:00Z",
"2026-06-09T09:00:00Z"
]
}Mock Data Generator
POST /api/tools/mock-data-generator
Generate realistic mock data for testing.
Request
{
"count": 10,
"types": ["name", "email", "phone", "address"],
"format": "json"
}Response
{
"data": [
{
"name": "John Doe",
"email": "john@example.com",
"phone": "+1-555-0123",
"address": "123 Main St, City, State"
}
]
}Code Examples
Convert JSON to YAML
// JavaScript
const response = await fetch('https://www.publicsofttools.com/api/tools/file-converter', {
method: 'POST',
headers: {
'x-api-key': 'pst_live_your_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
input: '{"name": "John", "age": 30}',
from_format: 'json',
to_format: 'yaml'
})
});
const result = await response.json();
console.log(result.output);
// Output: name: John
age: 30Check Multiple URLs
# Python
import requests
api_key = 'pst_live_your_key'
headers = {'x-api-key': api_key}
response = requests.post(
'https://www.publicsofttools.com/api/tools/http-checker',
headers=headers,
json={
'urls': [
'https://example.com',
'https://example.com/about'
]
}
)
results = response.json()
for result in results['results']:
print(f"{result['url']}: {result['status']}")FAQ
How do I get an API key?
Visit /account/api-keys, enter your email, select a plan, and your key will be generated instantly.
Can I test for free?
Yes! The Free tier includes 1,500 API calls/month. Perfect for testing and development.
What happens if I exceed my limit?
You'll get a 429 (Too Many Requests) response. Upgrade your plan or wait until the reset on the 1st of next month.
Can I cancel anytime?
Yes, no questions asked. Cancel from your account dashboard. Your key continues working until month-end.
Do you offer SLA for Enterprise?
Yes. Contact contact@publicsofttools.com for Business plan details including SLA.
What's your API uptime?
We aim for 99.9% uptime. See our status page for current health.
Ready to build?
Get your API key and start building in minutes.
Get Free API KeyView Pricing