IntegrationsIntermediate

How to Describe Uploaded Images with a Make Webhook and GPT Vision

Receive an image URL through a Make webhook and get an alt-text description back from a vision-capable model.

10 minIntermediate

Vision models can look at a photo and write a description, which is perfect for generating accessible alt text at scale. In this guide a Make webhook receives an image URL, sends it to a vision model, and returns clean alt text you can store with the asset.

What you need

  • A Make account
  • An OpenAI API key with access to a vision-capable model
  • A publicly reachable image URL to test with

Step 1: Receive the image URL

Add a Custom webhook module and send a sample POST with an imageUrl field so Make learns the structure. The image must be reachable over the public internet for the model to fetch it.

bash - send a sample
$curl -X POST https://hook.eu2.make.com/img...77 \
$ -H "Content-Type: application/json" \
$ -d '{"imageUrl":"https://example.com/product.jpg"}'
Accepted
$

Step 2: Build the vision request

Add an HTTP Make a request module pointing at https://api.openai.com/v1/chat/completions. The user message holds an array with a text part and an image_url part.

HTTP body - vision request
{
  "model": "gpt-5",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "Write concise alt text under 120 characters." },
        { "type": "image_url", "image_url": { "url": "{{1.imageUrl}}" } }
      ]
    }
  ],
  "max_tokens": 80
}
Make - HTTP module config
Method: POST
URL: https://api.openai.com/v1/chat/completions
Headers:
Authorization: Bearer sk-...
Content-Type: application/json
Body type: Raw (JSON)
Body type is Raw, content type application/json, with the Authorization header set.
Private URLs will fail
The model fetches the image itself, so a signed link that expires or a file behind a login returns an error. Use a public URL or send the image as a base64 data URL instead.

Step 3: Save the description

The alt text lives in choices[0].message.content. Map it into a later module, for example to update the image record in Airtable or a CMS so the alt attribute is filled automatically.

Example: a product photo URL comes back as Black leather backpack standing upright on a wooden desk, which you write straight into the alt field of your store.

Watch related tutorials

Tags
#make#webhooks#vision#alt-text