Generate River Guide
Step-by-step guide to generating rivers with the Rivegen API.
Prerequisites
- Authenticated API access (see Quickstart)
- A project or workspace configured
Step 1: Choose Parameters
Select generation parameters based on your requirements:
{
"parameters": {
"length": 1000, // River length in meters
"width": 50, // Average width in meters
"depth": 10, // Average depth in meters
"flow_rate": 100, // Flow rate (m3/s)
"terrain_type": "mountain", // Options: "mountain", "plains", "coastal"
"season": "spring", // Options: "spring", "summer", "fall", "winter"
"generation_method": "ai"
}
}
Step 2: Start Generation
const response = await fetch("https://api.rivegen.com/api/rivers/generate", {
method: "POST",
headers: {
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
project_id: "project_123",
parameters: {
length: 1000,
width: 50,
depth: 10,
flow_rate: 100,
terrain_type: "mountain"
}
})
});
const { river_id, status, estimated_completion } = await response.json();
Step 3: Monitor Progress
Option A: Polling
async function pollStatus(riverId) {
while (true) {
const response = await fetch(
`https://api.rivegen.com/api/rivers/${riverId}/status`,
{ headers: { Authorization: `Bearer ${TOKEN}` } }
);
const data = await response.json();
console.log(`Progress: ${data.progress}%`);
if (data.status === "completed" || data.status === "failed") {
break;
}
await new Promise(resolve => setTimeout(resolve, 5000)); // Poll every 5s
}
}
Option B: WebSocket (Recommended)
const ws = new WebSocket(
`wss://api.rivegen.com/ws/rivers/${river_id}/progress?token=${TOKEN}`
);
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log(`Progress: ${data.progress}%`);
if (data.status === "completed") {
// Get final results
fetchRiverData(river_id);
}
};
Step 4: Retrieve Results
Once status is "completed":
const response = await fetch(
`https://api.rivegen.com/api/rivers/${river_id}`,
{ headers: { Authorization: `Bearer ${TOKEN}` } }
);
const riverData = await response.json();
console.log("River data:", riverData.generated_data);
Step 5: Get Visualization
const vizResponse = await fetch(
`https://api.rivegen.com/api/rivers/${river_id}/visualization?format=geojson`,
{ headers: { Authorization: `Bearer ${TOKEN}` } }
);
const visualization = await vizResponse.json();
// Use visualization.data for mapping/rendering
Handling Errors
Generation Failed
if (riverData.status === "failed") {
console.error("Generation failed:", riverData.error);
// Optionally regenerate with different parameters
}
Retry Logic
async function generateWithRetry(params, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
const result = await startGeneration(params);
return result;
} catch (error) {
if (i === maxRetries - 1) throw error;
await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
}
}
}
Best Practices
- Use WebSocket for real-time updates instead of polling
- Store river_id immediately after starting generation
- Handle failures gracefully with retry logic
- Monitor rate limits when polling frequently
- Cache visualization data to reduce API calls
See Also
- User Management API - API Reference