Developer Docs · REST API

BYGENCY 생성 API

노드형 AI 영상 플랜 회원은 API 키 하나로 이미지·영상 모든 모델을 직접 호출할 수 있습니다. 생성 1건마다 본인 계정 크레딧에서 스튜디오와 동일하게 차감됩니다.

개요

BYGENCY 생성 API는 단순한 REST(HTTP) 엔드포인트입니다. 하나의 엔드포인트로 이미지·영상을 모두 다룹니다.

POST /api/v1/generate

이미지 생성 → 즉시 URL 반환

POST /api/v1/generate

영상 생성 시작 → task 반환

GET /api/v1/generate

task로 영상 완료·URL 확인

Bearer bg_live_…

API 키 하나로 모든 모델 호출

Base URL. https://bygency.co/api/v1/generate모든 요청은 HTTPS로만 받습니다.

빠른 시작

키 발급 → 호출 → (영상이면) 상태 확인. 세 줄이면 끝납니다.

bash
# 1) 스튜디오에서 발급한 키를 환경변수로 둔다
export BYGENCY_API_KEY="bg_live_..."

# 2) 이미지 한 장 만들어 보기
curl -s -X POST "https://bygency.co/api/v1/generate" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"image","provider":"nanobanana","model":"Nano Banana","prompt":"노을 지는 해변"}'

1. API 키 발급

스튜디오좌측 하단 프로필API 연결 탭에서 키를 만듭니다.

  • 키는 생성 시 한 번만 전체가 표시됩니다. 이후에는 다시 볼 수 없으니 안전한 곳에 보관하세요.
  • 회원당 최대 20개까지 만들 수 있고, 언제든 폐기(revoke)할 수 있습니다.
  • 1개로 이미지·영상 모든 모델을 호출합니다. 모델별로 키를 나눌 필요가 없습니다.
  • 키는 노드형 AI 영상 플랜 보유자만 발급·사용할 수 있습니다.

2. 인증

모든 요청 헤더에 Authorization: Bearer <API 키> 를 넣습니다. 키가 없거나 틀리면 401, 플랜이 없으면 403으로 거부됩니다.

Authorization 헤더
Authorization: Bearer bg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3. 이미지 생성

POST /api/v1/generate이미지는 즉시 결과 URL을 반환합니다.

POST /api/v1/generate — 이미지
curl -X POST "https://bygency.co/api/v1/generate" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "image",
    "provider": "nanobanana",
    "model": "Nano Banana",
    "prompt": "네온 사인이 있는 밤거리, 시네마틱",
    "refImage": "https://example.com/ref.jpg"
  }'

# 응답
{
  "ok": true,
  "url": "https://.../result.png",
  "credits_charged": 3,
  "credits_remaining": 1997
}
필드설명
kind"image" (이미지) / "video" (영상). 생략 시 provider·model로 자동 판별
provider제공사 코드 (아래 모델 목록 참고). 필수
model모델 표시명. 생략 시 provider 기본 모델
prompt생성 프롬프트. 필수
refImage레퍼런스/편집 이미지 URL (선택)
refImages레퍼런스 여러 장 (선택). 모델별 최대 장수는 스튜디오 표시와 같습니다
negative피해야 할 요소 (선택)
ratio화면 비율 (선택). 모델이 받지 않는 값은 그 모델의 기본 비율로 맞춰집니다
seed시드(재현용, 선택). 같은 시드+같은 프롬프트면 같은 결과. 안 주면 매번 새로 뽑습니다
watermark제공사 워터마크 (선택, 지원 모델만). 기본 false

4. 영상 생성

영상은 즉시 완료되지 않습니다. POST 로 시작하면 task(상태 확인 주소)를 돌려줍니다. 과금은 시작 시 1회만 발생합니다.

POST /api/v1/generate — 영상
curl -X POST "https://bygency.co/api/v1/generate" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "video",
    "provider": "seedance",
    "model": "Seedance 2.0",
    "prompt": "질주하는 스포츠카, 해질녘 도로",
    "seconds": 5,
    "ratio": "16:9",
    "firstFrame": "https://example.com/first.jpg"
  }'

# 응답
{
  "ok": true,
  "statusUrl": "/api/generate?provider=seedance&task=...",
  "credits_charged": 15,
  "credits_remaining": 1982
}
필드설명
provider / model제공사·모델 (아래 목록). 필수
prompt생성 프롬프트. 필수
seconds영상 길이(초). 모델별 5~10초 지원
ratio"16:9" / "9:16" / "1:1"
res해상도 (선택, 지원 모델만). 안 주면 1080p — 요금이 해상도로 갈리는 모델이 있습니다
firstFrame첫 프레임 이미지 URL (일부 모델 필수)
lastFrame마지막 프레임 이미지 URL (선택, 지원 모델만)
refImages레퍼런스 여러 장 (선택). 모델별 최대 장수는 스튜디오 표시와 같습니다
srcVideo원본 영상 URL (선택). V2V·모션 전이·영상 편집 계열에 필요
audiotrue 시 오디오 포함(지원 모델). 추가 과금
audioUrl참조 오디오 URL (선택). 씨댄스 2.x·Wan 등
seed시드(재현용, 선택). 같은 시드+같은 프롬프트면 같은 결과. 안 주면 매번 새로 뽑습니다
watermark제공사 워터마크 (선택, 지원 모델만). 기본 false
cfg프롬프트 준수 강도 0~100 (선택, 클링 계열만). 기본 70
dryRuntrue면 실제 호출·과금 없이 페이로드만 미리보기

5. 영상 상태 확인 (폴링)

응답의 statusUrl 쿼리를 그대로 GET /api/v1/generate에 붙여 15~30초 간격으로 확인합니다. 추가 과금 없음.

GET /api/v1/generate — 상태 확인
curl "https://bygency.co/api/v1/generate?provider=seedance&task=..." \
  -H "Authorization: Bearer $BYGENCY_API_KEY"

# 진행 중
{ "status": "generating" }
# 완료
{ "status": "succeeded", "url": "https://.../video.mp4" }

응답 형식

이미지·영상 요청 모두 아래 공통 필드를 돌려줍니다. 영상은 완료 전까지 url 대신 statusUrl 을 씁니다.

필드타입설명
okboolean요청 성공 여부
urlstring이미지 결과 URL. 영상은 완료 후에 채워집니다
statusUrlstring영상 상태 확인용 주소. 쿼리를 그대로 GET 에 붙입니다
statusstringgenerating · succeeded · failed
credits_chargednumber이번 호출로 차감된 크레딧
credits_remainingnumber차감 후 남은 크레딧
errorstring실패 시에만 담기는 오류 메시지

6. 지원 모델

영상 모델

providermodel (예)
klingKling 1.6 Pro (이미지→영상) · Kling 1.6 Pro (텍스트→영상) · Kling 1.6 Standard (이미지→영상) · Kling 2.0 Master (이미지→영상) · Kling 2.0 Master (텍스트→영상) · Kling 2.1 Master (이미지→영상) · Kling 2.1 Master (텍스트→영상) · Kling 2.6 (이미지→영상) · Kling 2.6 (텍스트→영상) · Kling 3.0 Fast (이미지→영상) · Kling 3.0 Fast (텍스트→영상) · Kling 3.0 Pro (이미지→영상) · Kling 3.0 Pro (텍스트→영상) · Kling o1 (이미지→영상) · Kling o1 (텍스트→영상)
seedanceSeedance 1.0 Pro · Seedance 1.0 Pro Fast · Seedance 1.5 Pro · Seedance 2.0 · Seedance 2.0 Fast · Seedance 2.0 Mini · Seedance 2.5
hailuoMiniMax Hailuo 02 · MiniMax Hailuo 03 · MiniMax Hailuo 2.3 · MiniMax Hailuo 2.3 Fast · MiniMax I2V-01 Director · MiniMax T2V-01 Director
lumaLuma Ray 3.2 · Luma Ray 3.2 (비율 변경) · Luma Ray 3.2 (영상 편집)
googleGoogle Veo 3.1 · Google Veo 3.1 Fast · Google Veo 3.1 Lite
runwayRunway Gen-3 Alpha Turbo · Runway Gen-4
xaiGrok Imagine (영상)
motion모션 전이 (원본 움직임 유지·Motion Transfer)
runway_alephRunway Aleph (영상→실사 V2V)
v2v_autoV2V 자동 (최고정확도·모델 자동선택)

이미지 모델

providermodel (예)
fluxFlux 1.1 Pro · Flux 1.1 Pro Ultra · Flux 2 Flex · Flux 2 Max · Flux 2 Pro · Flux Dev · Flux Kontext Max (레퍼런스 편집) · Flux Kontext Pro (레퍼런스 편집)
seedreamSeedream 4.0 · Seedream 4.5 · Seedream 5.0 Lite · Seedream 5.0 Pro · Seedream 4.0 (레퍼런스 편집) · Seedream 4.5 (레퍼런스 편집) · Seedream 5.0 Lite (레퍼런스 편집) · Seedream 5.0 Pro (레퍼런스 편집)
imagenImagen 3 · Imagen 3 Fast · Imagen 4 · Imagen 4 Fast · Imagen 4 Ultra
lumaLuma Uni 1 · Luma Uni 1 Max
nanobananaNano Banana · Nano Banana 2 · Nano Banana 2 Lite · Nano Banana Pro
openaiGPT Image · GPT Image 1.5 · GPT Image 2 · GPT Image Mini
xaiGrok Imagine
vto가상 피팅 (인물 + 옷)

model 값은 스튜디오에 표시되는 모델 이름과 동일합니다. 최신 목록·단가는 스튜디오 생성 화면에서 확인하세요.

전체 모델 목록98

노드 스튜디오에서 고를 수 있는 모델 전부입니다. 오른쪽 값이 호출에 쓰는 provider 이고, 이름이 그대로 model 값입니다.

98 / 98
영상 생성40
Google Veo 3.1google
Google Veo 3.1 Fastgoogle
Google Veo 3.1 Litegoogle
Grok Imagine (영상)xai
Luma Ray 3.2luma
MiniMax Hailuo 02hailuo
MiniMax Hailuo 03hailuo
MiniMax Hailuo 2.3hailuo
MiniMax Hailuo 2.3 Fasthailuo
MiniMax I2V-01 Directorhailuo
MiniMax T2V-01 Directorhailuo
Runway Gen-3 Alpha Turborunway
Runway Gen-4runway
Seedance 1.0 Proseedance
Seedance 1.0 Pro Fastseedance
Seedance 1.5 Proseedance
Seedance 2.0seedance
Seedance 2.0 Fastseedance
Seedance 2.0 Miniseedance
Seedance 2.5seedance
Kling 1.6 Pro (이미지→영상)kling
Kling 1.6 Pro (텍스트→영상)kling
Kling 1.6 Standard (이미지→영상)kling
Kling 2.0 Master (이미지→영상)kling
Kling 2.0 Master (텍스트→영상)kling
Kling 2.1 Master (이미지→영상)kling
Kling 2.1 Master (텍스트→영상)kling
Kling 2.6 (이미지→영상)kling
Kling 2.6 (텍스트→영상)kling
Kling 3.0 Fast (이미지→영상)kling
Kling 3.0 Fast (텍스트→영상)kling
Kling 3.0 Pro (이미지→영상)kling
Kling 3.0 Pro (텍스트→영상)kling
Kling o1 (이미지→영상)kling
Kling o1 (텍스트→영상)kling
Luma Ray 3.2 (비율 변경)luma
Luma Ray 3.2 (영상 편집)luma
모션 전이 (원본 움직임 유지·Motion Transfer)motion
Runway Aleph (영상→실사 V2V)runway_aleph
V2V 자동 (최고정확도·모델 자동선택)v2v_auto
이미지·레퍼런스33
Flux 1.1 Proflux
Flux 1.1 Pro Ultraflux
Flux 2 Flexflux
Flux 2 Maxflux
Flux 2 Proflux
Flux Devflux
Grok Imaginexai
Imagen 3imagen
Imagen 3 Fastimagen
Imagen 4imagen
Imagen 4 Fastimagen
Imagen 4 Ultraimagen
Luma Uni 1luma
Luma Uni 1 Maxluma
Seedream 4.0seedream
Seedream 4.5seedream
Seedream 5.0 Liteseedream
Seedream 5.0 Proseedream
가상 피팅 (인물 + 옷)vto
Flux Kontext Max (레퍼런스 편집)flux
Flux Kontext Pro (레퍼런스 편집)flux
Seedream 4.0 (레퍼런스 편집)seedream
Seedream 4.5 (레퍼런스 편집)seedream
Seedream 5.0 Lite (레퍼런스 편집)seedream
Seedream 5.0 Pro (레퍼런스 편집)seedream
GPT Imageopenai
GPT Image 1.5openai
GPT Image 2openai
GPT Image Miniopenai
Nano Bananananobanana
Nano Banana 2nanobanana
Nano Banana 2 Litenanobanana
Nano Banana Pronanobanana
3D 모델(메시)2
Hitem3D 2.0 (3D 생성)ark3d
Hyper3D Gen-2 (3D 생성)ark3d
텍스트·프롬프트18
deepseek-v3-2-251201deepseek
deepseek-v4-flash-260425deepseek
deepseek-v4-pro-260425deepseek
dola-seed-2-1-turbo-260628dola-seed
gemini-2.5-flashgemini
gemini-2.5-flash-litegemini
gemini-2.5-progemini
gemini-3.5-flashgemini
glm-4-7-251222glm
glm-5-2-260617glm
gpt-3.5-turbogpt
gpt-4-turbogpt
gpt-4.1gpt
gpt-4.1-minigpt
gpt-4.1-nanogpt
gpt-4ogpt
gpt-4o-minigpt
gpt-oss-120b-250805oss
도구 · 후처리5
나레이션 (AI 음성 해설)narrate
립싱크 (인물 말하기)lipsync
음악 생성 (BGM·뮤직)music
화질 올리기 (영상 초해상 ×4)upscale
화질 올리기 (이미지 초해상 ×4)upscale

7. 모델별 호출 예시

각 모델의 provider·model 값과 자주 쓰는 필드입니다. 모두 POST https://bygency.co/api/v1/generate 에 아래 JSON 바디로 보냅니다.

아무 모델이나 골라 예시 보기

seedance
cURL — Seedance 2.0
curl -X POST "https://bygency.co/api/v1/generate" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "video",
  "provider": "seedance",
  "model": "Seedance 2.0",
  "prompt": "노을 지는 해변을 걷는 인물, 시네마틱",
  "seconds": 5,
  "ratio": "16:9"
}'
요청 바디(JSON)
{
  "kind": "video",
  "provider": "seedance",
  "model": "Seedance 2.0",
  "prompt": "노을 지는 해변을 걷는 인물, 시네마틱",
  "seconds": 5,
  "ratio": "16:9"
}

영상은 statusUrl 을 돌려줍니다 — 그 주소를 GET 으로 확인해 최종 url 을 받습니다.

영상 모델

Google Veo 3.1google

오디오 포함 지원. seconds 5~8.

json
{
  "kind": "video",
  "provider": "google",
  "model": "Google Veo 3.1",
  "prompt": "빗속을 달리는 오토바이, 네온 반사, 시네마틱",
  "seconds": 8,
  "ratio": "16:9",
  "audio": true
}
Runway Gen-4runway

첫 프레임 이미지(firstFrame) 필수.

json
{
  "kind": "video",
  "provider": "runway",
  "model": "Runway Gen-4",
  "prompt": "카메라가 천천히 전진하는 미래 도시",
  "firstFrame": "https://example.com/first.jpg",
  "seconds": 10,
  "ratio": "16:9"
}
Seedance 2.0seedance

텍스트→영상. firstFrame 넣으면 이미지→영상.

json
{
  "kind": "video",
  "provider": "seedance",
  "model": "Seedance 2.0",
  "prompt": "파도가 부서지는 해안 절벽, 드론 샷",
  "seconds": 5,
  "ratio": "16:9"
}
Kling 2.1 Masterkling

텍스트→영상 / 이미지→영상 모델명 구분.

json
{
  "kind": "video",
  "provider": "kling",
  "model": "Kling 2.1 Master (텍스트→영상)",
  "prompt": "벚꽃이 흩날리는 골목을 걷는 사람",
  "seconds": 5,
  "ratio": "9:16"
}
MiniMax Hailuo 02hailuo

firstFrame 지원(이미지→영상).

json
{
  "kind": "video",
  "provider": "hailuo",
  "model": "MiniMax Hailuo 02",
  "prompt": "질주하는 치타를 따라가는 트래킹 샷",
  "seconds": 6,
  "ratio": "16:9"
}
Luma Ray 2luma

firstFrame/last frame 지원.

json
{
  "kind": "video",
  "provider": "luma",
  "model": "Luma Ray 2",
  "prompt": "구름 위를 나는 고래, 몽환적",
  "seconds": 5,
  "ratio": "16:9"
}

이미지 모델

Nano Bananananobanana

레퍼런스 최대 12장(refImages) 지원.

json
{
  "kind": "image",
  "provider": "nanobanana",
  "model": "Nano Banana",
  "prompt": "미니멀한 제품 광고컷, 파스텔 배경",
  "refImage": "https://example.com/ref.jpg"
}
GPT Image 2openai

고품질 텍스트 렌더링. 1.5 / Image / Mini 도 동일 provider.

json
{
  "kind": "image",
  "provider": "openai",
  "model": "GPT Image 2",
  "prompt": "\"OPEN\" 네온 간판이 있는 카페 외관, 저녁"
}
Grok Imaginexai

단일 이미지 생성.

json
{
  "kind": "image",
  "provider": "xai",
  "model": "Grok Imagine",
  "prompt": "우주를 배경으로 한 사이버펑크 도시"
}
Flux 1.1 Pro Ultraflux

Kontext(레퍼런스 편집) 모델은 refImage 사용.

json
{
  "kind": "image",
  "provider": "flux",
  "model": "Flux 1.1 Pro Ultra",
  "prompt": "초현실적인 숲속 유리 오두막, 황금빛 조명"
}
영상 모델 응답은 statusUrl(상태 확인 주소)을 반환합니다. 위 상태 확인에서 폴링해 최종 url 을 받으세요. 이미지 모델은 응답에 url 이 바로 담깁니다.

8. 언어별 예시

BASE="https://bygency.co/api/v1/generate"
KEY="$BYGENCY_API_KEY"

# 1) 이미지 — 응답에 결과 url 이 바로 담긴다
curl -s -X POST "$BASE" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"image","provider":"nanobanana","model":"Nano Banana","prompt":"노을 지는 해변"}'

# 2) 영상 — 시작하면 statusUrl 을 돌려준다 (과금은 이때 1회)
curl -s -X POST "$BASE" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"video","provider":"seedance","model":"Seedance 2.0","prompt":"질주하는 말","seconds":5}'

# 3) 상태 확인 — statusUrl 의 쿼리를 그대로 붙인다 (추가 과금 없음)
curl -s "$BASE?provider=seedance&task=TASK_ID" \
  -H "Authorization: Bearer $KEY"

9. 요청 한도 (남용 방지)

서비스 보호를 위해 계정 단위로 요청 한도가 적용됩니다. 초과 시 HTTP 429 Retry-After(초) 헤더를 반환합니다. 여러 키를 만들어도 한도는 계정 합산으로 계산되어 우회할 수 없습니다.

구분한도
생성(POST) · 분당60회
생성(POST) · 시간당300회
생성(POST) · 일일2,000회
동시 진행 중 생성3건
상태 조회(GET) · 분당120회
상태 조회(GET) · 시간당3,000회
  • 429를 받으면 Retry-After 초만큼 기다린 뒤 재시도하세요(지수 백오프 권장).
  • 폐기(revoke)된 키는 즉시 401로 거부되고, 잔액이 부족하면 생성 전에 402로 막힙니다(크레딧 마이너스 불가).
  • 상태 조회(GET)는 15~30초 간격을 권장합니다. 과도한 폴링은 429를 유발합니다.

10. 크레딧·과금

  • 생성 1건마다 키 소유자 본인 계정에서 크레딧이 차감됩니다(스튜디오와 동일 단가·배수).
  • 생성 전에 잔액을 확인해 부족하면 402로 거부합니다(크레딧 마이너스 없음).
  • 영상은 시작 시 1회만 차감되고, 상태 확인(GET) 반복은 추가 과금이 없습니다.
  • 응답의 credits_charged·credits_remaining 로 차감액·잔액을 확인합니다.
  • 제공사 API 키(Veo·Runway·Seedance 등)는 서버에만 있고 응답에 노출되지 않습니다.
  • 남은 크레딧은 생성하지 않고도 확인할 수 있습니다 — 이 호출은 크레딧을 쓰지 않습니다.
GET /api/v1/credits — 잔액 확인 (무과금)
curl "https://bygency.co/api/v1/credits" \
  -H "Authorization: Bearer $BYGENCY_API_KEY"

{
  "ok": true,
  "credits": 1982.5,
  "credit_price_krw": 65,
  "credits_krw": 128863,
  "plan": "Pro",
  "plan_until": "2026-12-31T00:00:00.000Z",
  "plan_active": true
}
크레딧 충전·요금제 보기

12-b. 요청 규약 (요청 ID · 한도 · 재시도 · CORS)

  • 모든 응답에 요청을 특정하는 ID 가 붙습니다. 문의하실 때 이 값을 알려 주시면 그 요청을 바로 찾습니다. request_id · X-Request-Id
  • 남은 요청 한도를 응답 헤더로 알려 드립니다 — 한도를 넘기기 전에 속도를 조절할 수 있습니다. X-RateLimit-Limit · X-RateLimit-Remaining · X-RateLimit-Reset
  • 네트워크 오류로 재시도할 때 같은 Idempotency-Key 를 보내면 두 번 생성되지 않습니다.
  • 브라우저에서 직접 호출할 수 있습니다 (CORS 허용).
  • 한도를 넘기면 얼마나 기다려야 하는지 헤더로 알려 드립니다 — 재시도 도구가 그대로 읽습니다. Retry-After
  • 위 규약은 /api/v1 의 모든 경로에 똑같이 적용됩니다 (생성 · 잔액 · 이력 · 취소 · 목록 · 대여 · ControlNet).
재시도 안전 — 같은 키로 두 번 보내면 한 번만 생성
curl -X POST "https://bygency.co/api/v1/generate" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Idempotency-Key: my-job-2026-08-14-0001" \
  -H "Content-Type: application/json" \
  -d '{ "model": "Seedance 2.0", "prompt": "질주하는 스포츠카", "seconds": 5 }'

# 같은 키로 다시 보내면 첫 응답을 그대로 돌려줍니다 (제공사를 다시 부르지 않습니다)
#   응답 헤더: Idempotent-Replay: true

12-c. 모델 목록 · 사용 이력 · 취소

  • 생성에 쓸 모델 목록을 API 로 받습니다 — 문서를 보고 이름을 옮겨 적지 않아도 됩니다.
  • 시작한 영상 생성을 중간에 멈추고 크레딧을 돌려받습니다.
  • 내 호출 이력과 쓴 크레딧을 조회합니다 (읽기만 하며 과금 없음).
GET /api/v1/models?kind=video
curl "https://bygency.co/api/v1/models?kind=video"

{ "ok": true, "models": [
  { "model": "Seedance 2.0", "kind": "video", "provider": "seedance",
    "unit": "second", "usd_per_unit": 0.343 } ] }
POST /api/v1/cancel
curl -X POST "https://bygency.co/api/v1/cancel" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "task": "/api/generate?provider=seedance&task=..." }'

{ "ok": true, "stopped": true, "credits_refunded": 12.5 }
GET /api/v1/usage
curl "https://bygency.co/api/v1/usage?limit=50" \
  -H "Authorization: Bearer $BYGENCY_API_KEY"

{ "ok": true,
  "usage": [ { "model": "Seedance 2.0", "kind": "video", "credits": 10,
               "status": "ok", "task": "...", "created_at": "2026-08-14T…" } ],
  "totals": { "calls": 3, "credits": 12.5, "ok": 2, "failed": 1 },
  "next_cursor": "2026-08-14T…" }

12-e. 웹훅 — 끝나면 우리가 알려 드립니다

  • 영상이 끝날 때까지 계속 물어보지 않아도 됩니다 — 완료·실패를 회원님 서버로 보내 드립니다.
  • 모든 요청에 서명이 붙습니다. 서명과 타임스탬프를 확인하면 우리가 보낸 것인지 알 수 있습니다. X-Bygency-Signature
  • 받는 쪽이 잠깐 죽어 있으면 30초 · 5분 · 30분 간격으로 다시 보냅니다 (최대 4회).
  • 전달 이력이 남아, 안 왔을 때 무엇이 어떻게 실패했는지 확인할 수 있습니다.
POST /api/v1/webhook — 등록 (비밀키는 이때 한 번만 보여 드립니다)
curl -X POST "https://bygency.co/api/v1/webhook" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://내서버.example.com/bygency-callback" }'

{ "ok": true, "registered": true, "secret": "whsec_..." }
# 시험 발송:  -d '{ "test": true }'      해제:  -X DELETE
받는 쪽에서 서명 확인하기 (Node.js)
import crypto from 'node:crypto'

app.post('/bygency-callback', express.raw({ type: '*/*' }), (req, res) => {
  const ts  = req.header('X-Bygency-Timestamp')
  const sig = req.header('X-Bygency-Signature')          // "sha256=<hex>"
  const raw = req.body.toString('utf8')                   // ⚠ 원본 그대로

  // 지나간 요청을 그대로 다시 보내는 공격을 막습니다
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return res.sendStatus(400)

  const mine = 'sha256=' + crypto.createHmac('sha256', process.env.BYGENCY_WEBHOOK_SECRET)
    .update(ts + '.' + raw).digest('hex')
  if (mine !== sig) return res.sendStatus(401)

  const { event, data } = JSON.parse(raw)
  // event: "generation.succeeded" | "generation.failed"
  res.sendStatus(200)   // 2xx 를 주면 재시도하지 않습니다
})

12-d. OpenAPI 규격서 (클라이언트 자동 생성)

  • 이 문서를 사람이 읽고 코드를 짜지 않아도 됩니다 — 규격서 한 장으로 클라이언트를 자동 생성합니다.
  • Postman · Insomnia 로 그대로 불러오거나, AI 도구에 그대로 물릴 수 있습니다.
  • 모델 이름과 오류 코드는 실제 서버 값에서 그때그때 만듭니다 — 문서와 실제가 어긋나지 않습니다.
GET /api/v1/openapi.json
curl "https://bygency.co/api/v1/openapi.json" -o bygency.json

# 클라이언트 자동 생성 (예: TypeScript)
npx @openapitools/openapi-generator-cli generate \
  -i bygency.json -g typescript-fetch -o ./bygency-client

11. 오류 코드

HTTPcode상황
401unauthorizedAPI 키 없음/오류 — "유효한 API 키가 필요합니다"
403forbidden노드형 AI 영상 플랜이 아님
402insufficient_credits크레딧 부족 — need·have 함께 반환
429rate_limited요청 한도 초과 — Retry-After(초) 헤더 참고
400invalid_requestmodel/provider 누락 등 잘못된 요청
404not_found그런 작업이 없음 (취소 등)
502provider_error제공사가 실패로 답함
500server_error제공사 미설정/서버 오류

12. ControlNet 이미지 생성

기준 이미지의 윤곽·깊이·자세를 따라 구도를 고정한 채 이미지를 생성합니다. 최대 3개까지 겹쳐 쓸 수 있습니다.

type무엇을 따라가나
canny윤곽선 — 형태를 가장 강하게 고정
depth깊이 — 원근·배치를 유지
pose자세 — 사람의 관절 위치를 유지
tile타일 — 세부 질감 보강
blur흐림 — 대략적 명암 구도
gray흑백 — 밝기 구조만 유지
curl -X POST https://nextbygency.com/api/v1/controlnet \
  -H "Authorization: Bearer bg_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "눈 내리는 골목의 검은 고양이, 시네마틱",
    "type": "canny",
    "image_url": "https://example.com/ref.png",
    "strength": 0.8,
    "ratio": "16:9"
  }'
  • 요금은 이미지 생성 요금에 ControlNet 가산(기본 +10%)이 더해집니다. 스튜디오와 같은 규칙입니다.
  • GET /api/v1/controlnet 로 쓸 수 있는 타입과 요청 형식을 확인할 수 있습니다.
  • ControlNet 가중치는 제휴 제공사(fal.ai)가 실행합니다 — 아래 모델 대여 대상이 아닙니다.

13. 모델 대여 (초해상 ×4)

BYGENCY 가 만든 초해상(화질 올리기) 모델을 파일째 빌려갑니다. 추론은 빌려가신 쪽 기기에서 돌며 GPU 가 필요 없습니다 — 우리 서버는 추론하지 않습니다.

왜 파일을 빌려주나: 이 모델은 브라우저·CPU 에서 도는 구조라 서버에서 대신 돌려주기 어렵습니다. 실제로 재 보면 1920×1080 사진 한 장에 타일 45장이 필요하고, 가벼운 모델도 65초가 걸립니다. 그래서 "이미지를 보내면 결과를 준다" 가 아니라 "모델을 빌려준다" 로 제공합니다.
curl https://nextbygency.com/api/v1/models
# → { models: [{ id:"sr-x4-fast", title, license, files, lease_credits }] }
  • 대여 기간은 1~30일입니다. 기간이 지나거나 취소되면 파일 주소가 즉시 막힙니다.
  • GET /api/v1/lease 로 내가 가진 대여 목록(남은 기간·내려받은 횟수)을 볼 수 있습니다.
  • 가중치 라이선스는 모델마다 다릅니다 — 목록 응답의 license·source 를 반드시 확인하고 그 조건을 따르세요.
  • 입출력은 NCHW float32 0~1 입니다. SDK 를 쓰지 않고 직접 onnxruntime 으로 돌려도 됩니다.

준비됐나요? 스튜디오에서 API 키를 발급하고 바로 호출하세요.