참조
API 오류 및 오류 코드
에러는 HTTP 상태 코드를 사용하며 항상 동일한 JSON 본문을 반환해요. param은 특정 필드가 원인일 때 해당 필드를 명시해요. 모든 응답에는 X-Request-Id 헤더가 포함되어 있으니, 지원 티켓에서 이를 인용해 주세요.
{
"error": {
"code": "text_too_long",
"message": "The text is longer than 10 segments (1,530 GSM-7 or 670 UCS-2 characters).",
"param": "text",
"doc_url": "https://bulksmsapi.cc/en/docs/errors#text_too_long"
}
}코드
| code | HTTP | 원인 | 잔액 |
|---|---|---|---|
| invalid_json | 400 | 본문이 JSON 객체가 아니거나, Content-Type이 application/json이 아니에요. | 본문을 수정하세요. 아무것도 청구되지 않았어요. |
| invalid_request | 400 | 필드가 누락되었거나 잘못된 타입이에요; 파라미터 이름을 확인해 주세요. | 필드를 수정하세요. 아무것도 청구되지 않았어요. |
| invalid_number | 400 | 요청에 포함된 번호 중 E.164 형식(+와 7~15자리 숫자)으로 읽을 수 있는 번호가 없어요. | 번호를 확인해 주세요. 요금이 청구되지 않았어요. |
| unsupported_country | 400 / 404 | 가격이 책정된 국가가 번호와 일치하지 않거나, GET /v1/pricing/{country}에 알 수 없는 코드가 있어요. | 국가 목록을 확인해 보세요. 아무것도 청구되지 않았어요. |
| text_too_long | 400 | 텍스트가 10개 이상의 세그먼트가 필요해요. | 텍스트를 줄이세요. 요금이 청구되지 않았어요. |
| too_many_recipients | 400 | 한 번의 요청에 10,000명 이상의 수신자가 있어요. | 목록을 분할했어요. 요금이 청구되지 않았어요. |
| schedule_out_of_range | 400 | send_at은 지금부터 2분에서 45일 사이의 유효한 시간이 아니에요. | 다른 시간을 선택해요. 요금이 청구되지 않았어요. |
| suppressed | 400 | 요청에 포함된 모든 번호가 발송 제외 목록에 있어요 (콘솔의 설정에서 확인할 수 있어요). | 아무것도 전송되거나 청구되지 않았어요. |
| unauthorized | 401 | Authorization 헤더가 누락되었거나 잘못되었거나, 키가 취소되었어요. | 실제 키를 보내세요. 아무것도 청구되지 않았어요. |
| top_up_required | 402 | 잔액이 요청 비용보다 낮아요. 메시지에 두 금액이 표시돼요. | 충전하고 다시 보내세요. 아무것도 청구되지 않았어요. |
| not_found | 404 | 해당 ID가 이 계정에 존재하지 않거나, 엔드포인트가 존재하지 않아요. | id와 경로를 확인하세요. |
| idempotency_conflict | 409 | Idempotency-Key가 지난 24시간 동안 다른 요청 본문과 함께 사용되었어요. | 새 요청에는 새 키를 사용하세요. |
| not_cancelable | 409 | 예약된 배치만 취소할 수 있어요. 이 배치는 이미 시작되었거나 완료되었어요. | 변경 사항이 없어요. |
| rate_limited | 429 | 해당 키가 지난 60초 동안 600회 이상의 요청을 보냈어요. | Retry-After 초 동안 기다려요. 요금은 청구되지 않아요. |
| server_error | 500 | 저희 쪽에서 문제가 발생했어요. | 동일한 Idempotency-Key로 다시 시도하세요. |
재시도
- 429를 제외한 4xx 에러는 요청을 변경해야 해요. 같은 요청을 다시 보내면 동일한 에러가 발생해요.
- 429 오류가 발생하면 Retry-After에 표시된 초만큼 기다리세요.
- 5xx 오류나 네트워크 타임아웃이 발생하면 같은 Idempotency-Key로 재시도해요. 첫 번째 요청이 수락되었다면, 두 번째 전송 대신 해당 응답을 받게 돼요.