Перейти к содержанию

POST /v1/releases/{releaseId}/distribute

Открывает доступ к релизу для указанных групп тестирования. При необходимости отправляет уведомления участникам групп о доступности новой сборки.

Группы тестирования должны быть предварительно созданы в консоли PWS. Один релиз может быть распространён на несколько групп.


Request

Path-параметры
releaseId string required
Идентификатор релиза.
Body application/json
access string
Тип доступа к релизу:
  • private — доступ получают только выбранные группы тестирования. Можно настроить email-рассылку участникам групп.
  • public — релиз доступен по прямой ссылке. Группы и уведомления не применяются.
groupIds array[string]
Идентификаторы групп тестировщиков. Применяется только для access: private. Если не указаны — доступ получают все тестировщики проекта.
sendNotification boolean
Отправить email-уведомления участникам указанных групп. Применяется только для access: private. По умолчанию: false
notificationChannels array[string]
Каналы уведомлений. Применяется только для access: private. Сейчас поддерживается только ["email"]
resendNotification boolean
Отправить повторно уже уведомлённым.
Response 200 OK · application/json
status string
Статус операции: success
message string
Сообщение о результате

Примеры запроса

curl -X POST "https://<DOMAIN>/v1/releases/{releaseId}/distribute" \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "access": "private",
    "groupIds": ["group-uuid-1", "group-uuid-2"],
    "sendNotification": true,
    "notificationChannels": ["email"]
  }'
import requests

release_id = "release-uuid-2"
url = f"https://<DOMAIN>/v1/releases/{release_id}/distribute"
headers = {
    "Authorization": "Bearer <API_KEY>",
    "Content-Type": "application/json"
}
data = {
    "access": "private",
    "groupIds": ["group-uuid-1", "group-uuid-2"],
    "sendNotification": True,
    "notificationChannels": ["email"]
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
const releaseId = 'release-uuid-2';

fetch(`https://<DOMAIN>/v1/releases/${releaseId}/distribute`, {
    method: 'POST',
    headers: {
        'Authorization': 'Bearer <API_KEY>',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        access: 'private',
        groupIds: ['group-uuid-1', 'group-uuid-2'],
        sendNotification: true,
        notificationChannels: ['email']
    })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

var releaseId = "release-uuid-2";
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, $"https://<DOMAIN>/v1/releases/{releaseId}/distribute");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "<API_KEY>");

var data = new {
    access = "private",
    groupIds = new[] { "group-uuid-1", "group-uuid-2" },
    sendNotification = true,
    notificationChannels = new[] { "email" }
};
request.Content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json");

var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();

var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    releaseId := "release-uuid-2"
    data := map[string]interface{}{
        "access":               "private",
        "groupIds":             []string{"group-uuid-1", "group-uuid-2"},
        "sendNotification":     true,
        "notificationChannels": []string{"email"},
    }
    jsonData, _ := json.Marshal(data)

    req, _ := http.NewRequest("POST", "https://<DOMAIN>/v1/releases/"+releaseId+"/distribute", bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "Bearer <API_KEY>")
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    res, err := client.Do(req)
    if err != nil { /* ... обработка ошибки ... */ }
    defer res.Body.Close()

    body, _ := io.ReadAll(res.Body)
    fmt.Println(string(body))
}
import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;

String releaseId = "release-uuid-2";
OkHttpClient client = new OkHttpClient();

JSONObject data = new JSONObject();
data.put("access", "private");
data.put("groupIds", new JSONArray().put("group-uuid-1").put("group-uuid-2"));
data.put("sendNotification", true);
data.put("notificationChannels", new JSONArray().put("email"));

RequestBody body = RequestBody.create(
    data.toString(), MediaType.parse("application/json"));

Request request = new Request.Builder()
    .url("https://<DOMAIN>/v1/releases/" + releaseId + "/distribute")
    .post(body)
    .addHeader("Authorization", "Bearer <API_KEY>")
    .build();

try (Response response = client.newCall(request).execute()) {
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

    System.out.println(response.body().string());
}

Пример ответа

{
  "status": "success",
  "message": "Test groups successfully added to the release. Notifications sent via email."
}

Ошибки

Код Описание
204 Все группы уже были добавлены ранее, изменений не было
400 Ошибка валидации входных данных
401 Неавторизованный запрос
403 Недостаточно прав
404 Релиз не найден
500 Внутренняя ошибка сервера

См. также