# ExternalService v2.5.0 - Table of Contents

> Elixir library for safely using any external service or API using automatic retry with rate limiting and circuit breakers. Calls to external services can be synchronous, asynchronous background tasks, or multiple calls can be made in parallel for MapReduce style processing.

## Pages

- [Overview](readme.md)
- [Changelog](changelog.md)
- [License](license.md)

- Guides
  - [Getting Started](getting-started.md)
  - [The Module Front Door](the-front-door.md)
  - [Circuit Breakers](circuit-breakers.md)
  - [Retries](retries.md)
  - [Rate Limiting](rate-limiting.md)
  - [Error Handling](error-handling.md)
  - [Telemetry](telemetry.md)
  - [Testing](testing.md)
  - [Distributed Elixir](distributed.md)
  - [Flow Pipelines](flow.md)

- Reference
  - [ExternalService Cheatsheet](cheatsheet.md)
  - [Migrating to 2.0](migrating-to-2-0.md)
  - [About ExternalService](about.md)

## Modules

- [ExternalService](ExternalService.md): ExternalService handles all retry and circuit breaker logic for calls to external services.
- [ExternalService.CircuitBreaker](ExternalService.CircuitBreaker.md): The behaviour implemented by circuit breaker backends.
- [ExternalService.CircuitBreaker.Cluster](ExternalService.CircuitBreaker.Cluster.md): A circuit breaker that trips the whole cluster when any one node trips.
- [ExternalService.CircuitBreaker.Fuse](ExternalService.CircuitBreaker.Fuse.md): The default circuit breaker backend, built on the
[`:fuse`](https://github.com/jlouis/fuse) library.
- [ExternalService.Decorator](ExternalService.Decorator.md): Decorator-based annotations for marking functions as external-service calls.
- [ExternalService.Flow](ExternalService.Flow.md): [`Flow`](https://hexdocs.pm/flow)-based parallel processing of an enumerable
(or another `Flow`) through guarded `ExternalService` calls.
- [ExternalService.Gateway](ExternalService.Gateway.md): Deprecated. Use `use ExternalService` instead.
- [ExternalService.RateLimiter](ExternalService.RateLimiter.md): The behaviour implemented by rate limiter backends.
- [ExternalService.RateLimiter.Hammer](ExternalService.RateLimiter.Hammer.md): Rate limiter backend backed by a [Hammer](https://hexdocs.pm/hammer) rate
limiter module.
- [ExternalService.RateLimiter.Local](ExternalService.RateLimiter.Local.md): The default rate limiter backend: a node-local token bucket.
- [ExternalService.RetryOptions](ExternalService.RetryOptions.md): Options that control retry logic for calls to external services.

- Exceptions
  - [ExternalService.CircuitBreakerOpen](ExternalService.CircuitBreakerOpen.md): Raised or returned when a call is rejected because the service's circuit breaker
is open (the fuse is blown).
  - [ExternalService.RateLimited](ExternalService.RateLimited.md): Raised or returned when a call could not be made within the service's
configured rate limit `:wait` budget.
  - [ExternalService.RetriesExhausted](ExternalService.RetriesExhausted.md): Raised or returned when the allowable number of retries (or the retry time
budget) is exceeded while calling an external service.
  - [ExternalService.ServiceNotStarted](ExternalService.ServiceNotStarted.md): Raised or returned when a call is made to a service that has not been started
with `ExternalService.start/2`.

