본문으로 건너뛰기

소스 업로드

POST/v1/uploads

잡에서 쓸 소스 압축 파일(tar.gz 또는 zip)을 올립니다, 본문은 파일 원문이고 응답의 upload_id를 잡 제출에 씁니다

API 키 권한 run 또는 콘솔 세션으로 부릅니다, 콘솔 세션은 조직 역할 owner, admin, developer만 됩니다

  • 본문은 application/octet-stream으로 보내는 압축 파일 원문입니다
  • 콘솔 세션은 workspace_id 쿼리를 함께 보내고, API 키는 키의 워크스페이스에 올라갑니다
  • 업로드는 잡 하나에만 쓰입니다, 배치는 git 소스만 받습니다

참고 서버 구현(2026-10-12 dev 기준)이 계약 초안과 다른 점

  • 크기 상한(기본 2 GiB, 설정 runner_upload_max_bytes)을 넘으면 서버는 413이 아니라 400 invalid_request(details.max_bytes)를 돌려줍니다
  • 응답에는 계약 필드 외에 files(압축 안 파일 수)가 더 옵니다
  • 형식은 tar.gz만 받습니다, zip은 400 invalid_request입니다

Headers

  • Authorization: optional string
    Bearer xci_live_… 워크스페이스 API 키, 키 권한 run(read 키는 403 insufficient_permission), 콘솔 세션 쿠키로 대신할 수 있습니다
  • Origin: optional string
    콘솔 세션으로 상태를 바꿀 때 같은 출처(https://xenoci.com)여야 합니다, API 키 요청에는 필요 없습니다

Query Parameters

  • workspace_id: optional string
    콘솔 세션은 워크스페이스가 필요한 곳에서 필수, API 키는 생략하거나 키의 워크스페이스와 같아야 합니다

Body

application/octet-stream 압축 파일 원문(tar.gz 또는 zip)

application/octet-stream

    Returns

    201 만들어짐 application/json

    • Upload: object
      • id: string
        업로드 ID, 잡 제출의 source.upload_id에 씁니다
        형식 ^upl_[A-Za-z0-9]+$
      • bytes: integer
        받은 바이트 수
      • sha256: string
        받은 파일의 SHA-256
      • expires_at: string
        잡에 쓰지 않으면 지워지는 시각
        RFC 3339 UTC 시각

    오류

    • invalid_request: HTTP 400
      본문이나 쿼리가 검증에 실패했습니다, error.details.fields에 문제 필드가 있습니다
    • api_key_required: HTTP 401
      API 키 엔드포인트에 Authorization: Bearer 헤더가 없습니다
    • api_key_revoked_leaked: HTTP 401
      공개 유출 신고로 자동 폐기된 키입니다, 새 키를 발급하세요
    • invalid_api_key: HTTP 401
      모르는 키이거나 폐기, 만료, 체크섬 불일치입니다(종료된 xeno_ 접두사 포함)
    • session_required: HTTP 401
      콘솔 엔드포인트를 유효한 콘솔 세션 쿠키 없이 불렀습니다
    • insufficient_permission: HTTP 403
      역할이나 키 권한(run/read)이 이 요청을 허용하지 않습니다
    • ip_not_allowed: HTTP 403
      요청 IP가 조직 또는 API 키의 IP 허용 목록 밖입니다, details.ip와 details.list(organization 또는 api_key)에 있습니다
    • organization_suspended: HTTP 403
      운영자가 조직을 정지했습니다, 키는 거부되고 실행 중인 잡은 멈춥니다
    • workspace_archived: HTTP 403
      보관된 워크스페이스입니다, 키는 폐기되었고 새 잡은 거절됩니다
    • rate_limited: HTTP 429, 다시 시도 가능
      이 키 또는 조직의 요청이 너무 많습니다, retry_after_s만큼 기다리세요
    • internal_error: HTTP 500, 다시 시도 가능
      예상하지 못한 오류입니다, 다시 시도하고 반복되면 request_id와 함께 알려 주세요

    오류 봉투 모양과 전체 코드 표는 오류 코드에 있습니다

    다음 단계