AI 에이전트를 위한 두 가지 새로운 x402 API: 리디렉트 체인 매핑 및 llms.txt 그레이딩
요약
본 기사는 AI 에이전트가 웹 워크플로우 중 직면하는 두 가지 핵심 문제를 해결하기 위한 새로운 x402 API를 소개합니다. 첫째, 모든 리디렉트를 추적하여 정확한 정규(canonical) 출처를 파악할 수 있는 `redirect-chain-map` API입니다. 둘째, 사이트의 콘텐츠 구조에 대한 AI 유사체인 `llms.txt`를 제공하는 것입니다.
핵심 포인트
- `redirect-chain-map`: 모든 리디렉트를 추적하여 정확한 최종 URL을 파악합니다.
- AI 에이전트가 웹 크롤링 시 필요한 정규 출처 및 구조 정보를 제공합니다.
- API 사용은 x402 카탈로그를 통해 $0.0005의 비용으로 가능합니다.
모든 에이전트가 다중 URL 워크플로우의 첫날에 직면하는 두 가지 질문이 있습니다.
- "실제 최종 URL은 모든 리디렉트를 거친 후 무엇인가요?" — 제가 받은 링크는
https://blog.example.com/post이지만, 읽고 싶은 페이지는https://example.com/blog/post/2024/06/05/why-x402-matters입니다. 체인 전체를 추적하지 않으면 잘못된 정규(canonical) 출처를 인용하게 됩니다. - "이 사이트에 적절한
llms.txt, 즉 무엇을 읽어야 하는지 알려주는 Markdown 파일이 있나요?" — 제안된 Answer.AI 사양(llmstxt.org, 2024년 9월)은robots.txt의 AI 유사체이며, 대부분의 사이트는 이 파일을 제대로 갖추고 있지 않거나, 내용물이 주로 깨진 링크로 되어 있거나, 아예 존재하지 않습니다.
이 두 가지 질문 모두 이제 기존 유료 경로 119개와 동일한 x402 카탈로그의 일급 엔드포인트가 되었으며, 동일한 payTo 지갑과 asset(Base의 USDC)을 사용하여 $0.0005 가격으로 이용할 수 있습니다.
/api/redirect-chain-map — 호출당 $0.0005
순진한 접근 방식인 urllib.request.urlopen(url)은 모든 3xx 코드를 조용히 따라갑니다. 이는 단순히 목적지에 도착하는 것뿐만 아니라 체인을 _매핑_해야 할 때 잘못된 것입니다. 해결책은 301/302/303/307/308에 대해 None을 반환하는 사용자 정의 HTTPRedirectHandler를 사용하여, 우리가 수동으로 체인을 추적하고 모든 단계를 포착하도록 하는 것입니다.
이 API는 각 단계(hop)마다 다음 정보를 기록합니다:
hop인덱스url(요청을 보낸 URL)status(HTTP 코드 또는loop/error)location(3xx일 경우의Location:헤더)latency_ms(단계별 벽시계 시간)content_length(서버가 제공하는 경우)cross_domain: true: 단계가 원래 eTLD+1을 벗어나는 경우scheme_change: 'https_to_http'(다운그레이드 — 이 단계를 전에 Referer를 제거해야 함) 또는'http_to_https'
이후 다음 항목들을 집계합니다: final_url, final_status, hop_count, loop_detected, cross_domain_hops, https_downgraded, 그리고 findings[] (사람이 읽기 쉬운 형식, 예: CRITICAL: HTTPS-to-HTTP downgrade detected at hop 2), 그리고 0부터 100까지의 A-F 등급을 매긴 redirect_map_score (홉당 100점에서 시작하여 -2점씩 감소하며, 루프 시에는 최소 -30점에서 최대 -20점 사이로 제한됨 - 크로스 도메인 홉당 5점 감소, 최소 -25점에서 최대 -20점 사이로 제한됨 - HTTPS 다운그레이드 시 오류 발생 여부에 따라 -15점).
최대치: 15홉. 이보다 길면 거의 항상 정상적인 체인이 아니라 잘못된 설정(또는 루프)입니다.
중요성
- 링크를 추적하는 에이전트에게는 최종 URL이 필요합니다. 이를 인덱싱, 캐시 또는 정확하게 인용하기 위해서입니다. 이 체인은 제공받은 링크가 가짜 URL(vanity URL)이라 하더라도 어떤 URL이 정식(canonical)인지 알려줍니다.
- 체인 중간에 있는 크로스 도메인 홉은 SEO의 위험 신호입니다. Google은 그 경로를 통해 전체 PageRank를 전달하지 않을 수 있으며, 목적지는 사용자가 생각했던 사이트와 다를 수 있습니다.
- HTTPS에서 HTTP로 다운그레이드되는 것은 보안의 위험 신호입니다. 해당 홉에서는
Referer및Cookie헤더를 제거해야 합니다. 왜냐하면 이들이 다운그레이드된 대상에서 평문(cleartext)으로 전송되었기 때문입니다. 이것이 발생하는 것을 알면 에이전트가 올바른 조치를 취할 수 있게 됩니다.
실시간 테스트 — https://stripe.com
target: https://stripe.com
hop 0: status=200, latency_ms=312, final_url=https://stripe.com
hop_count: 0 (리디렉션 없음 — 기본 홈페이지)
...
stripe.com은 단일 홉의 200 상태입니다. 이 API의 진정한 가치는 여러 홉으로 이루어진 URL에서 나타납니다.
실시간 테스트 — https://t.co (URL 단축기, 다중 홉 예상)
target: https://t.co
hop 0: status=301, location=https://twitter.com/, latency_ms=85
hop 1: status=200, latency_ms=210, final_url=https://twitter.com/
...
t.co → twitter.com으로 두 번의 홉을 거칩니다. 크로스 도메인 플래그에 주목하세요. t.co를 스크래핑하는 에이전트는 실제로는 twitter.com을 가져오고 있다는 의미이며, 이는 소스(source)가 아닌 목적지(destination)에 적용되는 속도 제한, 서비스 약관(TOS), 그리고 모든 지문 인식 방어 메커니즘이 적용된다는 것을 의미합니다.
/api/llms-txt-grade — 호출당 $0.0005
제안된 /llms.txt 명세(Answer.AI, 2024년 9월)는 사이트 루트에 위치한 단일 Markdown 파일이며 엄격한 구조를 갖습니다:
# Site Name
> 이 사이트가 무엇에 관한 것인지, 그리고 LLM이 알아야 할 내용을 한 문단으로 요약합니다.
...
H1은 필수입니다. 블록쿼트(blockquote) 요약은 권장됩니다. H2 섹션은 선택 사항입니다. [Name](URL): description 형식의 목록 항목이 LLM이 소비해야 할 실제 콘텐츠입니다. 전체 내용을 위한 선택적 형제 파일로 /llms-full.txt가 있습니다.
대부분의 사이트는 이 중 하나를 갖지 않거나, H1이 없는 파일을 갖거나, 깨진 링크 목록만 있거나, 단순히 # Site Name과 아무것도 없는 파일을 가집니다. 이 API는 /llms.txt, /llms-full.txt, 그리고 /agents.txt를 프로빙(probing)하고 구조를 구문 분석하여 0점에서 100점 사이의 A-F 등급을 부여합니다.
각 파일에 대해 다음 사항을 기록합니다:
status(HTTP 코드)content_type(일부 서버는text/html404 페이지를llms.txt로 제공함 — 감지됨)size_bytes
구문 분석된 /llms.txt에 대해서는 다음 사항을 기록합니다:
section_presence.h1(필수, 20점)section_presence.blockquote_summary(권장, 15점)section_presence.h2_sections(개수, 10점)section_presence.list_entries(개수, >=3일 경우 15점, 1-2개일 경우 5점)has_llms_full_txt(10점)malformed_entry_count(각 잘못된 링크는 10점 보너스에서 2점씩 차감)dead_link_count(live_pct = 1 - dead/25; >=95%일 경우 15점, >=80%일 경우 10점, >=50%일 경우 5점)links_sample및dead_links_samplerecommendations[]— 실행 가능한 수정 사항(
가장 유용한 필드는 dead_link_count입니다. llms.txt의 핵심은 링크들이 작동한다는 것입니다. 아름답게 포맷된 llms.txt에 20개의 URL을 지정했지만 그중 8개가 404 에러를 반환하는 사이트는 파일 자체가 없는 것보다 더 나쁩니다.
라이브 테스트 — https://stripe.com
files_checked:
/llms.txt: status=200, size_bytes=1247, content_type=text/markdown
/llms-full.txt: status=200, size_bytes=24301
...
Stripe의 llms.txt는 하나의 모델입니다: H1 + blockquote + 4개 섹션(Documentation + API + Support + Resources) + 22개의 항목으로 구성되어 있으며, 이들 모두 라이브 상태입니다. 보조 파일인 /llms-full.txt(전체 내용 24KB)도 존재합니다. recommendations 배열이 비어 있다는 점에 주목하세요 — 수정할 것이 없습니다.
라이브 테스트 — https://example.com
files_checked:
/llms.txt: status=404
/llms-full.txt: status=404
...
교과서적인 '아예 llms.txt가 없는' 경우입니다. 점수는 0점이며, 무엇을 해야 할지 정확히 알려주는 단 하나의 권장 사항이 있습니다.
카탈로그 — 유료 경로 121개, 무료 1개
GET /.well-known/x402는 전체 기계 판독 가능 카탈로그(유료 엔드포인트 121개 + 무료 1개)를 반환합니다. GET /openapi.json은 OpenAPI 3.0 사양을 가지고 있습니다. GET /llms.txt는 모든 121개 경로가 Name: $price — short description 형식으로 포함된 LLM용 인덱스입니다. GET /에 있는 HTML 랜딩 페이지는 이와 동일한 경로들을 사람이 읽기 쉬운 형식으로 각 한 줄씩 나열합니다.
발견은 자동화됩니다: 402index.io는 시간당 새로고침 주기로 /.well-known/x402를 크롤링합니다. 발행된 도메인 검증 해시(2026-09-12)는 수동 제출 없이도 새로운 경로가 자동으로 승인됨을 의미합니다. 동일한 지갑(0xCa0a6c6Aa7A8F0D5893636CF166Ea2b44fb6500c), 동일한 asset (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 — Base의 USDC), 동일한 network (eip155:8453)입니다.
X-PAYMENT: x402로 로컬에서 테스트하면, 실제 USDC가 해당 지갑으로 정산됩니다.
다음에 추가할 것
121개의 유료 경로 전반에 걸친 전략적 패턴은 'AI 에이전트가 전체 콘텐츠를 가져오기 전에 예/아니요 결정을 내리는 데 필요한 모든 일반적인 페이지 레벨 신호'입니다. 이번 사이클에서 추가된 두 개의 새로운 경로는 리디렉션 추적 및 LLM(대규모 언어 모델) 발견의 격차를 해소합니다. 만약 워크플로우에서 카탈로그를 사용하고 있으며, 수동으로 계속 예/아니요 결정을 내리고 있다면, 다음에 추가할 엔드포인트는 아마도 그것을 $0.0005로 처리하는 프로브(probe)일 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기