# Dostępne żądania API

**REST API Xopero ONE udostępnia kompaktowy zestaw endpointów dla środowisk DevOps (zaimplementowanych metodą POST) do uwierzytelniania użytkowników, przeglądania i zarządzania organizacjami oraz repozytoriami Git, a także automatyzacji operacji backupu, takich jak podłączanie lub odłączanie repozytoriów, inicjowanie synchronizacji oraz sprawdzanie statusu organizacji.**

***

## Lista endpointów API

Poniższa tabela przedstawia wszystkie dostępne endpointy API **Xopero ONE**, wraz z krótkim opisem oraz linkiem do ich pełnej dokumentacji.

{% hint style="warning" %}
Do autoryzacji wszystkich żądań API (z wyjątkiem logowania) należy używać tokena dostępu. Więcej informacji na temat uwierzytelniania w API można znaleźć w [tym artykule](/xopero-one-en/pl/zarzadzanie/rest-api-dla-ekosystemow-devops/przeglad-i-uwierzytelnianie.md#uwierzytelnianie).
{% endhint %}

| Metoda HTTP i ścieżka                                                              | Opis                                                                         |
| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| [`POST /account/login`](#post-account-login)                                       | Zaloguj się do **Xopero ONE Management Service** i uzyskaj token dostępu.    |
| [`POST /git/organizations/getmany`](#post-git-organizations-getmany)               | Wyświetl listę organizacji **Git** zintegrowanych z **Xopero ONE**.          |
| [`POST /plans/listassignedtoorganization`](#post-plans-listassignedtoorganization) | Wyświetl wszystkie plany backupu przypisane do wybranej organizacji **Git**. |
| [`POST /plans/attachgitrepository`](#post-plans-attachgitrepository)               | Dołącz repozytorium do planu backupu.                                        |
| [`POST plans/AttachAzureProject`](#post-plans-attachazureproject)                  | Dołącz projekt **Azure DevOps** do planu backupu.                            |
| [`POST /plans/detachgitrepository`](#post-plans-detachgitrepository)               | Usuń repozytorium z planu backupu.                                           |
| [`POST plans/DetachAzureProject`](#post-plans-detachazureproject)                  | Usuń projekt **Azure DevOps** z planu backupu.                               |
| [`POST /plans/modifygitplan`](#post-plans-modifygitplan)                           | Edytuj ustawienia istniejącego planu backupu.                                |
| [`POST plans/ModifyAzurePlanAsync`](#post-plans-modifyazureplanasync)              | Edytuj ustawienia istniejącego planu backupu **Azure DevOps**.               |
| [`POST /git/repositories/getmany`](#post-git-repositories-getmany)                 | Pobierz listę repozytoriów wybranej organizacji **Git**.                     |
| [`POST /git/repositories/activate`](#post-git-repositories-activate)               | Aktywuj licencje dla wybranych repozytoriów.                                 |
| [`POST /git/repositories/deactivate`](#post-git-repositories-deactivate)           | Dezaktywuj licencje wybranych repozytoriów.                                  |
| [`POST /git/repositories/remove`](#post-git-repositories-remove)                   | Usuń repozytorium z systemu **Xopero ONE**.                                  |
| [`POST /git/repositories/sync`](#post-git-repositories-sync)                       | Zsynchronizuj dane wybranej organizacji **Git** z systemem **Xopero ONE**.   |

***

## Konto

<details>

<summary><code>POST /account/login</code></summary>

Zaloguj się do **Xopero ONE Management Service**.

{% hint style="info" %}
To żądanie zwraca token dostępu, który jest wymagany do wszystkich kolejnych żądań API.
{% endhint %}

{% hint style="warning" %}
Token dostępu wygenerowany za pomocą żądania logowania POST jest ważny przez 30 dni.
{% endhint %}

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/account/login
```

{% endcode %}

**Parametry:**

| Klucz        | Wartość (opis)                                      | Typ danych |
| ------------ | --------------------------------------------------- | ---------- |
| `email`      | Nazwa użytkownika **Xopero ONE** (adres e-mail).    | String     |
| `password`   | Hasło konta **Xopero ONE**.                         | String     |
| `rememberMe` | Określa, czy sesja logowania ma zostać zapamiętana. | Boolean    |

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "email":"admin@company.com",
   "password":"admin123",
    "rememberMe":true
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" %}

```json
{
 "userId":"a4ac78431-30c2-4d65-bd3e-eb6416784c",     "accessToken":"yMDA1LzA1L2lka4acXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6ImZiODZiNDMxLTMwYzItNGQ2NS1iZDNlLWViNjQxzL25hbWUiOiJhjm1lbG9uQHhvcGVyby5jb20iLCJodHRwOhjvc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2a4aclbWFpbGFkZHJlc3MiOiJtLm1lbG9uQHhvcGVyby5jb20iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOlsiU3l50IiwiVXNlck1hbmFnZW1lbnQiXSwiZXhwIjoxNjU0NjkwNhj4LCJpc3MiOiJodHRa4acxob3N0OjUwMDAiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjUwMDAifQ.eHVRw1KqYi3SOqN-AJUXoEIFKxGVokhoMp910L1LkzA"
}
```

{% endcode %}

</details>

***

## Organizacja

<details>

<summary><code>POST /git/organizations/getmany</code></summary>

Pobierz listę organizacji **Git**.

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/git/organizations/getmany
```

{% endcode %}

**Parametry:**

{% hint style="warning" %}
To żądanie API wymaga teraz dodatkowych kluczy: `filters`, `thenOrderBy` oraz `thenOrderByType`. Domyślnie wszystkie z nich powinny zawierać puste wartości, jednak `filters` może być modyfikowane w zależności od potrzeb.
{% endhint %}

| Klucz       | Wartość (opis)                                            | Typ danych      |
| ----------- | --------------------------------------------------------- | --------------- |
| `limit`     | Liczba repozytoriów na stronę.                            | Integer         |
| `orderby`   | Określa pole oraz kierunek sortowania zwracanych wyników. | String          |
| `ordertype` | Określa kolejność sortowania.                             | String          |
| `page`      | Numer strony wyników.                                     | Integer         |
| `filters`   | Filtry danyc&#x68;**\***.                                 | Array\<filters> |

<sub>**\***</sub><sub>Każdy obiekt w</sub> <sub></sub><sub>`filters`</sub> <sub></sub><sub>musi zawierać wartości dla trzech właściwości:</sub> <sub></sub><sub>`operator`</sub><sub>,</sub> <sub></sub><sub>`value`</sub> <sub></sub><sub>oraz</sub> <sub></sub><sub>`property`</sub><sub>. Obsługiwane wartości dla</sub> <sub></sub><sub>`operator`</sub> <sub></sub><sub>to między innymi:</sub> <sub></sub><sub>`notin`</sub><sub>,</sub> <sub></sub><sub>`eq`</sub><sub>,</sub> <sub></sub><sub>`neq`</sub><sub>,</sub> <sub></sub><sub>`gt`</sub><sub>,</sub> <sub></sub><sub>`gte`</sub><sub>,</sub> <sub></sub><sub>`lt`</sub><sub>,</sub> <sub></sub><sub>`lte`</sub><sub>,</sub> <sub></sub><sub>`contains`</sub><sub>,</sub> <sub></sub><sub>`icontains`</sub> <sub></sub><sub>oraz</sub> <sub></sub><sub>`startswith`</sub><sub>.</sub> <sub></sub><sub>`value`</sub> <sub></sub><sub>określa wartość używaną do filtrowania w połączeniu z wybraną wartością właściwości</sub> <sub></sub><sub>`operator`</sub><sub>. Dostępne wartości dla</sub> <sub></sub><sub>`property`</sub> <sub></sub><sub>zależą od filtrowanego zasobu — w przypadku organizacji, obsługiwane są:</sub> <sub></sub><sub>`id`</sub><sub>,</sub> <sub></sub><sub>`name`</sub><sub>,</sub> <sub></sub><sub>`displayName`</sub><sub>,</sub> <sub></sub><sub>`driver`</sub><sub>,</sub> <sub></sub><sub>`defaultWorkerId`</sub><sub>,</sub> <sub></sub><sub>`autoAssignLicences`</sub><sub>,</sub> <sub></sub><sub>`syncInterval`</sub><sub>,</sub> <sub></sub><sub>`registrationDate`</sub><sub>,</sub> <sub></sub><sub>`isReadOnly`</sub><sub>,</sub> <sub></sub><sub>`protectedRepositories`</sub><sub>,</sub> <sub></sub><sub>`totalGroups`</sub> <sub></sub><sub>oraz</sub> <sub></sub><sub>`totalProjects`</sub><sub>.</sub>

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "limit": 2,
    "orderby": "Name",
    "ordertype": "asc",
    "thenOrderBy": "",
    "thenOrderByType": "",
    "Page": 2,
    "filters": []
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" expandable="true" %}

```json
{
    "currentPage": 2,
    "pageCount": 2,
    "totalEntries": 4,
    "result": [
        {
            "id": "a4ac2cd0-ed2f-4ced-be39-60c631e033ff",
            "driver": 1,
            "name": "OrgName",
            "apiUrl": null,
            "isReadOnly": false,
            "protectedRepositories": 43,
            "totalRepositories": 58,
            "missingLicences": 58,
            "removedRepositories": 15,
            "defaultWorkerId": "a4ac11eb-bbe7-406e-b3da-24fb4df5642a",
            "isCreatedByMarketplace": false,
            "synchronizationInProgress": false,
            "plans": [
                {
                    "id": "a4acff69-266e-4771-b47b-fd5e4fae6a40",
                    "name": "name1",
                    "backupType": 5,
                    "includeMetadata": true,
                    "repoCount": 1,
                    "lastStatus": {
                        "successes": 0,
                        "warnings": 0,
                        "errors": 1
                    },
                    "planFinishedTime": 1643754961233,
                    "isRunning": false
                },
                {
                    "id": "a4ac8dd-6bf4-4c6c-8bc3-7305a9cc4dad",
                    "name": "name2",
                    "backupType": 5,
                    "includeMetadata": true,
                    "repoCount": 1,
                    "lastStatus": {
                        "successes": 0,
                        "warnings": 0,
                        "errors": 1
                    },
                    "planFinishedTime": 1643754482141,
                    "isRunning": false
                },
                {
                    "id": "a4ac8001-1d3f-45ae-bb7a-49e86286ad6b",
                    "name": "name3",
                    "backupType": 5,
                    "includeMetadata": true,
                    "repoCount": 1,
                    "lastStatus": {
                        "successes": 0,
                        "warnings": 0,
                        "errors": 1
                    },
                    "planFinishedTime": 1643754482453,
                    "isRunning": false
                }
            ]
        },
        {
            "id": "a4ac6bff8-0000-0000-0000-000000000000",
            "driver": 2,
            "name": "xopero",
            "apiUrl": null,
            "isReadOnly": false,
            "protectedRepositories": 1,
            "totalRepositories": 775,
            "missingLicences": 676,
            "removedRepositories": 0,
            "defaultWorkerId": "a4ac0f30-6641-a4ac7-ac26-fd7e47abf8f3",
            "isCreatedByMarketplace": false,
            "synchronizationInProgress": false,
            "plans": [
                {
                    "id": "3a4ac5-fdd1-4a4ac1-9415-66d0fbedb0e0",
                    "name": "name1",
                    "backupType": 5,
                    "includeMetadata": true,
                    "repoCount": 1,
                    "lastStatus": {
                        "successes": 1,
                        "warnings": 0,
                        "errors": 0
                    },
                    "planFinishedTime": 1645136722019,
                    "isRunning": false
                },
                {
                    "id": "a4aca5252-2d02-a4ac-8a24-e2be4598c8ce",
                    "name": "name2",
                    "backupType": 5,
                    "includeMetadata": true,
                    "repoCount": 1,
                    "lastStatus": {
                        "successes": 0,
                        "warnings": 1,
                        "errors": 0
                    },
                    "planFinishedTime": 1645115366992,
                    "isRunning": false
                },
                {
                    "id": "a4acb8c-7b2a-a4ac83-8167-44a9a1e14272",
                    "name": "name3",
                    "backupType": 5,
                    "includeMetadata": true,
                    "repoCount": 1,
                    "lastStatus": {
                        "successes": 0,
                        "warnings": 1,
                        "errors": 0
                    },
                    "planFinishedTime": 1645115380587,
                    "isRunning": false
                }
            ]
        }
    ]
}
```

{% endcode %}

</details>

***

## Backup

<details>

<summary><code>POST /plans/listassignedtoorganization</code></summary>

Wyświetl wszystkie plany backupu, do których przypisane są repozytoria wybranej organizacji **Git**.

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/plans/listassignedtoorganization
```

{% endcode %}

**Parametry:**

| Klucz            | Wartość (opis)                                                             | Typ danych |
| ---------------- | -------------------------------------------------------------------------- | ---------- |
| `limit`          | Określa maksymalną liczbę wyników zwracanych w pojedynczej odpowiedzi API. | Integer    |
| `page`           | Numer strony wyników.                                                      | Integer    |
| `organizationid` | ID organizacji.                                                            | Guid       |

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "limit":5,
    "page":5,
    "organizationid":"a4a4acgd0-eg78f-4a4ac-kl39-99ka4ac1e777ff"
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" expandable="true" %}

```json
{
    "currentPage": 5,
    "pageCount": 5,
    "totalEntries": 23,
    "result": [
        {
            "id": "ea6a260b-a4ac-4204-a92d-918e6940b136",
            "name": "example1",
            "includeAllRepositories": false,
            "repositoryIds": [
                "c1961c1c-a425-a4ac-8757-32d5b6fc9aeb"
            ]
        },
        {
            "id": "fba158dd-6bf4-a4ac-8bc3-7305a9cc4dad",
            "name": "example2",
            "includeAllRepositories": false,
            "repositoryIds": [
                "de5c5995-b422-43c4-90b7-7ee182480dbb"
            ]
        },
        {
            "id": "fdb48001-1d3f-45ae-bb7a-49e86286ad6b",
            "name": "example3",
            "includeAllRepositories": false,
            "repositoryIds": [
                "a4ac5995-b422-43c4-a4ac-7ee182480dbb"
            ]
        }
     ]
}
```

{% endcode %}

</details>

<details>

<summary><code>POST /plans/attachgitrepository</code></summary>

Dodaj repozytorium do planu backupu, pod warunkiem, że zarówno repozytorium, jak i plan już istnieją.

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/plans/attachgitrepository
```

{% endcode %}

**Parametry:**

| Klucz          | Wartość (opis)               | Typ danych |
| -------------- | ---------------------------- | ---------- |
| `planid`       | ID planu backup&#x75;**\***. | Guid       |
| `repositoryid` | ID repozytorium.             | Guid       |

<sub>**\***</sub><sub>Możesz użyć żądania</sub> <sub></sub><sub>`getMany`</sub><sub>, aby znaleźć konkretny identyfikator planu kopii zapasowej.</sub>

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "planid":"hjkhkj60b-baac-4564-a92d-918e6940b136",
    "repositoryid":"ca4ac8f1c-a425-4869-8757-32c6567gc9aeb"
}
```

{% endcode %}

**Przykładowa odpowiedź:**

```json
200 OK
```

</details>

<details>

<summary><code>POST plans/AttachAzureProject</code></summary>

Dodaj projekt **Azure DevOps** do planu backupu, pod warunkiem, że zarówno projekt, jak i plan już istnieją.

{% hint style="danger" %}
Działa tylko dla planów z indywidualnym wyborem projektów.
{% endhint %}

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/plans/attachazureproject
```

{% endcode %}

**Parametry:**

| Klucz       | Wartość (opis)               | Typ danych |
| ----------- | ---------------------------- | ---------- |
| `planId`    | ID planu backup&#x75;**\***. | Guid       |
| `projectId` | ID projektu.                 | Guid       |

<sub>**\***</sub><sub>Możesz użyć żądania</sub> <sub></sub><sub>`getMany`</sub><sub>, aby znaleźć konkretny identyfikator planu kopii zapasowej.</sub>

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "planId":"ea6a260b-brrc-4204-a56c-918e6940b136",
    "projectId": "c1961r1e-a425-4769-8757-32d6b6fc7aeb"
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" %}

```json
200 OK
```

{% endcode %}

</details>

<details>

<summary><code>POST /plans/detachgitrepository</code></summary>

Usuń repozytorium z planu backupu.

**Endpoint API:**

```http
POST https://server_address/plans/detachgitrepository
```

**Parametry:**

| Klucz          | Wartość (opis)               | Typ danych |
| -------------- | ---------------------------- | ---------- |
| `planid`       | ID planu backup&#x75;**\***. | Guid       |
| `repositoryid` | ID repozytorium.             | Guid       |

<sub>**\***</sub><sub>Możesz użyć żądania</sub> <sub></sub><sub>`getMany`</sub><sub>, aby znaleźć konkretny identyfikator planu kopii zapasowej.</sub>

**Przykładowe żądanie:**

```json
{
    "planid":"hjkhkj60b-baac-4564-a92d-918e6940b136",
    "repositoryid":"a4ac8f1c-a425-48hj-8757-32hj567gchjeb"
}
```

**Przykładowa odpowiedź:**

```json
200 OK
```

</details>

<details>

<summary><code>POST plans/DetachAzureProject</code></summary>

Usuń projekt **Azure DevOps** z planu backupu.

{% hint style="danger" %}
Działa tylko dla planów z indywidualnym wyborem projektów.
{% endhint %}

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/plans/detachazureproject
```

{% endcode %}

**Parametry:**

| Klucz       | Wartość (opis)               | Typ danych |
| ----------- | ---------------------------- | ---------- |
| `planId`    | ID planu backup&#x75;**\***. | Guid       |
| `projectId` | ID projektu.                 | Guid       |

<sub>**\***</sub><sub>Możesz użyć żądania</sub> <sub></sub><sub>`getMany`</sub><sub>, aby znaleźć konkretny identyfikator planu kopii zapasowej.</sub>

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "planId": "05d46e44-f026-4cf9-a64a-1dd97328808c",
    "projectId": "022056bd-0044-0000-0000-004400000003"
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" %}

```json
200 OK
```

{% endcode %}

</details>

<details>

<summary><code>POST /plans/modifygitplan</code></summary>

Edytuj istniejący plan backupu **Git**.

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/plans/modifygitplan
```

{% endcode %}

**Parametry:**

| Klucz                     | Wartość (opis)                                                                                                 | Typ danych                  |
| ------------------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------- |
| `id`                      | ID planu backup&#x75;**\***.                                                                                   | Guid                        |
| `isActive`                | Wskazuje, czy harmonogram jest obecnie włączony (`true`) czy wyłączony (`false`).                              | Boolean                     |
| `name`                    | Nazwa planu backupu.                                                                                           | String                      |
| `type`                    | Określa typ planu backupu.                                                                                     | EPlanType                   |
| `backupType`              | Typ backupu.                                                                                                   | EBackupType                 |
| `storageId`               | ID magazynu danych backupu.                                                                                    | Guid                        |
| `repositoriesIds`         | Tabela identyfikatorów repozytoriów.                                                                           | IEnumerable\<Guid>          |
| `workerId`                | Unikalny identyfikator agenta (workera) wykonującego operacje backupu.                                         | Guid                        |
| `schedule`                | Harmonogram backupu.                                                                                           | BackupScheduleDTO           |
| `advancedOptions`         | Opcje zaawansowane.                                                                                            | Dictionary\<string, string> |
| `compressionSettings`     | Ustawienia kompresji.                                                                                          | CompressionSettingsEntry    |
| `encryptionSettings`      | Ustawienia szyfrowania.                                                                                        | EncryptionSettingsEntry     |
| `customActions`           | Akcje zdefiniowane przez użytkownika.                                                                          | BackupCustomActionsEntry    |
| `inculdeAllReposistories` | Jeśli wartość wynosi `true`, plan ignoruje wybrane repozytoria i obejmuje wszystkie repozytoria w organizacji. | Boolean                     |
| `organizationId`          | ID organizacji.                                                                                                | Guid                        |
| `includeMetadata`         | Jeśli wartość wynosi `true`, backup obejmuje metadane.                                                         | Boolean                     |

<sub>**\***</sub><sub>Możesz użyć żądania</sub> <sub></sub><sub>`getMany`</sub><sub>, aby znaleźć konkretny identyfikator planu kopii zapasowej.</sub>

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" expandable="true" %}

```json
{
   "id":"a4acc15-b08b-40cb-a4ac-5e40ea4ac54",
   "isActive":true,
   "name":"example",
   "backupType":5,
   "schedule":{
      "id":"a4ac21-6da6-4c8c-a4ac5-f2ffca4ac516",
      "scheme":3,
      "delay":0,
      "preventSystemSleep":false,
      "options":[
         {
            "type":1,
            "trigger":1,
            "frequency":1,
            "days":[
               1
            ],
            "startAt":[
               {
                  "hour":17,
                  "minute":25
               }
            ],
            "interval":0,
            "nthDayOfWeek":0
         },
         {
            "type":3,
            "trigger":1,
            "frequency":3,
            "days":[
               1,
               2,
               3,
               4,
               5
            ],
            "startAt":[
               {
                  "hour":17,
                  "minute":25
               }
            ],
            "interval":0,
            "nthDayOfWeek":0
         }
      ],
      "backupWindow":
      [     
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
      ],
      "retention":{
         "id":"00000000-0000-0000-0000-000000000000",
         "rule":1,
         "options":null,
         "order":0
      }
   },
   "compressionSettings":{
      "codec":2,
      "level":2
   },
   "encryptionSettings":null,
   "customActions":{
      "preBackupAction":null,
      "postSnapshotAction":null,
      "postBackupAction":null
   },
   "advancedOptions":{
      "useVss":"True",
      "maxTaskRetriesCount":"3",
      "taskRetriesFrequency":"60000",
      "maxConcurrentTasks":"5",
      "processorProperties_PartSize":"1048576"
   },
   "deltaSettings":null,
   "workerId":"a4ac1eb-bbe7-a4ac-b3da-a4acf5642a",
   "filteringSettings":null,
   "organizationId":"a4ac2cd0-ea4ac-4ced-be39-6a4ace033ff",
   "repositoriesIds":[
      "c1961c1c-a425-4769-8757-32d5b6fc9aeb"
   ],
   "includeAllRepositories":false,
   "includeMetadata":true,
   "storageId":"a4ac74ac-7a4ac-4fec-9448-a4ace9267d7"
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" %}

```json
200 OK
```

{% endcode %}

</details>

<details>

<summary><code>POST plans/ModifyAzurePlanAsync</code></summary>

Edytuj istniejący plan backupu **Azure DevOps**.

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/plans/modifyazureplanasync
```

{% endcode %}

**Parametry:**

<table><thead><tr><th width="220">Klucz</th><th width="219.66666666666666">Wartość (opis)</th><th>Typ danych</th></tr></thead><tbody><tr><td><code>id</code></td><td>ID planu backupu<strong>*</strong>.</td><td>Guid</td></tr><tr><td><code>isActive</code></td><td>Wskazuje, czy harmonogram jest obecnie włączony (<code>true</code>) czy wyłączony (<code>false</code>).</td><td>Boolean</td></tr><tr><td><code>name</code></td><td>Nazwa planu backupu.</td><td>String</td></tr><tr><td><code>type</code></td><td>Określa typ planu backupu.</td><td>EPlanType</td></tr><tr><td><code>backupType</code></td><td>Typ backupu.</td><td>EBackupType</td></tr><tr><td><code>storageId</code></td><td>ID magazynu danych backupu.</td><td>Guid</td></tr><tr><td><code>repositoriesIds</code></td><td>Tabela identyfikatorów repozytoriów.</td><td>IEnumerable&#x3C;Guid></td></tr><tr><td><code>excludedRepositoriesIds</code></td><td>Identyfikatory wykluczonych repozytoriów.</td><td>IEnumerable&#x3C;Guid></td></tr><tr><td><code>projectsIds</code></td><td>Identyfikatory projektów do objęcia backupem.</td><td>IEnumerable&#x3C;Guid></td></tr><tr><td><code>wikisIds</code></td><td>Identyfikatory wiki do objęcia backupem.</td><td>IEnumerable&#x3C;Guid></td></tr><tr><td><code>workerId</code></td><td>Unikalny identyfikator agenta (workera) wykonującego operacje backupu.</td><td>Guid</td></tr><tr><td><code>schedule</code></td><td>Harmonogram backupu.</td><td>BackupScheduleDTO</td></tr><tr><td><code>advancedOptions</code></td><td>Opcje zaawansowane.</td><td>Dictionary&#x3C;string, string></td></tr><tr><td><code>compressionSettings</code></td><td>Ustawienia kompresji.</td><td>CompressionSettingsEntry</td></tr><tr><td><code>encryptionSettings</code></td><td>Ustawienia szyfrowania.</td><td>EncryptionSettingsEntry</td></tr><tr><td><code>customActions</code></td><td>Akcje zdefiniowane przez użytkownika.</td><td>BackupCustomActionsEntry</td></tr><tr><td><code>notificationSettings</code></td><td>Ustawienia powiadomień.</td><td>NotificationSettingsEntry</td></tr><tr><td><code>organizationId</code></td><td>ID organizacji <strong>Azure DevOps</strong>.</td><td>Guid</td></tr><tr><td><code>includeMetadata</code></td><td>Jeśli wartość wynosi <code>true</code>, backup obejmuje metadane.</td><td>Boolean</td></tr><tr><td><code>useExtraCredentials</code></td><td>Wskazuje, czy podczas tworzenia kopii zapasowej organizacji w chmurze używane są dodatkowe poświadczenia.</td><td>Boolean</td></tr><tr><td><code>additionalCredentials</code></td><td>Zbiór dodatkowych poświadczeń.</td><td>Guid[]</td></tr><tr><td><code>resourceKindsToIgnore</code></td><td>Rodzaje zasobów do zignorowania.</td><td>List&#x3C;int></td></tr><tr><td><code>gitChoiceMode</code></td><td>Tryb wyboru repozytorium.</td><td>[EGitChoiceMode](Classes/EGitChoiceMode.md)</td></tr><tr><td><code>rules</code></td><td>Ustawienia wyboru opartego na regułach dla każdego elementu: projekt, wiki, repozytorium.</td><td>List&#x3C;AzureDevOpsRule></td></tr></tbody></table>

<sub>**\***</sub><sub>Możesz użyć żądania</sub> <sub></sub><sub>`getMany`</sub><sub>, aby znaleźć konkretny identyfikator planu kopii zapasowej.</sub>

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" expandable="true" %}

```json
{
  "id":"f4b99db4-c0e9-4111-9292-ffc5812aad2c",
  "isActive":true,
  "name":"Plan DevOps",
  "backupType":10,
  "schedule":{
    "scheme":5,
    "options":[
      {
        "type":0,
        "trigger":1,
        "frequency":3,
        "days":[
          0,
          1,
          2,
          3,
          4,
          5,
          6
        ],
        "startAt":[
          {
            "hour":9,
            "minute":29
          }
        ],
        "nthDayOfWeek":0,
        "interval":0
     }
    ],
    "retention":{
      "rule":3,
      "options":[
        {
          "number":3,
          "period":1,
          "type":0
        }
      ],
      "order":0
    },
    "backupWindow":[
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    ]
  },
  "compressionSettings":{
    "codec":2,
    "level":2
  },
  "encryptionSettings":null,
  "customActions":{
  "preBackupAction":{
      "windows":{
        "enabled":true,
        "scriptType":0,
        "command":"C:\\Users\\Name\\Desktop\\test.bat",
        "passwordId":"00000000-0000-0000-0000-000000000000",
        "arguments":null
      },
      "unix":{
        "enabled":false
      },
      "waitForExecution":true,
      "waitingInterval":0
    },
    "postSnapshotAction":null,
    "postBackupAction":null
  },
  "advancedOptions":{
    "useVss":"True",
    "maxTaskRetriesCount":3,
    "taskRetriesFrequency":60000,
    "maxConcurrentTasks":5,
    "largeResourcesBufferSize":134217728
  },
  "deltaSettings":null,
  "notificationSettings":{
    "enabled":false,
    "planNotificationsConfiguration":null,
    "recipients":[

    ]
  },
  "workerId":"758fa497-f93b-436f-9571-2a3f7d496ac1",
  "filteringSettings":null,
  "ignoreCorruptedAttachments":false,
  "organizationId":"017f210e-0edd-6645-82a8-f9c9c3cae4d6",
  "gitChoiceMode":3,
  "repositoriesIds":[

  ],
  "excludedRepositoriesIds":[

  ],
  "projectsIds":[

  ],
  "wikisIds":[

  ],
  "additionalCredentials":[

  ],
  "rules":[
    {
      "choiceMode":2,
      "type":2,
      "ruleChoice":{
        "meetAllRules":false,
        "rules":[

        ]
      }
    },
    {
      "choiceMode":2,
      "type":1,
      "ruleChoice":{
        "meetAllRules":false,
        "rules":[

        ]
      }
    }
  ],
  "storageId":"718fgta6-fo5c-4194-8d4e-13e91cd68a70",
  "type":1
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" %}

```json
200 OK
```

{% endcode %}

</details>

***

## Repozytorium

<details>

<summary><code>POST /git/repositories/getmany</code></summary>

Pobierz listę repozytoriów wybranej organizacji **Git**.

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/git/repositories/getmany
```

{% endcode %}

**Parametry:**

{% hint style="warning" %}
To żądanie API wymaga teraz dodatkowych kluczy: `filters`, `thenOrderBy` oraz `thenOrderByType`. Domyślnie wszystkie z nich powinny zawierać puste wartości, jednak `filters` może być modyfikowane w zależności od potrzeb.
{% endhint %}

| Klucz       | Wartość (opis)                                                       | Typ danych      |
| ----------- | -------------------------------------------------------------------- | --------------- |
| `id`        | ID organizacji.                                                      | Guid            |
| `limit`     | Określa liczbę repozytoriów zwracanych na stronę.                    | Integer         |
| `orderby`   | Określa pole używane do sortowania zwracanych wyników.               | String          |
| `ordertype` | Określa kolejność sortowania: rosnącą (`asc`) lub malejącą (`desc`). | String          |
| `page`      | Numer strony wyników.                                                | Integer         |
| `filters`   | Filtry danyc&#x68;**\***.                                            | Array\<filters> |

<sub>**\***</sub><sub>Każdy obiekt w</sub> <sub></sub><sub>`filters`</sub> <sub></sub><sub>musi zawierać wartości dla trzech właściwości:</sub> <sub></sub><sub>`operator`</sub><sub>,</sub> <sub></sub><sub>`value`</sub> <sub></sub><sub>oraz</sub> <sub></sub><sub>`property`</sub><sub>. Obsługiwane wartości dla</sub> <sub></sub><sub>`operator`</sub> <sub></sub><sub>to między innymi:</sub> <sub></sub><sub>`notin`</sub><sub>,</sub> <sub></sub><sub>`eq`</sub><sub>,</sub> <sub></sub><sub>`neq`</sub><sub>,</sub> <sub></sub><sub>`gt`</sub><sub>,</sub> <sub></sub><sub>`gte`</sub><sub>,</sub> <sub></sub><sub>`lt`</sub><sub>,</sub> <sub></sub><sub>`lte`</sub><sub>,</sub> <sub></sub><sub>`contains`</sub><sub>,</sub> <sub></sub><sub>`icontains`</sub> <sub></sub><sub>oraz</sub> <sub></sub><sub>`startswith`</sub><sub>.</sub> <sub></sub><sub>`value`</sub> <sub></sub><sub>określa wartość używaną do filtrowania w połączeniu z wybraną wartością właściwości</sub> <sub></sub><sub>`operator`</sub><sub>. Dostępne wartości dla</sub> <sub></sub><sub>`property`</sub> <sub></sub><sub>zależą od filtrowanego zasobu — w przypadku repozytoriów, obsługiwane są:</sub> <sub></sub><sub>`id`</sub><sub>,</sub> <sub></sub><sub>`projectId`</sub><sub>,</sub> <sub></sub><sub>`serverId`</sub><sub>,</sub> <sub></sub><sub>`organizationId`</sub><sub>,</sub> <sub></sub><sub>`name`</sub><sub>,</sub> <sub></sub><sub>`slug`</sub><sub>,</sub> <sub></sub><sub>`project`</sub><sub>,</sub> <sub></sub><sub>`licenceId`</sub><sub>,</sub> <sub></sub><sub>`licenceAssigment`</sub><sub>,</sub> <sub></sub><sub>`Availability`</sub><sub>,</sub> <sub></sub><sub>`isProtected`</sub><sub>,</sub> <sub></sub><sub>`lastBackupDate`</sub><sub>,</sub> <sub></sub><sub>`lastSuccessfulBackupDate`</sub><sub>,</sub> <sub></sub><sub>`nextBackup`</sub><sub>,</sub> <sub></sub><sub>`status`</sub> <sub></sub><sub>oraz</sub> <sub></sub><sub>`lastBackupTaskStatus`</sub><sub>.</sub>

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "id": "a4ac2cd0-a4ac-4ced-be39-a4ac31e033ff",
    "limit": 2,
    "orderby": "Name",
    "ordertype": "asc",
    "thenOrderBy": "",
    "thenOrderByType": "",
    "page": 1,
    "filters":[
    {
        "operator": "eq",
        "value": true,
        "property": "IsRemoved"
    }
    ]
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" expandable="true" %}

```json
{
    "currentPage": 1,
    "pageCount": 1,
    "totalEntries": 2,
    "result": {
        "synchronizationInProgress": false,
        "lastSynchronizationRepositoriesStartTime": 1645546071481,
        "repositories": [
            {
                "id": "a4ac3ac7d-99e4-a4ac-b5a4-a4acdeee5",
                "serverId": "a4acac7d-99e4-a4ac-b5a4-ea4ac2deee5",
                "name": "org/repo1",
                "lastBackup": 0,
                "lastSuccessfulBackup": 0,
                "nextBackup": 0,
                "isProtected": true,
                "isRemoved": true,
                "status": 2,
                "lastBackupTaskStatus": 0,
                "isPublic": false
            },
            {
                "id": "a4acf294-b30e-a4ac-aabb-6a4ac6578686",
                "serverId": "a4ac294-b30e-a4ac-aabb-63a4ac578686",
                "name": "org/repo2",
                "lastBackup": 0,
                "lastSuccessfulBackup": 0,
                "nextBackup": 1645556400000,
                "isProtected": true,
                "isRemoved": true,
                "status": 2,
                "lastBackupTaskStatus": 0,
                "isPublic": false
            }
       ],
     "removedRepositories": 15
}
```

{% endcode %}

</details>

<details>

<summary><code>POST /git/repositories/activate</code></summary>

Aktywuj licencje dla wybranych repozytoriów **Git**.

{% hint style="danger" %}
Autoryzacja wymaga konta użytkownika z jedną z następujących ról: **DataRemoveManagement** lub **GitManagement**.
{% endhint %}

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/git/repositories/activate
```

{% endcode %}

**Parametry:**

| Klucz | Wartość (opis)                            | Typ danych   |
| ----- | ----------------------------------------- | ------------ |
| `Ids` | Identyfikatory repozytoriów do aktywacji. | Array\<Guid> |

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "Ids":[
        "a4ac979e-0000-0000-0000-000000000000",
        "a4acca07-0000-0000-0000-000000000000",
        "a4ac7c5-0000-0000-0000-000000000000",
        "a4ac9d7a-0000-0000-0000-000000000000",
        "1a4ac9bc9-0000-0000-0000-000000000000",
        "a4ac79fe9-0000-0000-0000-000000000000",
        "a4ac3f220-0000-0000-0000-000000000000",
        "a4aca817-0000-0000-0000-000000000000"
    ]
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" expandable="true" %}

```json
{
    "success": [],
    "error": [
        {
            "id": "a4ac7979e-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        },
        {
            "id": "a4acdca07-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        },
        {
            "id": "a4ac797c5-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        },
        {
            "id": "a4ac79d7a-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        },
        {
            "id": "a4ac79bc9-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        },
        {
            "id": "a4ac79fe9-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        },
        {
            "id": "a4ac3f220-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        },
        {
            "id": "a4acea817-0000-0000-0000-000000000000",
            "errorCode": "LI5020"
        }
    ]
}
```

{% endcode %}

</details>

<details>

<summary><code>POST /git/repositories/deactivate</code></summary>

Dezaktywuj licencje wybranych repozytoriów **Git**.

{% hint style="danger" %}
Autoryzacja wymaga konta użytkownika z jedną z następujących ról: **DataRemoveManagement** lub **GitManagement**.
{% endhint %}

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/git/repositories/deactivate
```

{% endcode %}

**Parametry:**

| Klucz | Wartość (opis)                               | Typ danych   |
| ----- | -------------------------------------------- | ------------ |
| `Ids` | Identyfikatory repozytoriów do dezaktywacji. | Array\<Guid> |

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "Ids":[
        "a4ac7979e-0000-0000-0000-000000000000",
        "a4acdca07-0000-0000-0000-000000000000",
        "a4ac797c5-0000-0000-0000-000000000000",
        "a4ac79d7a-0000-0000-0000-000000000000",
        "a4ac79bc9-0000-0000-0000-000000000000",
        "a4ac79fe9-0000-0000-0000-000000000000",
        "a4ac3f220-0000-0000-0000-000000000000",
        "a4acea817-0000-0000-0000-000000000000"
    ]
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" expandable="true" %}

```json
{
    "success": [],
    "error": [
        {
            "id": "a4ac7979e-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        },
        {
            "id": "a4acdca07-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        },
        {
            "id": "a4ac797c5-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        },
        {
            "id": "a4ac79d7a-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        },
        {
            "id": "a4ac79bc9-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        },
        {
            "id": "a4ac79fe9-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        },
        {
            "id": "a4ac3f220-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        },
        {
            "id": "a4acea817-0000-0000-0000-000000000000",
            "errorCode": "GT1001"
        }
    ]
}
```

{% endcode %}

</details>

<details>

<summary><code>POST /git/repositories/remove</code></summary>

Usuń dane repozytorium z systemu **Xopero ONE**.

{% hint style="danger" %}
Autoryzacja wymaga konta użytkownika z jedną z następujących ról: **DataRemoveManagement** lub **GitManagement**.
{% endhint %}

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/git/repositories/remove
```

{% endcode %}

**Parametry:**

| Klucz        | Wartość (opis)                                                                                 | Typ danych |
| ------------ | ---------------------------------------------------------------------------------------------- | ---------- |
| `id`         | Identyfikatory repozytoriów do usunięcia.                                                      | Guid       |
| `removedata` | Jeśli wartość wynosi `true`, system usuwa również dane kopii zapasowej wybranego repozytorium. | Boolean    |

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "id": "a4acd28-eee0-404a-a4ac0-6ca4ac260ca",
    "removedata": true
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" %}

```json
{
    "succeededIds": [
        "a4ac8d28-eee0-a4ac-a070-6a4ac76260ca"
    ],
    "failedIds": [],
    "errors": []
}
```

{% endcode %}

</details>

<details>

<summary><code>POST /git/repositories/sync</code></summary>

Uruchom synchronizację wybranej organizacji **Git**.

**Endpoint API:**

{% code overflow="wrap" %}

```http
POST https://server_address/git/repositories/sync
```

{% endcode %}

**Parametry:**

| Klucz | Wartość (opis)  | Typ danych |
| ----- | --------------- | ---------- |
| `id`  | ID organizacji. | Guid       |

**Przykładowe żądanie:**

{% code title="JSON" overflow="wrap" %}

```json
{
    "id": "a4ac2cd0-a4ac-4ced-a4ac-60ca4ac3ff"
}
```

{% endcode %}

**Przykładowa odpowiedź:**

{% code overflow="wrap" %}

```json
200 OK
```

{% endcode %}

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://helpcenter.xopero.com/xopero-one-en/pl/zarzadzanie/rest-api-dla-ekosystemow-devops/dostepne-zadania-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
