> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.claw-ops.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.claw-ops.com/_mcp/server.

# 번호 조회

GET https://api.claw-ops.com/v1/accounts/{accountId}/numbers/{number}

이 계정이 보유한 번호 하나의 설정을 반환합니다. 다른 계정의 번호는 없는 번호와 똑같이 404 를 반환합니다.

Reference: https://docs.claw-ops.com/api-reference/claw-ops-api/numbers/get-number

## Authentication

- `Authorization` header (bearer token, required) — API Key를 Bearer 토큰으로 전달

## Request

### Path parameters

- `accountId` (string, required) — 계정 ID
- `number` (string, required) — 조회할 전화번호

## Response

### 200

번호 설정

- `number` (string, optional) — 전화번호
- `source` (string, optional) — 번호 출처 (pool 등)
- `webhookUrl` (string, optional, nullable)
- `webhookMethod` (enum, optional)
  - Allowed values: `POST`, `GET`
- `callContextUrl` (string, optional, nullable) — routingType='agent'에서 Managed Agent 시작 전에 통화별 CallContext를 조회하는 동기 endpoint.
- `routingType` (enum, optional) — Agent 미연결/거부 시 fallback 라우팅. 'webhook' = webhookUrl 호출, 'sip' = sipEndpointId 의 OriginationRoute 로 외부 PBX 다이얼, 'softphone' = sipCredentialId 의 등록 단말로 착신(Kamailio usrloc fork), 'forward' = forwardTo(보유 번호)로 내부 착신전환, 'callflow' = callFlowId 의 콜 플로우(결정적 ARS)가 인입을 받음, 'agent' = agentId 의 매니지드 에이전트가 받음.
  - Allowed values: `webhook`, `sip`, `softphone`, `forward`, `callflow`, `agent`
- `sipEndpointId` (string, optional, nullable) — routingType='sip' 일 때 사용할 SipEndpoint id. 그 외 라우팅에서는 null.
- `sipCredentialId` (string, optional, nullable) — routingType='softphone' 일 때 착신할 등록 SIP credential(단말) id. 그 외 라우팅에서는 null.
- `forwardTo` (string, optional, nullable) — routingType='forward' 일 때 내부 착신전환 대상 번호(같은 계정 보유 번호). 대상이 여러 개면 첫 번째 대상. 그 외 라우팅에서는 null.
- `forwardTargets` (list of string, optional) — routingType='forward' 일 때 전환 대상 전체(첫 번째가 forwardTo). 모두 동시에 울리고 먼저 받은 쪽으로 연결됩니다. 미설정이거나 그 외 라우팅이면 빈 배열.
- `callFlowId` (string, optional, nullable) — routingType='callflow' 일 때 인입을 처리할 콜 플로우 id. 그 외 라우팅에서는 null.
- `agentId` (string, optional, nullable) — routingType='agent' 일 때 인입을 처리할 매니지드 에이전트 id. 그 외 라우팅에서는 null.
- `webhookHeaders` (map from string to string, optional, nullable) — Inbound webhook 호출 시 추가될 HTTP 헤더. 같은 통화의 후속 요청(action·\<Redirect>·referUrl) 중 webhookUrl 과 origin(scheme·host·port)이 같은 요청에도 실립니다. 상태 콜백에는 실리지 않습니다. 키는 "X-" prefix 필수 (case-insensitive), reserved 헤더(X-Signature, X-Forwarded-\*, X-Real-IP) 거절. 최대 10 entries, key ≤ 64 bytes, value ≤ 2048 bytes, ASCII printable. null 전송 시 헤더 제거, 미포함 시 변경 없음.
- `statusCallback` (string, optional, nullable) — 수신(inbound) 통화 상태 webhook URL. 발신은 통화 생성 시 statusCallback 으로 별도 관리.
- `statusCallbackEvents` (string, optional, nullable) — 구독할 상태 이벤트(공백 구분). 미지정 시 `initiated ringing answered completed` 가 적용됩니다. `transfer`(호전환 진행 상황)는 기본에 포함되지 않으므로 받으려면 직접 나열하세요.
- `numberType` (enum, optional) — 번호 유형. did = 일반 번호, representative = 대표번호.
  - Allowed values: `did`, `representative`
- `dictionaryId` (string, optional, nullable) — 부착된 받아쓰기 사전 id. null 이면 이 번호로 걸려온 통화 전사에 계정 기본 사전을 사용.
- `friendlyName` (string, optional, nullable) — 번호마다 적어 두는 용도 메모(별칭). null 이면 별칭 없음. 발신 표시·라우팅에는 쓰이지 않습니다.
- `rejectCallerIdRestricted` (boolean, optional) — 번호 표시제한 수신 통화를 받지 않고 거절하는지 여부. 기본 false.
- `presentationNumberId` (string, optional, nullable) — 발신 때 받는 화면에 보일 표시 번호 id. null 이면 이 번호가 그대로 표시됩니다.
- `createdAt` (datetime, optional)

## Errors

### 401 Unauthorized Error

인증 실패

- `error` (string, optional) — 사람이 읽을 수 있는 에러 메시지
- `code` (string, optional) — 기계 판독용 에러 코드. **분기는 이 값으로 하세요** — `error` 문구는 안내를 다듬으면서 바뀔 수 있지만 코드는 계약입니다. 같은 상태 코드라도 대응이 갈리는 경우가 있습니다. 예를 들어 발신의 `422` 는 - `recipient_blocked`: 수신거부 명단에 있는 번호입니다. 재시도하지 말고 명단에서 해제해야 발신됩니다. - `quota_exceeded`: 플랜 한도를 넘었습니다. 다음 주기에 다시 발신됩니다. 전화번호 정규화 관련: - `INVALID_PHONE_NUMBER`: 전화번호 포맷 오류 (한국 번호 형식 아님) - `UNSUPPORTED_COUNTRY`: 국제 발신 미지원 (+82 외 국가코드)
- `ip` (string, optional) — `overseas_ip_blocked` 일 때만 옵니다. 국외 IP 라고 판정한 요청 IP 입니다. 해외 리전 클라우드 서버에서 호출한다면 이 값이 그 서버의 공인 IP 이며, 콘솔 「국외 접속 예외」에서 예외를 신청할 때 이 고정 IP 를 적습니다.
- `processedAt` (datetime, optional) — 문자 발송 요청을 거부한 서버가 오류 응답을 생성한 시각(UTC). 콘솔은 이 값을 한국 시각으로 표시합니다. 인증·요청 형식 검증 등 발송 서비스 진입 전 오류에는 없을 수 있습니다.
- `blockers` (list of CertificateBlocker, optional) — `certificate_not_eligible` 일 때만 옵니다. 발급할 수 없는 번호와 그 이유입니다.

### 404 Not Found Error

번호를 찾을 수 없음

- `error` (string, optional) — 사람이 읽을 수 있는 에러 메시지
- `code` (string, optional) — 기계 판독용 에러 코드. **분기는 이 값으로 하세요** — `error` 문구는 안내를 다듬으면서 바뀔 수 있지만 코드는 계약입니다. 같은 상태 코드라도 대응이 갈리는 경우가 있습니다. 예를 들어 발신의 `422` 는 - `recipient_blocked`: 수신거부 명단에 있는 번호입니다. 재시도하지 말고 명단에서 해제해야 발신됩니다. - `quota_exceeded`: 플랜 한도를 넘었습니다. 다음 주기에 다시 발신됩니다. 전화번호 정규화 관련: - `INVALID_PHONE_NUMBER`: 전화번호 포맷 오류 (한국 번호 형식 아님) - `UNSUPPORTED_COUNTRY`: 국제 발신 미지원 (+82 외 국가코드)
- `ip` (string, optional) — `overseas_ip_blocked` 일 때만 옵니다. 국외 IP 라고 판정한 요청 IP 입니다. 해외 리전 클라우드 서버에서 호출한다면 이 값이 그 서버의 공인 IP 이며, 콘솔 「국외 접속 예외」에서 예외를 신청할 때 이 고정 IP 를 적습니다.
- `processedAt` (datetime, optional) — 문자 발송 요청을 거부한 서버가 오류 응답을 생성한 시각(UTC). 콘솔은 이 값을 한국 시각으로 표시합니다. 인증·요청 형식 검증 등 발송 서비스 진입 전 오류에는 없을 수 있습니다.
- `blockers` (list of CertificateBlocker, optional) — `certificate_not_eligible` 일 때만 옵니다. 발급할 수 없는 번호와 그 이유입니다.

## Types

### CertificateBlocker

번호 하나가 발급되지 않는(또는 안내가 필요한) 이유. | code | 뜻 | 발급 | |---|---|---| | `number_not_owned` | 이 계정이 보유한 번호가 아님(반납·재배정 포함) | 막힘 | | `number_not_carrier_issued` | 한국AI통신이 개통한 070·대표번호가 아님(모바일 게이트웨이, 타사 번호) | 막힘 | | `business_info_incomplete` | 사업자 계정인데(관리번호 제외) 상호·사업자등록번호·대표자명·사업장 주소 중 빈 칸 | 막힘 | | `identity_unverified` | 개인 계정 번호 또는 관리번호인데 그 번호에 본인확인 정보가 없음 | 막힘 | | `account_restricted` | 이용 제한 계정 | 막힘 | | `business_recheck_pending` | 사업자 계정인데 사업자 정보 재확인이 진행 중(통과 전) — 관리번호를 뺀 계정의 모든 번호 | 막힘 | | `holder_is_personal` | 개인 명의로 찍힌다는 안내 | 가능 |

- `code` (enum, required)
  - Allowed values: `number_not_owned`, `number_not_carrier_issued`, `business_info_incomplete`, `identity_unverified`, `account_restricted`, `business_recheck_pending`, `holder_is_personal`
- `message` (string, required)
- `number` (string, optional) — 422 응답의 blockers 에만 있다

## Examples

**Response**

```json
{
  "number": "07012340001",
  "source": "pool",
  "webhookUrl": "https://my-app.com/voice",
  "webhookMethod": "POST",
  "callContextUrl": "https://api.example.com/integrations/clawops/call-context",
  "routingType": "webhook",
  "sipEndpointId": null,
  "sipCredentialId": null,
  "forwardTo": null,
  "forwardTargets": [],
  "callFlowId": null,
  "agentId": null,
  "webhookHeaders": {
    "X-Webhook-Token": "tenant-secret-abc123"
  },
  "statusCallback": "https://my-app.com/call-status",
  "statusCallbackEvents": "initiated ringing answered completed transfer",
  "numberType": "did",
  "dictionaryId": null,
  "friendlyName": "고객센터 대표",
  "rejectCallerIdRestricted": false,
  "presentationNumberId": null,
  "createdAt": "2024-01-15T09:30:00Z"
}
```

**SDK Code**

```python
import requests

url = "https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/numbers/1001")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```