API 레퍼런스

파일 업로드 정책

GET/v1/media/upload-policy
POST/v1/media/upload-policy

이미지, 동영상, 오디오, 일반 파일을 파일 스토리지에 업로드한 뒤 반환된 공개 URL을 모델 요청에 전달하세요. 게이트웨이는 사용자 범위의 단기 업로드 정책만 생성하며, 파일 데이터는 API 서버를 거치지 않습니다.

GET /v1/media/upload-policy
{
  "image_max_bytes": 52428800,
  "video_max_bytes": 209715200,
  "audio_max_bytes": 104857600,
  "file_max_bytes": 52428800
}

#업로드 정책 생성

  • kindstring필수

    "image", "video", "audio" 또는 "file".

  • content_typestring필수

    kind와 일치하는 구체적인 MIME 타입. file은 application/pdf, text/plain처럼 이미지·동영상·오디오가 아닌 MIME 타입을 받습니다.

  • sizeinteger필수

    정확한 파일 크기(바이트). 같은 API 키로 이 엔드포인트를 GET하면 사용자별 한도 네 가지를 모두 확인할 수 있습니다.

curl https://www.aisplice.store/v1/media/upload-policy \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "image",
    "content_type": "image/avif",
    "size": 1048576
  }'
policy.json
{
  "upload_url": "https://uploads.example.com/",
  "public_url": "https://media.example.com/media/user-upload/image/...",
  "fields": {
    "key": "media/user-upload/image/...",
    "policy": "...",
    "...": "Pass every returned field unchanged"
  },
  "expires_at": "2026-07-25T10:05:00Z"
}

#파일 스토리지에 업로드

반환된 fields 항목 전체와 파일을 한 번의 multipart POST로 upload_url에 보내세요. 정책은 5분 후 만료되고, 생성된 파일 경로 하나에 묶이며, 기존 파일을 덮어쓸 수 없습니다.

# Save the policy response as policy.json first.
upload_args=()
while IFS=$'\t' read -r key value; do
  upload_args+=(-F "$key=$value")
done < <(jq -r '.fields | to_entries[] | [.key, .value] | @tsv' policy.json)

# Keep the file field last for storage compatibility.
curl "$(jq -r .upload_url policy.json)" \
  "${upload_args[@]}" \
  -F "file=@reference.avif"

#공개 URL 사용

파일 스토리지가 성공을 반환하면, 선택한 모델이 지원하는 미디어 필드에 public_url을 넣으세요. 업로드가 허용되었다고 해서 모든 모델이 모든 미디어 형식을 디코딩할 수 있는 것은 아니므로 모델 요청 규약을 확인하세요.

image-task.json
{
  "model": "gpt-image-2",
  "prompt": "Turn this reference into a watercolor",
  "images": ["https://media.example.com/media/user-upload/image/..."]
}

#관련 오류

이 엔드포인트는 error.code가 아니라 error.type으로 실패를 알리므로, 상태 코드와 함께 아래 값으로 판단하세요.

  • 400 invalid_request_errorkind, content_type, size는 하나의 업로드 파일을 설명해야 합니다.
  • 401 unauthorizedBearer 토큰이 유효하지 않거나 없습니다.
  • 413 payload_too_large선언한 파일 크기가 설정된 업로드 한도를 넘습니다.
  • 415 unsupported_media_typecontent_type이 선택한 이미지, 동영상, 오디오 또는 일반 파일 분류와 맞지 않습니다.

전체 오류 코드 표 →

아직 해결되지 않았나요?

요청 ID나 오류 메시지를 보내 주시면 확인해 드리겠습니다.