curl --request GET \
--url https://api.scholarlysoftware.com/api/v1/primary_appointments \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.scholarlysoftware.com/api/v1/primary_appointments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.scholarlysoftware.com/api/v1/primary_appointments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "primary_appointment",
"attributes": {
"created_at": "<string>",
"updated_at": "<string>",
"is_current": true,
"title": "Associate Professor",
"effective_from": "2025-01-01",
"track_type": "Research",
"external_id": "EMP001234",
"effective_to": "2026-01-01",
"terminated_on": "2026-12-31",
"termination_note": "Resigned to accept position elsewhere",
"percent_allocation": 100,
"appointment_type": "<string>",
"full_time": true,
"note": "<div>This is a note with <strong>formatting</strong></div>",
"note_as_plain_text": "This is a note with formatting",
"custom_fields": {}
},
"relationships": {
"profile": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "profile",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"rank": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "rank",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"department": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "department",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"campus": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "campus",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
}
}
],
"meta": {
"page": {
"size": 123
},
"total": 123
},
"links": {
"self": "<string>",
"first": "<string>",
"next": "<string>",
"prev": "<string>",
"last": "<string>"
}
}{
"errors": [
{
"status": "<string>",
"title": "<string>",
"detail": "<string>"
}
]
}List primary appointments
Returns a list of primary appointments
curl --request GET \
--url https://api.scholarlysoftware.com/api/v1/primary_appointments \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.scholarlysoftware.com/api/v1/primary_appointments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.scholarlysoftware.com/api/v1/primary_appointments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "primary_appointment",
"attributes": {
"created_at": "<string>",
"updated_at": "<string>",
"is_current": true,
"title": "Associate Professor",
"effective_from": "2025-01-01",
"track_type": "Research",
"external_id": "EMP001234",
"effective_to": "2026-01-01",
"terminated_on": "2026-12-31",
"termination_note": "Resigned to accept position elsewhere",
"percent_allocation": 100,
"appointment_type": "<string>",
"full_time": true,
"note": "<div>This is a note with <strong>formatting</strong></div>",
"note_as_plain_text": "This is a note with formatting",
"custom_fields": {}
},
"relationships": {
"profile": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "profile",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"rank": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "rank",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"department": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "department",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"campus": {
"links": {
"related": "<string>"
},
"meta": {},
"data": {
"type": "campus",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
}
}
],
"meta": {
"page": {
"size": 123
},
"total": 123
},
"links": {
"self": "<string>",
"first": "<string>",
"next": "<string>",
"prev": "<string>",
"last": "<string>"
}
}{
"errors": [
{
"status": "<string>",
"title": "<string>",
"detail": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Bearer token
Query Parameters
Comma-separated list of relationships to include. Allowed: profile, rank, department, campus
Sort order. Prefix with - for descending. Allowed: created_at, updated_at
Filter results. Available filters: created_at, created_at.neq, created_at.lt, created_at.lte, created_at.gt, created_at.gte, updated_at, updated_at.neq, updated_at.lt, updated_at.lte, updated_at.gt, updated_at.gte, is_current (boolean, Limit to currently-effective records.), title, title.neq, title.cont (case-insensitive substring match), title.in (list of values, comma-separated), title.nin (list of values, comma-separated), effective_from, effective_from.neq, effective_from.lt, effective_from.lte, effective_from.gt, effective_from.gte, track_type, track_type.neq, track_type.cont (case-insensitive substring match), track_type.in (list of values, comma-separated), track_type.nin (list of values, comma-separated), external_id, external_id.neq, external_id.cont (case-insensitive substring match), external_id.in (list of values, comma-separated), external_id.nin (list of values, comma-separated), effective_to, effective_to.neq, effective_to.lt, effective_to.lte, effective_to.gt (null values are treated as unbounded above and match this filter), effective_to.gte (null values are treated as unbounded above and match this filter), terminated_on, terminated_on.neq, terminated_on.lt, terminated_on.lte, terminated_on.gt, terminated_on.gte, percent_allocation (number), percent_allocation.neq (number), percent_allocation.lt (number), percent_allocation.lte (number), percent_allocation.gt (number), percent_allocation.gte (number), appointment_type, appointment_type.neq, appointment_type.cont (case-insensitive substring match), appointment_type.in (list of values, comma-separated), appointment_type.nin (list of values, comma-separated), full_time (boolean), profile, rank, department, campus, campus.exists (boolean). Filter by a custom field with filter[custom_fields][<key>]=<value>. The neq, cont, in, nin, lt, lte, gt, and gte operators take the form filter[custom_fields.<operator>][<key>]=<value>, where the field's type decides which apply.
Number of items per page (max 100)
Cursor for next page
Cursor for previous page