Skip to main content
LinkXG applies rate limits to protect the platform and ensure fair usage. This guide explains how limits work and how to handle them in your integration.

Types of limits

LinkXG enforces three types of limits:
TypeDescriptionExample
Rate limitsRequests per time window1,000 API requests per day
Resource limitsMaximum counts of objects1,000 active products
Capability limitsFeature availabilityBulk upload enabled/disabled
Limits vary by subscription tier. Higher tiers have higher limits.

Rate limits by tier

API requests

TierRequests per dayRequests per minute
Supplier FreeNot available
Supplier Plus10,000100
Core50,000500
Enterprise200,0002,000

Authentication endpoints

Authentication endpoints have separate, stricter limits to prevent abuse:
EndpointLimit
/auth/login10 requests per minute per IP
/auth/refresh30 requests per minute per token
/oauth/token60 requests per minute per client

Resource limits by tier

ResourceSupplier FreeSupplier PlusCoreEnterprise
Active products1,0005,000UnlimitedUnlimited
Connections315UnlimitedUnlimited
Users31025Unlimited
Products under traceability10,000Unlimited
Bulk upload rows/month10,000100,000Unlimited

Checking your usage

Via API

curl https://api.linkxg.com/api/v1/entitlements/usage \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response:
{
  "success": true,
  "data": {
    "tier": {
      "code": "CORE",
      "name": "LinkXG Core"
    },
    "limits": {
      "MAX_ACTIVE_PRODUCTS": {
        "current": 847,
        "limit": null,
        "unlimited": true
      },
      "MAX_CONNECTIONS": {
        "current": 12,
        "limit": null,
        "unlimited": true
      }
    },
    "rateLimits": {
      "API_REQUESTS_DAY": {
        "current": 4521,
        "limit": 50000,
        "resetsAt": "2026-01-22T00:00:00.000Z"
      }
    },
    "warnings": []
  }
}

Via application

Go to Account > Usage to see your current usage and limits in the application.

Rate limit headers

API responses include headers showing your rate limit status:
HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets
Example headers:
X-RateLimit-Limit: 50000
X-RateLimit-Remaining: 45479
X-RateLimit-Reset: 1737504000

Handling rate limits

When you exceed a rate limit, the API returns a 429 Too Many Requests response:
{
  "error": "RATE_LIMIT_EXCEEDED",
  "message": "API request limit exceeded",
  "retryAfter": 3600
}
The Retry-After header indicates how many seconds to wait before retrying.

Best practices

Implement exponential backoff. When you receive a 429, wait before retrying. Double the wait time on each subsequent 429.
async function requestWithBackoff(url, options, maxRetries = 5) {
  let delay = 1000;
  
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);
    
    if (response.status !== 429) {
      return response;
    }
    
    const retryAfter = response.headers.get('Retry-After');
    const waitTime = retryAfter ? parseInt(retryAfter) * 1000 : delay;
    
    await new Promise(resolve => setTimeout(resolve, waitTime));
    delay *= 2;
  }
  
  throw new Error('Max retries exceeded');
}
Cache responses where appropriate. If data does not change frequently, cache it locally rather than requesting it repeatedly. Use pagination efficiently. Request only the data you need. Use smaller page sizes for exploratory queries. Batch requests where possible. Some endpoints accept batch operations that count as a single request.

Checking permissions before acting

Before attempting an action, you can check whether your current tier allows it:
curl -X POST https://api.linkxg.com/api/v1/entitlements/can \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "BULK_UPLOAD",
    "resourceCount": 5000
  }'
Response:
{
  "success": true,
  "data": {
    "allowed": true,
    "reason": null
  }
}
If the action is not allowed:
{
  "success": true,
  "data": {
    "allowed": false,
    "reason": "LIMIT_EXCEEDED",
    "details": {
      "limit": "BULK_UPLOAD_ROWS_MONTH",
      "current": 9500,
      "requested": 5000,
      "available": 500
    }
  }
}

Upgrading your limits

If you consistently hit limits, consider upgrading your subscription tier. Go to Account > Subscription or contact sales for enterprise options. For temporary increases (e.g., a large data migration), contact support to discuss a temporary override.

Next steps