{
  "openapi": "3.1.0",
  "info": {
    "title": "AdFreeLLM Research APIs",
    "version": "1.0.0",
    "description": "Bounded web, local-business, social, and mobile-app review research for agents."
  },
  "servers": [
    {
      "url": "https://www.speecship.com"
    }
  ],
  "paths": {
    "/google-search": {
      "post": {
        "operationId": "google_search",
        "summary": "Google Search / SERP API for current web research, citations, RAG, and competitor monitoring. Returns up to 20 structured public results.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "description": "Structured search result pages",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.01",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0xb14e0032831d6f790154d25a1224f8c6b185dd59a7b7f6de208cfcfe0291c258"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "Search query"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "Maximum results, 1-20",
                    "minimum": 1,
                    "maximum": 20
                  },
                  "language": {
                    "type": "string",
                    "description": "Language code such as en"
                  },
                  "country": {
                    "type": "string",
                    "description": "Country code such as us"
                  }
                },
                "required": [
                  "query"
                ]
              }
            }
          }
        }
      }
    },
    "/web-crawl-markdown": {
      "post": {
        "operationId": "web_crawl_markdown",
        "summary": "Web research and website scraping: crawl up to 10 public pages into Markdown for RAG ingestion, summarization, and citations.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "description": "Crawled pages with Markdown and metadata",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.04",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0xb14e0032831d6f790154d25a1224f8c6b185dd59a7b7f6de208cfcfe0291c258"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "Public HTTP(S) website URL"
                  },
                  "max_pages": {
                    "type": "integer",
                    "description": "Maximum pages, 1-10",
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        }
      }
    },
    "/google-maps-businesses": {
      "post": {
        "operationId": "google_maps_businesses",
        "summary": "Google Maps local business research and lead discovery for vendor sourcing, market mapping, and competitor analysis. Returns up to 10 public places.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "description": "Structured public business records",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.03",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0xb14e0032831d6f790154d25a1224f8c6b185dd59a7b7f6de208cfcfe0291c258"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "Business category or search phrase"
                  },
                  "location": {
                    "type": "string",
                    "description": "City, region, or address"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "Maximum places, 1-10",
                    "minimum": 1,
                    "maximum": 10
                  },
                  "language": {
                    "type": "string",
                    "description": "Language code such as en"
                  }
                },
                "required": [
                  "query",
                  "location"
                ]
              }
            }
          }
        }
      }
    },
    "/instagram-research": {
      "post": {
        "operationId": "instagram_research",
        "summary": "Public Instagram social media research for creator discovery, brand monitoring, content analysis, and trend discovery. Returns up to 10 bounded items.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "description": "Structured public Instagram records",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.02",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0xb14e0032831d6f790154d25a1224f8c6b185dd59a7b7f6de208cfcfe0291c258"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "target": {
                    "type": "string",
                    "description": "Public username or Instagram URL"
                  },
                  "type": {
                    "type": "string",
                    "description": "Result type",
                    "enum": [
                      "posts",
                      "details",
                      "comments",
                      "reels",
                      "mentions"
                    ]
                  },
                  "limit": {
                    "type": "integer",
                    "description": "Maximum results, 1-10",
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                "required": [
                  "target"
                ]
              }
            }
          }
        }
      }
    },
    "/youtube-research": {
      "post": {
        "operationId": "youtube_research",
        "summary": "Public YouTube social media research for video and channel discovery, content analysis, competitor monitoring, and trend tracking. Returns up to 10 results.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "description": "Structured public YouTube records",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.03",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0xb14e0032831d6f790154d25a1224f8c6b185dd59a7b7f6de208cfcfe0291c258"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "YouTube search query"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "Maximum results, 1-10",
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                "required": [
                  "query"
                ]
              }
            }
          }
        }
      }
    },
    "/app-store-reviews": {
      "post": {
        "operationId": "app_store_reviews",
        "summary": "Apple App Store reviews API for ASO, mobile product research, competitor monitoring, and customer feedback analysis. Returns up to 100 recent public reviews from one country storefront.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "app_id": {
                      "type": "string"
                    },
                    "country": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "items": {
                      "type": "array",
                      "description": "Normalized recent App Store review records",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.02",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0xb14e0032831d6f790154d25a1224f8c6b185dd59a7b7f6de208cfcfe0291c258"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "app_id": {
                    "type": "string",
                    "description": "Numeric Apple App Store ID as a string",
                    "pattern": "^\\d{5,20}$"
                  },
                  "country": {
                    "type": "string",
                    "description": "Two-letter App Store storefront code such as us, cn, jp, or gb",
                    "pattern": "^[A-Za-z]{2}$"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "Maximum recent reviews, 1-100",
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                "required": [
                  "app_id"
                ]
              }
            }
          }
        }
      }
    },
    "/health": {
      "post": {
        "operationId": "health",
        "summary": "Free health probe",
        "responses": {
          "200": {
            "description": "Success"
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        }
      }
    }
  }
}