콘텐츠로 이동
ABTO 가이드
abto.app
무료로 시작

연동 가이드

Gateway 개요

Gateway의 요청 처리 원칙, 지원 엔드포인트, 요청 파라미터의 출처, 오류 출처를 설명합니다.

ABTO Gateway는 AI 호출을 받아 라우팅에 따라 OpenAI, Anthropic, Gemini, DeepSeek, Kimi 중 한 제공사로 전달합니다. 이 페이지는 지원 엔드포인트, 요청 파라미터의 출처, 오류 출처처럼 Gateway 전체에 적용되는 규칙을 설명합니다. 받는 필드와 제공사별 차이는 Chat Completions에 있습니다.

  • Gateway는 지원하지 않는 필드를 무시하지 않고 400으로 거절합니다.
  • 지원하는 필드는 배정된 제공사의 API 형식으로 변환해 전달합니다. 값의 적용 여부는 제공사가 결정하며, 제공사가 거절한 요청은 제공사의 상태코드와 오류 메시지로 돌아옵니다.
  • 배정된 제공사에 따라 동작이 달라지는 필드가 있습니다. 어떤 필드가 어떻게 달라지는지는 Chat Completions의 제공사별 주요 차이에서 확인하세요.

Gateway는 아래 엔드포인트만 받습니다.

엔드포인트형식문서
POST /v1/chat/completionsOpenAI Chat CompletionsChat Completions
GET /v1/modelsOpenAI Models모델 목록

요청 본문이 20MB를 넘으면 413을 반환합니다. 요청마다 보내야 하는 헤더는 레퍼런스에 있습니다.

라우팅을 설정하기 전에는 모든 요청이 보낸 값 그대로 OpenAI로 전달되므로 x-abto-key-openai가 필요합니다. 이때 코드가 사용하던 설정이 Origin 옵션으로 자동 등록됩니다.

기능에 라우팅을 설정하면 요청 필드는 아래 세 가지로 나뉩니다.

요청 내용요청 필드
대화 내용user, assistant, tool 메시지
출력 길이 제한max_completion_tokens, max_tokens
응답 형식response_format
도구 호출tools, tool_choice, functions, function_call

라우팅과 무관하게 요청에 보낸 값을 그대로 사용합니다.

요청 내용요청 필드
시스템 프롬프트system, developer 메시지

옵션에 시스템 프롬프트가 있으면 보낸 메시지 대신 그 값을 사용하고, 비어 있으면 보낸 메시지를 그대로 사용합니다.

요청 내용요청 필드
모델model
생성 파라미터temperature, top_p, seed, reasoning_effort 등

배정된 옵션이 이 값들을 정하고, 요청에 보낸 값은 사용하지 않습니다. 제공사도 옵션이 정합니다. 옵션에 설정하지 않은 파라미터는 제공사에 전달되지 않고, 제공사 기본값이 적용됩니다. 옵션에는 이 표에 없는 제공사 전용 파라미터도 존재합니다. 설정할 수 있는 목록은 대시보드가 제공사와 모델별로 보여줍니다.

GET /v1/models는 ABTO가 지원하는 모델을 OpenAI Models 형식으로 반환합니다. Chat Completions와 같은 API 키로 인증하며, OpenAI SDK의 models.list()로 그대로 읽을 수 있습니다.

{
"object": "list",
"data": [
{
"id": "gpt-5.4",
"object": "model",
"owned_by": "openai",
"base_model": "gpt-5.4",
"supported_parameters": [
{ "name": "temperature", "type": "number", "range": [0, 2] },
{ "name": "reasoning_effort", "type": "string", "allowed_values": ["none", "low", "medium", "high", "xhigh"], "default": "none" }
],
"constraints": [
{ "type": "depends_on", "param": "temperature", "ref_param": "reasoning_effort", "ref_value": "none" }
]
}
]
}
필드뜻
id모델 이름. 요청의 model에 그대로 사용합니다
owned_by제공사 (openai, anthropic, gemini, deepseek, kimi)
base_model모델 계열의 이름. id와 같으면 최신 이름이고, 다르면 그 계열의 날짜 스냅샷입니다
supported_parameters이 모델이 받는 생성 파라미터와 값 범위
max_output_tokens모델이 낼 수 있는 출력 토큰 상한. 상한이 필수가 아닌 제공사는 이 필드가 없습니다
constraints파라미터 사이의 제약. mutually_exclusive는 함께 보낼 수 없고, depends_on은 ref_param이 ref_value일 때만 보낼 수 있습니다
  • 라우팅 설정 전: 요청이 OpenAI로 전달되므로 owned_by가 openai인 이름만 model에 보낼 수 있습니다.
  • 라우팅 설정 후: base_model이 id와 같은 정본 모델만 대시보드 옵션으로 고를 수 있습니다. 날짜 스냅샷은 옵션 편집기에 나타나지 않습니다.
  • 비용: 제공사가 응답한 모델 이름의 단가를 우선 사용하고, 응답에 모델 이름이 없으면 배정된 모델의 단가를 사용합니다. 해당 이름의 단가가 카탈로그에 없으면 비용 없이 기록됩니다.

라우팅을 설정하기 전에는 코드가 정한 제공사, 모델, 생성 파라미터, 시스템 프롬프트로 요청이 처리됩니다. Gateway는 그 구성을 기능의 Origin 옵션으로 자동 등록합니다. 별도 설정은 필요 없습니다.

Origin 옵션은 비교의 기준선입니다. 대시보드에서 새 옵션을 만들어 라우팅을 나누면, 기존 코드 설정인 Origin과 성과를 견줍니다. 구성은 코드가 정하므로 대시보드에서 편집할 수 없고, 이름만 바꿀 수 있습니다.

코드에서 모델이나 시스템 프롬프트, 생성 파라미터를 바꾸면 Gateway가 바뀐 구성을 새 Origin 옵션으로 등록합니다. 이전 Origin 옵션은 지난 성과를 볼 수 있게 그대로 남고, 라우팅에서 Origin이 받던 비율은 새 Origin 옵션이 이어받습니다.

오류 응답의 x-abto-error-source 헤더로 요청을 거절한 곳을 구분합니다.

거절한 곳상태코드x-abto-error-source본문
제공사제공사 반환 상태코드provider제공사의 message, type, code
제공사 연결 실패502, 504, 499transporttype이 transport_error입니다
ABTO Gateway400, 401, 413, 500gateway{"error":{"message":"…"}}

ABTO Gateway가 만든 오류 본문에는 type, param, code가 없습니다. 제공사 오류는 OpenAI 오류 형식에 제공사 값을 그대로 담습니다.

Gateway가 요청 본문을 거절한 응답의 message에는 거절 이유가 담깁니다.

예message
지원하지 않는 필드unsupported field "logprobs"
지원하지 않는 값n=2 is not supported: the gateway serves a single choice
함께 쓸 수 없는 필드response_format json_object cannot be combined with tools
JSON 파싱 실패, 타입 불일치cannot parse request body

지원 엔드포인트가 받은 응답에는 모두 x-abto-request-id가 포함됩니다. 요청 화면에는 배정을 마치고 처리에 들어간 요청이 기록됩니다. 그 응답에는 x-abto-attempt와 x-abto-provider가 함께 실리므로, 이 헤더가 없는 오류는 요청 화면에 기록이 남지 않습니다.