들어가기

이 튜토리얼에서는 A2 시작하기: 기본 사용법에서 소개한, 광고 지면을 정의하고 이미지 배너 광고를 구성하는 가이드를 API로 구현하는 방법을 설명합니다.

아래 예제를 따라하기 위해서는 엑세스 토큰이 필요하므로 아직 생성하지 않았다면 다음 글을 참조하세요: API 엑세스 토큰 얻기

광고 캠페인을 등록하기 위해서는 예산이 필요합니다. 시작하기에 앞서 관리자 계정에 예산을 부여합니다.

API: Update user budget
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: 지면의 광고 개제는 관리자 승인 필요
API: Create a placement
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) 캠페인을 만들겠습니다.

캠페인 추가에 실패한다면 에러 메세지를 확인해보세요.

API: Create a campaign
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"
}

소재 생성

캠페인이 집행될 때 실제 지면에 보여줄 광고 소재를 등록하겠습니다. 캠페인의 소재는 이미지, 비디오, 네이티브 등 다양하게 설정할 수 있습니다.

주의) 지면마다 허용하는 소재 유형이 다를 수 있습니다.

API: Create a creative
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"
}'