aoogle Search Images About API

aoogle API

Free, tokenless search API for agents, CLI tools, and LLM integrations. No registration, no API key, no tracking.

Base URL

All API requests use the following base URL:

https://aoogle-production.up.railway.app

Endpoint

GET /api/search?q={query}

Parameters

ParameterTypeDefaultDescription
qstringRequired. Your search query.
pageinteger1Page number for pagination.
prettyboolean0Set to 1 to pretty-print JSON output.

Quick Try

Type a query below to see a live API response:

Click "Try it" to see the JSON response.

Response Format

A successful search returns JSON with the following structure:

{
  "query": "python programming",
  "page": 1,
  "total_results": 25,

  // Knowledge panel (present for known entities like "python", "docker", etc.)
  "info_box": {
    "title": "Python (programming language)",
    "type": "Programming language",
    "description": "Python is a high-level, general-purpose...",
    "image": "https://www.python.org/static/community_logos/...",
    "facts": [
      ["Designed by", "Guido van Rossum"],
      ["First appeared", "1991"]
    ]
  },

  // Array of search results
  "results": [
    {
      "title":       "Welcome to Python.org",
      "url":         "https://www.python.org/",
      "display_url": "https://www.python.org/",
      "snippet":     "The official home of the Python Programming Language.",
      "favicon":     "https://www.google.com/s2/favicons?domain=...",
      "category":    "official",
      "date":        null,
      "score":       42.15
    }
  ]
}

Result Fields

FieldTypeDescription
titlestringTitle of the search result.
urlstringFull URL to the result page.
display_urlstringTruncated URL for display (max 60 chars).
snippetstringContextual excerpt from the page.
faviconstringFavicon URL via Google's favicon service.
categorystringResult category: general, news, tech, academic, official, shopping, social, video, discussion.
datestring|nullExtracted date from snippet, if found (e.g. "Jun 15, 2026").
scorefloatRelevance score from 0–100+. Higher = more relevant.

Response Headers

HeaderDescription
X-RateLimit-RemainingNumber of requests remaining in the current hour window.
X-RateLimit-ResetSeconds until the rate limit resets (present on 429 responses).

Error Responses

400 — Missing query parameter

{
  "error": "Missing query parameter",
  "usage": "/api/search?q=your+query"
}

429 — Rate limit exceeded

{
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 25 requests per hour. Retry after 1234 seconds.",
  "retry_after": 1234
}

500 — Internal server error

{
  "error": "Search failed",
  "message": "An internal error occurred while searching."
}

Demo: Terminal Search Tool

Here's a complete Python program that turns the API into an interactive terminal search tool — perfect for use in agents, scripts, or just from the command line:

📖 aoogle CLI — interactive search in terminal
#!/usr/bin/env python3
"""aoogle-cli — search from the terminal using the aoogle API"""

import sys
import requests

BASE = "https://aoogle-production.up.railway.app/api/search"

def search(query, page=1):
    try:
        r = requests.get(BASE, params={"q": query, "page": page}, timeout=15)

        if r.status_code == 429:
            print("Rate limit hit. Try again later.")
            return None

        r.raise_for_status()
        return r.json()

    except requests.RequestException as e:
        print(f"Request failed: {e}")
        return None

def show_results(data):
    if not data or "results" not in data:
        return

    print(f'\nResults for "{data["query"]}":')
    print(f'Found {data["total_results"]} results\n')

    for i, r in enumerate(data["results"], 1):
        print(f'  {i}. {r["title"]}')
        print(f'     {r["url"]}')
        print(f'     {r["snippet"][:120]}')
        print()

def main():
    if len(sys.argv) > 1:
        query = " ".join(sys.argv[1:])
        data = search(query)
        show_results(data)
        return

    # Interactive mode
    print("aoogle CLI — type a query or 'q' to quit")
    while True:
        try:
            q = input("\n> ").strip()
            if not q or q == "q":
                break
            data = search(q)
            show_results(data)
        except KeyboardInterrupt:
            print()
            break

if __name__ == "__main__":
    main()
💡 Usage: Save as aoogle-cli.py and run: python aoogle-cli.py your search query for a one-shot search, or just python aoogle-cli.py for interactive mode.

Agent / LLM Integration

The API is designed to work seamlessly with AI agents, LLM tool-calling, and automation pipelines:

Function tool definition (OpenAI / Anthropic style)

aoogle_search_tool = {
    "type": "function",
    "function": {
        "name": "web_search",
        "description": "Search the web for current information. No API key needed.",
        "parameters": {
            "type": "object",
            "properties": {
                "q": {
                    "type": "string",
                    "description": "The search query"
                }
            },
            "required": ["q"]
        }
    }
}

Python agent helper

import requests

def web_search(query, max_results=5):
    """Search the web and return top results as a formatted string."""
    r = requests.get(
        "https://aoogle-production.up.railway.app/api/search",
        params={"q": query},
        timeout=15
    )
    data = r.json()

    lines = []
    for res in data.get("results", [])[:max_results]:
        lines.append(f"- {res["title"]}: {res["snippet"]} ({res["url"]})")
    return "\n".join(lines) or "No results found."

Shell one-liner for scripts

curl "https://aoogle-production.up.railway.app/api/search?q=weather+forecast" | jq '.results[] | "\(.title): \(.url)"'

Node.js / JavaScript agent

async function aoogleSearch(query) {
    const res = await fetch(
        `https://aoogle-production.up.railway.app/api/search?q=${encodeURIComponent(query)}`
    );
    const data = await res.json();
    return data.results.map(r => ({
        title: r.title,
        url: r.url,
        snippet: r.snippet
    }));
}

Best Practices


Integrity & Safety

The API respects the same safety checks as the web interface: