Archers Intel API

A clean REST API for license key validation, user profiles, and more — built for developers and AI assistants alike.

BASE https://api.archersintel.com

Base URL & Versioning

All endpoints are versioned. The current version is v1. Prefix every request with /v1.

https://api.archersintel.com/v1/{endpoint}
ℹ️ Breaking changes will always ship as a new version (/v2, etc). Old versions stay live.

Response Format

Every response is JSON. Success and error responses share the same wrapper shape — your code only needs to check ok.

✓ Success
"ok": true,
"data": { /* endpoint-specific payload */ }
✗ Error
"ok": false,
"error": "error_code",
"message": "Human-readable explanation"

Error Codes

HTTPerrorMeaning
400missing_paramsOne or more required query parameters are absent.
400not_applicableThe requested action doesn't apply (e.g. product has no license keys).
401unauthorizedAPI secret is missing or incorrect.
404not_foundUser, product, or resource doesn't exist.
500server_errorUnexpected internal error.

User Profile

GET /v1/{username}

Returns a seller's public profile and their listed products.

Path Parameters

ParameterTypeRequiredDescription
username string required The seller's username on Archers Intel.

Example Request

curl https://api.archersintel.com/v1/johndoe
const res  = await fetch('https://api.archersintel.com/v1/johndoe');
const json = await res.json();

if (json.ok) {
  console.log(json.data.display_name); // "John Doe"
  console.log(json.data.products);    // array of products
}
import requests

r    = requests.get('https://api.archersintel.com/v1/johndoe')
data = r.json()

if data['ok']:
    print(data['data']['display_name'])
    for product in data['data']['products']:
        print(product['title'], product['url'])
$res  = file_get_contents('https://api.archersintel.com/v1/johndoe');
$data = json_decode($res, true);

if ($data['ok']) {
    echo $data['data']['display_name'];
}

Response

✓ 200 OK
{
  "ok": true,
  "data": {
    "username":      "johndoe",
    "display_name":  "John Doe",
    "bio":           "I build indie tools.",
    "location":      "Austin, TX",
    "website":       "https://johndoe.dev",
    "avatar_url":    "https://archersintel.com/uploads/avatars/abc.jpg",
    "joined_at":     "2025-11-03 14:22:00",
    "product_count": 3,
    "products": [
      {
        "slug":          "my-cool-tool",
        "title":         "My Cool Tool",
        "price_cents":   1999,
        "pricing_model": "one_time",
        "url":           "https://archersintel.com/products/my-cool-tool"
      }
    ]
  }
}
✗ 404 Not Found
{ "ok": false, "error": "not_found", "message": "User not found." }

Validate License Key

GET /v1/{username}/validate_key

Checks whether a license key is valid and not revoked. This is a public endpoint — no secret or authentication needed. Call it directly from your app with the key your customer entered.

✓ No auth required The license key itself is the credential. Just pass the key and your product slug — that's it.

Path Parameters

ParameterTypeRequiredDescription
username string required Your seller username on Archers Intel.

Query Parameters

ParameterTypeRequiredDescription
key string required The license key to validate (e.g. A1B2-C3D4-E5F6-G7H8-I9J0).

Example Request

curl "https://api.archersintel.com/v1/johndoe/validate_key?key=A1B2-C3D4-E5F6-G7H8-I9J0"
const res  = await fetch('https://api.archersintel.com/v1/johndoe/validate_key?key=A1B2-C3D4-E5F6-G7H8-I9J0');
const json = await res.json();

if (json.ok && json.data.valid) {
  // ✅ Key is valid — grant access
} else {
  // ❌ Key invalid — check json.data.reason
}
import requests

r    = requests.get('https://api.archersintel.com/v1/johndoe/validate_key', params={'key': 'A1B2-C3D4-E5F6-G7H8-I9J0'})
data = r.json()

if data['ok'] and data['data']['valid']:
    print('✅ License valid')
else:
    print(f"❌ Invalid: {data['data']['reason']}")
$url  = 'https://api.archersintel.com/v1/johndoe/validate_key?key=' . urlencode('A1B2-C3D4-E5F6-G7H8-I9J0');
$data = json_decode(file_get_contents($url), true);

if ($data['ok'] && $data['data']['valid']) {
    // ✅ Grant access
} else {
    // ❌ Deny — $data['data']['reason'] has the reason code
}

Response

✓ Valid key
{ "ok": true, "data": { "valid": true, "reason": null } }
✗ Invalid / revoked key
{ "ok": true, "data": { "valid": false, "reason": "revoked" } }
// reason: "not_found" | "revoked" | "subscription_inactive"

Reason codes

reasonMeaning
nullKey is valid and active. Grant access.
not_foundKey doesn't exist for this product.
revokedKey was manually revoked by the seller.
subscription_inactiveThe subscription backing this key has lapsed or been cancelled.

🤖 AI Integration Guide

Working with an AI assistant (ChatGPT, Claude, Cursor, Copilot, etc.)? Paste the block below as context and tell it what you want to build. It has everything needed to write correct, working integration code on the first try.

📋 Copy this into your AI chat

Replace the placeholder values with your actual username, product slug, and API secret, then describe what you want the AI to build.

I am integrating the Archers Intel API into my project.

BASE URL: https://api.archersintel.com

All responses have this shape:
  Success: { "ok": true,  "data": { ... } }
  Error:   { "ok": false, "error": "code", "message": "..." }

=== ENDPOINT 1: User Profile ===
GET /v1/{username}
Returns: username, display_name, bio, location, website, avatar_url, joined_at, product_count, products[]
Each product: { slug, title, price_cents, pricing_model, url }
No authentication required.

=== ENDPOINT 2: License Key Validation ===
GET /v1/{username}/validate_key
Public endpoint — no auth required.
Query params:
  key = the license key string (e.g. A1B2-C3D4-E5F6-G7H8-I9J0)

Response data: { valid: bool, reason: null|"not_found"|"revoked"|"subscription_inactive" }

My details:
  username: YOUR_USERNAME

Please help me: [DESCRIBE WHAT YOU WANT TO BUILD]
💡 Tip for AI users Ask the AI to store ARCHERS_API_SECRET in an environment variable — never hardcode secrets in source files.

⚡ Quick Start

Three steps to validate a license key in under 5 minutes:

1. Get your API Secret

Go to your seller dashboard → your product → License Settings. Copy the API Secret. Store it as an environment variable.

2. Note your product slug

It's the last part of your product URL: archersintel.com/products/your-slug-here

3. Make the call

curl "https://api.archersintel.com/v1/YOUR_USERNAME/validate_key?key=LICENSE_KEY"
🚀 More endpoints coming The API is actively growing. Future v1 endpoints will cover posts, comments, followers, purchases, and more. Bookmark this page or follow archersintel.com for updates.