들어가기
이 튜토리얼에서는 A2 시작하기: 기본 사용법에서 소개한, 광고 지면을 정의하고 이미지 배너 광고를 구성하는 가이드를 API로 구현하는 방법을 설명합니다.
아래 예제를 따라하기 위해서는 엑세스 토큰이 필요하므로 아직 생성하지 않았다면 다음 글을 참조하세요: API 엑세스 토큰 얻기
광고 캠페인을 등록하기 위해서는 예산이 필요합니다. 시작하기에 앞서 관리자 계정에 예산을 부여합니다.
curl http://your_a2_service/api/user/budget \
--request PATCH \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"budget": 1000,
"credit": 1000000,
"id": "4f45b2ba-c3dd-4ad9-9e5a-669bf0b0c396"
}'
지면의 등록
광고를 노출할 지면을 추가합니다. 여기서는 다음 조건으로 지면을 생성하겠습니다.
ext.display.enabled=1
: 지면이 디스플레이 소재의 광고 캠페인을 허용
display.{w, h}
: 지면의 크기는 가로 300 px, 세로 250 px
ext.responsive=resize
: 광고 소재의 크기가 지면에 동적으로 조정됨
ext.approval_method=admin
: 지면의 광고 개제는 관리자 승인 필요
curl --request POST \
--url https://your_a2_service/api/placements \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"campaign_permission": {"black": [], "white": []},
"description": "This is a banner ad placement",
"display": {
"clktype": 1,
"displayfmt": {
"ext": {},
"h": 250,
"w": 300
},
"h": 250,
"mime": [],
"nativefmt": {
"ext": {}
},
"w": 300
},
"ext": {
"approval_method": "admin",
"display": {
"enabled": 1
},
"native": {
"enabled": 0
},
"payout": "rates",
"responsive": "resize",
"target_ecpm": 0,
"video": {
"enabled": 0
}
},
"is_active": false,
"name": "My First Placement"
}'
Created Placement Response
{
"created_at": "2025-04-15T06:35:47.151Z",
"updated_at": "2025-04-15T06:35:47.151Z",
"name": "…",
"description": "…",
"is_active": false,
"campaign_permission": {
"white": [],
"black": []
},
"display": {
"clktype": 1,
"mime": [],
"w": 300,
"h": 250,
"displayfmt": {
"ext": {},
"h": 250,
"w": 300
},
"nativefmt": {
"ext": {}
}
},
"video": {
"ptype": 1,
"delay": 0,
"skip": 0,
"skipmin": 0,
"skipafter": 0,
"playmethod": [],
"clktype": 1,
"mime": [],
"ctype": [
2
],
"w": 480,
"h": 300,
"mindur": 0,
"maxdur": 0,
"linear": 0
},
"ext": {
"display": {
"enabled": 1
},
"video": {
"enabled": 0
},
"native": {
"enabled": 0
},
"responsive": "resize",
"payout": "rates",
"approval_method": "admin",
"target_ecpm": 0
},
"created_by": "123e4567-e89b-12d3-a456-426614174000",
"id": "4f45b2ba-c3dd-4ad9-9e5a-669bf0b0c396",
"no": 1
}
캠페인 생성
광고 캠페인은 설정한 목표에 맞춰 특정 광고를 집행하고, 성과를 측정할 수 있는 광고 활동 단위입니다.
특정 기간 동안 주어진 예산을 활용해 노출을 최대화하는(impression, maximize_volume) 캠페인을 만들겠습니다.
캠페인 추가에 실패한다면 에러 메세지를 확인해보세요.
curl --request POST \
--url https://your_a2_service/campaigns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"audience_segments": {"method": "auto", "segment_list": []},
"budget": 1000000,
"created_at": "2025-04-15 15:15:27.916514",
"description": "This is a example campaign",
"end_date": "2025-05-15 15:15:27.916516",
"goal": "impression",
"name": "Maximize Impression",
"owner_id": "4f45b2ba-c3dd-4ad9-9e5a-669bf0b0c396",
"start_date": "2025-04-15 15:15:27.916519",
"status": "okay",
"sub_goal": "maximize_volume",
"updated_at": "2025-04-15 15:15:27.916520"
}'
Created Campaign Response
{
"audience_segments": {
"method": "auto",
"segment_list": []
},
"bid_strategy": "highest_volume",
"budget": 1000000,
"created_at": "2025-04-15 15:15:27.916514",
"daily_budget": 0,
"description": "campaign description",
"end_date": "2025-05-15 15:15:27.916516",
"goal": "impression",
"id": "ab9dc64a-d4a9-40c6-816f-61d49c4cb68e",
"max_bid": 0,
"min_daily_imp": 1000,
"name": "test campaign",
"no": 12,
"owner_id": "0741e2d5-6aed-4994-8498-493c6a84bb66",
"start_date": "2025-04-15 15:15:27.916519",
"status": "okay",
"sub_goal": "maximize_volume",
"target_cpa": 0,
"target_cpm": 0,
"target_volume": 0,
"updated_at": "2025-04-15 15:15:27.916520"
}
소재 생성
캠페인이 집행될 때 실제 지면에 보여줄 광고 소재를 등록하겠습니다. 캠페인의 소재는 이미지, 비디오, 네이티브 등 다양하게 설정할 수 있습니다.
주의) 지면마다 허용하는 소재 유형이 다를 수 있습니다.
curl --request POST \
--url https://your_a2_service/api/creatives \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "test creative",
"type": "banner",
"staatus": "active",
"width": 300,
"height": 100,
"banner": {
"img": "https://example.com/creative.png"
},
"cid": "ab9dc64a-d4a9-40c6-816f-61d49c4cb68e",
"owner_id": "4f45b2ba-c3dd-4ad9-9e5a-669bf0b0c396"
}'
게재 요청
캠페인과 소재를 등록하였으면 캠페인 집행을 원하는 지면에 게재 요청을 할 수 있습니다. 이때 최소 한개 이상의 소재가 활성화 되어 있어야 하며, 게재하고자 하는 지면의 소재 형식과도 일치해야 합니다.
새로운 배정을 만들어 게재 요청을 합니다.
API: Create an allocation
curl --request POST \
--url https://your_a2_service/api/allocations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"tagid": "123e4567-e89b-12d3-a456-426614174000",
"status": "pending",
"cid": "ab9dc64a-d4a9-40c6-816f-61d49c4cb68e",
"owner_id": "4f45b2ba-c3dd-4ad9-9e5a-669bf0b0c396"
}'
게재 승인 및 거절
게재를 요청한 지면은 게재 승인이 필요합니다. 캠페인에 활용된 소재나 링크 등이 지면의 설정에 부합하지 않거나 내부 운영 가이드라인에 맞지 않을 수 있습니다. 심사 결과로 캠페인의 집행을 승인하거나 거절하는 경우 캠페인 정보 변경 API를 이용하여 결과를 업데이트할 수 있습니다. 또한 last_comment 을 설정함으로서 거절 사유 등을 전달할 수 있습니다.
상태 코드 정보
코드 | 설명 |
---|
pending | 초기 상태 |
requested | 게재 요청중 |
published | 게재 중 |
rejected | 거절됨 |
canceled | 게재 취소 |
finished | 게재 종료 |
API: Update an allocation
curl --request PATCH \
--url https://your_a2_service/api/allocations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"tagid": "123e4567-e89b-12d3-a456-426614174000",
"status": "published",
"cid": "ab9dc64a-d4a9-40c6-816f-61d49c4cb68e",
"owner_id": "4f45b2ba-c3dd-4ad9-9e5a-669bf0b0c396"
}'
캠페인 집행과 성과 측정
캠페인이 승인되면 곧 해당 지면에 광고가 노출되게 됩니다. 광고가 노출되거나 광고가 노출된 대상의 행동지표들은 수집되어 관리됩니다. 이렇게 수집된 데이터는 이후 캠페인 전략을 좀 더 효율적으로 수정하는데 도움을 줄 수 있습니다.
성과 분석
캠페인의 성과는 일별, 시간별 등 원하는 시간 구간에 맞는 API를 활용하여 확인할 수 있습니다.
API: Get a campaign hourly metric
curl --request POST \
--url https://your_a2_service/metric/campaigns_hourly \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"campaign_id": "ab9dc64a-d4a9-40c6-816f-61d49c4cb68e",
"tagid": "123e4567-e89b-12d3-a456-426614174000",
"from_datetime": "2025-04-14 16:47:03.773",
"to_datetime": "2025-04-15 16:47:03.773"
}'