# ExternalService v3.2.3 - Table of Contents > Elixir library for safely using any external service or API using automatic retry, circuit breakers, rate limiting, and a concurrency limit. 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) - [Concurrency Limiting](concurrency.md) - [Tuning](tuning.md) - [Error Handling](error-handling.md) - [Using Errata in Your Application](errata.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) - [Migrating to 3.0](migrating-to-3-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.Concurrency](ExternalService.Concurrency.md): A per-service concurrency limit — the bulkhead pattern. - [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.Insights](ExternalService.Insights.md): Watches a service's telemetry and reports when its configuration is not doing what it was meant to do. - [ExternalService.Insights.Report](ExternalService.Insights.Report.md): What `ExternalService.Insights` has observed for one service. - [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. - [ExternalService.Simulation](ExternalService.Simulation.md): The result of `ExternalService.simulate/3`. - [ExternalService.Test](ExternalService.Test.md): ExUnit helpers for the setup and assertions the [Testing](testing.md) guide otherwise asks you to hand-write. - [ExternalService.Test.Coverage](ExternalService.Test.Coverage.md): Which resilience paths your test suite actually exercised. - 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`. - [ExternalService.ServiceSaturated](ExternalService.ServiceSaturated.md): Raised or returned when a call could not be made because the service's concurrency limit was already fully in use.