POST/api/analyze-ad

Run an AI vision analysis comparing an ad creative with its landing page.

Scope: analyze

Request Body

FieldTypeRequiredDescription
adData.imageUrlstringNo*URL of the ad image or creative
adData.adUrlstringNo*Direct URL to the ad (screenshotted automatically)
adData.platformstringYesmeta, tiktok, linkedin, google, or reddit
adData.mediaTypestringNoimage, video, or unknown. Defaults to image.
landingPageData.urlstringYesLanding page URL to analyze
viewportstringNomobile or desktop. Defaults to platform-appropriate viewport.

* Either adData.imageUrl or adData.adUrl should be provided.

Example Request

curl -X POST https://app.adalign.io/api/analyze-ad \
  -H "Authorization: Bearer adal_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "adData": {
      "imageUrl": "https://example.com/ad.png",
      "platform": "meta"
    },
    "landingPageData": {
      "url": "https://example.com/landing"
    }
  }'

Response

{
  "overallScore": 7.2,
  "componentScores": {
    "visualMatch": 6.8,
    "contextualMatch": 7.5,
    "toneAlignment": 7.0,
    "messageMatch": 7.8,
    "aboveTheFoldContinuity": 7.2,
    "informationScent": 7.2
  },
  "detailedScores": {
    "visualMatch": { "score": 6.8, "band": "MODERATE", "reasoning": "..." },
    "messageMatch": { "score": 7.8, "band": "GOOD", "reasoning": "..." },
    "aboveTheFoldContinuity": { "score": 7.2, "band": "GOOD", "reasoning": "..." },
    "informationScent": { "score": 7.2, "band": "GOOD", "reasoning": "DEPRECATED alias — use aboveTheFoldContinuity. Removed in vNEXT." },
    "toneAlignment": { "score": 7.0, "band": "GOOD", "reasoning": "..." }
  },
  "suggestions": {
    "visual": ["Match hero image style with ad creative..."],
    "contextual": ["Echo the specific offer from the ad headline..."],
    "tone": ["Align CTA urgency with ad messaging..."]
  },
  "elementComparisons": [
    {
      "element": "Primary Headline",
      "adValue": "Get 50% Off Today",
      "landingPageValue": "Welcome to Our Store",
      "status": "mismatch",
      "severity": "HIGH",
      "recommendation": "Match the headline to the ad offer"
    }
  ],
  "fixes": [
    {
      "fixType": "headline",
      "target": "landing_page",
      "priority": "HIGH",
      "suggestedValue": "Get 50% Off Today",
      "reasoning": "Headline mismatch breaks above-the-fold continuity",
      "expectedImpact": "15-25% improvement in conversion rate",
      "effort": "LOW"
    }
  ],
  "mediaType": "image",
  "viewport": "mobile",
  "evaluationId": "uuid-here"
}

Error Codes

401 Invalid or missing API key

403 Key lacks analyze scope

429 Monthly evaluation limit reached