Use Cases Pricing Docs About
Get Started
Ready to start creating map animations? Get Started Free →

Batch Rendering

Submit multiple render jobs in a single API call. Available on Studio tier.

Studio tier only. Batch rendering is not available on Free or Creator plans.

Creating a Batch

POST /v1/render/batch

{
  "jobs": [
    {
      "waypoints": [
        { "lat": 29.9792, "lng": 32.5731, "label": "Suez Canal" },
        { "lat": 12.3567, "lng": 43.6028, "label": "Bab el-Mandeb" }
      ],
      "style": "maritime-dark"
    },
    {
      "waypoints": [
        { "lat": 1.2644, "lng": 103.8176, "label": "Singapore" },
        { "lat": 35.4437, "lng": 139.6380, "label": "Tokyo" }
      ],
      "style": "satellite"
    },
    {
      "waypoints": [
        { "lat": 51.5074, "lng": -0.1278, "label": "London" },
        { "lat": 40.7128, "lng": -74.0060, "label": "New York" }
      ],
      "style": "minimal",
      "transport": "plane"
    }
  ],
  "webhook_url": "https://your-server.com/batch-complete"
}

Response

{
  "batch_id": "batch_xyz123",
  "jobs": [
    { "job_id": "job_1", "status": "queued" },
    { "job_id": "job_2", "status": "queued" },
    { "job_id": "job_3", "status": "queued" }
  ],
  "total": 3,
  "status_url": "https://api.georender.io/v1/batch/batch_xyz123"
}

Checking Batch Status

GET /v1/batch/batch_xyz123

{
  "batch_id": "batch_xyz123",
  "status": "processing",
  "jobs": [
    { "job_id": "job_1", "status": "complete", "video_url": "..." },
    { "job_id": "job_2", "status": "processing" },
    { "job_id": "job_3", "status": "queued" }
  ],
  "completed": 1,
  "processing": 1,
  "queued": 1,
  "failed": 0,
  "total": 3
}

Batch Webhook

When all jobs complete, you receive a single webhook:

{
  "event": "batch.complete",
  "batch_id": "batch_xyz123",
  "jobs": [
    {
      "job_id": "job_1",
      "status": "complete",
      "video_url": "https://cdn.georender.io/renders/job_1.mp4"
    },
    {
      "job_id": "job_2",
      "status": "complete",
      "video_url": "https://cdn.georender.io/renders/job_2.mp4"
    },
    {
      "job_id": "job_3",
      "status": "failed",
      "error": "ROAD_ROUTE_ERROR",
      "message": "No road found between waypoints"
    }
  ],
  "completed": 2,
  "failed": 1,
  "total": 3
}

Batch Limits

TierMax Jobs per Batch
FreeNot available
CreatorNot available
Studio25

Shared Options

Apply the same options to all jobs in a batch:

{
  "jobs": [
    { "waypoints": [...] },
    { "waypoints": [...] },
    { "waypoints": [...] }
  ],
  "shared_options": {
    "style": "maritime-dark",
    "duration": 15,
    "resolution": "4k",
    "hud": { "stats": { "show_distance": true } }
  },
  "webhook_url": "https://your-server.com/batch-complete"
}

Individual job options override shared options:

{
  "jobs": [
    { "waypoints": [...] },  // Uses shared style
    { "waypoints": [...], "style": "satellite" },  // Overrides to satellite
    { "waypoints": [...] }   // Uses shared style
  ],
  "shared_options": {
    "style": "maritime-dark"
  }
}

SDK Examples

Python

batch = client.render_batch(
    jobs=[
        {"waypoints": [...], "style": "maritime-dark"},
        {"waypoints": [...], "style": "satellite"},
        {"waypoints": [...], "style": "geopolitics"},
    ],
    shared_options={
        "duration": 15,
        "resolution": "4k"
    },
    webhook_url="https://your-server.com/batch"
)

# Wait for all jobs
results = batch.wait()
for result in results:
    if result.status == "complete":
        print(result.video.url)
    else:
        print(f"Failed: {result.error}")

Node.js

const batch = await client.renderBatch({
  jobs: [
    { waypoints: [...], style: 'maritime-dark' },
    { waypoints: [...], style: 'satellite' },
    { waypoints: [...], style: 'geopolitics' },
  ],
  sharedOptions: {
    duration: 15,
    resolution: '4k',
  },
  webhookUrl: 'https://your-server.com/batch',
});

// Wait for all jobs
const results = await batch.wait();
for (const result of results) {
  if (result.status === 'complete') {
    console.log(result.video.url);
  } else {
    console.log(`Failed: ${result.error}`);
  }
}

Use Cases

Tip: Batch rendering counts against your monthly quota. A batch of 10 jobs uses 10 of your monthly renders.