2026.12 유료 파일럿광고대행사 · 브랜드와 함께할 파일럿 기업을 모집합니다파일럿 신청
AIMarker
개발자 · 자동화 연동

같은 검수 엔진을,
여러분의 자동화 흐름 안에

생성형 AI로 만든 문구가 게시되기 전에 AIMarker API를 한 번 거치게 하세요. 사내 콘텐츠 관리 도구 · 구글 시트 · n8n · Make · AI 에이전트 어디서든 부를 수 있습니다.

01 만들기

생성형 AI

ChatGPT · Gemini · 사내 LLM · 카피 자동화가 문구 · 이미지를 만듭니다.

02 점검

AIMarker API

am.check · am.batch 가 위험 후보 · 근거 · 고칠 문구 · 붙일 표시를 돌려줍니다.

03 승인

승인 링크

am.share 로 광고주 승인 링크를 만들고 am.status 로 답을 받습니다.

04 게시 · 증빙

원장 기록

am.stamp 로 승인 · 보고서 해시를 남기고 누구나 /verify/ 에서 확인합니다.

엔드포인트

요청 하나, 동작은 action 으로

모든 요청은 같은 주소로 보내고, 본문의 action 으로 동작을 고릅니다. 본문은 JSON(Content-Type: text/plain), 응답도 JSON입니다.

주소(POST)
https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec
action하는 일주요 입력주요 출력
am.check문구 하나를 KR-AdLaw 규칙 팩으로 점검text, ind(비우면 업종 자동), flags{sponsored, aiPerson, aiMedia}, guide{ban, must}score, decision, findings[](id · lv · cat · s · e · t · why · law · reps · tip), labels[]
am.batch최대 20개를 한 번에(콘텐츠 관리 도구 · 시트 일괄)items[{id, text, ind, flags}], guideresults[{id, score, decision, findings}]
am.label붙일 표시 문구 · HTML · IPTC 값kind(image · video · person · text · sponsor), level(gen · edit)text, long, html, markdown, iptc
am.scan사이트 공개 첫 화면 보수적 진단urllevel, signals[], images{…}, ad{n, items}
am.share광고주 승인 링크 만들기(90일 보관)data{title, brand, channel, ind, copy, score, dec, fnd[], h}id, url
am.status승인 상태 받아 오기ids[](최대 60)items{id: {st, by, done, memo}}
am.stamp보고서 · 승인 기록 해시를 원장에 남기기h(SHA-256 64자리), n, k(report · version · approval)id(LG…), at(서버 시각)
am.verify원장 확인h 또는 idfound, kind, at, n

인증 · 한도

본문에 "key": "amk_…" 를 넣습니다. 무료 키는 하루 300회(일괄 점검은 문구 수만큼). 한도를 늘리려면 문의해 주세요.

판정 값

decision: fix(수정 후 출고) · expert(전문가 검토 권장) · review(확인 후 출고) · clear(큰 위험 후보 없음). lv: 3 높음 · 2 주의 · 1 참고.

오류

ok:false 와 code(KEY · QUOTA · TEXT · BUSY · HASH · NOT_FOUND)를 돌려줍니다. 위치 s · e 는 보낸 문구 기준(필수 표시는 -1)입니다.

바로 붙여 쓰는 예시

쓰는 도구에 맞춰 골라 보세요

시트의 확장 프로그램 → Apps Script 에 붙여 넣고 저장하면, 셀에서 =AIMARKER(A2) 처럼 씁니다. 카피 수백 줄을 한 번에 점검하는 가장 쉬운 방법입니다.

Code.gs
const AIMARKER_KEY = 'amk_여기에_발급받은_키';
const AIMARKER_URL = 'https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec';

/**
 * 광고 문구 위험 점검. 예: =AIMARKER(A2) · =AIMARKER(A2, "cos")
 * 업종: gen 일반 · food 식품 · hfood 건강기능식품 · cos 화장품 · med 의료 · fin 금융
 * @customfunction
 */
function AIMARKER(text, ind) {
  if (!text) return '';
  const res = UrlFetchApp.fetch(AIMARKER_URL, {
    method: 'post', contentType: 'text/plain', muteHttpExceptions: true,
    payload: JSON.stringify({ action: 'am.check', key: AIMARKER_KEY, text: String(text), ind: ind || '' })
  });
  const r = JSON.parse(res.getContentText());
  if (!r.ok) return '오류: ' + r.message;
  const dec = { fix: '수정 후 출고', expert: '전문가 검토', review: '확인 후 출고', clear: '큰 위험 없음' }[r.decision];
  const top = r.findings.filter(f => f.lv >= 2).slice(0, 3).map(f => f.t || '필수 표시').join(', ');
  return r.score + '점 · ' + dec + (top ? ' · ' + top : '');
}

Apps Script 주소는 한 번 넘겨주기(302)를 하므로 -L 을 꼭 붙이세요.

터미널
curl -sL -H 'Content-Type: text/plain' \
  -d '{"action":"am.check","key":"amk_발급받은_키","text":"부작용 없는 크림, 바르자마자 주름이 사라져요","ind":"cos"}' \
  'https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec'

서버(Node.js 18+)에서 부르세요. 키를 브라우저 코드에 넣지 마세요.

check.mjs
const URL = 'https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec';

export async function aimarkerBatch(items) {
  const r = await fetch(URL, {
    method: 'POST', headers: { 'Content-Type': 'text/plain' }, redirect: 'follow',
    body: JSON.stringify({ action: 'am.batch', key: process.env.AIMARKER_KEY, items })
  }).then(x => x.json());
  if (!r.ok) throw new Error(r.code + ' ' + r.message);
  return r.results;   // [{ id, score, decision, findings, labels }]
}

// 게시 전 관문: 높음 후보가 있으면 사람 승인으로 넘김
const [res] = await aimarkerBatch([{ id: 'post-1024', text: '의사가 추천하는 다이어트 젤리' }]);
if (res.decision === 'fix' || res.decision === 'expert') console.log('사람 검토 필요', res.findings);
check.py
import json, os, requests

URL = "https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec"

def aimarker_check(text, ind="", **flags):
    body = {"action": "am.check", "key": os.environ["AIMARKER_KEY"], "text": text, "ind": ind, "flags": flags}
    r = requests.post(URL, data=json.dumps(body).encode("utf-8"), headers={"Content-Type": "text/plain"}, timeout=30).json()
    if not r["ok"]:
        raise RuntimeError(r["code"] + " " + r["message"])
    return r

r = aimarker_check("원금 보장 확정 수익! 누구나 대출 가능", ind="fin")
print(r["score"], r["decision"], [f["t"] for f in r["findings"]])
  1. HTTP Request 노드(Make 는 HTTP 모듈)를 추가하고 Method POST, URL 에 위 주소를 넣습니다.
  2. Body 는 Raw · text/plain, 내용은 {"action":"am.check","key":"amk_…","text":"{{ $json.caption }}"}
  3. Follow Redirects(리다이렉트 따라가기)를 켭니다.
  4. 다음 노드에서 decision 이 fix · expert 면 슬랙 · 메일로 담당자에게, clear 면 바로 게시하도록 나눕니다.
  5. 승인이 필요하면 am.share 로 링크를 만들어 보내고, 일정 간격으로 am.status 를 불러 승인되면 게시합니다.

ChatGPT · Claude · 사내 에이전트의 도구(함수 호출)로 등록하면, 에이전트가 문구를 만든 뒤 스스로 점검하고 고칩니다.

tool.json
{
  "name": "aimarker_check_ad_copy",
  "description": "한국 광고 규칙(표시광고법 · 식품 · 건강기능식품 · 화장품 · 의료 · 금융 · 추천 · 보증 · 가상인물 · AI 표시)으로 광고 문구의 위험 후보와 근거, 고칠 문구, 붙일 표시를 돌려줍니다. 문구를 내보내기 전에 부르세요.",
  "parameters": {
    "type": "object",
    "properties": {
      "text": { "type": "string", "description": "점검할 광고 문구(5,000자까지)" },
      "ind": { "type": "string", "enum": ["gen", "food", "hfood", "cos", "med", "fin"], "description": "업종. 모르면 비움(자동)" },
      "sponsored": { "type": "boolean", "description": "대가를 받은 콘텐츠인지" },
      "aiPerson": { "type": "boolean", "description": "AI로 만든 인물 · 목소리가 나오는지" },
      "aiMedia": { "type": "boolean", "description": "AI로 만든 이미지 · 영상을 쓰는지" }
    },
    "required": ["text"]
  }
}
엔진 불러 보기

키 없이 응답 모양부터 보세요

이 화면에서는 키 없이 am.check 를 불러 실제 응답(JSON)을 보여 줍니다.

응답
{ "ok": true, ... }
무료 API 키

키는 바로 나오고, 한 번만 보여 드립니다

하루 300회 무료. 서버에는 키 대신 해시만 남습니다. 연동 목적을 보고 도움이 필요하면 먼저 연락드릴 수 있어요.