Skip to main content

The URL

Take the provider’s endpoint, drop its base URL, and put the rest after https://proxy.bundleup.io: Which part counts as the “base URL” depends on the provider. Some, like Slack above, include a path segment (/api) in the base. Each provider’s page on bundleup.io/integrations shows the base URL BundleUp uses. The query string is passed through unchanged.

Methods

Any HTTP method works. GET, HEAD and OPTIONS are retried on transient failures; other methods are sent once.
The SDK proxies return the provider’s response object, so check the status yourself. A provider error is not an exception.

Headers

Response headers come back from the provider unchanged, including its own rate-limit headers.

Bodies

Bodies are forwarded byte for byte. JSON, form-encoded, multipart and binary uploads all work; set Content-Type the way the provider expects. Responses are streamed back to you without being read or buffered by BundleUp, so large downloads and streamed responses work too:

GraphQL providers

For providers whose API is GraphQL, POST your query to the path the provider documents:
GraphQL requests are POSTs, so they aren’t retried automatically.

Errors

There are two kinds of error, and you can tell them apart by the body:
  • BundleUp errors happen before the provider is called. The body is BundleUp’s JSON with a code, such as connection_invalid, connection_refresh_failed or rate_limit. See the errors reference.
  • Provider errors are passed through as-is: the provider’s status code, headers and body. Handle them as the provider’s documentation describes.
Two statuses can come from either side:
  • 408 when the provider didn’t answer within 20 seconds (10 seconds on a retry).
  • 502 when BundleUp couldn’t reach the provider at all.
These have a short plain-text body (Request timed out, Error fetching proxied request) rather than JSON.

Timeouts

BundleUp waits up to 20 seconds for the provider on the first attempt and 10 seconds on each retry. For long exports, use the provider’s asynchronous or paginated endpoints where it offers them.