Skip to content

URL to Video

Fresh

Purpose

Convert any webpage URL into a professional video ad using the Creatify API. This SOP covers the full pipeline: creating a link, generating previews, selecting a preview, and rendering the final video.

Prerequisites

  • Authenticated API access (Authentication SOP)
  • A publicly accessible URL to convert
  • Sufficient credits (minimum 5/30s for create, or 1/30s preview + 4/30s render)

Procedure

Creatify scrapes the URL to extract product information, images, and text.

bash
curl --request POST \
  --url https://api.creatify.ai/api/links/ \
  --header "Content-Type: application/json" \
  --header "X-API-ID: $CREATIFY_API_ID" \
  --header "X-API-KEY: $CREATIFY_API_KEY" \
  --data '{
    "url": "https://www.example.com/product-page"
  }'

Response:

json
{
  "id": "link-uuid-123",
  "url": "https://www.example.com/product-page",
  "title": "Amazing Product",
  "description": "The best product for your needs...",
  "media": [
    "https://example.com/image1.jpg",
    "https://example.com/image2.jpg"
  ]
}

TIP

You can also create a link with custom parameters using POST /api/links/with_params/. This allows you to override the scraped title, description, and media.

Step 2: Create a URL-to-Video Task

bash
curl --request POST \
  --url https://api.creatify.ai/api/url_to_videos/ \
  --header "Content-Type: application/json" \
  --header "X-API-ID: $CREATIFY_API_ID" \
  --header "X-API-KEY: $CREATIFY_API_KEY" \
  --data '{
    "link_id": "link-uuid-123",
    "aspect_ratio": "9:16"
  }'

Response:

json
{
  "id": "utv-task-uuid-456",
  "status": "pending",
  "link_id": "link-uuid-123",
  "aspect_ratio": "9:16"
}

Step 3: Poll for Completion

bash
curl --request GET \
  --url https://api.creatify.ai/api/url_to_videos/utv-task-uuid-456/ \
  --header "X-API-ID: $CREATIFY_API_ID" \
  --header "X-API-KEY: $CREATIFY_API_KEY"

Poll every 5-10 seconds until status changes to done or failed.

Completed response:

json
{
  "id": "utv-task-uuid-456",
  "status": "done",
  "output": "https://cdn.creatify.ai/videos/preview-output.mp4",
  "previews": [
    {
      "id": "preview-1",
      "output": "https://cdn.creatify.ai/videos/preview-1.mp4"
    },
    {
      "id": "preview-2",
      "output": "https://cdn.creatify.ai/videos/preview-2.mp4"
    }
  ]
}

Step 4: Generate Preview List (Async)

For multiple preview options, use the async preview list endpoint:

bash
curl --request POST \
  --url https://api.creatify.ai/api/url_to_videos/utv-task-uuid-456/preview_list/ \
  --header "X-API-ID: $CREATIFY_API_ID" \
  --header "X-API-KEY: $CREATIFY_API_KEY"

Step 5: Render Final Video

Once you have reviewed the preview and are satisfied, render the final high-quality version:

bash
curl --request POST \
  --url https://api.creatify.ai/api/url_to_videos/utv-task-uuid-456/render/ \
  --header "X-API-ID: $CREATIFY_API_ID" \
  --header "X-API-KEY: $CREATIFY_API_KEY"

Step 6: Poll Render Status and Download

Poll the same task ID until the render is complete, then download from the output URL.

bash
curl --request GET \
  --url https://api.creatify.ai/api/url_to_videos/utv-task-uuid-456/ \
  --header "X-API-ID: $CREATIFY_API_ID" \
  --header "X-API-KEY: $CREATIFY_API_KEY"

Credit Cost

OperationCredits
Create link0
Create URL-to-video5 per 30s
Generate preview1 per 30s
Render final video4 per 30s

WARNING

Preview + Render = 5 credits/30s total (same as Create). The advantage is you can review before committing to the render.

Verification Checklist

  • [ ] Link object created with valid scraped data (title, description, media)
  • [ ] Video task returns pending status on creation
  • [ ] Polling returns done status within expected time
  • [ ] Preview video is playable and matches expected content
  • [ ] Rendered video is higher quality than preview
  • [ ] Output URL is accessible and returns valid MP4

Common Errors

ErrorCauseFix
Link creation returns empty mediaURL not publicly accessible or blocks scrapersUse a different URL or provide media manually via with_params
Task stuck in processingVery long video or server loadWait longer; timeout after 10 minutes
failed statusVarious generation errorsCheck failed_reason field in response

See Also