빠른 답변
LLMWebSearch 검색 endpoint는 어떤 파라미터를 받나요?
LLMWebSearch의 /search endpoint에는 q만 필요합니다. 선택 파라미터로 반환할 결과 수(max_results), 읽을 페이지 수(read), 콘텐츠 형식과 길이, 뉴스 또는 웹, 시간 범위, 국가와 언어, 유지하거나 제외할 도메인을 설정합니다. 최대 3페이지 읽기는 1 크레딧이며, 2026년 10월 기준 US$1.20/1K 검색부터입니다. KYC 없이, 암호화폐로 결제.
/search at a glance
| 메서드 | JSON 본문을 쓰는 POST, 또는 같은 이름을 쿼리 스트링에 담은 GET |
|---|---|
| URL | https://llmwebsearch.com/api/v1/search |
| 필수 | q: 1~400자; 검색 연산자는 작성한 그대로 전달됩니다 |
| 기본값 | 결과 5개, 처음 3개 읽기, 페이지당 최대 6,000자 Markdown |
| 과금 | 크레딧 1개로 검색 1회를 이용할 수 있습니다. 최대 20개의 순위 결과를 받고, 상위 3개 페이지의 본문을 읽어 Markdown으로 반환합니다. 4~10개 페이지를 읽으면 크레딧 2개가 됩니다. 오류로 끝난 호출에는 비용이 청구되지 않습니다 |
| 결과 | 결과는 호출하는 순간 실행되는 실시간 웹 검색에서 나오며, 검색 엔진이 매기는 순서대로 제공됩니다. 오래된 인덱스에서 제공되는 것은 없습니다 |
| 필터 | 결과의 국가와 언어, 기간(지난 하루, 주, 월 또는 연도), 웹 또는 뉴스 결과, 포함하거나 제외할 도메인을 선택할 수 있습니다 |
| 페이지 리더 | LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/) |
웹 검색 및 상위 결과 읽기 (POST)
POST/api/v1/search
실시간 웹 검색을 실행하고 순위가 매겨진 결과를 반환합니다. 처음 read개 결과의 페이지를 병렬로 가져와 본문을 content로 반환합니다. 예시는 API 키를 로테이션하는 방법을 묻습니다. 제목, 날짜, 값은 예시일 뿐입니다.
인증: Authorization: Bearer API_KEY 헤더에 API 키.
요청 본문
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
q | string | 예 | 검색 쿼리, 1~400자. 따옴표와 site: 같은 연산자는 작성한 그대로 유지됩니다. |
max_results | integer | 아니요 | 순위가 매겨진 결과 수, 1~20. 기본값 5. |
read | integer | 아니요 | 처음 결과 중 몇 개를 읽어 콘텐츠와 함께 반환할지, 0~10. 기본값 3. 4 이상이면 호출에 2 크레딧이 듭니다. |
format | string | 아니요 | 페이지 콘텐츠에는 markdown(기본값) 또는 text. |
max_chars | integer | 아니요 | 각 페이지 콘텐츠의 길이 상한, 500~50,000자. 기본값 6,000. |
topic | string | 아니요 | web(기본값) 또는 news. |
time_range | string | 아니요 | day, week, month 또는 year. 기본값 없음: 모든 날짜. |
country | string | 아니요 | 검색이 실행되는 위치의 두 글자 국가 코드(ISO 3166-1 alpha-2). 기본값 us. |
language | string | 아니요 | 결과 언어, 예: en, de, pt-BR. 기본값 en. |
include_domains | string[] | 아니요 | 최대 20개 도메인. 이 도메인 및 하위 도메인의 결과만 유지됩니다. |
exclude_domains | string[] | 아니요 | 결과를 제외할 최대 20개 도메인. |
{
"q": "how to rotate api keys without downtime",
"max_results": 5,
"read": 3,
"max_chars": 6000
}{
"q": "open source license change",
"topic": "news",
"time_range": "week",
"include_domains": [
"news.example.com",
"example.org"
],
"read": 0
}응답 200
{
"query": "how to rotate api keys without downtime",
"created_at": "2026-10-22T10:15:04Z",
"credits_used": 1,
"results": [
{
"position": 1,
"title": "Rotating API keys",
"url": "https://docs.example.com/security/key-rotation",
"host": "docs.example.com",
"snippet": "Create a second key, deploy it everywhere, then revoke the first one.",
"published_at": "2026-09-30",
"content_status": "ok",
"content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key.\n2. Deploy it to every service.\n3. Revoke the old key.",
"word_count": 948
},
{
"position": 2,
"title": "Key rotation checklist",
"url": "https://blog.example.org/key-rotation-checklist",
"host": "blog.example.org",
"snippet": "Keep two keys active during the switch and alert on the old one.",
"content_status": "blocked_by_robots"
},
{
"position": 3,
"title": "Secrets management basics",
"url": "https://security.example.net/secrets-basics",
"host": "security.example.net",
"snippet": "Never commit keys to a repository.",
"published_at": "2026-06-12",
"content_status": "ok",
"content": "# Secrets management basics\n\n**Never** commit keys to a repository...",
"word_count": 1310
},
{
"position": 4,
"title": "API key best practices",
"url": "https://dev.example.com/api-key-best-practices",
"host": "dev.example.com",
"snippet": "Scope each key to one service and one environment.",
"content_status": "not_requested"
}
]
}코드 예제
curl -s "https://llmwebsearch.com/api/v1/search" \
-H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "how to rotate api keys without downtime", "max_results": 5, "read": 3}'import os
import requests
resp = requests.post(
"https://llmwebsearch.com/api/v1/search",
headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
json={"q": "how to rotate api keys without downtime", "max_results": 5, "read": 3},
timeout=60,
)
resp.raise_for_status()
for r in resp.json()["results"]:
print(r["position"], r["content_status"], r["url"])const res = await fetch('https://llmwebsearch.com/api/v1/search', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ q: 'how to rotate api keys without downtime', max_results: 5, read: 3 }),
});
const { results } = await res.json();
for (const r of results) console.log(r.position, r.content_status, r.url);웹 검색 (GET)
GET/api/v1/search
파라미터를 URL 인코딩된 쿼리 스트링에 담은 동일한 검색입니다. include_domains 같은 목록은 쉼표로 구분된 하나의 값으로 작성합니다. 빠른 테스트나 GET 요청만 보내는 도구에 편리합니다. 예시는 결과만 요청합니다(read=0).
인증: Authorization: Bearer API_KEY 헤더에 API 키.
매개변수
| 이름 | 위치 | 유형 | 필수 | 설명 |
|---|---|---|---|---|
q | query | string | 예 | 검색 쿼리, URL 인코딩, 1~400자. |
max_results | query | integer | 아니요 | 1~20. 기본값 5. |
read | query | integer | 아니요 | 0~10. 기본값 3; 4 이상이면 2크레딧이 듭니다. |
format | query | string | 아니요 | markdown (기본값) 또는 text. |
max_chars | query | integer | 아니요 | 페이지당 500~50,000. 기본값 6,000. |
topic | query | string | 아니요 | web(기본값) 또는 news. |
time_range | query | string | 아니요 | day, week, month 또는 year. |
country | query | string | 아니요 | ISO 3166-1 alpha-2 코드. 기본값 us. |
language | query | string | 아니요 | 언어 코드. 기본값 en. |
include_domains | query | string | 아니요 | 쉼표로 구분된 목록, 최대 20개 도메인. |
exclude_domains | query | string | 아니요 | 쉼표로 구분된 목록, 최대 20개 도메인. |
api_key | query | string | 아니요 | Authorization 헤더를 보내지 않을 때 사용하는 키. |
응답 200
{
"query": "postgres connection pooling",
"created_at": "2026-10-22T10:21:47Z",
"credits_used": 1,
"results": [
{
"position": 1,
"title": "Connection pooling explained",
"url": "https://docs.example.com/db/pooling",
"host": "docs.example.com",
"snippet": "A pool keeps a few database connections open and lends them to requests.",
"content_status": "not_requested"
},
{
"position": 2,
"title": "Sizing a connection pool",
"url": "https://blog.example.org/pool-size",
"host": "blog.example.org",
"snippet": "Start small: the right size depends on cores and disk, not on traffic.",
"published_at": "2026-03-04",
"content_status": "not_requested"
}
]
}코드 예제
curl -sG "https://llmwebsearch.com/api/v1/search" \
-H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
--data-urlencode "q=postgres connection pooling" \
-d max_results=10 -d read=0import os
import requests
resp = requests.get(
"https://llmwebsearch.com/api/v1/search",
headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
params={"q": "postgres connection pooling", "max_results": 10, "read": 0},
timeout=60,
)
print([r["url"] for r in resp.json()["results"]])const params = new URLSearchParams({ q: 'postgres connection pooling', max_results: '10', read: '0' });
const res = await fetch(`https://llmwebsearch.com/api/v1/search?${params}`, {
headers: { Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}` },
});
console.log((await res.json()).results.map((r) => r.url));페이지 본문 없이 결과만 받으려면 어떻게 하나요?
read을 0로 설정하세요. 그러면 모든 결과가 제목, URL, 호스트, 스니펫, 날짜와 함께 content_status: "not_requested"와 같이 돌아옵니다. 응답 크기가 훨씬 작아져서, 에이전트가 어떤 링크가 중요한지만 고르면 될 때 유용합니다.
가격은 최대 3페이지를 읽는 것과 같은 1크레딧으로 유지됩니다. 흔한 패턴은 read=0 검색으로 후보를 추리고, 모델이 고른 두세 개 URL에 extract 호출을 하는 것입니다.
검색에 언제 2크레딧이 드나요?
read이 4~10 사이일 때입니다. 페이지를 더 읽으면 저희 쪽 작업이 늘어나므로 가격이 한 번 두 배가 되고, 최대 10페이지까지 2크레딧으로 유지됩니다.
모든 응답의 credits_used은 이 호출에 든 비용을 보여줍니다. robots.txt 규칙이나 거부로 페이지를 읽지 못해도 그 가격은 오르내리지 않습니다. 대부분의 경우 전체 페이지 몇 개만 필요하다면 read를 3으로 두고, 가끔 필요한 추가 페이지에는 /extract을 호출하세요.
최근 뉴스를 검색하려면 어떻게 하나요?
topic: "news"과 time_range을 보내세요. 그러면 결과가 뉴스 기사에서 나오고, time_range는 지난 day, week, month 또는 year의 기사만 남깁니다. published_at은 기사나 검색 결과에 날짜가 명시되어 있을 때 채워집니다.
같은 최신성 필터는 topic: "web"과 함께 써도 동작합니다. 최근 출시나 가격 변경처럼 오래된 페이지가 모델을 잘못 이끌 수 있는 질문에 유용합니다.
curl -s "https://llmwebsearch.com/api/v1/search" \
-H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "database release security fix", "topic": "news", "time_range": "week", "read": 3}'결과를 특정 사이트로 제한하려면 어떻게 하나요?
include_domains에 최대 20개까지 나열하세요. 호스트가 이 도메인이나 그 하위 도메인 중 하나인 결과만 유지됩니다: example.com은 docs.example.com도 일치합니다. 반대로 exclude_domains을 사용하면, 예를 들어 결과에서 내 사이트를 빼는 데 쓸 수 있습니다.
POST 본문에서는 두 필드 모두 JSON 배열입니다. GET 요청에서는 쉼표로 구분된 하나의 값으로 작성하세요. 검색 쿼리 자체에 site: 연산자를 넣을 수도 있으며, 그대로 검색에 전달됩니다.
국가와 언어는 무엇을 바꾸나요?
country은 검색이 실행되는 위치를 설정하며, us, de, br 같은 두 글자 코드를 씁니다. 순위는 국가별로 다르며, 특히 현지 서비스, 가격, 규제에서 차이가 납니다. language는 결과의 언어를 설정하며, en, fr, pt-BR 같은 값을 씁니다.
둘 다 기본값은 미국과 영어입니다. 에이전트가 특정 시장의 사용자를 위해 일할 때는 함께 설정하세요. 세금 규정을 묻는 독일 사용자는 country: "de"과 language: "de"를 원합니다.
페이지 본문은 얼마나 돌아오나요?
페이지당 최대 max_chars자이며, 기본값은 6,000자이고 500~50,000자까지 설정할 수 있습니다. 이 상한은 모델의 컨텍스트 윈도우를 보호합니다: 6,000자 기준 3페이지는 영어로 약 4,500토큰입니다.
word_count은 잘리기 전의 추출된 전체 텍스트를 세므로, 페이지가 잘렸는지 알 수 있습니다. 답변에 긴 문서 하나가 필요하다면 먼저 낮은 상한으로 검색한 뒤, 그 페이지만 /extract를 통해 더 높은 상한으로 가져오세요. 느린 페이지를 무한정 기다리지는 않습니다: 15초가 지나면 본문 없이 fetch_timeout로 돌아옵니다.
검색 endpoint: 자주 묻는 질문
POST와 GET 중 무엇을 써야 하나요?
코드에서는 POST를 쓰세요. JSON 배열과 긴 쿼리는 본문에서 더 간단하기 때문입니다. GET은 터미널에서 빠르게 테스트하거나 쿼리 문자열만 보내는 도구에 적합합니다. 둘 다 같은 응답을 반환하고 비용도 같습니다.
20개보다 많은 결과를 요청할 수 있나요?
아니요. 호출당 최대 20개입니다. 에이전트는 보통 그 이상 필요하지 않습니다: 쿼리를 바꿔 다시 검색하는 편이 긴 목록보다 더 좋은 출처를 가져오는 경우가 많습니다.
페이지는 순차적으로 읽나요?
아니요, 병렬로 읽습니다. 15초 안에 응답하지 않는 페이지는 fetch_timeout로 본문 없이 반환되므로, 느린 사이트 하나가 전체 응답을 붙잡지 않습니다.
어떤 검색 엔진이 결과를 만드나요?
결과는 호출하는 순간 실행되는 실시간 웹 검색에서 나오며, 검색 엔진이 매기는 순서대로 제공됩니다. 오래된 인덱스에서 제공되는 것은 없습니다. 검색을 실행하는 업스트림 제공자는 공개하지 않습니다.