# ExternalService v3.1.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) - [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.