AgentMessage
Campaigns

Review a draft campaign before submitting

POST
/v1/campaigns/review

Runs the AI vetting assistant against a draft 10DLC campaign and returns severity-tagged findings with suggested fixes, before you submit the campaign for registration. This is an optional, button-triggered pre-check: deterministic checks (privacy-policy and terms reachability, required-language scans, sample-message and content-toggle checks) always run; an AI layer adds use-case fit, opt-in, and red-flag findings when enabled.

Nothing is persisted and no campaign is created, the draft is reviewed inline. Only findings with severity block should gate submission; warn and info are advisory. The assistant does not certify legal compliance; have your own counsel confirm your policy language.

Requires the campaigns:write scope.

AuthorizationBearer <token>

Authenticate by sending your API key as a bearer token: Authorization: Bearer am_live_.... Every request is automatically scoped to the organization that owns the key and to the scopes granted to that key.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/campaigns/review" \  -H "Content-Type: application/json" \  -d '{}'
{
  "success": true,
  "error": {
    "code": "string",
    "message": "string",
    "request_id": "string",
    "details": {
      "property1": "string",
      "property2": "string"
    }
  },
  "meta": {
    "total": 0,
    "limit": 0,
    "offset": 0,
    "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNC0yNlQxMjowMDowMFoiLCJpZCI6IjAxOTAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMSJ9",
    "last_event_at": "2019-08-24T14:15:22Z"
  },
  "data": {
    "can_submit": true,
    "llm_used": true,
    "generated_at": "2019-08-24T14:15:22Z",
    "counts": {
      "property1": 0,
      "property2": 0
    },
    "findings": [
      {
        "id": "string",
        "severity": "info",
        "category": "string",
        "field": "string",
        "title": "string",
        "detail": "string",
        "suggested_fix": "string",
        "source": "deterministic",
        "docs_url": "string"
      }
    ],
    "checked_urls": [
      {
        "url": "string",
        "field": "string",
        "reachable": true,
        "status": 0,
        "error": "string"
      }
    ]
  }
}
{
  "success": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "authentication failed",
    "request_id": "01JTBQH2FZ8K1RXC0WJ4Z9P3VM"
  }
}
{
  "success": false,
  "error": {
    "code": "FORBIDDEN",
    "message": "missing required scope",
    "request_id": "01JTBQH2FZ8K1RXC0WJ4Z9P3VM"
  }
}
{
  "success": false,
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "validation failed",
    "request_id": "01JTBQH2FZ8K1RXC0WJ4Z9P3VM",
    "details": {
      "to": "must be E.164",
      "body": "must be 1..1600 chars"
    }
  }
}