개발자 참고자료

전화번호 인텔리전스 및 검증

DomScan API로 전 세계 전화번호를 파싱, 검증, 분류 및 형식화하고, 가능한 경우 오프라인 위치, 시간대, 최초 번호 대역 통신사, 발신, 단축 번호 및 규제 기관 할당 정보를 추가합니다.

전화번호 인텔리전스 및 검증

전 세계 전화번호를 파싱, 검증, 분류 및 형식화하고, 가능한 경우 오프라인 위치, 시간대, 최초 번호 대역 통신사, 발신, 단축 번호 및 규제 기관 할당 정보를 추가합니다.

오프라인 인텔리전스 필드

intelligence 객체에는 접두 번호 기반 위치와 시간대, 최초 통신사, 발신 안내, 단축 번호 신호 및 일치하는 규제 기관 할당 정보가 포함될 수 있습니다. 통신사나 통신 조회 제공업체에 질의하지 않고 Google libphonenumber와 규제 기관의 공개 스냅샷을 사용합니다.

출처 및 저작자 표시

모든 결과에는 사용된 오프라인 출처가 표시되며, 버전 또는 스냅샷 날짜, 라이선스나 재사용 근거, 출처 URL, 제공된 경우 저작자 표시도 포함됩니다. 현재 공식 번호 할당 스냅샷은 스페인(CNMC), 프랑스(ARCEP), 독일(Bundesnetzagentur), 일본(MIC), 오스트리아(RTR), 노르웨이(Nkom), 폴란드(UKE), 대만(MODA), 미국(NANPA), 캐나다(CNA/CNAC)를 대상으로 합니다. 미국과 캐나다의 근거 자료는 NPA-NXX 중앙국 코드 상태이며, 현재 통신사나 번호 이동성에 대한 실시간 조회 결과가 아닙니다. 기타 국가에는 글로벌 오프라인 번호 체계 메타데이터가 제공되며, coverage.level은 메타데이터와 공식 할당 근거를 구분합니다.

개인정보 보호를 고려한 설계: DomScan은 로컬 처리를 위해 자체 Edge Relay에만 번호를 전송합니다. Relay는 조회를 위해 제3자에게 요청하지 않고 번호를 저장하지 않으며, 가입자 신원 정보도 반환하지 않습니다.
안전한 대체 처리: 오프라인 보강 기능을 사용할 수 없어도 로컬 번호 체계 결과로 검증은 완료됩니다. 선택적 필드를 사용하기 전에 intelligence.status와 intelligence.sources를 확인하세요.
번호 체계 검증이며 실시간 확인이 아닙니다: DomScan은 형식, 문서화된 번호 범위 및 오프라인 메타데이터를 확인합니다. 위치는 실제 위치가 아니라 번호 체계상의 지역입니다. 통신사나 할당 보유자는 최초 번호 대역의 연관 정보이므로 번호 이동 이후의 현재 통신사와 다를 수 있습니다. 결과는 할당, 활성 상태, 연결 가능 여부, SMS 전달, 가입자 신원을 확인하지 않습니다.
POST /v1/phone/validate

응답 필드

필드 유형
input string
normalized_input string
kind string
valid boolean
possible boolean
status string
recommendation string
validation_level string
reason string | null
warnings[] string[]
number object
number.e164 string
number.international string
number.national string
number.rfc3966 string
number.national_number string
number.extension string | null
number.country string | null
number.country_name string | null
number.country_calling_code string
number.possible_countries[] string[]
number.country_match boolean | null
number.type string
number.non_geographic boolean
live_checks object
live_checks.assignment string
live_checks.reachability string
live_checks.current_carrier string
live_checks.subscriber_identity string
live_checks.porting string
privacy object
privacy.upstream_requests integer
privacy.telecom_provider_queried boolean
privacy.persisted boolean
privacy.domscan_edge_relay_used boolean
privacy.third_party_requests integer
intelligence object
intelligence.status string
intelligence.kind string | null
intelligence.reason string | null
intelligence.coverage object
intelligence.coverage.country string | null
intelligence.coverage.level string
intelligence.coverage.global_numbering_metadata boolean
intelligence.coverage.official_snapshot_available boolean
intelligence.coverage.official_allocation_match boolean
intelligence.coverage.official_source_ids[] string[]
intelligence.coverage.matching_source_ids[] string[]
intelligence.coverage.current_carrier_lookup boolean
intelligence.location object
intelligence.location.label string | null
intelligence.location.country_name string | null
intelligence.location.country string | null
intelligence.location.language string
intelligence.location.granularity string
intelligence.location.current_physical_location boolean
intelligence.possible_time_zones object
intelligence.possible_time_zones.values[] string[]
intelligence.possible_time_zones.current_location boolean
intelligence.possible_time_zones.inference string
intelligence.original_prefix_carrier object
intelligence.original_prefix_carrier.name string | null
intelligence.original_prefix_carrier.source_id string | null
intelligence.original_prefix_carrier.evidence string
intelligence.original_prefix_carrier.current_carrier boolean
intelligence.original_prefix_carrier.portability_may_change_carrier boolean
intelligence.portability object
intelligence.portability.region_supported boolean
intelligence.portability.current_port_checked boolean
intelligence.dialing object
intelligence.dialing.from_country string | null
intelligence.dialing.international string | null
intelligence.dialing.mobile string | null
intelligence.dialing.internationally_diallable boolean
intelligence.number_details object
intelligence.number_details.geographical boolean
intelligence.number_details.geographical_area_code string | null
intelligence.number_details.geographical_area_code_length integer
intelligence.number_details.national_destination_code string | null
intelligence.number_details.national_destination_code_length integer
intelligence.number_details.subscriber_number_length integer
intelligence.number_details.mobile_token string | null
intelligence.service_signals object
intelligence.service_signals.number_type string
intelligence.service_signals.geographical boolean
intelligence.service_signals.toll_free boolean
intelligence.service_signals.premium_rate boolean
intelligence.service_signals.shared_cost boolean
intelligence.service_signals.voip boolean
intelligence.service_signals.personal_number boolean
intelligence.service_signals.likely_sms_capable boolean | null
intelligence.short_number object
intelligence.short_number.region string
intelligence.short_number.possible boolean
intelligence.short_number.valid boolean
intelligence.short_number.emergency boolean
intelligence.short_number.connects_to_emergency boolean
intelligence.short_number.sms_service boolean
intelligence.short_number.carrier_specific boolean
intelligence.short_number.expected_cost string
intelligence.regulator_allocations[] object[]
intelligence.regulator_allocations[] object
intelligence.regulator_allocations[].authority string
intelligence.regulator_allocations[].country string
intelligence.regulator_allocations[].matched_prefix string
intelligence.regulator_allocations[].matched_range_end string | null
intelligence.regulator_allocations[].match_kind string
intelligence.regulator_allocations[].category string
intelligence.regulator_allocations[].status string
intelligence.regulator_allocations[].original_assignee string | null
intelligence.regulator_allocations[].operator_code string | null
intelligence.regulator_allocations[].region string | null
intelligence.regulator_allocations[].service_description string | null
intelligence.regulator_allocations[].assigned_on string | null
intelligence.regulator_allocations[].effective_on string | null
intelligence.regulator_allocations[].expires_on string | null
intelligence.regulator_allocations[].current_operator boolean
intelligence.regulator_allocations[].portability_included boolean
intelligence.regulator_allocations[].individual_number_assignment_checked boolean
intelligence.regulator_allocations[].source_id string
intelligence.regulator_allocations[].source_file string | null
intelligence.regulator_allocations[].details object
intelligence.sources[] object[]
intelligence.sources[] object
intelligence.sources[].id string
intelligence.sources[].name string
intelligence.sources[].type string
intelligence.sources[].version string | null
intelligence.sources[].updated_at string | null
intelligence.sources[].retrieved_at string | null
intelligence.sources[].age_days integer | null
intelligence.sources[].record_count integer | null
intelligence.sources[].license string | null
intelligence.sources[].license_url string | null
intelligence.sources[].url string
intelligence.sources[].attribution string | null
intelligence.warnings[] string[]
intelligence.relay object
intelligence.relay.configured boolean
intelligence.relay.used boolean
intelligence.relay.persisted boolean
limitations[] string[]
metadata object
metadata.engine string
metadata.metadata_basis string
credits_used integer

예제 요청

curl -X POST "https://domscan.net/v1/phone/validate" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $DOMSCAN_API_KEY" \
  -d '{
  "phone": "+34 612 345 678",
  "default_country": "ES",
  "expected_country": "ES",
  "dialing_from_country": "ES",
  "language": "es"
}'

예제 응답

{
  "input": "string",
  "normalized_input": "string",
  "kind": "phone_number",
  "valid": true,
  "possible": true,
  "status": "valid",
  "recommendation": "accept",
  "validation_level": "numbering_plan",
  "reason": "DEFAULT_COUNTRY_REQUIRED",
  "warnings": [
    "COUNTRY_MISMATCH"
  ],
  "number": {
    "e164": "+34612345678",
    "international": "+34 612 34 56 78",
    "national": "612 34 56 78",
    "rfc3966": "tel:+34612345678",
    "national_number": "612345678",
    "extension": null,
    "country": "ES",
    "country_name": "Spain",
    "country_calling_code": "34",
    "possible_countries": [
      "ES"
    ],
    "country_match": true,
    "type": "fixed_line",
    "non_geographic": true
  },
  "live_checks": {
    "assignment": "not_checked",
    "reachability": "not_checked",
    "current_carrier": "not_checked",
    "subscriber_identity": "not_checked",
    "porting": "not_checked"
  },
  "privacy": {
    "upstream_requests": 0,
    "telecom_provider_queried": false,
    "persisted": false,
    "domscan_edge_relay_used": true,
    "third_party_requests": 0
  },
  "intelligence": {
    "status": "available",
    "kind": "phone_number",
    "reason": "string",
    "coverage": {
      "country": "US",
      "level": "global_numbering_metadata",
      "global_numbering_metadata": true,
      "official_snapshot_available": true,
      "official_allocation_match": true,
      "official_source_ids": [
        "string"
      ],
      "matching_source_ids": [
        "string"
      ],
      "current_carrier_lookup": false
    },
    "location": {
      "label": "Madrid",
      "country_name": "Spain",
      "country": "ES",
      "language": "es",
      "granularity": "numbering_plan_area",
      "current_physical_location": false
    },
    "possible_time_zones": {
      "values": [
        "Europe/Madrid"
      ],
      "current_location": false,
      "inference": "number_prefix"
    },
    "original_prefix_carrier": {
      "name": "Vodafone",
      "source_id": "nanpa_us",
      "evidence": "offline_prefix_metadata",
      "current_carrier": false,
      "portability_may_change_carrier": true
    },
    "portability": {
      "region_supported": true,
      "current_port_checked": false
    },
    "dialing": {
      "from_country": "US",
      "international": "011 34 612 34 56 78",
      "mobile": "+34 612 34 56 78",
      "internationally_diallable": true
    },
    "number_details": {
      "geographical": true,
      "geographical_area_code": "string",
      "geographical_area_code_length": 1,
      "national_destination_code": "string",
      "national_destination_code_length": 1,
      "subscriber_number_length": 1,
      "mobile_token": "string"
    },
    "service_signals": {
      "number_type": "fixed_line",
      "geographical": true,
      "toll_free": true,
      "premium_rate": true,
      "shared_cost": true,
      "voip": "198.51.100.10",
      "personal_number": true,
      "likely_sms_capable": true
    },
    "short_number": {
      "region": "ES",
      "possible": true,
      "valid": true,
      "emergency": true,
      "connects_to_emergency": true,
      "sms_service": true,
      "carrier_specific": true,
      "expected_cost": "toll_free"
    },
    "regulator_allocations": [
      {
        "authority": "CNMC",
        "country": "ES",
        "matched_prefix": "912",
        "matched_range_end": "string",
        "match_kind": "prefix",
        "category": "geographic",
        "status": "assigned",
        "original_assignee": "Example Telecom",
        "operator_code": "string",
        "region": "Madrid",
        "service_description": "198.51.100.10",
        "assigned_on": "2026-04-15",
        "effective_on": "2026-04-15",
        "expires_on": "2026-04-15",
        "current_operator": false,
        "portability_included": false,
        "individual_number_assignment_checked": false,
        "source_id": "cnmc",
        "source_file": "string",
        "details": {}
      }
    ],
    "sources": [
      {
        "id": "google_libphonenumber",
        "name": "Google libphonenumber metadata",
        "type": "offline_metadata",
        "version": "9.0.34",
        "updated_at": "2026-04-15",
        "retrieved_at": "2026-04-15T12:00:00Z",
        "age_days": 1,
        "record_count": 1,
        "license": "Apache-2.0",
        "license_url": "https://example.com",
        "url": "https://example.com",
        "attribution": "string"
      }
    ],
    "warnings": [
      "string"
    ],
    "relay": {
      "configured": true,
      "used": true,
      "persisted": false
    }
  },
  "limitations": [
    "string"
  ],
  "metadata": {
    "engine": "libphonenumber-js/max",
    "metadata_basis": "Google libphonenumber numbering plans"
  },
  "credits_used": 1
}
POST /v1/phone/validate/bulk

응답 필드

필드 유형
total integer
valid_count integer
possible_only_count integer
invalid_count integer
validation_level string
results[] object[]
results[] object
results[].input string
results[].normalized_input string
results[].kind string
results[].valid boolean
results[].possible boolean
results[].status string
results[].recommendation string
results[].validation_level string
results[].reason string | null
results[].warnings[] string[]
results[].number object
results[].number.e164 string
results[].number.international string
results[].number.national string
results[].number.rfc3966 string
results[].number.national_number string
results[].number.extension string | null
results[].number.country string | null
results[].number.country_name string | null
results[].number.country_calling_code string
results[].number.possible_countries[] string[]
results[].number.country_match boolean | null
results[].number.type string
results[].number.non_geographic boolean
results[].live_checks object
results[].live_checks.assignment string
results[].live_checks.reachability string
results[].live_checks.current_carrier string
results[].live_checks.subscriber_identity string
results[].live_checks.porting string
results[].privacy object
results[].privacy.upstream_requests integer
results[].privacy.telecom_provider_queried boolean
results[].privacy.persisted boolean
results[].privacy.domscan_edge_relay_used boolean
results[].privacy.third_party_requests integer
results[].intelligence object
results[].intelligence.status string
results[].intelligence.kind string | null
results[].intelligence.reason string | null
results[].intelligence.coverage object
results[].intelligence.coverage.country string | null
results[].intelligence.coverage.level string
results[].intelligence.coverage.global_numbering_metadata boolean
results[].intelligence.coverage.official_snapshot_available boolean
results[].intelligence.coverage.official_allocation_match boolean
results[].intelligence.coverage.official_source_ids[] string[]
results[].intelligence.coverage.matching_source_ids[] string[]
results[].intelligence.coverage.current_carrier_lookup boolean
results[].intelligence.location object
results[].intelligence.location.label string | null
results[].intelligence.location.country_name string | null
results[].intelligence.location.country string | null
results[].intelligence.location.language string
results[].intelligence.location.granularity string
results[].intelligence.location.current_physical_location boolean
results[].intelligence.possible_time_zones object
results[].intelligence.possible_time_zones.values[] string[]
results[].intelligence.possible_time_zones.current_location boolean
results[].intelligence.possible_time_zones.inference string
results[].intelligence.original_prefix_carrier object
results[].intelligence.original_prefix_carrier.name string | null
results[].intelligence.original_prefix_carrier.source_id string | null
results[].intelligence.original_prefix_carrier.evidence string
results[].intelligence.original_prefix_carrier.current_carrier boolean
results[].intelligence.original_prefix_carrier.portability_may_change_carrier boolean
results[].intelligence.portability object
results[].intelligence.portability.region_supported boolean
results[].intelligence.portability.current_port_checked boolean
results[].intelligence.dialing object
results[].intelligence.dialing.from_country string | null
results[].intelligence.dialing.international string | null
results[].intelligence.dialing.mobile string | null
results[].intelligence.dialing.internationally_diallable boolean
results[].intelligence.number_details object
results[].intelligence.number_details.geographical boolean
results[].intelligence.number_details.geographical_area_code string | null
results[].intelligence.number_details.geographical_area_code_length integer
results[].intelligence.number_details.national_destination_code string | null
results[].intelligence.number_details.national_destination_code_length integer
results[].intelligence.number_details.subscriber_number_length integer
results[].intelligence.number_details.mobile_token string | null
results[].intelligence.service_signals object
results[].intelligence.service_signals.number_type string
results[].intelligence.service_signals.geographical boolean
results[].intelligence.service_signals.toll_free boolean
results[].intelligence.service_signals.premium_rate boolean
results[].intelligence.service_signals.shared_cost boolean
results[].intelligence.service_signals.voip boolean
results[].intelligence.service_signals.personal_number boolean
results[].intelligence.service_signals.likely_sms_capable boolean | null
results[].intelligence.short_number object
results[].intelligence.short_number.region string
results[].intelligence.short_number.possible boolean
results[].intelligence.short_number.valid boolean
results[].intelligence.short_number.emergency boolean
results[].intelligence.short_number.connects_to_emergency boolean
results[].intelligence.short_number.sms_service boolean
results[].intelligence.short_number.carrier_specific boolean
results[].intelligence.short_number.expected_cost string
results[].intelligence.regulator_allocations[] object[]
results[].intelligence.regulator_allocations[] object
results[].intelligence.regulator_allocations[].authority string
results[].intelligence.regulator_allocations[].country string
results[].intelligence.regulator_allocations[].matched_prefix string
results[].intelligence.regulator_allocations[].matched_range_end string | null
results[].intelligence.regulator_allocations[].match_kind string
results[].intelligence.regulator_allocations[].category string
results[].intelligence.regulator_allocations[].status string
results[].intelligence.regulator_allocations[].original_assignee string | null
results[].intelligence.regulator_allocations[].operator_code string | null
results[].intelligence.regulator_allocations[].region string | null
results[].intelligence.regulator_allocations[].service_description string | null
results[].intelligence.regulator_allocations[].assigned_on string | null
results[].intelligence.regulator_allocations[].effective_on string | null
results[].intelligence.regulator_allocations[].expires_on string | null
results[].intelligence.regulator_allocations[].current_operator boolean
results[].intelligence.regulator_allocations[].portability_included boolean
results[].intelligence.regulator_allocations[].individual_number_assignment_checked boolean
results[].intelligence.regulator_allocations[].source_id string
results[].intelligence.regulator_allocations[].source_file string | null
results[].intelligence.regulator_allocations[].details object
results[].intelligence.sources[] object[]
results[].intelligence.sources[] object
results[].intelligence.sources[].id string
results[].intelligence.sources[].name string
results[].intelligence.sources[].type string
results[].intelligence.sources[].version string | null
results[].intelligence.sources[].updated_at string | null
results[].intelligence.sources[].retrieved_at string | null
results[].intelligence.sources[].age_days integer | null
results[].intelligence.sources[].record_count integer | null
results[].intelligence.sources[].license string | null
results[].intelligence.sources[].license_url string | null
results[].intelligence.sources[].url string
results[].intelligence.sources[].attribution string | null
results[].intelligence.warnings[] string[]
results[].intelligence.relay object
results[].intelligence.relay.configured boolean
results[].intelligence.relay.used boolean
results[].intelligence.relay.persisted boolean
results[].limitations[] string[]
results[].metadata object
results[].metadata.engine string
results[].metadata.metadata_basis string
credits_used integer

예제 요청

curl -X POST "https://domscan.net/v1/phone/validate/bulk" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $DOMSCAN_API_KEY" \
  -d '{
  "expected_country": "ES",
  "dialing_from_country": "US",
  "language": "en",
  "phones": [
    "+34 612 345 678",
    {
      "phone": "0491 570 006",
      "default_country": "AU",
      "expected_country": "AU",
      "dialing_from_country": "GB",
      "language": "en"
    },
    "+800 1234 5678"
  ]
}'

예제 응답

{
  "total": 1,
  "valid_count": 1,
  "possible_only_count": 1,
  "invalid_count": 1,
  "validation_level": "numbering_plan",
  "results": [
    {
      "input": "string",
      "normalized_input": "string",
      "kind": "phone_number",
      "valid": true,
      "possible": true,
      "status": "valid",
      "recommendation": "accept",
      "validation_level": "numbering_plan",
      "reason": "DEFAULT_COUNTRY_REQUIRED",
      "warnings": [
        "COUNTRY_MISMATCH"
      ],
      "number": {
        "e164": "+34612345678",
        "international": "+34 612 34 56 78",
        "national": "612 34 56 78",
        "rfc3966": "tel:+34612345678",
        "national_number": "612345678",
        "extension": null,
        "country": "ES",
        "country_name": "Spain",
        "country_calling_code": "34",
        "possible_countries": [
          "ES"
        ],
        "country_match": true,
        "type": "fixed_line",
        "non_geographic": true
      },
      "live_checks": {
        "assignment": "not_checked",
        "reachability": "not_checked",
        "current_carrier": "not_checked",
        "subscriber_identity": "not_checked",
        "porting": "not_checked"
      },
      "privacy": {
        "upstream_requests": 0,
        "telecom_provider_queried": false,
        "persisted": false,
        "domscan_edge_relay_used": true,
        "third_party_requests": 0
      },
      "intelligence": {
        "status": "available",
        "kind": "phone_number",
        "reason": "string",
        "coverage": {
          "country": "US",
          "level": "global_numbering_metadata",
          "global_numbering_metadata": true,
          "official_snapshot_available": true,
          "official_allocation_match": true,
          "official_source_ids": [
            "string"
          ],
          "matching_source_ids": [
            "string"
          ],
          "current_carrier_lookup": false
        },
        "location": {
          "label": "Madrid",
          "country_name": "Spain",
          "country": "ES",
          "language": "es",
          "granularity": "numbering_plan_area",
          "current_physical_location": false
        },
        "possible_time_zones": {
          "values": [
            "Europe/Madrid"
          ],
          "current_location": false,
          "inference": "number_prefix"
        },
        "original_prefix_carrier": {
          "name": "Vodafone",
          "source_id": "nanpa_us",
          "evidence": "offline_prefix_metadata",
          "current_carrier": false,
          "portability_may_change_carrier": true
        },
        "portability": {
          "region_supported": true,
          "current_port_checked": false
        },
        "dialing": {
          "from_country": "US",
          "international": "011 34 612 34 56 78",
          "mobile": "+34 612 34 56 78",
          "internationally_diallable": true
        },
        "number_details": {
          "geographical": true,
          "geographical_area_code": "string",
          "geographical_area_code_length": 1,
          "national_destination_code": "string",
          "national_destination_code_length": 1,
          "subscriber_number_length": 1,
          "mobile_token": "string"
        },
        "service_signals": {
          "number_type": "fixed_line",
          "geographical": true,
          "toll_free": true,
          "premium_rate": true,
          "shared_cost": true,
          "voip": "198.51.100.10",
          "personal_number": true,
          "likely_sms_capable": true
        },
        "short_number": {
          "region": "ES",
          "possible": true,
          "valid": true,
          "emergency": true,
          "connects_to_emergency": true,
          "sms_service": true,
          "carrier_specific": true,
          "expected_cost": "toll_free"
        },
        "regulator_allocations": [
          {
            "authority": "CNMC",
            "country": "ES",
            "matched_prefix": "912",
            "matched_range_end": "string",
            "match_kind": "prefix",
            "category": "geographic",
            "status": "assigned",
            "original_assignee": "Example Telecom",
            "operator_code": "string",
            "region": "Madrid",
            "service_description": "198.51.100.10",
            "assigned_on": "2026-04-15",
            "effective_on": "2026-04-15",
            "expires_on": "2026-04-15",
            "current_operator": false,
            "portability_included": false,
            "individual_number_assignment_checked": false,
            "source_id": "cnmc",
            "source_file": "string",
            "details": {}
          }
        ],
        "sources": [
          {
            "id": "google_libphonenumber",
            "name": "Google libphonenumber metadata",
            "type": "offline_metadata",
            "version": "9.0.34",
            "updated_at": "2026-04-15",
            "retrieved_at": "2026-04-15T12:00:00Z",
            "age_days": 1,
            "record_count": 1,
            "license": "Apache-2.0",
            "license_url": "https://example.com",
            "url": "https://example.com",
            "attribution": "string"
          }
        ],
        "warnings": [
          "string"
        ],
        "relay": {
          "configured": true,
          "used": true,
          "persisted": false
        }
      },
      "limitations": [
        "string"
      ],
      "metadata": {
        "engine": "libphonenumber-js/max",
        "metadata_basis": "Google libphonenumber numbering plans"
      }
    }
  ],
  "credits_used": 1
}