# Cursussen

### Overzichtstabel termen

| Naam                | Type         | Verplicht | Omschrijving                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------- | ------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                | string       | Ja        | Naam van de cursus.                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| description         | string       | Nee       | Omschrijving van de cursus.                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| code                | string       | Ja        | Code van de cursus. Door de instelling in te geven. Het is mogelijk om binnen evalytics een cursus verplicht uniek te laten zijn. (zie cursus aanmaken)                                                                                                                                                                                                                                                                                                           |
| externalId          | string       | nee       | Externe id van de cursus.                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| editions            | object array | n.v.t.    | <p>Bij het ophalen van een cursus zullen de onderliggende cursusedities als array meegestuurd worden. </p><p></p><p>Een cursuseditie is een “child” cursus van een andere reeds bestaande cursus. Van cursusedities kan typisch gebruik gemaakt worden als bij de instelling het interne id van een cursus (in een nieuw jaar) verandert, maar het toch wenselijk is dat resultaten “gegroepeerd” mee gegeven kunnen worden met eerdere edities in Evalytics.</p> |
| parent              | object       | Nee \*    | <p>Door parent (id of externalId van de cursus) mee te sturen en <code>edition: true</code>, wordt de cursuseditie gekoppeld aan een cursus. <br><br><em>\* Let op: Verplicht als je een cursuseditie wilt maken. Geef je dit niet mee, dan wordt het een normale cursus</em></p>                                                                                                                                                                                 |
| edition             | boolean      | Nee \*    | <p>Door parent (id of externalId van de cursus) mee te sturen en <code>edition: true</code>, wordt de cursuseditie gekoppeld aan een cursus. <br><br><em>\* Let op: Verplicht als je een cursuseditie wilt maken. Geef je dit niet mee, dan wordt het een normale cursus</em></p>                                                                                                                                                                                 |
| coordinators        | Object array | Nee       | Een lijst van gebruikers die als vak/cursuscoördinatoren voor de cursus worden ingesteld. Deze gebruikers zullen voor de cursus extra rechten krijgen.                                                                                                                                                                                                                                                                                                            |
| grades              | Object array | Nee       | Een lijst met leerjaren en periodes. Je kunt dit als filter gebruiken op de resultaten pagina.                                                                                                                                                                                                                                                                                                                                                                    |
| types               | Object array | Nee       | <p>Werkvormen die bij de cursus horen. <br><br>Als bij cursussen gebruik wordt gemaakt van werkvormen, dan kun je bij een evaluatie vragen stellen die over een enkele werkvorm gaan binnen de cursus. </p><p></p><p>De standaard beschikbare werkvormen lijst is uit te breiden. Zie hoofdstuk <a href="/pages/-MYEsLIh9CA_m4LMwIfE">Werkvormen</a>.</p><p></p><p>Aan werkvormen kun je docenten en vragenlijsten toevoegen</p>                                  |
| labels              | object array | Nee       | <p>Labels kunnen gebruikt worden om te filteren in de resultaten en cursuslijst.  Voorbeeld:</p><p><strong>\[{name: (string)}]</strong></p>                                                                                                                                                                                                                                                                                                                       |
| languages           | array        | Nee       | <p>Welke talen wil je dat er ondersteund worden voor de evaluatie. Geef een array mee met 1 of meerdere talen. Dit kunnen zijn:</p><ul><li>nl (Nederlands)</li><li>en (Engels)</li></ul><p>Geef je niks mee dan is de default multi-language<br><br><strong>Let op: Als je organisatie geforceerd op engels staat, is deze overbodig.</strong> </p>                                                                                                               |
| groups              | Object array | Nee       | Groepen (van participanten) die aan de cursus gekoppeld zijn. Dit kunnen de klassen of studentgroepen zijn die de cursus volgen.                                                                                                                                                                                                                                                                                                                                  |
| studyYear           | string       | Nee       | <p>Studiejaar van de cursuseditie. </p><p></p><p>Dit wordt alleen gebruikt wanneer de cursus een cursuseditie is.</p>                                                                                                                                                                                                                                                                                                                                             |
| questionSets        | integer      | Nee       | Het is mogelijk om vragenlijsten aan werkvormen te koppelen. Bij het aanmaken van een evaluatie wordt de vragenlijst geselecteerd bij de desbetreffende werkvorm.                                                                                                                                                                                                                                                                                                 |
| teachers            | object array | Nee       | <p>Het is mogelijk om docenten te koppelen aan een cursus of werkvormen.</p><p></p><p>Extra docent properties (De docent zal aangepast worden binnen de huidige organisatie):</p><ul><li>isWorkingStudent: Maakt van de docent een werkstudent binnen de organisatie</li><li>isGuestTeacher: Maakt van de docent een gastdocent binnen de organisatie</li></ul>                                                                                                   |
| evaluationCalendars | Object array | Nee       | <p>Het is mogelijk om evaluatiekalender item(s) mee te geven om aan deze cursus te koppelen. <br>(Zie ook Hoofdstuk <a href="/pages/-MYEhMT9PUIZ7M2FXqdD">Evaluatiekalender</a>)</p>                                                                                                                                                                                                                                                                              |
| Type                | integer      | Nee       | <p>Een cursus is in feite een topic met type <code>1</code>. <br>(type <code>2</code> is een docent)</p>                                                                                                                                                                                                                                                                                                                                                          |
| index               | integer      | Nee       | <p>Bij het meesturen van types is het mogelijk om een volgorde te bepalen. Hier zullen de werkvormen op gesorteerd worden bij het aanmaken van de evaluatie. De volgorde is van laag naar hoog. Bijvoorbeeld:</p><p>Hoorcollege, index=0</p><p>Werkcollege, index=1</p><p>Practicum, index=2</p><p></p><p>Hoorcollege wordt dan als eerst weergegeven, daarna komt werkcollege en vervolgens practicum.</p>                                                       |
| importLock          | boolean      | Nee       | Zorgt ervoor dat op de frontend de cursussen 'gelocked' worden. Hierdoor kunnen de cursussen niet zomaar aangepast worden door gebruikers. Alleen een functioneel beheerder heeft de mogelijkheid om de cursus aan te passen.                                                                                                                                                                                                                                     |
| linkedOrganisations | array        | Nee       | Hiermee kan je een cursus koppelen aan andere organisaties. De resultaten van deze cursus worden gedeeld en zullen zichtbaar zijn in het resultaten overzicht van de andere organisatie(s).                                                                                                                                                                                                                                                                       |

## Cursussen ophalen (lijst)

<mark style="color:blue;">`GET`</mark> `https://api-portal.evalytics.nl/subject`

Haalt een lijst met cursussen op.

#### Query Parameters

| Name                        | Type    | Description                                                                          |
| --------------------------- | ------- | ------------------------------------------------------------------------------------ |
| hasCalendar                 | boolean | Haal alleen cursussen op waar een of meerdere kalender(s) aan gekoppeld zijn         |
| populateLinkedOrganisations | boolean | Voegt alle gekoppelde organisaties toe aan de cursussen                              |
| populateEditions            | boolean | Voegt alle cursusedities toe die aan de cursus gekoppeld zijn                        |
| populateHasEditions         | boolean | Voegt een extra property toe aan de cursussen die bepaald of de cursus edities heeft |
| q                           | string  | Zoeken op cursus (naam, code, externalId)                                            |
| status                      | string  | Filter op active, archived, deleted (default = active)                               |

{% tabs %}
{% tab title="200 " %}

```
{
  "type": 1,
  "edition": false,
  "parent": null,
  "language": [
    "EN",
    "NL"
  ],
  "studyYear": "",
  "description": "Dit is een cursus voorbeeld",
  "externalId": "123",
  "name": "Cursus voorbeeld",
  "code": "CV",
  "coordinators": [
    {
      "id": 1,
      "user": 2,
      "externalId": "ABC",
      "name": "Pascal"
    }
  ],
  "groups": [
    {
      "id": 123,
      "externalId": "test",
      "name": "groepnaam"
    }
  ],
  "grades": [
    {
      "grade": "1",
      "periods": [
        1,
        2,
        3
      ]
    }
  ],
  "types": [
    {
      "index": 0,
      "id": 1,
      "type": "subject",
      "questionList": 343,
      "teachers": [
        {
          "id": 1,
          "user": 2,
          "externalId": "ABC",
          "name": "Pascal"
        }
      ]
    },
    {
  
      "index": 1,
      "id": 123,
      "questionList": 342
    }
  ],
  "evaluationCalendar": [
    {
      "startDate": "2021-04-01",
      "evaluationName": "Voorbeeld evaluatie",
      "evaluationTemplate": "123",
      "types": [
        {
          "id": 17,
          "name": "Algemeen"
        }
      ],
      "groups": [
        {
          "externalId": "test",
          "id": 123,
          "name": "student A"
        }
      ],
      "labels": [
        {
          "name": "Kalender label 1"
        },
        {
          "name": "Kalender label 2"
        }
      ]
    }
  ],
  "labels": [
    {
      "name": "Cursus label 1"
    }
  ],
  "data": {
    "code": "CV",
    "edition": false
  }
}
```

{% endtab %}
{% endtabs %}

## Cursus ophalen (item)

<mark style="color:blue;">`GET`</mark> `https://api-portal.evalytics.nl/subject/:id`

Een enkele cursus kan gevonden worden op basis van het extern Id of het interne Id.

#### Path Parameters

| Name | Type   | Description                      |
| ---- | ------ | -------------------------------- |
| id   | string | Intern of externId van de cursus |

{% tabs %}
{% tab title="200 " %}

```
{
  "type": 1,
  "edition": false,
  "parent": null,
  "language": [
    "EN",
    "NL"
  ],
  "studyYear": null,
  "description": "Dit is een cursus voorbeeld",
  "externalId": "123",
  "name": "Cursus voorbeeld",
  "code": "CV",
  "coordinators": [
    {
      "id": 1,
      "user": 2,
      "externalId": "ABC",
      "name": "Pascal"
    }
  ],
  "groups": [
    {
      "id": 123,
      "externalId": "test",
      "name": "groepnaam"
    }
  ],
  "grades": [
    {
      "grade": "1",
      "periods": [
        1,
        2,
        3
      ]
    }
  ],
  "types": [
    {
      "index": 0,
      "id": 1,
      "type": "subject",
      "questionSets": [
        {
          "id": 1,
          "name": "Standaard"
        },
        {
          "id": 2,
          "name": "test"
        }
      ],
      "teachers": [
        {
          "id": 1,
          "user": 2,
          "externalId": "ABC",
          "name": "Pascal"
        }
      ]
    },
    {
      "index": 1,
      "topicType": 124
    }
  ],
  "evaluationCalendar": [
    {
      "startDate": "2021-04-01",
      "evaluationName": "Voorbeeld evaluatie",
      "evaluationTemplate": "123",
      "types": [
        {
          "id": 17,
          "name": "Algemeen"
        }
      ],
      "groups": [
        {
          "externalId": "test",
          "id": 123,
          "name": "student A"
        }
      ],
      "labels": [
        {
          "name": "Kalender label 1"
        },
        {
          "name": "Kalender label 2"
        }
      ]
    }
  ],
  "labels": [
    {
      "name": "Cursus label 1"
    }
  ],
  "linkedOrganisations": [{
     "name": "Another organisation",
     "code": "AO",
     "externalId": "AO-ORG",
     "id": 987
  }],
  "data": {
     "code": "CV",
     "edition": false
  }
}
```

{% endtab %}
{% endtabs %}

## Cursus aanmaken (geen cursus editie)

<mark style="color:green;">`POST`</mark> `https://api-portal.evalytics.nl/subject`

Maakt een cursus aan

#### Query Parameters

| Name                      | Type    | Description                                                                                                                                                                                                                                                                                                                        |
| ------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| useDefaultQuestionSets    | boolean | Als je useDefaultQuestionSets=true meegeeft, zullen de vragensets die je aan de werkvorm(en) hebt gekoppeld, automatisch ook aan de cursus werkvorm(en) gekoppeld worden.                                                                                                                                                          |
| strictValidation          | boolean | Zet strictValidation aan of uit (default = aan). Als je strictValidation uitzet, zal de cursus wel aangemaakt worden als een docent, werkvorm, groep of coordinator niet door de validatie heen komt. De niet correcte items worden dan niet toegevoegd aan de cursus en zullen als foutmelding in de response teruggegeven worden |
| convertDraftUserToTeacher | boolean | Als er geen docent gevonden kan worden op externalId, zoek dan in conceptgebruikers en zet deze direct om naar een docent. (default: false)                                                                                                                                                                                        |
| enforceUniqueCode         | boolean | <p>Forceert unieke cursuscode. (default: false)<br>Standaard zal een cursuscode niet uniek zijn. Het is mogelijk om dit te controleren bij het aanmaken van een cursus. Als de cursuscode al bestaat wordt er een foutmelding teruggestuurd.</p>                                                                                   |
| overwrite                 | boolean | Geef overwrite=false mee om te zorgen dat werkvormen en docenten niet overschreven worden bij het updaten van een cursus                                                                                                                                                                                                           |

{% tabs %}
{% tab title="200 " %}

```
{
  "type": 1,
  "organisation": 420,
  "topOrganisation": 418,
  "user": null,
  "deleted": false,
  "createdBy": "2203",
  "modifiedBy": "2225",
  "externalId": null,
  "archived": false,
  "parent": null,
  "name": "Example",
  "importLock": false,
  "description": "Example description",
  "data": {
    "code": "Test"
  },
  "id": 4126,
  "createdAt": "2021-01-21T12:37:42.000Z",
  "updatedAt": "2021-04-06T15:40:42.000Z",
  "labels": []
}
```

{% endtab %}
{% endtabs %}

```
{
  "externalId": (string),
  "languages": (array),
  "description": (string),
  "name": (string - verplicht),
  "importLock": (boolean),
  "data": {
    "code": (string)
  },
  "coordinators": [
    {
      "id": (int)
    }, 
    {
      "externalId": (string)
    }
  ],
  "groups": [
    {
      "id": (int)
    }, 
    {
      "externalId": (string)
    }
  ],
  "types": [{
    "index": (int),
    "id": (int - verplicht),
    "type": (string, als alternatief voor id),
    "questionSets": [
      {
        "id": (int)
      }, 
      {
        "code": (string)
      }
    ],
    "teachers": [
      {
        "id": (int - required),
        "isWorkingStudent": (boolean),
        "isGuestTeacher": (boolean)
      },
      {
        "externalId": (string - required),
        "isWorkingStudent": (boolean),
        "isGuestTeacher": (boolean)
      }
    ]
  }],
  "grades": [{
    "grade": (string)
    "periods": (array)
  }],
  "linkedOrganisations": [
      {
        "id": (int)
      },
      {
        "externalId": (string)
      }
  ],
  "evaluationCalendars": [{
    "startDate": (date string zoals "2021-02-09"),
    "evaluationName": (string),
    "workflow": [
      {
        "id": (int)
      },
      {
        "externalId": (string)
      }
    ],
    "types": [
      {
        "id": (int)
  		  *"orderIndex": (int, update staat nog niet online, 
												 laagste nummer => eerste block, 
												 hoogste => laatste block
										   )
      },
      {
      "externalId": (string)
      }
    ]
    "groups": [
      {
        "id": (int)
      },
      {
      "externalId": (string)
      }
    ],
    "labels": [
      {
        "name": (string)
      }
    ]
  }],
  "labels": [
    {
      "name": (string)
    }
  ]
}
```

{% hint style="info" %}

* Bij het meegeven van types kan je ook een type meegeven als in plaats van het interne id
* Bij types bepaald het veld 'index' de volgorde van de blokken bij het aanmaken van de evaluaties
* Als je in het voorbeeld, bijvoorbeeld bij coordinators, externalId en id ziet staan kan je een van deze meegeven.
* Het is niet mogelijk om meerdere items (werkvormen, groepen, coördinatoren) van hetzelfde id/type te koppelen, wij filteren deze items op uniekheid om dubbeling te voorkomen. Bij werkvormen controleren wij op dubbele docenten en vragensets
  {% endhint %}

**Docenten en vragensets direct koppelen aan een cursus**

Wanneer een docent of vragenset niet bij een werkvorm moet horen, maar direct op een cursus, geef dan **id: 1** of **type: subject** mee bij een topic type. Voeg vervolgens de docenten/vragensets toe die je wilt koppelen. Als voorbeeld:

```
{
  "externalId": (string),
  "languages": (array),
  "description": (string),
  "name": (string - verplicht),
  "importLock": (boolean),
  "data": {
   "code": (string)
  },
  "types": [{
    "index": (int),
    "id": (int),
    "type": "subject",
    "questionSets": [
      {
        "id": (int)
      },
      {
        "code": (string)
      }
    ],
    "teachers": [
      {
        "id": (int - required),
        "isWorkingStudent": (boolean),
        "isGuestTeacher": (boolean)
      },
      {
        "externalId": (string - required),
      }
    ]
  }]
}
```

#### Voorbeeld response bij strictValidation=false

Als strictValidation uitstaat, geven wij de foutmeldingen terug in de response. In dit voorbeeld kon de groep niet gekoppeld worden, omdat deze niet gevonden kon worden. De cursus is wel aangemaakt.

```
{
  "type": 1,
  "organisation": 123,
  "topOrganisation": 456,
  "user": null,
  "deleted": false,
  "createdBy": "123",
  "modifiedBy": "123",
  "externalId": null,
  "archived": false,
  "parent": null,
  "name": "Natuurkunde",
  "description": "Natuurkunde",
  "importLock": false,
  "data": {
    "code": "test"
  },
  "id": 1234,
  "createdAt": "2021-06-25T08:37:53.000Z",
  "updatedAt": "2021-06-29T09:56:20.000Z",
  "validationErrors": [
    {
      "message": "The group with id '1234' could not be found",
      "errorCode": "5d71f131-e1ee-47ce-8a8a-7785e9feae6e",
      "object": {
        "id": 78378437
      }
    }
  ],
  "studyYear": null,
  "languages": null,
  "groups": [],
  "coordinators": [],
  "labels": []
}
```

## Cursus aanmaken (editie)

<mark style="color:green;">`POST`</mark> `https://api-portal.evalytics.nl/subject`

Het is mogelijk om cursussen op te splitsen in cursusedities. Je koppelt dan een cursuseditie aan een 'normale' cursus (zie voorbeeld hierboven). Er zijn wat verschillen in het aanmaken van een cursus editie en een cursus:\
\- Om een cursus editie aan te maken geef je **parent: {id: (int)}** of **parent: {externalId: (string)}** mee, samen met **edition: true** in het data veld. Het id van de parent is de cursus waar je de editie aan wilt koppelen\
\- Bij cursusedities is het mogelijk om het veld **studyYear** te gebruiken.

#### Path Parameters

| Name              | Type    | Description                        |
| ----------------- | ------- | ---------------------------------- |
| enforceUniqueCode | boolean | Verplicht dat code uniek moet zijn |

#### Query Parameters

| Name      | Type    | Description                                                                                                              |
| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------ |
| overwrite | boolean | Geef overwrite=false mee om te zorgen dat werkvormen en docenten niet overschreven worden bij het updaten van een cursus |

{% tabs %}
{% tab title="200 " %}

```
{
  "type": 1,
  "organisation": 101,
  "topOrganisation": 100,
  "user": null,
  "deleted": false,
  "createdBy": "123",
  "modifiedBy": "123",
  "externalId": null,
  "archived": false,
  "parent": {
    "id": 1,
    "externalId: "abc"
  },
  "importLock": false,
  "name": "Example",
  "description": "Example description",
  "data": {
    "code": "Test",
    "edition": true
  },
  "id": 1234,
  "createdAt": "2021-01-21T12:37:42.000Z",
  "updatedAt": "2021-04-06T15:40:42.000Z",
  "labels": []
}
```

{% endtab %}
{% endtabs %}

```
{
  "externalId": (string),
  "languages": (array),
  "description": (string),
  "name": (string - verplicht),
  "importLock": (boolean),
  "parent": {
    "id": (int),
    "externalId": (string)
  }
  "data": {
   "code": (string),
   "edition": (boolean),
   "studyYear": (string)
  },
  "coordinators": [
    {
      "id": (int)
    }, 
    {
      "externalId": (string)
    }
  ],
  "groups": [
    {
      "id": (int)
    }, 
    {
      "externalId": (string)
    }
  ],
  "types": [{
    "index": (int),
    "id": (int - verplicht),
    "type": (string, als alternatief voor id),
    "questionSets": [
      {
        "id": (int)
      }, 
      {
        "code": (string)
      }
    ],
    "teachers": [
      {
        "id": (int - required),
        "isWorkingStudent": (boolean),
        "isGuestTeacher": (boolean)
      },
      {
        "externalId": (string - required),
        "isWorkingStudent": (boolean),
        "isGuestTeacher": (boolean)
      }
    ]
  }],
  "grades": [{
    "grade": (string)
    "periods": (array)
  }],
  "linkedOrganisations": [
      {
        "id": (int)
      },
      {
        "externalId": (string)
      }
  ],
  "evaluationCalendars": [{
    "startDate": (date string zoals "2021-02-09"),
    "evaluationName": (string),
    "workflow": [
      {
        "id": (int)
      },
      {
        "externalId": (string)
      }
    ],
    "types": [
      {
        "id": (int)
  		  *"orderIndex": (int, update staat nog niet online, 
												 laagste nummer => eerste block, 
												 hoogste => laatste block
										   )
      },
      {
      "externalId": (string)
      }
    ]
    "groups": [
      {
        "id": (int)
      },
      {
      "externalId": (string)
      }
    ],
    "labels": [
      {
        "name": (string)
      }
    ]
  }],
  "labels": [
    {
      "name": (string)
    }
  ]
}
```

{% hint style="info" %}

* Voor het toevoegen van types, groepen, coordinators: zie **cursus aanmaken (geen editie)**
* Bij parent kan je een **id** of **externalId** meegeven waarop de cursuseditie gekoppeld zal worden
  {% endhint %}

## Cursus bijwerken

<mark style="color:orange;">`PUT`</mark> `https://api-portal.evalytics.nl/subject/:id`

Een cursus bijwerken werkt op dezelfde manier als een cursus aanmaken.

#### Path Parameters

| Name | Type   | Description                    |
| ---- | ------ | ------------------------------ |
| id   | string | id of externalId van de cursus |

#### Query Parameters

| Name                     | Type    | Description                                                                                                                                                                                                                                                                                                                         |
| ------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| useExternalIdForCalendar | boolean | Als je useExternalIdForCalendar=true meegeeft wordt een kalender geüpdate/aangemaakt op basis van externalId.                                                                                                                                                                                                                       |
| useDefaultQuestionSets   | boolean | Als je useDefaultQuestionSets=true meegeeft, zullen de vragensets die je aan de werkvorm(en) heb gekoppeld, automatisch ook aan de cursus werkvorm(en) gekoppeld worden                                                                                                                                                             |
| strictValidation         | boolean | Zet strictValidation aan of uit (default = aan). Als je strictValidation uitzet, zal de cursus wel aangemaakt worden als een docent, werkvorm, groep of coordinator niet door de validatie heen komt. De niet correcte items worden dan niet toegevoegd aan de cursus en zullen als foutmelding in de response teruggegeven worden. |
| enforceUniqueCode        | boolean | Verplicht unieke cursuscode                                                                                                                                                                                                                                                                                                         |
| overwrite                | boolean | Geef overwrite=false mee om te zorgen dat werkvormen en docenten niet overschreven worden bij het updaten van een cursus                                                                                                                                                                                                            |

{% tabs %}
{% tab title="200 " %}

```
{
  "type": 1,
  "organisation": 101,
  "topOrganisation": 100,
  "user": null,
  "deleted": false,
  "createdBy": "123",
  "modifiedBy": "123",
  "externalId": null,
  "archived": false,
  "parent": {
    "id": 1,
    "externalId: "abc"
  },
  "name": "Example",
  "description": "Example description",
  "importLock": false,
  "data": {
    "code": "Test",
    "edition": true
  },
  "id": 1234,
  "createdAt": "2021-01-21T12:37:42.000Z",
  "updatedAt": "2021-04-06T15:40:42.000Z",
  "labels": []
}
```

{% endtab %}
{% endtabs %}

```
{
  "externalId": (string),
  "languages": (array),
  "description": (string),
  "name": (string - verplicht),
  "importLock": (boolean),
  "data": {
   "code": (string)
  },
  "coordinators": [
    {
      "id": (int)
    },
    {
      "externalId": (string)
    }
  ],
  "groups": [
    {
      "id": (int)
    },
    {
      "externalId": (string)
  }],
  "types": [{
    "index": (int),
    "id": (int - verplicht),
    "type": (string, als alternatief voor id),
    "questionSets": [{
      "id": 1 (int)
    }, {
      "code": (string)
    }],
    "teachers": [{
      "id": (int - required),
      "isWorkingStudent": (boolean),
      "isGuestTeacher": (boolean)
    },
    {
      "externalId": (string - required),
      "isWorkingStudent": (boolean),
      "isGuestTeacher": (boolean)
    }]
  }],
  "linkedOrganisations": [
    {
      "id": (int)
    },
    {
      "externalId": (string)
    }
  ],
  "evaluationCalendars": [{
    "startDate": (date string zoals "2021-02-09"),
    "evaluationName": (string),
    "workflow": [
      {
        "id": (int)
      },
      {
        "externalId": (string)
      }
    ],
    "types": [
      {
        "id": (int)
         *"orderIndex":(int, update staat nog niet online, 
												 laagste nummer => eerste block, 
												 hoogste => laatste block
										   )
      },
      {
        "externalId": (string)
      }
    ]
    "groups": [
      {
        "id": (int)
      },
      {
        "externalId": (string)
      }
    ],
    "labels": [
      {
        "name": (string)
      }
    ]
  }]
}
```

{% hint style="info" %}
Als geen group, coordinators, types, linkedOrganisations meegeeft, zullen deze items niet overschreven worden. Mocht je toch willen dat de gegevens overschreven worden, geef dan een leeg array mee
{% endhint %}

## Cursus verwijderen

<mark style="color:red;">`DELETE`</mark> `https://api-portal.evalytics.nl/subject/:id`

#### Path Parameters

| Name | Type    | Description                        |
| ---- | ------- | ---------------------------------- |
| id   | boolean | intern of externalId van de cursus |

#### Query Parameters

| Name | Type    | Description                         |
| ---- | ------- | ----------------------------------- |
| undo | boolean | Maak de verwijdering actie ongedaan |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

## Docent toevoegen aan een cursus (intern id)

<mark style="color:green;">`POST`</mark> `https://api-portal.evalytics.nl/subject/:id:/teacher`

Hiermee kan je een docent toevoegen aan een cursus. Als het gelukt is krijg je als response de cursus terug.&#x20;

#### Path Parameters

| Name | Type   | Description             |
| ---- | ------ | ----------------------- |
| id   | string | Intern id van de cursus |

{% tabs %}
{% tab title="200 " %}

```
{
  "type": 1,
  "organisation": 101,
  "topOrganisation": 100,
  "user": null,
  "deleted": false,
  "createdBy": "123",
  "modifiedBy": "123",
  "externalId": null,
  "archived": false,
  "parent": {
    "id": 1,
    "externalId: "abc"
  },
  "name": "Example",
  "description": "Example description",
  "data": {
    "code": "Test",
    "edition": true
  },
  "id": 1234,
  "createdAt": "2021-01-21T12:37:42.000Z",
  "updatedAt": "2021-04-06T15:40:42.000Z",
  "labels": []
}
```

{% endtab %}
{% endtabs %}

**Docent toevoegen op basis van intern id:**

```
{
  "teacherId": (int) 
}
```

{% hint style="info" %}
Als je gebruikt maakt van externe id: Zie onderdeel **Docent toevoegen aan een cursus (extern id)**
{% endhint %}

## Docent toevoegen aan een cursus (extern id)

<mark style="color:green;">`POST`</mark> `https://api-portal.evalytics.nl/subject/teacher/identifier/externalId`

Hiermee kan je een docent toevoegen aan een cursus doormiddel van het externe id

{% tabs %}
{% tab title="200 " %}

```
{
  "type": 1,
  "organisation": 101,
  "topOrganisation": 100,
  "user": null,
  "deleted": false,
  "createdBy": "123",
  "modifiedBy": "123",
  "externalId": null,
  "archived": false,
  "parent": {
    "id": 1,
    "externalId: "abc"
  },
  "name": "Example",
  "description": "Example description",
  "data": {
    "code": "Test",
    "edition": true
  },
  "id": 1234,
  "createdAt": "2021-01-21T12:37:42.000Z",
  "updatedAt": "2021-04-06T15:40:42.000Z",
  "labels": []
}
```

{% endtab %}
{% endtabs %}

```
{
  "identifier": {
    "externalId": (string),
    "teacher": {
      "externalId": (string)
    }
  }
}
```

## Docent verwijderen van een cursus (intern id)

<mark style="color:red;">`DELETE`</mark> `https://api-portal.evalytics.nl/subject/:subjectId/teacher/teacherId`

Het is mogelijk om een docent te verwijderen van een cursus. Geef hiervoor het interne cursus id en de docent id mee. Je zal een 200 OK response terugkrijgen als het gelukt is.

#### Path Parameters

| Name      | Type    | Description          |
| --------- | ------- | -------------------- |
| teacherId | integer | Het id van de docent |
| subjectId | integer | Het id van de cursus |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

## Docent verwijderen van de cursus (extern id)

<mark style="color:red;">`DELETE`</mark> `https://api-portal.evalytics.nl/subject/teacher/identifier/externalId`

Hiermee kan je een docent verwijderen van een cursus door middel van het externe id

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

```
{
  "identifier": {
    "externalId": (string),
    "teacher": {
      "externalId": (string)
    }
  }
}
```

## Werkvorm toevoegen aan een cursus

<mark style="color:green;">`POST`</mark> `https://api-portal.evalytics.nl/subjects/:id/topicType`

#### Path Parameters

| Name | Type   | Description                   |
| ---- | ------ | ----------------------------- |
| id   | string | Id of extern id van de cursus |

#### Query Parameters

| Name      | Type    | Description                                                                                                              |
| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------ |
| overwrite | boolean | Geef overwrite=false mee om te zorgen dat werkvormen en docenten niet overschreven worden bij het updaten van een cursus |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

```
{
	"id": (int - required when no type is given),
	"type": (string - required when no id is given)
	"index": (int),
	"teachers": [{
		"id": (int)
	}, {
		"externalId": (string)
	}],
	"index": (int)
}
```

## Werkvorm verwijderen van een cursus

<mark style="color:red;">`DELETE`</mark> `https://api-portal.evalytics.nl/subject/:id/topicType`

#### Path Parameters

| Name | Type   | Description                   |
| ---- | ------ | ----------------------------- |
| id   | string | Id of extern id van de cursus |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

```
{
 "id": (int)
}

OR

{
 "type": (string)
}
```

## Gekoppelde organisaties van cursus (resultaten) ophalen

<mark style="color:blue;">`GET`</mark> `https://api-portal.evalytics.nl/subject/:id/linkedOrganisations`

Het is mogelijk om cursus resultaten te delen met andere organisaties. Met dit endpoint kan je een lijst ophalen met alle gedeelde organisaties voor de desbetreffende cursus.

#### Path Parameters

| Name | Type    | Description                    |
| ---- | ------- | ------------------------------ |
| id   | integer | Id of externalId van de cursus |

{% tabs %}
{% tab title="200 " %}

```
[
  {
    "id": 632,
    "name": "Example 1",
    "code": "e1",
    "type": "department",
    "externalId": "ABC"
  },
  {
    "id": 633,
    "name": "Example 2",
    "code": "e2",
    "type": "department",
    "externalId": null
  }
]
```

{% endtab %}
{% endtabs %}

## Organisatie(s) koppelen aan cursus

<mark style="color:green;">`POST`</mark> `https://api-portal.evalytics.nl/subject/:id/linkedOrganisations`

Met dit endpoint kun je een cursus koppelen aan een andere organisatie. Hierdoor worden resultaten van deze cursus gedeeld met de organisatie(s) die je opgeeft. De resultaten van deze cursus zijn zichtbaar in het resultaten overzicht van de organisatie waarmee je de resultaten deelt.

#### Path Parameters

| Name | Type    | Description      |
| ---- | ------- | ---------------- |
| id   | integer | Id van de cursus |

#### Query Parameters

| Name      | Type    | Description                                                                        |
| --------- | ------- | ---------------------------------------------------------------------------------- |
| overwrite | boolean | Overschrijf eventueel al gekoppelde opleidingen die aan deze cursus gekoppeld zijn |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

```
{
    "id": (number)
    "organisationArray": [
      {
    		"id": (int)
    	}, {
    		"externalId": (string)
    	}
    ]
}
```


---

# 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://doc.evalytics.nl/onderdelen/cursussen.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.
