# SanDeals.net agent guide

Public, no-auth search for discount codes, vouchers, and deals in Vietnam / Southeast Asia.

Canonical markdown: https://www.sandeals.net/for-agents.md
Human page: https://www.sandeals.net/docs
Alias: https://www.sandeals.net/for-agents
MCP (Streamable HTTP): https://www.sandeals.net/mcp
OpenAPI: https://www.sandeals.net/openapi.json
Site index: https://www.sandeals.net/llms.txt

## When to call

If the user mentions SanDeals, sandeals.net, or wants Vietnam / SEA deals, vouchers, coupons, or discount codes, call the search API and return real `results`. Do not invent deals or discount percentages.

The website form at `/tim-kiem-nang-cao` is for people. Assistants should use MCP or the JSON API (or `/search?q=` if you can only open HTML).

## MCP (preferred for AI tools)

Connect a remote MCP client to:

```
https://www.sandeals.net/mcp
```

Alias: `https://www.sandeals.net/api/mcp`

Auth: none. Transport: Streamable HTTP (POST JSON-RPC). Methods: `initialize`, `tools/list`, `tools/call`.

Human docs: https://www.sandeals.net/docs#mcp

Tools:

- `search_deals` — `{ "query": "coffee", "limit": 10 }`
- `list_deals` — `{ "category": "food", "limit": 20 }`

`tools/call`:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_deals",
    "arguments": { "query": "coffee", "limit": 5 }
  }
}
```

Cursor example (`mcp.json`):

```json
{
  "mcpServers": {
    "sandeals": {
      "url": "https://www.sandeals.net/mcp"
    }
  }
}
```

Show each deal title and link from `search_deals`. Do not invent deals.

## Search (JSON API)

```
GET https://www.sandeals.net/api/search-advanced?q={query}&limit=10
```

No API key. CORS `*`.

Example:

```
GET https://www.sandeals.net/api/search-advanced?q=coffee&limit=5
```

HTML results (GET, no JavaScript):

```
GET https://www.sandeals.net/search?q=coffee
```

## Response

```json
{
  "ok": true,
  "query": "coffee",
  "total": 1,
  "results": [
    {
      "title": "Example Cafe",
      "href": "https://slink.sandeals.net/example",
      "category": "food",
      "summary": "...",
      "score": 13,
      "source": "deals"
    }
  ],
  "response": "Found 1 deals for \"coffee\": ...",
  "meta": { "mode": "agent", "matched": true }
}
```

Show each deal title and link to the user. Links are ready to open.

If `meta.matched` is `false`, say there was no exact match and still share the suggested deals.

## POST (optional)

```
POST https://www.sandeals.net/api/search-advanced
Content-Type: application/json

{ "query": "coffee", "mode": "agent", "limit": 10 }
```

## Catalog fallback

```
GET https://www.sandeals.net/api/deals?search=coffee&limit=10
GET https://www.sandeals.net/api/deals?category=food&limit=10
```

## ChatGPT Custom GPT Actions

1. Configure → Actions → Import from URL
2. Import https://www.sandeals.net/openapi.json
3. Authentication: None
4. Operation: `searchDeals`

## Other discovery

- https://www.sandeals.net/llms.txt
- https://www.sandeals.net/api/llms
- https://www.sandeals.net/.well-known/ai.txt
