· 2분 분량
API로 Bluesky에 게시하고 예약하기, 10줄로
REST 호출 한 번으로 앱에서 Bluesky 글을 게시하고 예약하세요. 등록할 개발자 앱은 없습니다. cURL, JavaScript, Python 예제가 있습니다.
Bluesky는 자동화하기 가장 쉬운 소셜 네트워크 중 하나입니다. 등록할 개발자 앱도, 기다릴 심사 큐도 없습니다. 그래도 “쉽다”는 말은 세션, 레코드 형식, 링크와 멘션용 facet, 이미지 blob을 직접 다뤄야 한다는 뜻이고, Bluesky에는 예약 기능 자체가 없습니다.
이 가이드는 Hapi로 REST 호출 한 번에 Bluesky 글을 게시하고 예약하는 방법을 보여 줍니다. 같은 요청으로 X와 LinkedIn에도 동시에 올릴 수 있습니다.
1단계: Bluesky에서 앱 비밀번호 만들기
Bluesky에서 Settings → Privacy and security → App passwords → Add app password로 이동하세요. hapi 같은 이름을 붙이고 복사하세요.
앱 비밀번호로는 계정 비밀번호를 바꾸거나 계정을 삭제할 수 없습니다. 연동에 넘기기에 맞는 자격 증명입니다.
2단계: Hapi에서 계정 연결
Hapi 계정을 만들고 Accounts → Connect → Bluesky를 연 다음, 핸들과 앱 비밀번호를 붙여 넣으세요. Hapi는 자격 증명을 저장 시 암호화하고(AES-256-GCM), 브라우저로는 다시 돌려주지 않습니다.
그다음 API keys에서 API 키를 만드세요. 한 번만 보이므로 환경 변수에 넣으세요.
export HAPI_API_KEY="hapi_live_..."3단계: 글 게시
cURL
curl -X POST https://hapi.tools/v1/posts \
-H "Authorization: Bearer $HAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello Bluesky, posted from an API 🦋",
"platforms": ["bluesky"]
}'JavaScript
const res = await fetch("https://hapi.tools/v1/posts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HAPI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
content: "Hello Bluesky, posted from an API 🦋",
platforms: ["bluesky"],
}),
});
console.log(await res.json());Python
import os, requests
res = requests.post(
"https://hapi.tools/v1/posts",
headers={"Authorization": f"Bearer {os.environ['HAPI_API_KEY']}"},
json={"content": "Hello Bluesky, posted from an API 🦋", "platforms": ["bluesky"]},
)
print(res.json())이게 전부입니다. 201과 함께 게시물, 그리고 계정별 상태가 돌아옵니다.
4단계: 나중으로 예약
Bluesky는 예약 게시를 네이티브로 지원하지 않아서, 보통이라면 작업 실행기를 직접 만들어야 합니다. Hapi에서는 scheduledAt만 추가하면 됩니다.
{
"content": "This goes out Monday morning",
"platforms": ["bluesky"],
"scheduledAt": "2026-11-16T09:00:00-03:00"
}Hapi 스케줄러가 정시에 게시하고, 서명된 post.published(또는 post.failed) 웹훅을 보내므로 앱이 결과를 알 수 있습니다.
5단계: Bluesky, X, LinkedIn에 한 번에
같은 요청에 플랫폼만 더합니다.
{
"content": "We just shipped v2 🚀",
"platforms": ["bluesky", "x", "linkedin"],
"platformOptions": {
"bluesky": { "content": "We just shipped v2 🚀 (Bluesky gets the short version)" }
}
}platformOptions로 네트워크마다 문구를 바꿀 수 있습니다. Bluesky는 글을 300자로 제한해서, 이럴 때 유용합니다.
재시도할 때 두 번 올리지 않기
네트워크는 가끔 끊깁니다. Idempotency-Key 헤더를 보내면 Hapi는 복제본을 만들지 않고 원래 게시물을 돌려줍니다.
-H "Idempotency-Key: release-v2-announcement"API를 호출하는 쪽이 AI 에이전트라면 이건 더 중요합니다.
직접 만들지 않아서 건너뛴 것
- AT Protocol에 대한 세션 생성과 갱신
- 링크와 멘션 facet을 손으로 만들기
- 이미지 blob을 업로드하고 레코드에 붙이기
- 스케줄러, 재시도, 실패 알림
15일 체험 시작 → $5 체험에는 15일 동안 연결 계정 5개와 게시물 300개가 포함됩니다.