429 Error when requesting GraphQL Railway API
Anonymous
FREEOP

a month ago

Hey there!

Project ID: ab64c839-94af-4076-ba53-5e86a426da4f

Service ID: 53d0942d-2947-4383-a351-4dd8f092d638

EnvId: e0157591-bcd4-4cd7-8a53-d623afde864b

Railway Env: tutan

Got an issue when requesting a RailwayAPI, for some reason it start rate limiting all requests.

The actual error message we received:

Railway API request failed {"data":{"cloudflare_error":true,"detail":"You are being rate-limited by the website owner's configuration.","error_category":"rate_limit","error_code":1015,"error_name":"rate_limited","footer":"This error was generated by Cloudflare on behalf of the website owner.","instance":"9f2527e1bb0ab151","owner_action_required":false,"ray_id":"9f2527e1bb0ab151","retry_after":30,"retryable":true,"status":429,"timestamp":"2026-04-26T11:13:01Z","title":"Error 1015: You are being rate limited","type":"https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1015/%22,%22what_you_should_do%22:%22**Wait and retry.** This block is transient. Wait at least 30 seconds, then retry with exponential backoff.\n\nRecommended approach:\n1. Wait 30 seconds before your next request\n2. If rate-limited again, double the wait time (60s, 120s, etc.)\n3. If rate-limiting persists after 5 retries, stop and reassess your request pattern","zone":"backboard.railway.com"},"environment":"true","rateLimit":{"retryAfter":"38289"},"service":"elx-api","status":429,"statusText":"Too Many Requests","timestamp":"2026-04-26 11:13:01.724"}

Also here the logs related to that issue are attached

Attachments

8 Replies


a month ago

When you call the API, do you append a query string? If not, then you would be subject to lower rate limits.


Anonymous
FREEOP

a month ago

Yep, if i understood you right. Currently we have this query:

    const query = `
        query GetDomains($environmentId: String!, $serviceId: String!, $projectId: String!) {
            domains(environmentId: $environmentId, serviceId: $serviceId, projectId: $projectId) {
                customDomains {
                    id
                    domain
                    cnameCheck {
                        link
                        message
                        status
                    }
                    status {
                        dnsRecords {
                            currentValue
                            fqdn
                            hostlabel
                            purpose
                            recordType
                            requiredValue
                            status
                            zone
                        }
                        certificateStatus
                        certificateStatusDetailed
                        certificateErrorMessage
                        certificateErrorType
                        verified
                        verificationDnsHost
                        verificationToken
                        certificates {
                            issuedAt
                            expiresAt
                            domainNames
                            keyType
                        }
                    }
                }
                serviceDomains {
                    id
                    domain
                    suffix
                }
            }
        }
    `;

a month ago

Hmm, I don't think you've understood me.

When I say query string, I am talking about the thing in the URL.


Anonymous
FREEOP

a month ago

Yea, actually it's append into the url


Anonymous
FREEOP

a month ago

Here the message we get now:

[getCustomDomains] Failed to fetch domains, trying stale fallback {"environment":"true","error":"Railway API rate limited. Retry after: 31028s","service":"elx-api","stack":"Error: Railway API rate limited. Retry after: 31028s\n at executeGraphQL (/usr/src/app/modules/admin/services/railway.js:37:9)\n at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async getCustomDomains (/usr/src/app/modules/admin/services/railway.js:182:16)\n at async Object.getActiveDomain (/usr/src/app/modules/admin/services/railway.js:617:19)\n at async Object.getActiveDomain (/usr/src/app/modules/admin/services/domain.js:464:19)\n at async getActiveDomain (/usr/src/app/modules/admin/controllers/domain.js:65:24)","timestamp":"2026-04-26 13:43:28.892"}


a month ago

Then you just need to space out your requests.


a month ago

But please tell me you aren't using our domains feature to pass on to your customers?


Welcome!

Sign in to your Railway account to join the conversation.

Loading...