인증
대시보드의 설정, API 및 웹훅에서 API 키를 만드세요. 키는 ss_live_로 시작하며, 하나의 워크스페이스에 속하고 특정 프로젝트로 제한할 수 있습니다. 모든 요청에 키를 Bearer 토큰으로 전송하세요.
curl https://www.amaposta.com/api/v1/me \
-H "Authorization: Bearer ss_live_…"
응답에는 키 이름, 권한 범위 및 워크스페이스가 표시됩니다. 각 키에는 하나 이상의 권한 범위가 있습니다.
| 권한 범위 | 허용 항목 |
|---|---|
content:read | 프로젝트, 채널, 게시물, 미디어를 읽습니다. |
content:write | 미디어를 업로드하고 게시물을 만들거나 편집합니다. |
posts:publish | 검토 없이 예약하고 발행합니다. 이 권한이 없으면 승인을 사용하는 프로젝트에서는 게시물이 검토함으로 이동하고, 그 외에는 초안으로 남습니다. |
각 키로 분당 120회 요청할 수 있습니다. 이를 초과하면 rate_limited 코드와 함께 429를 반환합니다. 잠시 기다린 뒤 다시 시도하세요.
프로젝트 및 채널
게시물은 프로젝트에 속합니다. 키로 볼 수 있는 프로젝트를 조회한 뒤 그중 한 프로젝트의 채널을 조회하세요. 특정 채널을 대상으로 지정하거나 본문을 재정의하려면 채널 ID가 필요합니다.
curl https://www.amaposta.com/api/v1/projects \
-H "Authorization: Bearer $AMAPOSTA_KEY"
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/channels \
-H "Authorization: Bearer $AMAPOSTA_KEY"
채널에는 provider(youtube, instagram, tiktok, x, facebook, custom 또는 sandbox), status(active, expiring, needs_reconnect, error 또는 disabled), 지원하는 게시물 유형인 supports가 있습니다.
미디어 업로드
이미지와 동영상은 프로젝트당 한 번 업로드하면 여러 게시물에서 제한 없이 사용할 수 있습니다. 세 가지 방법으로 업로드할 수 있습니다.
직접 업로드
file이라는 필드에 multipart 폼 데이터로 파일을 보내세요. 수백 MB 이하 파일에 적합합니다.
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media \
-H "Authorization: Bearer $AMAPOSTA_KEY" \
-F "[email protected]"
대용량 파일 사전 서명 업로드
업로드 URL을 요청하고 파일 바이트를 저장소에 직접 PUT 전송한 뒤 Amaposta에 완료를 알리세요.
# 1. Ask for an upload URL. The response is {"media": { … }, "upload_url": "…"}
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media/uploads \
-H "Authorization: Bearer $AMAPOSTA_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "batch-142.mp4", "content_type": "video/mp4", "size_bytes": 48213844}'
# 2. Upload the bytes to upload_url
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: video/mp4" \
--upload-file batch-142.mp4
# 3. Finish the upload
curl -X POST https://www.amaposta.com/api/v1/media/$MEDIA_ID/complete \
-H "Authorization: Bearer $AMAPOSTA_KEY"
URL에서 가져오기
Amaposta에 공개 URL을 제공하면 백그라운드에서 파일을 다운로드합니다. 이 단계를 생략하고 게시물을 만들 때 media_url을 전달할 수도 있습니다.
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media/import \
-H "Authorization: Bearer $AMAPOSTA_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://cdn.example.com/batch-142.mp4"}'
모든 업로드는 미디어 객체를 반환합니다. status는 pending에서 processing을 거쳐 ready로 바뀝니다(실패하면 failed와 error). 처리 후에는 width, height, duration_ms 및 미리보기 이미지를 포함합니다. GET /api/v1/media/{id}를 폴링하거나 media.ready 웹훅을 수신하세요. 반환된 url은 서명되어 있으며 12시간 동안 유효합니다.
게시물 만들기
POST /api/v1/projects/{project_id}/posts는 채널마다 전송을 하나씩 포함하는 게시물 하나를 만듭니다. Amaposta는 플랫폼에 맞게 내용을 조정합니다. 제목은 제목 필드가 있는 곳에만 전송하고, 해시태그는 YouTube에서는 태그로, 다른 곳에서는 본문 텍스트로 추가합니다.
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/posts \
-H "Authorization: Bearer $AMAPOSTA_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: episode-142" \
-d @- <<'JSON'
{
"kind": "video",
"title": "How we roast a batch in 12 minutes",
"description": "From green beans to first crack. We filmed one batch start to finish.",
"hashtags": ["coffee", "behindthescenes"],
"media_url": "https://cdn.example.com/batch-142.mp4",
"cover_url": "https://cdn.example.com/batch-142-cover.jpg",
"overrides": {
"<x-channel-id>": {
"description": "Batch 142 is out: green beans to first crack in 12 minutes."
},
"<youtube-channel-id>": {
"options": { "privacy": "unlisted" }
}
},
"schedule": { "mode": "queue" },
"external_ref": "episode-142",
"metadata": {
"pipeline": { "name": "nightly-cut", "run": "2026-10-17" }
}
}
JSON
필드
| 필드 | 기능 |
|---|---|
kind | text, image 또는 video. 필수입니다. |
title | 제목 필드가 있는 플랫폼에서 사용됩니다: YouTube, TikTok 사진 게시물, Facebook 동영상. |
description | 캡션, 설명 또는 게시물 본문입니다. body, caption, text로도 전달할 수 있습니다. |
hashtags | # 포함 여부와 상관없이 목록으로 입력합니다. |
media_id, media_url | 업로드한 미디어 ID 또는 Amaposta가 다운로드할 수 있는 공개 URL입니다. 이미지 및 동영상 게시물에 필요합니다. |
cover_media_id, cover_url | 플랫폼이 지원하는 경우 동영상에 사용할 표지 이미지입니다. |
channels | 게시할 채널 ID입니다. 생략하면 프로젝트에서 이 유형의 게시물을 지원하는 모든 활성 채널을 사용합니다. |
overrides | 채널 ID를 키로 사용하는 채널별 변경 내용입니다. title, description, hashtags 및 YouTube의 privacy 같은 플랫폼 options를 설정할 수 있습니다. |
schedule | mode는 at(ISO 8601 형식의 at 필요), now 또는 다음 빈 게시 시간대에 넣는 queue입니다. 생략하면 초안을 만듭니다. |
external_ref | 자체 참조 값입니다. 게시물과 Custom API 전송에 그대로 반환됩니다. |
metadata | 게시물과 함께 저장되는 자유 형식 JSON입니다. 생성된 콘텐츠를 표시하려면 "pipeline"을 포함하세요. 대시보드에 표시되며 웹훅에서 출처를 pipeline으로 보고합니다. |
응답은 게시물이며 deliveries에 채널별 항목이 하나씩 포함됩니다.
안전한 재시도
네트워크에서 요청이 유실될 수 있습니다. 게시물을 만들 때 Idempotency-Key 헤더를 보내면, 같은 키로 재시도할 때 새 게시물을 만들지 않고 첫 시도의 게시물을 반환합니다. 작업 또는 에피소드 ID처럼 자체 시스템에서 고정된 값을 사용하세요. 키는 200자까지 잘립니다.
예약 및 발행
POST /api/v1/posts/{post_id}/schedule로 초안을 예약하거나, 즉시 발행하거나, 대기열에 추가하거나, 캘린더에서 제거할 수 있습니다.
curl https://www.amaposta.com/api/v1/posts/$POST_ID/schedule \
-H "Authorization: Bearer $AMAPOSTA_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "at", "at": "2026-10-20T07:00:00Z"}'
at지정한 시간에 발행하며 최대 2년 후까지 설정할 수 있습니다.now즉시 발행합니다.queue앞으로 12주 동안 해당 게시물 채널의 다음 빈 게시 시간대를 선택합니다.unschedule게시물을 초안으로 되돌립니다.
예약하기 전에 편집기와 동일한 검사를 실행합니다. 검사에 실패하면 예약 전에 이 문제를 해결하세요: YouTube에는 제목이 필요합니다.
와 같은 메시지와 함께 400을 반환합니다. 예약하려면 posts:publish 권한이 있거나 프로젝트에서 승인이 켜져 있어야 합니다. 후자의 경우 게시물은 검토함에서 대기합니다.
게시물 및 전송 읽기
프로젝트의 게시물 목록을 조회하며 status(쉼표로 구분한 상태 또는 inbox, queue, history), from/to 기간, limit, offset으로 필터링합니다. 응답은 {"items": […], "total": n}입니다.
curl "https://www.amaposta.com/api/v1/projects/$PROJECT_ID/posts?status=queue" \
-H "Authorization: Bearer $AMAPOSTA_KEY"
curl https://www.amaposta.com/api/v1/posts/$POST_ID \
-H "Authorization: Bearer $AMAPOSTA_KEY"
게시물에는 전체 status(draft, in_review, changes_requested, ready, scheduled, publishing, published, partial 또는 failed)와 채널별 전송이 하나씩 있습니다.
"deliveries": [
{
"id": "0192b7d4-…",
"channel_id": "0192b7a1-…",
"status": "published",
"url": "https://www.youtube.com/watch?v=…",
"error": null,
"published_at": "2026-10-20T07:00:41Z"
},
{
"id": "0192b7d4-…",
"channel_id": "0192b7a9-…",
"status": "failed",
"url": null,
"error": {
"code": "endpoint_unavailable",
"message": "Your endpoint returned 503 Service Unavailable",
"hint": "Amaposta will retry with backoff."
},
"published_at": null
}
]
전송 상태는 pending, scheduled, publishing, processing, published, failed, cancelled입니다. DELETE /api/v1/posts/{post_id}로 게시물을 삭제합니다.
오류
모든 오류의 형식은 같습니다. 고정된 code와 사용자에게 표시할 수 있는 message를 담은 error 객체이며, 경우에 따라 fields(필드별 메시지)와 hint도 포함됩니다.
{
"error": {
"code": "validation",
"message": "Please fix the highlighted fields.",
"fields": {
"kind": "Use text, image or video."
}
}
}
| 상태 | 코드 | 의미 |
|---|---|---|
| 400 | bad_request | 검사를 통과하지 못한 게시물을 예약하는 경우처럼 요청한 작업을 수행할 수 없습니다. |
| 401 | unauthorized | API 키가 없거나 잘못되었거나 폐기되었습니다. |
| 402 | plan_limit | 워크스페이스 요금제에서 허용하지 않는 작업입니다. limit에 해당 제한이 표시됩니다. |
| 403 | forbidden | 키에 필요한 권한 범위 또는 프로젝트 접근 권한이 없습니다. |
| 404 | not_found | 해당 프로젝트, 게시물, 미디어 또는 엔드포인트가 없습니다. |
| 409 | conflict | 이미 발행 중인 게시물을 편집하는 경우처럼 변경 내용이 현재 상태와 충돌합니다. |
| 422 | validation | 하나 이상의 필드를 수정해야 합니다. fields를 확인하세요. |
| 429 | rate_limited | 이 키로 분당 120회를 초과하여 요청했습니다. |
| 502 | provider_error | 플랫폼이 거부했거나 처리에 실패했습니다. hint에 해결 방법이 표시됩니다. |
웹훅
설정의 API 및 웹훅에서 엔드포인트를 추가하고 원하는 이벤트를 선택한 뒤 서명 비밀 키를 복사하세요. Amaposta는 이벤트마다 URL로 JSON을 POST 전송합니다. 2xx 이외의 응답이 오거나 15초 안에 응답이 없으면 대기 시간을 늘려가며 재시도합니다. 계속 실패하는 엔드포인트는 비활성화되고 관리자에게 알림이 전송됩니다.
| 이벤트 | 전송 시점 |
|---|---|
post.created | 게시물이 생성되었습니다(대시보드 또는 API) |
post.scheduled | 게시물이 예약되었습니다 |
post.approved | 게시물이 승인되었습니다 |
post.published | 채널에 게시물이 공개되었습니다 |
post.failed | 채널에 게시물을 발행하지 못했습니다 |
channel.connected | 채널을 연결하거나 다시 연결했습니다 |
channel.disconnected | 채널 연결이 끊어졌습니다 |
media.ready | 업로드한 파일의 처리가 완료되었습니다 |
media.failed | 업로드한 파일을 처리하지 못했습니다 |
POST /your/webhook HTTP/1.1
Content-Type: application/json
User-Agent: Amaposta-Webhooks/1.0
X-Amaposta-Event: post.published
X-Amaposta-Event-Id: 0192b7e0-…
X-Amaposta-Signature: t=1792479641,v1=5f2b0c…
{
"id": "0192b7e0-…",
"type": "post.published",
"created_at": "2026-10-20T07:00:41Z",
"project_id": "0192a3f1-…",
"data": {
"post_id": "0192b7c8-…",
"delivery_id": "0192b7d4-…",
"channel_id": "0192b7a1-…",
"provider": "youtube",
"external_id": "…",
"url": "https://www.youtube.com/watch?v=…"
}
}
서명 검증
X-Amaposta-Signature는 t=<unix seconds>,v1=<hex> 형식이며, v1은 원시 요청 본문에 대한 HMAC_SHA256(secret, t + "." + body)입니다. 직접 계산하여 상수 시간으로 비교하고, 재전송 공격을 막기 위해 오래된 타임스탬프를 거부하세요.
import crypto from "node:crypto";
// rawBody: the request body exactly as received (string or Buffer).
export function verifySignature(rawBody, header, secret, toleranceSeconds = 300) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
const t = Number(parts.t);
if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
const expected = crypto
.createHmac("sha256", secret)
.update(`${t}.${rawBody}`)
.digest();
const given = Buffer.from(parts.v1 ?? "", "hex");
return given.length === expected.length && crypto.timingSafeEqual(given, expected);
}
import hashlib
import hmac
import time
def verify_signature(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
t = int(parts.get("t", "0"))
if abs(time.time() - t) > tolerance:
return False
expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, parts.get("v1", ""))
Custom API 채널
Custom API 채널은 직접 운영하는 HTTPS 엔드포인트로 게시합니다. CMS, 뉴스레터 도구, Amaposta가 아직 지원하지 않는 플랫폼에 연결할 수 있습니다. 다른 채널처럼 캘린더에서 관리하며 검사, 승인, 재시도를 지원합니다. 게시물을 발행할 때 Amaposta는 전송 건마다 POST 요청을 하나씩 보냅니다.
POST /amaposta/publish HTTP/1.1
Authorization: Bearer <your API key>
Content-Type: application/json
Idempotency-Key: 0192b7d4-…
X-Amaposta-Delivery: 0192b7d4-…
X-Amaposta-Signature: t=1792479600,v1=9ac41e…
{
"id": "0192b7d4-…",
"type": "post.publish",
"created_at": "2026-10-20T07:00:00Z",
"content": {
"kind": "video",
"title": "How we roast a batch in 12 minutes",
"text": "From green beans to first crack. We filmed one batch start to finish.",
"hashtags": ["coffee", "behindthescenes"],
"media": {
"url": "https://…",
"content_type": "video/mp4",
"size_bytes": 48213844,
"width": 1080,
"height": 1920,
"duration_ms": 58000,
"filename": "batch-142.mp4"
},
"cover": null,
"options": {}
},
"post": {
"id": "0192b7c8-…",
"external_ref": "episode-142",
"scheduled_at": "2026-10-20T07:00:00Z",
"metadata": {
"pipeline": { "name": "nightly-cut" }
}
},
"project": { "id": "0192a3f1-…", "name": "Spring launch" },
"channel": { "id": "0192b7a9-…", "name": "api.example.com" }
}
Authorization- API 키입니다. 헤더 이름과 접두사(기본값
Bearer)는 채널에서 설정합니다. Idempotency-Key- 전송 ID입니다. 같은 전송을 재시도하면 동일한 키를 보내므로 이미 처리한 작업을 건너뛸 수 있습니다.
X-Amaposta-Delivery- 로그 기록을 위한 전송 ID입니다.
X-Amaposta-Signature- 채널 고유의 서명 비밀 키를 사용하여 웹훅과 같은 방식으로 서명합니다.
응답 방법
- 2xx발행되었습니다. 선택적으로
{"id": "…", "url": "…"}을 반환하면 링크가 게시물에 표시됩니다. - 401, 403키가 거부되었습니다. 채널에 재연결이 필요하다고 표시하고 관리자에게 알립니다. 잘못된 서명에 대해서는 이 상태 코드를 사용하지 마세요.
- 5xx, 408, 429일시적인 문제입니다. Amaposta가 대기 시간을 늘려가며 재시도합니다.
- 기타 4xx게시물이 제공한 메시지와 함께 실패로 표시되며, 문제를 수정한 뒤 재시도를 누를 수 있습니다.
app.post("/amaposta/publish", express.raw({ type: "application/json" }), async (req, res) => {
const signature = req.get("X-Amaposta-Signature") ?? "";
if (!verifySignature(req.body, signature, process.env.AMAPOSTA_SIGNING_SECRET)) {
return res.status(400).json({ message: "Bad signature" });
}
const delivery = JSON.parse(req.body);
const item = await publishToYourSystem(delivery.content, req.get("Idempotency-Key"));
res.json({ id: item.id, url: item.url });
});
엔드포인트는 인터넷에서 접근할 수 있어야 하며 리디렉션은 따르지 않습니다. 채널을 연결할 때 Amaposta는 상태 확인 URL이 설정되어 있으면 GET으로, 아니면 엔드포인트에 OPTIONS 요청을 보내 확인합니다.
Sandbox 채널
Sandbox 채널은 실제 채널처럼 작동하지만 Amaposta 외부로는 아무것도 전송되지 않습니다. 연동 기능을 처음부터 끝까지 개발하고 테스트할 수 있습니다. 게시물을 예약하고, 게시를 시작하고, 발행에 성공하거나 실패하며, 동일한 웹훅을 보냅니다. Sandbox 채널은 모든 요금제에서 무료이며 채널 수 제한에 포함되지 않습니다.
추가할 때 작동 방식을 선택하세요.
- 항상 성공모든 게시물의 발행이 성공합니다.
- 때때로 실패실제 장애를 기다리지 않고 실패와 재시도를 확인하세요.
- 항상 실패
post.failed처리 방식을 테스트하세요. - 만료된 연결접근 권한 만료 시 재연결 알림과 링크가 어떻게 표시되는지 확인하세요.
본인의 앱으로 X 연결
X는 게시를 포함한 모든 API 호출 비용을 호출한 개발자 앱의 선불 크레딧에서 차감합니다. 따라서 본인의 X 개발자 앱을 통해 X에 연결합니다. 워크스페이스마다 한 번 설정한 뒤 원하는 만큼 X 계정을 연결하세요. 각 계정은 X에서 로그인하며, 게시 비용은 앱의 크레딧에서 차감됩니다.
- 앱을 소유할 X 계정(예: 대행사 계정)으로 console.x.com에 로그인하고 앱을 만드세요.
-
앱의 User authentication settings를 열고 다음과 같이 입력하세요:
- App permissionsRead and write
- Type of AppWeb App, Automated App or Bot
- Callback URI / Redirect URL
https://www.amaposta.com/oauth/x/callback - Website URL본인의 웹사이트
그런 다음 저장하세요. 이 유형의 앱만 Amaposta가 로그인에 사용하는 클라이언트 시크릿을 받을 수 있습니다.
- 저장 후 X가 표시하는 OAuth 2.0 Client ID와 Client Secret을 복사하세요. API Key, API Key Secret 또는 Bearer Token이 아닙니다. 이 값들은 다른 유형의 접근에 사용됩니다. X는 시크릿을 한 번만 표시합니다.
- X 콘솔에서 API 크레딧을 구매하세요. 자동 충전을 설정하면 크레딧이 부족해져도 계속 게시할 수 있으며, 지출 한도로 비용을 제한할 수 있습니다. 크레딧이 모두 소진되면 추가로 충전할 때까지 X에서 게시를 거부합니다.
- Amaposta에서 프로젝트의 채널을 열고 채널 연결을 선택한 다음 X를 선택하세요. 클라이언트 ID와 클라이언트 시크릿을 붙여넣고 X로 이동한 뒤, 연결할 계정으로 로그인하여 접근을 허용하세요.
알아두면 좋은 점
- 앱은 워크스페이스 전체에서 사용할 수 있도록 저장되며, 시크릿은 암호화됩니다. 다른 X 계정은 어느 프로젝트에서든 한 번의 클릭으로 연결할 수 있습니다.
- 채널은 처음 연결할 때 사용한 앱을 계속 사용합니다. 고객용 재연결 링크를 사용하는 경우를 포함해 채널을 다시 연결할 때도 같은 앱을 사용하며, 고객에게는 앱이 표시되지 않습니다.
- 앱을 변경하려면 X를 연결할 때 ‘다른 앱 사용’을 선택하세요. Client Secret을 다시 생성한 경우, 그곳에 새 값을 입력하고 X 채널을 다시 연결하세요.
- X 콘솔은 앱을 소유한 계정의 토큰만 발급합니다. 고객 계정을 연결하려면 본인의 앱을 통해 로그인해야 합니다. 본인의 계정은 계속해서 토큰을 직접 입력하여 연결할 수 있습니다.
플랫폼 규칙
각 채널 유형이 지원하는 항목입니다. 검사에도 같은 제한을 적용하므로 대부분의 문제를 발행할 때가 아니라 예약 전에 발견할 수 있습니다.
| 플랫폼 | 게시물 | 제목 | 텍스트 | 해시태그 | 미디어 |
|---|---|---|---|---|---|
| YouTube | 동영상 | 제목필수, 최대 100자 | 설명최대 5,000자 | 최대 60개 태그로 전송됨 | MP4, MOV, WebM, AVI, MKV; 최대 256 GB; 1초~12시간 |
| 전화번호를 인증하지 않은 계정은 최대 15분 길이의 동영상을 업로드할 수 있으며 맞춤 미리보기 이미지를 설정할 수 없습니다. 업로드마다 API 할당량이 소모됩니다. Google 기본 할당량으로는 앱당 하루에 약 6회 업로드할 수 있습니다. | |||||
| 이미지 | 제목 없음 | 캡션최대 2,200자 | 본문에 최대 30개 추가됨 | JPEG; 최대 8 MB | |
| 동영상 | 제목 없음 | 캡션최대 2,200자 | 본문에 최대 30개 추가됨 | MP4, MOV; 최대 300 MB; 3초~15분 | |
| Instagram Business 또는 Creator 계정이 필요합니다. Instagram은 계정당 최근 24시간 동안 API를 통한 게시를 50개까지 허용합니다. Instagram에서는 텍스트만으로 게시할 수 없습니다. | |||||
| TikTok | 이미지 | 제목최대 90자 | 설명최대 4,000자 | 본문에 추가됨 | JPEG, WebP; 최대 20 MB |
| 동영상 | 제목 없음 | 캡션최대 2,200자 | 본문에 추가됨 | MP4, MOV, WebM; 최대 4 GB; 3초~10분 | |
| TikTok 심사를 완료하지 않은 앱의 게시물은 작성자에게만 표시됩니다. TikTok은 동영상 프레임에서 표지를 선택합니다. 맞춤 표지 이미지는 지원하지 않습니다. TikTok에서는 텍스트만으로 게시할 수 없습니다. | |||||
| X | 텍스트 | 제목 없음 | 게시물필수, 최대 280자(링크는 23자, 이모지는 2자) | 본문에 추가됨 | 없음 |
| 이미지 | 제목 없음 | 게시물최대 280자(링크는 23자, 이모지는 2자) | 본문에 추가됨 | JPEG, PNG, WebP, GIF; 최대 5 MB | |
| 동영상 | 제목 없음 | 게시물최대 280자(링크는 23자, 이모지는 2자) | 본문에 추가됨 | MP4, MOV; 최대 512 MB; 0.5초~2:20분 | |
| 자체 X 개발자 앱을 사용하면 게시물에 해당 앱의 종량제 API 크레딧이 사용됩니다. 해시태그도 글자 수 제한에 포함됩니다. | |||||
| 텍스트 | 제목 없음 | 게시물필수, 최대 63,206자 | 본문에 추가됨 | 없음 | |
| 이미지 | 제목 없음 | 캡션최대 63,206자 | 본문에 추가됨 | JPEG, PNG, GIF, WebP; 최대 10 MB | |
| 동영상 | 제목최대 255자 | 설명최대 63,206자 | 본문에 추가됨 | MP4, MOV; 최대 1 GB; 1초~20분 | |
| 페이지에만 게시합니다. API를 통해 개인 프로필에는 게시할 수 없습니다. | |||||
| Custom API | 텍스트 | 제목길이 제한 없음 | 설명길이 제한 없음 | 태그로 전송됨 | 없음 |
| 이미지 | 제목길이 제한 없음 | 설명길이 제한 없음 | 태그로 전송됨 | JPEG, PNG, WebP, GIF | |
| 동영상 | 제목길이 제한 없음 | 설명길이 제한 없음 | 태그로 전송됨 | MP4, MOV, WebM | |
| 각 요청에는 HMAC-SHA256 헤더 서명이 있어 Amaposta에서 보냈는지 확인할 수 있습니다. 2xx 상태와 선택적 JSON {"id": "…", "url": "…"}으로 응답하세요. 408, 429, 5xx 응답은 대기 시간을 늘려가며 재시도합니다. 401/403은 채널에 재연결이 필요하다고 표시하며, 다른 4xx는 전송 실패로 처리하므로 문제를 수정한 뒤 재시도할 수 있습니다. | |||||
| Sandbox | 텍스트 | 제목최대 200자 | 설명최대 5,000자 | 본문에 최대 30개 추가됨 | 없음 |
| 이미지 | 제목최대 200자 | 설명최대 5,000자 | 본문에 최대 30개 추가됨 | JPEG, PNG, WebP, GIF | |
| 동영상 | 제목최대 200자 | 설명최대 5,000자 | 본문에 최대 30개 추가됨 | MP4, MOV, WebM | |
| 발행에 잠시 시간이 걸리므로 실시간으로 상태 변경을 확인할 수 있습니다. | |||||