시작하기

퀵스타트

API 키부터 3D 모델 다운로드까지 네 단계로. 아래 모든 스니펫은 curl, Python, JavaScript로 복사해 바로 붙여넣을 수 있습니다 — 상단 바에서 언어를 선택하세요.

Base URLhttps://api.picoberry.ai
인증Bearer / x-api-key
형식JSON · { success, data }

1. API 키 발급받기

이 API는 유료 고객에게 열려 있습니다 — 활성 구독 또는 최소 한 번 이상 완료된 크레딧 구매가 필요합니다. 계정 → API 키를 열어 키를 생성하고 복사하세요 — 시크릿은 한 번만 표시됩니다. 자세한 내용은 인증 페이지를 참고하세요.

설정
export PB_KEY="pb_live_xxxxxxxxxxxx"
export BASE="https://api.picoberry.ai"
import requests, time

BASE = "https://api.picoberry.ai"
headers = {"Authorization": "Bearer pb_live_xxxxxxxxxxxx"}
const BASE = "https://api.picoberry.ai";
const headers = { Authorization: "Bearer pb_live_xxxxxxxxxxxx" };
키는 서버 측에 보관하세요 pb_live_ 키는 여러분의 크레딧 잔액 전체를 소진할 수 있습니다 — 클라이언트 코드에 넣거나 저장소에 커밋하지 마세요.

2. 생성 시작하기

텍스트-투-3D 작업을 시작합니다. 이 호출은 자산 idtaskStatus: 0을 담아 즉시 반환됩니다 — 생성은 백그라운드에서 실행됩니다. 이미지도 POST /v1/images를 통해 같은 방식으로 동작합니다.

요청
curl -X POST $BASE/v1/models/from-text \
  -H "Authorization: Bearer $PB_KEY" -H "Content-Type: application/json" \
  -d '{"prompt":"a stylized treasure chest, game ready","engine":"tripo"}'
r = requests.post(f"{BASE}/v1/models/from-text", headers=headers,
    json={"prompt": "a stylized treasure chest, game ready", "engine": "tripo"})
asset_id = r.json()["data"]["id"]
const r = await fetch(`${BASE}/v1/models/from-text`, { method: "POST",
  headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({ prompt: "a stylized treasure chest, game ready", engine: "tripo" }) });
const assetId = (await r.json()).data.id;
응답 · 200
{ "success": true, "data": { "id": "019f3a39-…", "taskStatus": 0, "type": "model_3d" } }

3. 완료될 때까지 폴링하기

생성은 비동기로 진행됩니다. taskStatus2에 도달할 때까지 GET /v1/assets/{id}를 폴링하세요. 3D 작업은 보통 ~60–120초, 이미지는 몇 초가 걸립니다. 성공하면 files.model에 서명된 GLB URL이 담깁니다.

0 대기1 처리 중2 성공3 실패
폴링
# set ASSET_ID from the response above, then repeat until .data.taskStatus is 2
curl $BASE/v1/assets/$ASSET_ID -H "Authorization: Bearer $PB_KEY"
while True:
    a = requests.get(f"{BASE}/v1/assets/{asset_id}", headers=headers).json()["data"]
    if a["taskStatus"] in (2, 3): break
    time.sleep(4)
model_url = a["files"]["model"]
let a;
do {
  a = (await (await fetch(`${BASE}/v1/assets/${assetId}`, { headers })).json()).data;
  if (a.taskStatus < 2) await new Promise(res => setTimeout(res, 4000));
} while (a.taskStatus < 2);
const modelUrl = a.files.model;
웹훅으로 폴링 건너뛰기 callbackUrl을 등록하면 PicoBerry가 완료된 자산을 여러분의 서버로 푸시합니다. 웹훅비동기 및 폴링을 참고하세요.

4. 모델 다운로드하기

files.model은 바로 사용할 수 있는 GLB입니다. 특정 형식 — FBX/OBJ, 또는 Unity에 바로 쓸 수 있는 텍스처 분리본 — 이 필요하다면, 내보내기하여 새로운 서명된 다운로드 URL을 받으세요.

요청
curl -X POST $BASE/v1/assets/$ASSET_ID/download \
  -H "Authorization: Bearer $PB_KEY" -H "Content-Type: application/json" \
  -d '{"format":"glb"}'
d = requests.post(f"{BASE}/v1/assets/{asset_id}/download", headers=headers,
    json={"format": "glb"}).json()["data"]
download_url = d["url"]
const d = (await (await fetch(`${BASE}/v1/assets/${assetId}/download`, { method: "POST",
  headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({ format: "glb" }) })).json()).data;
const downloadUrl = d.url;
응답 · 200
{ "success": true, "data": { "url": "https://…signed", "format": "glb", "filename": "model.glb" } }
fbx / obj은 ZIP 번들입니다 glb는 단일 파일이지만, fbxobj.zip(모델 + 텍스처)으로 반환됩니다. 전체 옵션 — Unity 프리셋, 커스텀 파일명 — 은 다운로드 및 내보내기 페이지에 있습니다.

다음 단계

이것으로 전체 흐름이 끝났습니다 — 키 → 생성 → 폴링 → 다운로드. 여기서부터: