---
title: "Response Schema"
description: "TechnologiesResult의 모든 필드: 기술, 계정, 그리고 홈페이지와 도메인 레코드에 나온 것."
---

> Every apinoa docs page as markdown: https://apinoa.com/llms.txt (all in one file: https://apinoa.com/llms-full.txt; this API family in one file: https://apinoa.com/docs/company/llms.txt)

`technologies`는 `TechnologiesResult` 타입 하나를 돌려줍니다.

선택 필드는 정말로 선택입니다. **없으면 사이트가 말하지 않았다는 뜻입니다.** `title`이 없는 페이지는 제목이 없었습니다.

## TechnologiesResult

| 필드 | 타입 | 비고 |
|---|---|---|
| `domain` | string | 정규화한 도메인: 소문자, 스킴·경로·포트 없음 |
| `technologies` | Technology[] | 사이트가 쓰는 기술과 도메인을 서비스하는 곳(메일 호스트, DNS 호스트, CDN) |
| `accounts` | Technology[] | DNS TXT 레코드로만 확인되는, 도메인이 계정을 가진 서비스. 사이트에도 보이는 서비스는 `technologies`에 들어갑니다 |
| `page` | Page | 홈페이지가 응답한 그대로 |
| `dns` | DnsRecords | 도메인의 DNS 레코드 |
| `robots` | object? | `{status, sitemaps}`: 사이트가 `/robots.txt`를 내줬을 때, 그 상태와 `Sitemap:` 줄 |

## Technology

| 필드 | 타입 | 비고 |
|---|---|---|
| `name` | string | 예: `Shopify`, `Cloudflare`, `Google Tag Manager` |
| `categories` | string[] | 예: `Ecommerce`, `CMS`, `CDN`, `Analytics`, `Payment processors`, `Email` |
| `confidence` | integer | 1–100: 얼마나 확실한 일치인지. 여러 번 맞으면 더해집니다 |
| `version` | string? | 사이트가 밝힌 경우 |
| `website` | string? | 서비스의 공식 사이트 |
| `evidence` | Evidence[] | 일치 근거 최대 3개, 강한 것부터 |

### Evidence

| 필드 | 타입 | 비고 |
|---|---|---|
| `source` | string | `url` `header` `cookie` `meta` `html` `script` `robots` `dns` `implied` |
| `field` | string? | 일치한 헤더, 쿠키, 메타 태그, 페이지 요소, DNS 레코드 종류 |
| `match` | string | 일치한 텍스트, 최대 80자. `implied`이면 이 기술을 함의하는 기술 (WordPress는 PHP를 함의) |

## Page

| 필드 | 타입 | 비고 |
|---|---|---|
| `url` | string | 요청한 주소: `https://<domain>/` |
| `finalUrl` | string? | 리디렉션이 끝난 곳 |
| `status` | integer? | 최종 응답의 HTTP 상태 |
| `title` | string? | |
| `redirects` | array? | `{url, status}`: 따라간 리디렉션, 순서대로 |
| `headers` | object? | 최종 응답의 헤더, 소문자 |
| `cookies` | string[]? | 설정된 쿠키 이름 |
| `meta` | object? | 페이지의 모든 `<meta name\|property\|http-equiv>`, 키별로, 각각 페이지 순서의 목록 |
| `scripts` | string[]? | 페이지가 불러오는 모든 외부 스크립트 |
| `lang` | string? | `<html lang>` |
| `blocked` | `true`? | 사이트가 홈페이지 대신 확인 페이지로 응답했습니다. 헤더, 쿠키, DNS는 그래도 읽습니다 |
| `error` | string? | `timeout` `unreachable` `too_many_redirects`: 응답이 오지 않은 이유. DNS 결과는 그래도 돌려줍니다 |

## DnsRecords

| 필드 | 타입 | 비고 |
|---|---|---|
| `a` `aaaa` | string[] | 도메인의 주소 |
| `cname` | string[] | 홈페이지가 있는 호스트의 CNAME 체인 (`example.com`이면 `www.example.com`의 것) |
| `mx` | array | `{exchange, priority}`: 메일 호스트 |
| `ns` | string[] | 네임서버 |
| `txt` | string[] | TXT 레코드 |
| `soa` | object? | `{nsname, hostmaster}` |
