Developer Docs · REST API

BYGENCY 생성 API

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

개요

BYGENCY 생성 API는 단순한 REST(HTTP) 엔드포인트입니다. 하나의 엔드포인트로 이미지·영상을 모두 다루고, 글(채팅)은 /api/v1/chat 으로 부릅니다.

POST /api/v1/generate

이미지 생성 → 즉시 URL 반환

POST /api/v1/generate

영상 생성 시작 → task 반환

GET /api/v1/generate

task로 영상 완료·URL 확인

POST /api/v1/chat

GPT·Gemini에게 글로 묻고 글로 받기

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
imgCam촬영각 (선택). { rotate: -180~180, forward: -100~100, tilt: -90~90, wide: true } — 제공사 필드가 아니라 촬영 지시문으로 프롬프트에 붙어 모든 이미지 모델에서 동작합니다. 생략하면 아무것도 붙지 않습니다
steps생성 단계 수 (선택, 받는 모델만). Bria FIBO 35~50 · FIBO Lite 8~30. 범위 밖 값은 그 범위로 조여집니다
guidance프롬프트 반영 강도 (선택, 받는 모델만). Bria FIBO 3~5. 높을수록 지시를 강하게 따릅니다
loraLoRA(BFL 파인튜닝) ID (선택, Flux 계열만). 넣으면 그 파인튜닝으로 생성합니다. 학습 때 정한 방아쇠 낱말을 prompt 에 함께 넣어야 실제로 반영됩니다
loraStrengthLoRA 강도 0~2 (선택). lora 를 함께 줄 때만 쓰입니다

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" }

6. 채팅 (GPT·Gemini)

POST /api/v1/chat같은 API 키로 GPT·Gemini 텍스트 모델을 부릅니다. 이미지·영상과 달리 값은 토큰당이며, 입력 토큰과 출력 토큰의 단가가 다릅니다. 실제로 쓴 토큰만큼만 차감됩니다.

POST /api/v1/chat
curl -X POST "https://bygency.co/api/v1/chat" \
  -H "Authorization: Bearer $BYGENCY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      { "role": "system", "content": "너는 한국어 마케팅 카피라이터다." },
      { "role": "user",   "content": "여름 세일 인스타 문구 3개" }
    ],
    "max_tokens": 800
  }'

{
  "ok": true,
  "request_id": "req_...",
  "model": "gpt-4o-mini",
  "provider": "gptchat",
  "text": "1) ...",
  "finish_reason": "stop",
  "usage": { "input_tokens": 132, "output_tokens": 418, "total_tokens": 550 },
  "cost": { "usd": 0.000271, "usd_krw": 1400, "cost_krw": 0.3794, "markup": 2.5, "credit_krw": 65 },
  "credits_charged": 0.01,
  "credits_remaining": 812.4
}
필드타입필수설명
modelstring필수모델 이름. GET /api/v1/models?kind=text 로 목록을 받습니다. 목록에 없는 이름은 400으로 거절합니다.
messagesarray대화 배열. role 은 system·user·assistant, 마지막은 user 여야 합니다.
promptstringmessages 대신 한 줄만 보낼 때 씁니다.
systemstring시스템 지시(선택).
max_tokensnumber출력 상한(기본 1024 · 최대 8192). 사전 잔액 확인은 이 값 기준의 최악값으로 합니다.
temperaturenumber0~2 (기본 0.7).
top_p / stopnumber / array그대로 제공사에 전달합니다.
thinking_budgetnumberGemini 전용 — 답하기 전 생각(thinking)에 쓸 토큰 상한. 0 이면 끕니다(지원 모델만). 생각 토큰도 출력으로 과금됩니다.

과금. 제공사가 응답에 실어 주는 실제 사용량으로 계산합니다. 응답에는 credits_charged(이번에 빠진 크레딧)와 credits_remaining만 담깁니다 — 원화 환산은 GET /api/v1/credits 의 credit_price_krw 를 곱하세요. Gemini 의 생각(thinking) 토큰은 출력 토큰으로 함께 계산됩니다.

빈 응답·실패. 제공사가 빈 글을 주거나 실패하면 502로 답하고 크레딧은 한 푼도 차감하지 않습니다. Gemini 2.5 계열은 답하기 전에 생각(thinking)하며 그 토큰도 max_tokens 를 쓰므로, 상한이 작으면 글이 비어 올 수 있습니다 — 그때는 응답이 그 사실과 해결 방법을 함께 알려 줍니다.

멱등키. Idempotency-Key 헤더를 붙이면 같은 키의 재시도는 다시 부르지 않고 첫 응답을 그대로 돌려줍니다.

Gemini 경로. AI Studio 키가 있으면 그쪽으로, 없거나 막히면 Vertex AI(서비스계정)로 나갑니다. 요청 모양과 과금은 두 경로가 같아 부르는 쪽에서 할 일은 없습니다.

주소를 헷갈려도 됩니다. 같은 본문을 /api/v1/generate 로 보내도, 채팅 모델 이름이면 이 창구가 그대로 처리합니다(값도 채팅 규칙으로 한 번만 차감됩니다).

쓸 수 있는 모델

modelprovider입력 1,000 토큰출력 1,000 토큰문맥
불러오는 중…

기준 배수·기본 크레딧 단가로 환산한 값입니다 — 회원별 단가가 따로 지정돼 있으면 그 값이 적용됩니다. 긴 문맥 구간에서 단가가 오르는 모델이 있습니다(예: Gemini 2.5 Pro 는 입력 20만 토큰 초과). 아주 짧은 호출에는 최소 과금이 적용됩니다. 이 표는 위 창구에서 그때그때 받아 그리므로 API 와 어긋나지 않습니다.

GET /api/v1/models?kind=text
curl "https://bygency.co/api/v1/models?kind=text"

{ "ok": true, "kind": "text", "models": [
  { "model": "gpt-4o-mini", "provider": "gptchat", "unit": "token",
    "usd_per_1m_input": 0.15, "usd_per_1m_output": 0.6, "context_tokens": 128000 }, ... ] }

응답 형식

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

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

6-b. 지원 모델 (영상 · 이미지 · 채팅)

영상 모델

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 (텍스트→영상)
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 klein 4B · Flux 2 klein 9B · 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 (레퍼런스 편집)
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 값은 스튜디오에 표시되는 모델 이름과 동일합니다. 최신 목록·단가는 스튜디오 생성 화면에서 확인하세요.

채팅 모델 (GPT · Gemini)

POST /api/v1/chat 에 쓰는 이름입니다. 자세한 호출법은 6. 채팅 (GPT·Gemini) 절을 보세요.

modelprovider입력 1,000 토큰출력 1,000 토큰문맥
불러오는 중…

기준 배수·기본 크레딧 단가로 환산한 값입니다 — 회원별 단가가 따로 지정돼 있으면 그 값이 적용됩니다. 긴 문맥 구간에서 단가가 오르는 모델이 있습니다(예: Gemini 2.5 Pro 는 입력 20만 토큰 초과). 아주 짧은 호출에는 최소 과금이 적용됩니다. 이 표는 위 창구에서 그때그때 받아 그리므로 API 와 어긋나지 않습니다.

전체 모델 목록93

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

93 / 93
영상 생성38
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
Luma Ray 3.2 (비율 변경)luma
Luma Ray 3.2 (영상 편집)luma
모션 전이 (원본 움직임 유지·Motion Transfer)motion
Runway Aleph (영상→실사 V2V)runway_aleph
V2V 자동 (최고정확도·모델 자동선택)v2v_auto
이미지·레퍼런스30
Flux 1.1 Proflux
Flux 1.1 Pro Ultraflux
Flux 2 Flexflux
Flux 2 klein 4Bflux
Flux 2 klein 9Bflux
Flux 2 Maxflux
Flux 2 Proflux
Flux Devflux
Grok Imaginexai
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 로 차감액·잔액을 확인합니다.
  • 모델 연결 정보는 서버에만 있고 응답에 노출되지 않습니다.
  • 남은 크레딧은 생성하지 않고도 확인할 수 있습니다 — 이 호출은 크레딧을 쓰지 않습니다.
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개까지 겹쳐 쓸 수 있습니다.

모델 이름 bygency-controlnet-1바이전시가 직접 묶어 제공하는 컨트롤넷 모델입니다.

부르는 길이 둘이고 값은 같습니다: 이 창구(/api/v1/controlnet)로 부르면 controlnets 배열을 우리가 만들어 주고, /api/v1/generate 에 model 을 이 이름으로 주면 배열을 직접 만들어 보냅니다.

컨트롤넷은 모델이 아니라 방식입니다 — 기준 이미지(전처리 맵)를 레퍼런스로 붙여 base_model 이 그립니다. 생략하면 Seedream 4.5 로 그리고, base_model 로 다른 이미지 모델을 지정할 수 있습니다. 요금은 그 모델의 값 + 가산입니다.

요금 = 이미지 생성 요금 + ControlNet 가산(기본 +10%). 스튜디오·API·MCP 모두 같은 규칙으로 차감됩니다. 전처리 맵 미리보기는 무료이고, 그 맵을 내려받아 쓸 때만 별도 사용료가 붙습니다.

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 키를 발급하고 바로 호출하세요.