using Meitner;
using Meitner.Models.Components;
using System;
using System.Collections.Generic;
var sdk = new MeitnerSDK(security: new Security() {
Option1 = new SecurityOption1() {
ClientCredentials = "<YOUR_API_KEY_HERE>",
ClientSecret = "<YOUR_API_KEY_HERE>",
},
});
EmployeePlacementCreate req = new EmployeePlacementCreate() {
External = new EmployeePlacementCreateExternal() {
SourceID = "12345678",
},
EmployeeID = "123e4567-e89b-12d3-a456-426614174000",
SchoolID = "123e4567-e89b-12d3-a456-426614174000",
Signature = "LM",
Title = "Principal",
Roles = new List<EmployeePlacementRole>() {
EmployeePlacementRole.Admin,
},
StartDate = DateOnly.Parse("2024-08-01"),
EndDate = DateOnly.Parse("2024-08-01"),
EmploymentPercent = 100,
};
var res = await sdk.EmployeePlacements.CreateAsync(req);
// handle responsefrom datetime import date
from meitner import Meitner, models
import os
with Meitner(
security=models.Security(
option1=models.SecurityOption1(
client_credentials=os.getenv("MEITNER_CLIENT_CREDENTIALS", ""),
client_secret=os.getenv("MEITNER_CLIENT_SECRET", ""),
),
),
) as m_client:
res = m_client.employee_placements.create(employee_id="123e4567-e89b-12d3-a456-426614174000", school_id="123e4567-e89b-12d3-a456-426614174000", start_date=date.fromisoformat("2024-08-01"), external={
"source_id": "12345678",
}, signature="LM", title="Principal", roles=[
"Admin",
], end_date=date.fromisoformat("2024-08-01"), employment_percent=100)
# Handle response
print(res)curl --request POST \
--url https://api.meitner.se/directory/v1/employee-placement \
--header 'Client-ID: <api-key>' \
--header 'Client-Secret: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"external": {
"sourceID": "12345678"
},
"employeeID": "123e4567-e89b-12d3-a456-426614174000",
"schoolID": "123e4567-e89b-12d3-a456-426614174000",
"signature": "LM",
"title": "Principal",
"roles": [
"Admin"
],
"startDate": "2024-08-01",
"endDate": "2024-08-01",
"employmentPercent": 100
}
'const options = {
method: 'POST',
headers: {
'Client-ID': '<api-key>',
'Client-Secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
external: {sourceID: '12345678'},
employeeID: '123e4567-e89b-12d3-a456-426614174000',
schoolID: '123e4567-e89b-12d3-a456-426614174000',
signature: 'LM',
title: 'Principal',
roles: ['Admin'],
startDate: '2024-08-01',
endDate: '2024-08-01',
employmentPercent: 100
})
};
fetch('https://api.meitner.se/directory/v1/employee-placement', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meitner.se/directory/v1/employee-placement",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'external' => [
'sourceID' => '12345678'
],
'employeeID' => '123e4567-e89b-12d3-a456-426614174000',
'schoolID' => '123e4567-e89b-12d3-a456-426614174000',
'signature' => 'LM',
'title' => 'Principal',
'roles' => [
'Admin'
],
'startDate' => '2024-08-01',
'endDate' => '2024-08-01',
'employmentPercent' => 100
]),
CURLOPT_HTTPHEADER => [
"Client-ID: <api-key>",
"Client-Secret: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.meitner.se/directory/v1/employee-placement"
payload := strings.NewReader("{\n \"external\": {\n \"sourceID\": \"12345678\"\n },\n \"employeeID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"schoolID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"signature\": \"LM\",\n \"title\": \"Principal\",\n \"roles\": [\n \"Admin\"\n ],\n \"startDate\": \"2024-08-01\",\n \"endDate\": \"2024-08-01\",\n \"employmentPercent\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Client-ID", "<api-key>")
req.Header.Add("Client-Secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.meitner.se/directory/v1/employee-placement")
.header("Client-ID", "<api-key>")
.header("Client-Secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external\": {\n \"sourceID\": \"12345678\"\n },\n \"employeeID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"schoolID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"signature\": \"LM\",\n \"title\": \"Principal\",\n \"roles\": [\n \"Admin\"\n ],\n \"startDate\": \"2024-08-01\",\n \"endDate\": \"2024-08-01\",\n \"employmentPercent\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meitner.se/directory/v1/employee-placement")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Client-ID"] = '<api-key>'
request["Client-Secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external\": {\n \"sourceID\": \"12345678\"\n },\n \"employeeID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"schoolID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"signature\": \"LM\",\n \"title\": \"Principal\",\n \"roles\": [\n \"Admin\"\n ],\n \"startDate\": \"2024-08-01\",\n \"endDate\": \"2024-08-01\",\n \"employmentPercent\": 100\n}"
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"meta": {
"createdAt": "2024-01-15T10:30:00Z",
"createdBy": "987fcdeb-51a2-43d1-b567-123456789abc",
"updatedAt": "2024-01-15T14:45:00Z",
"updatedBy": "987fcdeb-51a2-43d1-b567-123456789abc"
},
"external": {
"sourceID": "12345678",
"source": "ExternalIntegrationAPI"
},
"employeeID": "123e4567-e89b-12d3-a456-426614174000",
"schoolID": "123e4567-e89b-12d3-a456-426614174000",
"signature": "LM",
"title": "Principal",
"roles": [
"Admin"
],
"startDate": "2024-08-01",
"endDate": "2024-08-01",
"archiveYear": "2024_2025",
"archivedAt": "2024-08-01T00:00:00Z",
"employmentPercent": 100
}{
"error": {
"code": "BadRequest",
"message": "The request contains invalid parameters or malformed data",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Unauthorized",
"message": "Authentication credentials are missing or invalid",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Forbidden",
"message": "You do not have permission to perform this operation",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NotFound",
"message": "The requested resource could not be found",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Conflict",
"message": "The request conflicts with the current state of the resource",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UnprocessableEntity",
"message": "Validation failed for EmployeePlacement Create endpoint",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "RateLimited",
"message": "Too many requests - rate limit exceeded",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Internal",
"message": "An unexpected server error occurred",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}Create a new EmployeePlacement
Create a new EmployeePlacement
using Meitner;
using Meitner.Models.Components;
using System;
using System.Collections.Generic;
var sdk = new MeitnerSDK(security: new Security() {
Option1 = new SecurityOption1() {
ClientCredentials = "<YOUR_API_KEY_HERE>",
ClientSecret = "<YOUR_API_KEY_HERE>",
},
});
EmployeePlacementCreate req = new EmployeePlacementCreate() {
External = new EmployeePlacementCreateExternal() {
SourceID = "12345678",
},
EmployeeID = "123e4567-e89b-12d3-a456-426614174000",
SchoolID = "123e4567-e89b-12d3-a456-426614174000",
Signature = "LM",
Title = "Principal",
Roles = new List<EmployeePlacementRole>() {
EmployeePlacementRole.Admin,
},
StartDate = DateOnly.Parse("2024-08-01"),
EndDate = DateOnly.Parse("2024-08-01"),
EmploymentPercent = 100,
};
var res = await sdk.EmployeePlacements.CreateAsync(req);
// handle responsefrom datetime import date
from meitner import Meitner, models
import os
with Meitner(
security=models.Security(
option1=models.SecurityOption1(
client_credentials=os.getenv("MEITNER_CLIENT_CREDENTIALS", ""),
client_secret=os.getenv("MEITNER_CLIENT_SECRET", ""),
),
),
) as m_client:
res = m_client.employee_placements.create(employee_id="123e4567-e89b-12d3-a456-426614174000", school_id="123e4567-e89b-12d3-a456-426614174000", start_date=date.fromisoformat("2024-08-01"), external={
"source_id": "12345678",
}, signature="LM", title="Principal", roles=[
"Admin",
], end_date=date.fromisoformat("2024-08-01"), employment_percent=100)
# Handle response
print(res)curl --request POST \
--url https://api.meitner.se/directory/v1/employee-placement \
--header 'Client-ID: <api-key>' \
--header 'Client-Secret: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"external": {
"sourceID": "12345678"
},
"employeeID": "123e4567-e89b-12d3-a456-426614174000",
"schoolID": "123e4567-e89b-12d3-a456-426614174000",
"signature": "LM",
"title": "Principal",
"roles": [
"Admin"
],
"startDate": "2024-08-01",
"endDate": "2024-08-01",
"employmentPercent": 100
}
'const options = {
method: 'POST',
headers: {
'Client-ID': '<api-key>',
'Client-Secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
external: {sourceID: '12345678'},
employeeID: '123e4567-e89b-12d3-a456-426614174000',
schoolID: '123e4567-e89b-12d3-a456-426614174000',
signature: 'LM',
title: 'Principal',
roles: ['Admin'],
startDate: '2024-08-01',
endDate: '2024-08-01',
employmentPercent: 100
})
};
fetch('https://api.meitner.se/directory/v1/employee-placement', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meitner.se/directory/v1/employee-placement",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'external' => [
'sourceID' => '12345678'
],
'employeeID' => '123e4567-e89b-12d3-a456-426614174000',
'schoolID' => '123e4567-e89b-12d3-a456-426614174000',
'signature' => 'LM',
'title' => 'Principal',
'roles' => [
'Admin'
],
'startDate' => '2024-08-01',
'endDate' => '2024-08-01',
'employmentPercent' => 100
]),
CURLOPT_HTTPHEADER => [
"Client-ID: <api-key>",
"Client-Secret: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.meitner.se/directory/v1/employee-placement"
payload := strings.NewReader("{\n \"external\": {\n \"sourceID\": \"12345678\"\n },\n \"employeeID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"schoolID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"signature\": \"LM\",\n \"title\": \"Principal\",\n \"roles\": [\n \"Admin\"\n ],\n \"startDate\": \"2024-08-01\",\n \"endDate\": \"2024-08-01\",\n \"employmentPercent\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Client-ID", "<api-key>")
req.Header.Add("Client-Secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.meitner.se/directory/v1/employee-placement")
.header("Client-ID", "<api-key>")
.header("Client-Secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external\": {\n \"sourceID\": \"12345678\"\n },\n \"employeeID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"schoolID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"signature\": \"LM\",\n \"title\": \"Principal\",\n \"roles\": [\n \"Admin\"\n ],\n \"startDate\": \"2024-08-01\",\n \"endDate\": \"2024-08-01\",\n \"employmentPercent\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meitner.se/directory/v1/employee-placement")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Client-ID"] = '<api-key>'
request["Client-Secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external\": {\n \"sourceID\": \"12345678\"\n },\n \"employeeID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"schoolID\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"signature\": \"LM\",\n \"title\": \"Principal\",\n \"roles\": [\n \"Admin\"\n ],\n \"startDate\": \"2024-08-01\",\n \"endDate\": \"2024-08-01\",\n \"employmentPercent\": 100\n}"
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"meta": {
"createdAt": "2024-01-15T10:30:00Z",
"createdBy": "987fcdeb-51a2-43d1-b567-123456789abc",
"updatedAt": "2024-01-15T14:45:00Z",
"updatedBy": "987fcdeb-51a2-43d1-b567-123456789abc"
},
"external": {
"sourceID": "12345678",
"source": "ExternalIntegrationAPI"
},
"employeeID": "123e4567-e89b-12d3-a456-426614174000",
"schoolID": "123e4567-e89b-12d3-a456-426614174000",
"signature": "LM",
"title": "Principal",
"roles": [
"Admin"
],
"startDate": "2024-08-01",
"endDate": "2024-08-01",
"archiveYear": "2024_2025",
"archivedAt": "2024-08-01T00:00:00Z",
"employmentPercent": 100
}{
"error": {
"code": "BadRequest",
"message": "The request contains invalid parameters or malformed data",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Unauthorized",
"message": "Authentication credentials are missing or invalid",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Forbidden",
"message": "You do not have permission to perform this operation",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NotFound",
"message": "The requested resource could not be found",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Conflict",
"message": "The request conflicts with the current state of the resource",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UnprocessableEntity",
"message": "Validation failed for EmployeePlacement Create endpoint",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "RateLimited",
"message": "Too many requests - rate limit exceeded",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "Internal",
"message": "An unexpected server error occurred",
"requestID": "550e8400-e29b-41d4-a716-446655440000"
}
}Authorizations
Body
Request body
The ID of the employee the placement belongs to
"123e4567-e89b-12d3-a456-426614174000"
The ID of the school the placement belongs to
"123e4567-e89b-12d3-a456-426614174000"
The start date of the placement for the employee
"2024-08-01"
External is the External-object used on Update and Create operations, since it should only be allowed to set SourceID for the guardian, the Source-field is not included.
Show child attributes
Show child attributes
{ "sourceID": "12345678" }
The employee's signature — a short code, usually their initials, used to identify the employee within the school on schedules, grade documents, and other printed material (e.g. "LM" for Lise Meitner).
"LM"
null
The title of the employee
"Principal"
null
The roles of the employee
The role of the employee in the placement
Admin, CareTeam, Manager, MealPlanner, OtherPersonnel, Scheduler, Teacher ["Admin"]
The end date of the placement for the employee
"2024-08-01"
null
The percentage of employment for the employee at this school, represented as an integer (e.g., 100 for 100%, 50 for 50%)
100
null
Response
Response for EmployeePlacement Create operation - returns the created EmployeePlacement
EmployeePlacement holds the information about an employee's placement in a school.
Unique identifier for the EmployeePlacement
"123e4567-e89b-12d3-a456-426614174000"
The ID of the employee the placement belongs to
"123e4567-e89b-12d3-a456-426614174000"
The ID of the school the placement belongs to
"123e4567-e89b-12d3-a456-426614174000"
The start date of the placement for the employee
"2024-08-01"
Metadata information for the EmployeePlacement
Show child attributes
Show child attributes
{
"createdAt": "2024-01-15T10:30:00Z",
"createdBy": "987fcdeb-51a2-43d1-b567-123456789abc",
"updatedAt": "2024-01-15T14:45:00Z",
"updatedBy": "987fcdeb-51a2-43d1-b567-123456789abc"
}
External is a reusable object that can be used to store external information about the guardian from another system, used for third-party integration tracking.
Show child attributes
Show child attributes
{
"sourceID": "12345678",
"source": "ExternalIntegrationAPI"
}
The employee's signature — a short code, usually their initials, used to identify the employee within the school on schedules, grade documents, and other printed material (e.g. "LM" for Lise Meitner).
"LM"
null
The title of the employee
"Principal"
null
The roles of the employee
The role of the employee in the placement
Admin, CareTeam, Manager, MealPlanner, OtherPersonnel, Scheduler, Teacher ["Admin"]
The end date of the placement for the employee
"2024-08-01"
null
The year the placement was archived for the employee, in the format YYYY_YYYY where the first year is the autumn and the second year is the spring.
"2024_2025"
null
The timestamp the placement was archived for the employee
"2024-08-01T00:00:00Z"
null
The percentage of employment for the employee at this school, represented as an integer (e.g., 100 for 100%, 50 for 50%)
100
null