Skip to main content

Documentation Index

Fetch the complete documentation index at: https://yieldxyz.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Beyond rate limits, there are additional usage constraints to be aware of when integrating with Yield.xyz.

Request Limits

ConstraintValue
Max request body size1 MB
Max URL length8 KB
Max addresses per balance request100
Max yield IDs per request100

Response Limits

ConstraintValue
Max yields per page100
Max validators per page1,000
Max transactions per action10

Timeout Limits

OperationTimeout
API request30 seconds
Webhook delivery15 seconds
Transaction construction30 seconds

Concurrent Connections

PlanMax Connections
Standard100
Pro500
EnterpriseCustom

OAV Deployment Limits

PlanOAV Deployments Included
Standard10
Pro25
EnterpriseUnlimited
Need additional OAV deployments beyond your plan’s allocation? Additional deployments are qualified based on your expected TVL and volume. Contact our team to discuss your requirements.

Request Additional OAVs

Contact us to discuss additional OAV deployments

Data Retention

Data TypeRetention
Transaction historyIndefinite
Action logs90 days
Webhook delivery logs30 days
Balance snapshotsPer configuration

Geoblocking Constraints

Certain jurisdictions are restricted by default or optionally. See Geoblocking for details.

Best Practices

Use offset and limit parameters to paginate through large result sets:
async function getAllYields() {
  const yields = [];
  let offset = 0;
  const limit = 100;
  
  while (true) {
    const response = await fetch(
      `https://api.yield.xyz/v1/yields?offset=${offset}&limit=${limit}`
    );
    const data = await response.json();
    yields.push(...data.items);
    
    if (data.items.length < limit) break;
    offset += limit;
  }
  
  return yields;
}
Use the aggregate balance endpoint instead of individual calls:
// Instead of:
for (const address of addresses) {
  await fetch(`/yields/${yieldId}/balances?address=${address}`);
}

// Use:
await fetch('/yields/balances', {
  method: 'POST',
  body: JSON.stringify({
    addresses: addresses.slice(0, 100), // Max 100 per request
    yieldIds: [yieldId],
  }),
});
Implement timeout handling for long-running requests:
async function fetchWithTimeout(url: string, timeoutMs = 30000) {
  const controller = new AbortController();
  const timeout = setTimeout(() => controller.abort(), timeoutMs);
  
  try {
    const response = await fetch(url, { signal: controller.signal });
    return response;
  } catch (error) {
    if (error.name === 'AbortError') {
      throw new Error('Request timed out');
    }
    throw error;
  } finally {
    clearTimeout(timeout);
  }
}

Upgrade for Higher Limits

Upgrade to Pro

Higher connection limits and more OAV deployments

Enterprise Inquiry

Custom limits and dedicated infrastructure

Next Steps

Rate Limits

API rate limit details

Plans & Pricing

Compare all plan features