> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://developers.brevo.com/docs/quickstart/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.brevo.com/_mcp/server. # Quickstart ### Get your API key Generate an API key from your Brevo account. You'll need it to authenticate every request — copy it immediately, it's only shown once. Open API key settings → In the **API keys** tab, click **Generate a new API key**, name it, and save it somewhere secure. > **Tip** > > Building a server-to-server integration? You can authenticate with OAuth 2.0 machine-to-machine (M2M) instead of a static API key — scoped, short-lived tokens you request with a `client_id` and `client_secret`. This quickstart uses an API key for the interactive playground. See [Machine-to-machine (M2M)](/docs/oauth-m2m-authentication) to set up M2M. ### Whitelist your IP address The playground runs from your browser, so Brevo needs to recognize your current IP before processing requests from it. Your current IP address is: Add it to the **Authorized IPs** list in your Brevo security settings. Open IP security settings → > **Tip** > > Prefer to skip this step? Send your first request anyway. If your IP isn't whitelisted, Brevo sends a security email with a one-click authorization link — then come back and retry. > > Not required when calling the API from a server or CLI. ### Send your first request Enter your API key in the `api-key` header in the panel on the right, then click **Send request**. A `200` response with your account details confirms your key is valid — you're ready to build. ### Request GET [https://api.brevo.com/v3/account](https://api.brevo.com/v3/account) **`response`** ```curl response curl https://api.brevo.com/v3/account \ -H "api-key: " ``` **`response`** ```typescript response import { BrevoClient } from "@getbrevo/brevo"; async function main() { const client = new BrevoClient({ apiKey: "YOUR_API_KEY_HERE", }); await client.account.getAccount(); } main(); ``` **`response`** ```python response from brevo import Brevo client = Brevo( api_key="YOUR_API_KEY_HERE", ) client.account.get_account() ``` **`response`** ```php response account->getAccount(); ``` **`response`** ```go response package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.brevo.com/v3/account" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("api-key", "") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` **`response`** ```ruby response require 'uri' require 'net/http' url = URI("https://api.brevo.com/v3/account") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["api-key"] = '' response = http.request(request) puts response.read_body ``` **`response`** ```java response import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.brevo.com/v3/account") .header("api-key", "") .asString(); ``` **`response`** ```csharp response using RestSharp; var client = new RestClient("https://api.brevo.com/v3/account"); var request = new RestRequest(Method.GET); request.AddHeader("api-key", ""); IRestResponse response = client.Execute(request); ``` **`response`** ```swift response import Foundation let headers = ["api-key": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/account")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` ### Request GET [https://api.brevo.com/v3/account](https://api.brevo.com/v3/account) **`response`** ```curl response curl https://api.brevo.com/v3/account \ -H "api-key: " ``` **`response`** ```typescript response import { BrevoClient } from "@getbrevo/brevo"; async function main() { const client = new BrevoClient({ apiKey: "YOUR_API_KEY_HERE", }); await client.account.getAccount(); } main(); ``` **`response`** ```python response from brevo import Brevo client = Brevo( api_key="YOUR_API_KEY_HERE", ) client.account.get_account() ``` **`response`** ```php response account->getAccount(); ``` **`response`** ```go response package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.brevo.com/v3/account" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("api-key", "") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` **`response`** ```ruby response require 'uri' require 'net/http' url = URI("https://api.brevo.com/v3/account") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["api-key"] = '' response = http.request(request) puts response.read_body ``` **`response`** ```java response import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.brevo.com/v3/account") .header("api-key", "") .asString(); ``` **`response`** ```csharp response using RestSharp; var client = new RestClient("https://api.brevo.com/v3/account"); var request = new RestRequest(Method.GET); request.AddHeader("api-key", ""); IRestResponse response = client.Execute(request); ``` **`response`** ```swift response import Foundation let headers = ["api-key": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/account")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` ## What's next Explore our guides to start building your integration: * **[Learn key Brevo API concepts](/docs/how-it-works)**: Authentication, pagination, and rate limits. * **[Authenticate with OAuth 2.0 (M2M)](/docs/oauth-m2m-authentication)**: Use scoped, short-lived tokens for server-to-server calls instead of an API key. * **[Send transactional emails](/docs/send-a-transactional-email)**: Send your first email and learn about template management. * **[Setup webhooks](/docs/how-to-use-webhooks)**: Receive real-time updates for email events. * **[Send SMS & WhatsApp](/docs/whatsapp-messages)**: Reach customers on their preferred mobile channels. ## Tools and Resources #### [Postman Workspace](/docs/postman) Explore, test, and contribute to our API collections. Fork our workspace to start with pre-configured endpoints. #### [API Rate limits](/docs/api-limits) Rate limiting policies and quotas. Learn how to optimize API calls and prevent throttling. #### [MCP Server](/docs/mcp-protocol) Integrate Brevo with AI assistants using the Model Context Protocol. Enable AI models to interact with your Brevo account through standardized endpoints. > Make your first API call in 3 steps ## Docs - [Key concepts](https://developers.brevo.com/docs/how-it-works.md): Learn how the Brevo API works - [Postman workspace](https://developers.brevo.com/docs/postman.md): Test and explore the Brevo API using our Postman collection