Kampanya oluştur
POST https://app.apsilo.com/api/public/v1/campaignsŞablonla toplu gönderim oluşturur; scheduledAt boşsa hemen başlar. Hemen gönderimde tahmini maliyet bakiyeyi aşıyorsa kayıt oluşturulmaz (402 INSUFFICIENT_BALANCE, details.estimate); planlı kampanyada bakiye başlangıçta denetlenir (insufficient_balance durumu). Lisans, kanal hesabı ve alıcı uygunluğu kuralları uygulama arayüzüyle aynıdır. Yanıtta kampanya detayı ve estimate döner.
Gerekli kapsam: campaigns:write
Parametreler
| Parametre | Yer | Tip | Gereklilik | Açıklama |
|---|---|---|---|---|
Idempotency-Key | başlık | string | isteğe bağlı | İsteğe özgü benzersiz değer (1–255 yazdırılabilir ASCII; ör. UUID). Aynı anahtar + aynı yol ve gövde 24 saat içinde kaydedilmiş yanıtı döner (Idempotent-Replayed: true); farklı gövde veya işlenmekte olan istek 409 IDEMPOTENCY_CONFLICT. Hata yanıtları saklanmaz. |
X-Request-Id | başlık | string | isteğe bağlı | İsteğe bağlı istek kimliğiniz (8–100 karakter: harf, rakam, ._:-); yanıtta aynen döner ve kayıtlara işlenir. |
İstek gövdesi
| Alan | Tip | Gereklilik | Açıklama |
|---|---|---|---|
name | string | zorunlu | |
templateId | string (uuid) | zorunlu | Onaylı şablon (kanal şablondan belirlenir) |
channelAccountId | string (uuid) | isteğe bağlı | Gönderici hesap (e-postada birden fazla hesap varsa) |
audience | object | zorunlu | Hedef kitle: contacts (kişi kimlikleri), segment, tags (etiket adları; bulunamayan etiket 422), all, filter (uygulamadaki filtre grubu) |
askValues | object | isteğe bağlı | Şablonun “gönderimde sor” slotlarının değerleri (slot → değer; GET /templates/{id} → askOnSend) Varsayılan: {}. |
headerMediaId | string (uuid) | null | isteğe bağlı | Medyalı başlıkta kullanılacak medya |
scheduledAt | string (date-time) | null | isteğe bağlı | Planlanan başlangıç; boş/null = hemen |
{
"name": "Ekim indirimi — VIP",
"templateId": "0b9e4c1a-6f2d-4a7b-9c3e-000000000080",
"audience": {
"type": "tags",
"tags": [
"VIP"
],
"match": "any"
},
"askValues": {
"body.1": "%20",
"button.0.code": "EKIM20"
},
"headerMediaId": "0b9e4c1a-6f2d-4a7b-9c3e-000000000042",
"scheduledAt": "2026-10-01T07:00:00Z"
}Yanıtlar
| Durum | Açıklama |
|---|---|
201 | Kampanya oluşturuldu |
401 | Kimlik doğrulanamadı. Olası kodlar: API_KEY_INVALID, API_KEY_REVOKED, API_KEY_EXPIRED. |
402 | Bakiye yetersiz. Olası kodlar: INSUFFICIENT_BALANCE. |
403 | Erişim reddedildi. Olası kodlar: FEATURE_NOT_LICENSED, API_SCOPE_MISSING, IP_NOT_ALLOWED, LICENSE_EXPIRED, LICENSE_NOT_FOUND, FORBIDDEN. |
409 | Çakışma. Olası kodlar: CONFLICT, IDEMPOTENCY_CONFLICT, MEDIA_IN_USE, SOCIAL_APPROVAL_REQUIRED, SOCIAL_POST_NOT_EDITABLE. |
422 | İşlenemeyen istek. Olası kodlar: VALIDATION_FAILED, MESSAGING_WINDOW_CLOSED, CHANNEL_ACCOUNT_MISSING, CONTACT_BLOCKED, STORAGE_LIMIT_REACHED, SOCIAL_POST_INVALID, SOCIAL_PLATFORM_UNAVAILABLE. |
429 | Hız sınırı aşıldı. Olası kodlar: RATE_LIMITED. |
500 | Sunucu hatası. Olası kodlar: INTERNAL. |
Yanıt gövdesi
| Alan | Tip | Gereklilik | Açıklama |
|---|---|---|---|
data | CampaignCreated | zorunlu |