imisofts Public API

Free and useful APIs for growth, ops, and automation teams worldwide.

🚀 Quick Start

Get a free API key and make your first request in under 60 seconds.

🌍 Global Scale

Region-aware endpoints that work anywhere, not limited to one country.

🔒 Safe by Design

Bearer tokens, signed webhooks, and data stays in your accounts.

Quickstart

Get up and running in 3 simple steps.

Step 1: Get your free API key

Sign up with just your email. No credit card required.

Get Free API Key

Step 2: Make your first request

Try normalizing a phone number with our API:

curl -X POST https://api.imisofts.com/v1/phone/normalize \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "raw": "+1 (415) 555-2671",
    "default_region": "US",
    "whatsapp": true
  }'
const response = await fetch('https://api.imisofts.com/v1/phone/normalize', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    raw: '+1 (415) 555-2671',
    default_region: 'US',
    whatsapp: true
  })
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://api.imisofts.com/v1/phone/normalize',
    headers={
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    },
    json={
        'raw': '+1 (415) 555-2671',
        'default_region': 'US',
        'whatsapp': true
    }
)

print(response.json())

Step 3: Get the response

You'll receive a normalized phone number in multiple formats:

{
  "e164": "+14155552671",
  "international": "+1 415 555 2671",
  "national": "(415) 555-2671",
  "country_code": "US",
  "is_valid": true,
  "whatsapp_compatible": true
}

Authentication

All API requests require a Bearer token in the Authorization header.

Example Request

GET /v1/whatsapp/locales HTTP/1.1
Host: api.imisofts.com
Authorization: Bearer YOUR_API_KEY

401 Unauthorized Response

{
  "error": {
    "code": "invalid_token",
    "message": "The provided API key is invalid or expired.",
    "request_id": "req_abc123"
  }
}

Errors

All errors follow a consistent JSON envelope structure.

Error Response Format

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too many requests. See X-RateLimit-Remaining.",
    "request_id": "req_abc123"
  }
}

Common Error Codes

Status Code Description
400 invalid_request Missing or invalid parameters
401 invalid_token Invalid or expired API key
429 rate_limit_exceeded Too many requests
500 internal_error Something went wrong on our end

Rate Limits

Free tier includes generous limits for testing and production use.

60

Requests per minute

50,000

Requests per month

Response Headers

Header Description
X-RateLimit-Limit Maximum requests per minute
X-RateLimit-Remaining Requests remaining in current window
Retry-After Seconds to wait before retrying (429 only)

Webhooks

Receive real-time notifications when events occur.

Signature Verification

All webhook requests include a signature header for verification:

X-Imisofts-Signature

Retry Policy

Exponential backoff up to 6 attempts with idempotency keys.

Sample Webhook Payload

{
  "event": "tracking.updated",
  "data": {
    "carrier": "dhl",
    "tracking_id": "JD014600006543210123",
    "status": "delivered",
    "occurred_at": "2025-08-28T10:05:00Z"
  },
  "timestamp": "2025-08-28T10:06:00Z",
  "idempotency_key": "evt_abc123"
}

SDKs and Tools

Official SDKs and tools to get you started quickly.

API Playground

Test API endpoints with live or mock responses.

// Response will appear here
// cURL command will appear here

API Reference

Complete documentation for all available endpoints.

POST /utm/build UTM

Build a canonical campaign URL with UTMs

Returns a URL with validated UTM parameters and a canonical order. Useful for GA4 and ad platforms.

Request Body

Field Type Required Description
base_url string Yes The destination URL
source string Yes Campaign source (e.g., google, facebook)
medium string Yes Campaign medium (e.g., cpc, email)
campaign string Yes Campaign name
term string No Campaign term (for paid search)
content string No Campaign content (for A/B testing)
{
  "base_url": "https://example.com",
  "source": "google",
  "medium": "cpc",
  "campaign": "spring-sale"
}
{
  "url": "https://example.com?utm_source=google&utm_medium=cpc&utm_campaign=spring-sale",
  "warnings": []
}
curl -X POST https://api.imisofts.com/v1/utm/build \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "base_url": "https://example.com",
    "source": "google",
    "medium": "cpc",
    "campaign": "spring-sale"
  }'
const response = await fetch('https://api.imisofts.com/v1/utm/build', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    base_url: 'https://example.com',
    source: 'google',
    medium: 'cpc',
    campaign: 'spring-sale'
  })
});
import requests

response = requests.post(
    'https://api.imisofts.com/v1/utm/build',
    headers={
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    },
    json={
        'base_url': 'https://example.com',
        'source': 'google',
        'medium': 'cpc',
        'campaign': 'spring-sale'
    }
)
POST /phone/normalize Phone

Normalize and validate phone numbers globally

Returns E.164, international and national formats with country detection and WhatsApp compatibility.

Request Body

Field Type Required Description
raw string Yes Raw phone number input
default_region string No ISO 3166-1 alpha-2 code (US, GB, AE)
whatsapp boolean No Check WhatsApp compatibility
POST /whatsapp/templates/lint Messaging

Validate WhatsApp message templates

Checks placeholders, variable counts, language code, and length. Returns suggestions.

Guides and Recipes

Step-by-step tutorials for common use cases.

Build clean campaign links with the UTM API

  1. Request a free API key
  2. Use POST /utm/build to create your canonical link
  3. Validate naming with POST /utm/validate
  4. Send events to GA4 and confirm attribution

Validate WhatsApp templates before submission

  1. List supported locales with GET /whatsapp/locales
  2. Lint your body and placeholders with POST /whatsapp/templates/lint
  3. Fix issues and re-lint until valid

Normalize phone numbers for global messaging

  1. Send raw input to POST /phone/normalize
  2. Store E.164 for consistent delivery
  3. Use whatsapp_compatible for broadcast lists

Show delivery updates with normalized courier status

  1. List carriers with GET /couriers/carriers
  2. Query a shipment with GET /couriers/{carrier}/tracking/{id}
  3. Map status codes with GET /couriers/status-codes

Changelog

Recent updates and improvements to the API.

Initial public launch

2025-08-28
  • UTM, Phone, Messaging, Tax, Logistics, and AI endpoints available
  • Playground with mock responses
  • Rate limit headers added

Status and Uptime

All Systems Operational View Status Page →

99.99%

Uptime

42ms

Avg Response

0

Incidents

Frequently Asked Questions

Is the API free?

Yes. The free tier includes 60 requests per minute and 50,000 per month.

Do I need a credit card to sign up?

No. Email only for the free tier.

Can I use these APIs globally?

Yes. Endpoints are region aware and do not assume one country.

How do you handle security?

Bearer tokens, least privilege scopes, and signed webhooks. Data stays in your accounts whenever possible.

Do you provide SDKs?

Yes. Lightweight TS/JS and Python SDKs generated from the OpenAPI. Links are in the SDKs section.

What happens if I hit the rate limit?

You will receive a 429 with Retry-After. Upgrade links are shown in headers and errors.

Can I request new endpoints?

Yes. Open a request using the contact form. We prioritise public and safe use cases.

Ready to Get Started?

Get your free API key and start building today.