Skip to main content

Troubleshooting Sync Failures

When a sync job fails, this guide helps you diagnose the root cause and fix it quickly. We'll cover all common failure modes and their solutions.

Quick Diagnosis Flowchart

Start here to quickly identify your issue:

Is the connection status "Backend not reachable"?
├─ YES → See "Backend Connectivity Issues"
└─ NO → Continue

Does the error message contain "Invalid Vimeo URL"?
├─ YES → See "Invalid URL Errors"
└─ NO → Continue

Does the error message contain "Authentication"?
├─ YES → See "Authentication Errors"
└─ NO → Continue

Does the error message contain "Rate limit"?
├─ YES → See "Rate Limit Errors"
└─ NO → Continue

Does the error message contain "Network error"?
├─ YES → See "Network Errors"
└─ NO → See "Unknown Errors"

Authentication Errors

Error: "Authentication failed: Invalid API token"

Full Error Message:

Authentication failed: Invalid API token
Status code: 401 Unauthorized

Cause: The Vimeo API token is invalid, expired, or revoked.

Solutions:

Solution 1: Verify Token Validity

Test the token manually:

curl -H "Authorization: Bearer YOUR_TOKEN_HERE" https://api.vimeo.com/me

Expected Response (Valid Token):

{
"uri": "/users/123456789",
"name": "Your Name",
...
}

Error Response (Invalid Token):

{
"error": "Invalid token",
"error_code": 8003
}

Solution 2: Check Token Scopes

Tokens must have these scopes:

  • public — Access to public videos
  • private — Access to private videos (if importing private content)
  • video_files — Access to video metadata and transcripts

How to Check:

  1. Go to Vimeo Developer Apps
  2. Click on your app
  3. Go to "Authentication" tab
  4. Verify the Personal Access Token has all required scopes

Solution 3: Regenerate Token

If the token is expired or revoked:

  1. Go to Vimeo Developer Apps
  2. Click on your app
  3. Go to "Authentication" tab
  4. Click "Generate New Token"
  5. Select scopes: public, private, video_files
  6. Copy the new token
  7. Update your backend environment variable:
    • Cloud Hosted: Contact your administrator
    • Self-Hosted: Update .env file: VIMEO_ACCESS_TOKEN=new_token_here
  8. Restart the application

Solution 4: Check Account Status

If regenerating the token doesn't help:

  1. Log into your Vimeo account at https://vimeo.com
  2. Check if your account is in good standing (no suspensions or restrictions)
  3. Verify your app hasn't been suspended or deleted

If Account Is Suspended: Contact Vimeo support to resolve account issues.

Error: "Forbidden: Access denied to this resource"

Full Error Message:

Forbidden: Access denied to this resource
Status code: 403 Forbidden

Cause: The token is valid, but lacks permissions to access the requested resource.

Common Scenarios:

Scenario 1: Private Content

You're trying to import a private video, showcase, or album, but the token doesn't have access.

Solution:

  • Ensure the token belongs to the same Vimeo account that owns the private content
  • Or, ensure the content is set to "Public" or "Unlisted" on Vimeo

Scenario 2: Missing Scopes

The token is missing required scopes (e.g., private scope for private videos).

Solution:

  • Regenerate the token with all required scopes: public, private, video_files

Scenario 3: Content Was Deleted

The video or collection was deleted from Vimeo after you saved the URL.

Solution:

  • Verify the URL exists by opening it in a browser
  • If it's gone, remove it from your import list

Invalid URL Errors

Error: "Invalid Vimeo URL: Unsupported format"

Full Error Message:

Invalid Vimeo URL: Unsupported format
Provided URL: https://example.com/video

Cause: The URL doesn't match any of the five supported Vimeo URL patterns.

Supported Patterns:

https://vimeo.com/user{userid}
https://vimeo.com/user{userid}/albums
https://vimeo.com/user{userid}/videos
https://vimeo.com/user{userid}/collections
https://vimeo.com/showcase/{showcaseid}

Solutions:

Solution 1: Check for Typos

Common typos:

  • vimoe.com instead of vimeo.com
  • user/123 instead of user123
  • collection instead of collections (singular vs plural)

Solution 2: Remove Query Parameters

Some Vimeo URLs include tracking parameters:

❌ https://vimeo.com/showcase/11708791?h=abc123def
✅ https://vimeo.com/showcase/11708791

Solution: Remove everything after the ?:

https://vimeo.com/showcase/11708791

Solution 3: Use Public URL, Not Admin URL

Admin URL (Wrong):

❌ https://vimeo.com/manage/showcases/11708791
❌ https://vimeo.com/manage/videos/987654321

Public URL (Correct):

✅ https://vimeo.com/showcase/11708791
✅ https://vimeo.com/987654321

How to Get Public URL:

  • Click "View Public Page" link in your Vimeo admin panel
  • Copy URL from the public-facing page

Error: "Invalid Vimeo URL: Resource not found"

Full Error Message:

Invalid Vimeo URL: Resource not found
Provided URL: https://vimeo.com/showcase/99999999
Status code: 404 Not Found

Cause: The URL format is correct, but the resource (showcase, user, video) doesn't exist on Vimeo.

Solutions:

Solution 1: Verify URL Exists

Open the URL in a browser:

  • If you see the showcase/video → URL is valid; backend token may lack access
  • If you see "Page not found" → URL is incorrect or resource was deleted

Solution 2: Check Privacy Settings

Private Content: If the showcase/video is private, you must:

  • Use a token from the account that owns it
  • Or, change the privacy setting to "Public" or "Unlisted" on Vimeo

How to Check Privacy:

  1. Log into Vimeo as the content owner
  2. Go to the showcase/video settings
  3. Check "Privacy" setting
  4. Change to "Public" or "Unlisted" if needed

Solution 3: Check for Deleted Content

If the URL previously worked but now shows 404:

  • The video owner may have deleted the content
  • The showcase may have been unpublished
  • The user account may have been suspended

Solution: Verify with the content owner that the URL is still valid.

Rate Limit Errors

Error: "Rate limit exceeded"

Full Error Message:

Rate limit exceeded
Status code: 429 Too Many Requests
Retry after: 600 seconds

Cause: You've exceeded Vimeo's API rate limit of 600 calls per 10 minutes (or 3600 calls per 10 minutes with Token Pool).

Solutions:

Solution 1: Wait and Retry

Immediate Solution:

  • Wait 10 minutes for the rate limit window to reset
  • Click "Retry Import" button in the dashboard

Why This Happens:

  • You're syncing large showcases (100+ videos)
  • Multiple concurrent syncs are running
  • Previous sync jobs haven't finished cooling down

Solution 2: Enable Token Pool (6x Capacity)

Long-Term Solution: Set up Token Pool for 3600 calls/10min capacity (6x increase).

See: How to Set Up Token Pool

Benefits:

  • 6x faster sync speeds
  • Automatic failover when one token hits rate limit
  • Supports syncing 500+ videos without pausing

Solution 3: Stagger Sync Jobs

If Running Multiple Syncs:

  • Space them out by 5-10 minutes
  • Don't start 5 showcases simultaneously

Scheduling Example:

  • 9:00 AM — Start Sync Job 1
  • 9:10 AM — Start Sync Job 2
  • 9:20 AM — Start Sync Job 3

Why This Helps: Gives each sync job access to the full 600 calls/10min capacity.

Solution 4: Use Incremental Sync Mode

On Repeat Imports:

  • First import: Use Full Sync (imports everything)
  • Subsequent imports: Use Incremental Sync (only fetches changes)

Why This Helps: Incremental Sync skips unchanged videos, dramatically reducing API calls.

Example:

  • Full Sync of 100 videos: 200 API calls
  • Incremental Sync (3 new videos): 10 API calls (95% reduction)

See Your First Complete Sync for details.

Error: "All tokens are in cooldown"

Full Error Message (Token Pool Only):

RateLimitError: All tokens are in cooldown
Retry after: 347 seconds

Cause: You're using Token Pool, but all 6 tokens hit their rate limits simultaneously.

Why This Happens:

  • You're making 3600+ API calls in less than 10 minutes (exceeding even 6x capacity)
  • Very large showcases (500+ videos) with many transcripts
  • Multiple users syncing concurrently

Solutions:

Solution 1: Wait for Token Recovery

Tokens auto-recover after 10 minutes of cooldown.

Check cooldown status:

# Access Prometheus metrics
curl http://localhost:9091/metrics | grep vimeo_token_pool_health_state

Look for:

vimeo_token_pool_health_state{token_id="token1@..."} 1
  • 0 = FAILED (permanently down)
  • 1 = COOLDOWN (recovers in under 10 min)
  • 2 = HEALTHY (ready to use)

When all tokens show 2 (HEALTHY), retry your sync.

Solution 2: Add More Tokens

Increase capacity to 12 or 18 tokens:

12 Tokens = 7200 calls/10min 18 Tokens = 10,800 calls/10min

See: How to Set Up Token Pool for token generation instructions.

Solution 3: Reduce Concurrency

If multiple users/jobs are syncing:

  • Limit to 2-3 concurrent syncs
  • Queue additional syncs to start after current ones finish

Backend Configuration (For Administrators):

# In .env file
SYNC_CONCURRENCY=3 # Max 3 concurrent sync jobs

Network Errors

Error: "Network error: Could not connect to Vimeo API"

Full Error Message:

Network error: Could not connect to Vimeo API
Error: Connection timeout after 30 seconds

Cause: The backend server cannot reach Vimeo's API due to network issues.

Solutions:

Solution 1: Check Internet Connectivity

On the backend server:

# Ping Vimeo
ping api.vimeo.com

# Test HTTPS connectivity
curl -I https://api.vimeo.com

Expected Response:

HTTP/2 200

If curl fails:

  • Backend server has no internet access
  • Firewall is blocking outbound HTTPS traffic
  • DNS resolution is failing

Solution 2: Check Vimeo Status

Visit: https://status.vimeo.com

If Vimeo reports outages:

  • Wait for Vimeo to resolve the issue
  • Retry your sync after the outage is resolved

Monitor Vimeo Status:

# Subscribe to Vimeo status updates
https://status.vimeo.com/subscribe

Solution 3: Check Firewall Rules

If behind a corporate firewall:

  • Ensure outbound HTTPS (port 443) traffic to api.vimeo.com is allowed
  • Whitelist Vimeo's IP ranges (contact Vimeo support for current ranges)

Test with curl:

curl -v https://api.vimeo.com/me

Look for:

  • Connection refused → Firewall blocking
  • Connection timeout → Firewall dropping packets
  • SSL certificate error → HTTPS inspection interfering

Solution 4: Increase Timeout

If on slow network:

Backend Configuration (For Administrators):

# In .env file
HTTP_TIMEOUT_CONNECT=30 # Connection timeout (seconds)
HTTP_TIMEOUT_READ=60 # Read timeout (seconds)

Restart application after changes.

Error: "SSL certificate verification failed"

Full Error Message:

Network error: SSL certificate verification failed
Error: unable to get local issuer certificate

Cause: The backend server cannot verify Vimeo's SSL certificate.

Solutions:

Solution 1: Update CA Certificates

On the backend server:

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install ca-certificates
sudo update-ca-certificates

RHEL/CentOS:

sudo yum update ca-certificates

Docker (Rebuild Image):

docker compose build --no-cache
docker compose up -d

Solution 2: Check System Time

SSL certificate validation requires accurate system time.

Check current time:

date

If time is wrong, sync with NTP:

sudo ntpdate pool.ntp.org

Or enable NTP service:

sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd

Only for testing/debugging:

Backend Configuration (For Administrators):

# In .env file
HTTP_VERIFY_SSL=false # WARNING: Security risk!

Do NOT use in production. This makes your connection vulnerable to man-in-the-middle attacks.

Backend Connectivity Issues

Dashboard Shows "Backend not reachable"

Symptoms:

  • Red connection status indicator in dashboard header
  • Cannot start new syncs
  • "Recent Jobs" sidebar is empty or outdated

Cause: Dashboard cannot reach the backend API.

Solutions:

Solution 1: Check Backend Is Running

If Using Docker Compose:

docker compose ps

Expected Output:

NAME                     STATUS
vimeo-connector Up 5 minutes

If status is "Exited":

# View logs to see why it crashed
docker compose logs vimeo-connector

# Restart
docker compose up -d

Solution 2: Verify API Endpoint

Check backend health endpoint:

curl http://localhost:8000/api/v1/health

Expected Response:

{
"status": "healthy",
"version": "1.0.0",
"timestamp": "2025-10-17T14:22:10Z"
}

If curl fails:

  • Backend is not listening on port 8000
  • Backend crashed or failed to start
  • Port is already in use by another application

Solution 3: Check Dashboard Configuration

Dashboard must point to correct backend URL.

If Self-Hosting:

  • Check dashboard's config.js or environment variable for API URL
  • Ensure it matches where the backend is running

Example:

// config.js
export const API_BASE_URL = "http://localhost:8000/api/v1";

Solution 4: Check Network/Firewall

If backend and dashboard are on different servers:

Test connectivity from dashboard server to backend:

curl http://backend-server:8000/api/v1/health

If this fails:

  • Firewall is blocking port 8000
  • Network route between servers doesn't exist
  • Backend is only listening on localhost (127.0.0.1), not all interfaces (0.0.0.0)

Solution (Backend Configuration):

# Ensure backend binds to all interfaces
# In .env file
HOST=0.0.0.0
PORT=8000

Unknown Errors

Error: "Unknown error occurred"

Full Error Message:

Unknown error occurred
Error details: [error message from backend]

Cause: An unexpected error that doesn't match common failure patterns.

Solutions:

Solution 1: Check Backend Logs

If Using Docker Compose:

docker compose logs vimeo-connector --tail=100

If Running Natively:

tail -f /var/log/vimeo-connector/app.log

Look for:

  • Python stack traces (indicate code bugs)
  • "ERROR" or "CRITICAL" log level messages
  • Specific error messages that provide more context

Solution 2: Check System Resources

Backend may be out of memory or disk space:

Check memory:

free -h

Check disk space:

df -h

If low on resources:

  • Restart the backend to clear memory leaks
  • Free up disk space (delete old logs, temporary files)
  • Upgrade server resources (more RAM, storage)

Solution 3: Reproduce with Minimal Example

Isolate the issue:

  • Try syncing a different, smaller URL
  • If that works, the issue is specific to the original URL (possibly malformed data from Vimeo)
  • If that also fails, the issue is systemic (backend configuration or infrastructure problem)

Solution 4: Report the Issue

If you cannot resolve the issue:

  1. Collect diagnostic information:

    • Full error message from dashboard
    • Backend logs (docker compose logs vimeo-connector)
    • The Vimeo URL you were trying to sync
    • System information (OS, Docker version, etc.)
  2. Open a GitHub issue:

Partial Failures

Some Videos in a Sync Job Failed

Symptoms:

  • Sync completes with "Completed" status
  • Results show "Added: 50" but you expected 100
  • Backend logs show errors for specific videos

Cause: Individual videos failed to import (e.g., transcript download error) but the overall job continued.

Solutions:

Solution 1: Check Backend Logs for Failed Videos

Search logs for errors:

docker compose logs vimeo-connector | grep -i "error.*video"

Example error:

[error] Failed to download transcript for video_id=987654321 error=timeout

Solution 2: Retry with Full Sync

Force re-import of all videos:

  1. Paste the same URL
  2. Select "Full Sync" mode
  3. Click "Import Collection"

This will retry failed videos.

Solution 3: Manually Inspect Failed Videos

Check if failed videos are accessible:

# Replace with actual video ID from logs
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.vimeo.com/videos/987654321

If response is 404 or 403:

  • Video is private or deleted
  • Expected that it failed to import

If response is 200:

  • Video exists and is accessible
  • Failure was transient (network issue, timeout)
  • Retry will likely succeed

Prevention Strategies

Best Practices to Avoid Failures

  1. Use Auto Sync Mode

    • Automatically chooses Full or Incremental based on history
    • Reduces risk of user error (e.g., using Incremental on first import)
  2. Enable Token Pool

  3. Monitor Backend Health

    • Set up alerts for:
      • Backend down (no response on health endpoint)
      • High error rate (over 5% failed requests)
      • Rate limit warnings (approaching 600 calls/10min)
    • Use Prometheus + Grafana for monitoring
  4. Keep Tokens Fresh

    • Rotate API tokens every 90 days
    • Monitor token health metrics
    • Test tokens periodically:
      curl -H "Authorization: Bearer TOKEN" https://api.vimeo.com/me
  5. Test with Small Collections First

    • Before syncing a 500-video showcase, test with a 5-video showcase
    • Verify token permissions and connectivity
    • Ensure backend has sufficient resources
  6. Schedule Large Syncs During Off-Hours

    • Avoids competing with other users for API capacity
    • Reduces load on backend server

Diagnostic Checklist

Before asking for help, verify:

  • Backend is running (docker compose ps shows "Up")
  • Dashboard connection status is green ("Connected")
  • Vimeo API token is valid (test with curl)
  • Vimeo URL is correct format and accessible in browser
  • Backend logs show no critical errors
  • System has sufficient resources (memory, disk space)
  • Vimeo status page shows no outages
  • Firewall allows outbound HTTPS traffic

Getting Help

If you've tried all solutions and still have issues:

GitHub Issues:

Vimeo API Support:

Community:

  • Discussions tab on GitHub repository

Optimize Performance:

Understand the System:

API Reference: