> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.brevo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.brevo.com/_mcp/server.

# Get an SMS campaign

GET https://api.brevo.com/v3/smsCampaigns/{campaignId}

Retrieve detailed information about a specific SMS campaign by its ID, including campaign content, sender, recipients with list names, statistics (delivered, sent, bounces, unsubscriptions, answered), and tags. Unlike the list endpoint, recipients are returned as objects with id and name fields rather than plain IDs.

Reference: https://developers.brevo.com/reference/get-sms-campaign

## Authentication

- `api-key` header (required) — The API key should be passed in the request headers as `api-key` for authentication.

## Request

### Path parameters

- `campaignId` (long, required) — id of the SMS campaign

## Response

### 200

SMS campaign information

- `content` (string, required) — Content of the SMS Campaign
- `createdAt` (string, required) — Creation UTC date-time of the SMS campaign (YYYY-MM-DDTHH:mm:ss.SSSZ)
- `id` (long, required) — ID of the SMS Campaign
- `modifiedAt` (string, required) — UTC date-time of last modification of the SMS campaign (YYYY-MM-DDTHH:mm:ss.SSSZ)
- `name` (string, required) — Name of the SMS Campaign
- `sender` (string, required) — Sender of the SMS Campaign
- `status` (enum, required) — Status of the SMS Campaign
  - Allowed values: `draft`, `sent`, `archive`, `queued`, `suspended`, `inProcess`
- `recipients` (object, required) — Recipients of the SMS campaign. For a single campaign, lists and exclusion lists are returned as objects with id and name.
  - `exclusionLists` (list of object, optional)
    - `id` (long, optional) — ID of the exclusion list
    - `name` (string, optional) — Name of the exclusion list
  - `lists` (list of object, optional)
    - `id` (long, optional) — ID of the list
    - `name` (string, optional) — Name of the list
- `statistics` (object, required)
  - `answered` (long, required) — Number of replies to the SMS
  - `delivered` (long, required) — Number of delivered SMS
  - `hardBounces` (long, required) — Number of hardbounced SMS
  - `processing` (long, required) — Number of processing SMS
  - `sent` (long, required) — Number of sent SMS
  - `softBounces` (long, required) — Number of softbounced SMS
  - `unsubscriptions` (long, required) — Number of unsubscription SMS
- `organisationPrefix` (string, optional) — A recognizable prefix added as the Brand Name before the message content. Empty string if not set.
- `scheduledAt` (string, optional) — UTC date-time on which SMS campaign is scheduled. Should be in YYYY-MM-DDTHH:mm:ss.SSSZ format. Empty string if not scheduled.
- `sentDate` (string, optional) — UTC date-time on which the SMS campaign was sent (YYYY-MM-DDTHH:mm:ss.SSSZ). Only available if the campaign status is 'sent'.
- `unsubscribeInstruction` (string, optional) — Instructions to unsubscribe from future communications. Empty string if not set.
- `tags` (list of string, optional) — Tags (labels) associated with the SMS campaign. Only available when retrieving a single campaign.

## Errors

### 400 Bad Request Error

bad request

- `code` (enum, required) — Error code displayed in case of a failure
  - Allowed values: `invalid_parameter`, `missing_parameter`, `out_of_range`, `campaign_processing`, `campaign_sent`, `document_not_found`, `not_enough_credits`, `permission_denied`, `duplicate_parameter`, `duplicate_request`, `method_not_allowed`, `unauthorized`, `account_under_validation`, `not_acceptable`, `bad_request`, `unprocessable_entity`, `Domain does not exist`, `Contact email not found`, `Attribute not found`, `Category id not found`, `Invalid parameters passed`, `Record(s) for identifier not found`, `Returned when query params are invalid`, `Returned when invalid data posted`, `Feed not found`, `Campaign ID not found`, `api-key not found`, `DMARC policy requires domain authentication`, `DNS records not properly configured`, `Invalid OTP code provided`, `OTP code has expired`, `Domain already exists in your account`, `The sum of all IP weights must equal 100`, `Authentication failed`, `Insufficient credits`, `Request already processed`
- `message` (string, required) — Readable message associated to the failure

### 404 Not Found Error

bad request

- `code` (enum, required) — Error code displayed in case of a failure
  - Allowed values: `invalid_parameter`, `missing_parameter`, `out_of_range`, `campaign_processing`, `campaign_sent`, `document_not_found`, `not_enough_credits`, `permission_denied`, `duplicate_parameter`, `duplicate_request`, `method_not_allowed`, `unauthorized`, `account_under_validation`, `not_acceptable`, `bad_request`, `unprocessable_entity`, `Domain does not exist`, `Contact email not found`, `Attribute not found`, `Category id not found`, `Invalid parameters passed`, `Record(s) for identifier not found`, `Returned when query params are invalid`, `Returned when invalid data posted`, `Feed not found`, `Campaign ID not found`, `api-key not found`, `DMARC policy requires domain authentication`, `DNS records not properly configured`, `Invalid OTP code provided`, `OTP code has expired`, `Domain already exists in your account`, `The sum of all IP weights must equal 100`, `Authentication failed`, `Insufficient credits`, `Request already processed`
- `message` (string, required) — Readable message associated to the failure

## Examples

**Response**

```json
{
  "content": "Visit our Store and get some discount !",
  "createdAt": "2017-06-01T12:30:00Z",
  "id": 2,
  "modifiedAt": "2017-05-01T12:30:00Z",
  "name": "PROMO CODE",
  "sender": "MyCompany",
  "status": "sent",
  "recipients": {
    "exclusionLists": [
      {
        "id": 13,
        "name": "Exclusion List"
      }
    ],
    "lists": [
      {
        "id": 21,
        "name": "Main List"
      }
    ]
  },
  "statistics": {
    "answered": 2,
    "delivered": 2987,
    "hardBounces": 1,
    "processing": 0,
    "sent": 3000,
    "softBounces": 3,
    "unsubscriptions": 3
  },
  "organisationPrefix": "MyCompany",
  "scheduledAt": "2017-06-01T12:30:00Z",
  "sentDate": "2017-06-01T12:30:00Z",
  "unsubscribeInstruction": "send Stop if you want to unsubscribe.",
  "tags": []
}
```

**SDK Code**

```typescript response
import { BrevoClient } from "@getbrevo/brevo";

async function main() {
    const client = new BrevoClient({
        apiKey: "YOUR_API_KEY_HERE",
    });
    await client.smsCampaigns.getSmsCampaign({
        campaignId: 1,
    });
}
main();

```

```python response
from brevo import Brevo

client = Brevo(
    api_key="YOUR_API_KEY_HERE",
)

client.sms_campaigns.get_sms_campaign(
    campaign_id=1,
)

```

```php response
<?php

namespace Example;

use Brevo\Brevo;

$client = new Brevo(
    apiKey: 'YOUR_API_KEY_HERE',
);
$client->smsCampaigns->getSmsCampaign(
    1,
);

```

```go response
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.brevo.com/v3/smsCampaigns/1"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby response
require 'uri'
require 'net/http'

url = URI("https://api.brevo.com/v3/smsCampaigns/1")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.brevo.com/v3/smsCampaigns/1")
  .header("api-key", "<apiKey>")
  .asString();
```

```csharp response
using RestSharp;

var client = new RestClient("https://api.brevo.com/v3/smsCampaigns/1");
var request = new RestRequest(Method.GET);
request.AddHeader("api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift response
import Foundation

let headers = ["api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/smsCampaigns/1")! 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()
```