Eduframe - API (v1)

Download OpenAPI specification:Download

The Eduframe API is organized around REST and is formatted in JSON. We try to keep the amount of changes to the API to a minimum but it is possible that it is changed.

Authentication

For authenticating through Eduframe API v1 we use OAuth2 token. The user needs an API key to send together with the request as Bearer <api key> in the authorization header. If there are requests that require authentication a 403 Forbidden error or a 404 Not Found error will be returned.

Sorting

For sorting the data, the following format of base_url is used (e.g.): api/v1/planned_courses?sort=start_date for ascending sort (default sorting) and api/v1/planned_courses?sort=start_date:desc for descending sort.

Filtering

For adding a filter, the following format of base_url is used (e.g.): api/v1/planned_courses?min_cost=200. The allowed filters are shown at the relevant actions.

Blank fields

Blank fields are included as null.

Boolean values

All boolean parameters can be passed as true, false, 1 or 0. And are returned as true or false.

Date Format

Some requests generate timestamps (a timestamp is generated at the moment the API call is made) or allow specifying them. All timestamps are returned in ISO 8601 format: yyyy-MM-ddTHH:mm:ss.SSSZ. If providing a date, just make sure you follow the same ISO standard.

HTTP verbs

For each request the appropriate HTTP verbs are used. GET is used for retrieving resources, POST is used for creating resources, PUT is used for updated resources with partial JSON data. A PUT request can accept one or more parameters to update the resource; the parameters that are not updated keep their original values, DELETE is used for deleting resources.

Pagination

Requests that return multiple items will be paginated to 25 items by default. You can select a page with the page query parameter. When omitted, the first page is returned by default. You can set a custom per-page amount with the per_page query parameter (with a maximum of 100). The Link header includes pagination information. For example: Link: <https://api.eduframe.nl/courses?page=3&per_page=100>; rel="next", <https://api.eduframe.nl/courses?page=50&per_page=100>; rel="last"

Errors

In the Eduframe API the general codes are: the 2xx range indicates a successful request; the 4xx range indicates an error representing the failure of giving the provided information(e.g. a required parameter was omitted, a certain include/filter is not allowed, unauthorized access, etc.); the 5xx range indicates an error with the Eduframe's servers.

WebHooks

Webhooks allow you to build or set up integrations, such as Azure Logic Apps, which subscribe to certain events on Eduframe. When one of those events is triggered, we will send a HTTP POST payload to the webhook's configured URL. More info can be found at the webhooks documentation. Eduframe has a 10-second timeout for each webhook sent, which means you want to make sure you have returned a response before this time limit elapses. If traffic spikes and you don't respond quickly, you begin to accumulate a backlog of webhooks and may start dropping some.

accounts

Get all accounts

Authorizations:
Bearer
query Parameters
search
string

Filter results on search

key_contact_user_id
integer

Filter results on key_contact_user_id

user_id
integer

Filter results on user_id

account_type
string (AccountType)
Enum: "business" "personal"

Filter results on account_type

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an account

Authorizations:
Bearer
Request Body schema: application/json
required
name
required
string

Arbitrary string representing the name of the account. Is autogenerated for personal accounts.

email
string or null <email>

A string representing the billing e-mail of the account

phone
string or null

A string representing the phone number of the account

label_ids
Array of integers

IDs of the labels

custom
object

The custom properties of the user.

object
Array of objects

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "phone": "string",
  • "label_ids": [
    ],
  • "custom": { },
  • "address_attributes": {
    },
  • "signup_answers_attributes": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "email": "user@example.com",
  • "phone": "string",
  • "account_type": "business",
  • "label_ids": [
    ],
  • "personal_user_id": 0,
  • "slug": "string",
  • "users_count": 0,
  • "visible": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "custom": { },
  • "address": {
    }
}

Get a single account

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "email": "user@example.com",
  • "phone": "string",
  • "account_type": "business",
  • "label_ids": [
    ],
  • "personal_user_id": 0,
  • "slug": "string",
  • "users_count": 0,
  • "visible": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "custom": { },
  • "address": {
    }
}

affiliations

Get all affiliations

Authorizations:
Bearer
query Parameters
user_id
integer

Filter results on user_id

account_id
integer

Filter results on account_id

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an affiliation affiliations

Authorizations:
Bearer
Request Body schema: application/json
required
user_id
required
integer

Unique identifier of the associated user

account_id
required
integer

Unique identifier of the associated account

key_contact
boolean
Default: false

Boolean indicating if this user is a key contact of the account.

Responses

Request samples

Content type
application/json
{
  • "user_id": 0,
  • "account_id": 0,
  • "key_contact": false
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "account_id": 0,
  • "user_id": 0,
  • "key_contact": false,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Delete an affiliation

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

Update an affiliation.

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
key_contact
boolean

Boolean indicating if this user is a key contact of the account.

user_id
integer

Unique identifier of the associated user

account_id
integer

Unique identifier of the associated account

Responses

Request samples

Content type
application/json
{
  • "key_contact": true,
  • "user_id": 0,
  • "account_id": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "account_id": 0,
  • "user_id": 0,
  • "key_contact": false,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

attendances

Get all attendance records

Authorizations:
Bearer
query Parameters
meeting_id
integer

Filter attendances on meeting_id

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Set an attendance.

Authorizations:
Bearer
Request Body schema: application/json
required
meeting_id
integer

Unique identifier of the meeting.

enrollment_id
integer

Unique identifier of the enrollment.

state
string (AttendanceState)
Enum: "absent" "absent_with_leave" "attended" "blanco" "late"

Indicator of the attendance state.

comment
string or null

Comment about this attendance.

Responses

Request samples

Content type
application/json
{
  • "meeting_id": 0,
  • "enrollment_id": 0,
  • "state": "absent",
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "meeting_id": 0,
  • "enrollment_id": 0,
  • "state": "absent",
  • "comment": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

authentications

Create an authentication.

Authorizations:
Bearer
Request Body schema: application/json
required
uid
required
string

Login identifier.

user_id
required
integer

Identifier of the associated User.

authentication_provider_type
required
string (AuthenticationProviderType)
Enum: "azure_active_directory" "eduframe" "openid_connect" "surf_conext"

Type of the associated AuthenticationProvider.

Responses

Request samples

Content type
application/json
{
  • "uid": "string",
  • "user_id": 0,
  • "authentication_provider_type": "azure_active_directory"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "user_id": 0,
  • "authentication_provider_id": 0,
  • "uid": "string",
  • "otp_enabled": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Get the authentications of an user

Authorizations:
Bearer
path Parameters
user_id
required
integer
query Parameters
provider
string (AuthenticationProviderType)
Enum: "azure_active_directory" "eduframe" "openid_connect" "surf_conext"

Filter results on provider

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Remove an authentication from a user. NOTE: It is impossible to remove the last authentication for a user.

Authorizations:
Bearer
path Parameters
user_id
required
integer
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

catalog-products

Get all catalog products

Authorizations:
Bearer
query Parameters
published
string
Value: "published"

Show only published products

category_id
integer

Filter results on category_id

productable_type
string
Enum: "Course" "Program::Program"

Filter results on productable_type

search
string

Filter results on search

sort
Array of strings
Items Enum: "id:asc" "id:desc" "position:asc" "position:desc"

Sort the results. Can change order by using <sort_by>:<direction> where <direction> is either asc or desc

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get a catalog product record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "slug": "string",
  • "label_ids": [
    ],
  • "cost_scheme": "free",
  • "cost": "string",
  • "currency": "EUR",
  • "productable_type": "Course",
  • "productable_id": 0,
  • "avatar": "string",
  • "position": 0,
  • "conditions_or_default": "string",
  • "category_id": 0,
  • "is_published": true,
  • "show_on_website": true,
  • "signup_url": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "course_tab_contents": [
    ],
  • "custom": { }
}

Update a catalog product

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
category_id
integer

Identifier of the category of the course.

is_published
boolean

Boolean showing if the product is published or not.

custom
object

The custom properties of the product.

Array of objects

Responses

Request samples

Content type
application/json
{
  • "category_id": 0,
  • "is_published": true,
  • "custom": { },
  • "course_tab_contents_attributes": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "slug": "string",
  • "label_ids": [
    ],
  • "cost_scheme": "free",
  • "cost": "string",
  • "currency": "EUR",
  • "productable_type": "Course",
  • "productable_id": 0,
  • "avatar": "string",
  • "position": 0,
  • "conditions_or_default": "string",
  • "category_id": 0,
  • "is_published": true,
  • "show_on_website": true,
  • "signup_url": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "course_tab_contents": [
    ],
  • "custom": { }
}

catalog-variants

Get all catalog variants

Authorizations:
Bearer
query Parameters
published_public
string
Value: "published_public"

Only show published variants and planned_courses that are either planned or in progress

product_id
integer

Filter results on product_id

variantable_id
integer

Filter results on variantable_id

variantable_type
string
Enum: "planned_course" "program_edition"

Filter results on variantable_type

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get a catalog variant record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "product_id": 0,
  • "name": "string",
  • "sku": "string",
  • "cost_scheme": "free",
  • "cost": "string",
  • "currency": "EUR",
  • "variantable_type": "PlannedCourse",
  • "variantable_id": 0,
  • "availability": "available",
  • "available_places": 0,
  • "is_published": true,
  • "show_on_website": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "custom": { }
}

Update a catalog variant

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
is_published
required
boolean

Boolean showing if the variant is published or not.

Responses

Request samples

Content type
application/json
{
  • "is_published": true
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "product_id": 0,
  • "name": "string",
  • "sku": "string",
  • "cost_scheme": "free",
  • "cost": "string",
  • "currency": "EUR",
  • "variantable_type": "PlannedCourse",
  • "variantable_id": 0,
  • "availability": "available",
  • "available_places": 0,
  • "is_published": true,
  • "show_on_website": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "custom": { }
}

categories

Get all category records

Authorizations:
Bearer
query Parameters
published
string
Value: "published"

Show only published categories

sort
Array of strings
Items Enum: "position:asc" "position:desc"

Sort the results. Can change order by using <sort_by>:<direction> where <direction> is either asc or desc

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a category.

Authorizations:
Bearer
Request Body schema: application/json
required
name
required
string

Title of the category.

description
string or null

The description of the category.

is_published
boolean

Boolean if the category is published on the website.

meta_title
string or null

The meta title of the category, used for SEO (Search Engine Optimisation) purposes.

meta_description
string or null

The meta description of the category, used for SEO (Search Engine Optimisation) purposes.

parent_id
integer or null

Unique identifier of the parent category

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "is_published": true,
  • "meta_title": "string",
  • "meta_description": "string",
  • "parent_id": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "position": 0,
  • "avatar": "string",
  • "avatar_url": "string",
  • "products_count": 0,
  • "courses_count": 0,
  • "children_count": 0,
  • "slug": "string",
  • "description": "string",
  • "is_published": true,
  • "meta_title": "string",
  • "meta_description": "string",
  • "parent_id": 0,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Get a category record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "position": 0,
  • "avatar": "string",
  • "avatar_url": "string",
  • "products_count": 0,
  • "courses_count": 0,
  • "children_count": 0,
  • "slug": "string",
  • "description": "string",
  • "is_published": true,
  • "meta_title": "string",
  • "meta_description": "string",
  • "parent_id": 0,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Update a category.

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
name
string

Title of the category.

slug
string

Friendly identifier of a category.

description
string or null

The description of the category.

is_published
boolean

Boolean if the category is published on the website.

meta_title
string or null

The meta title of the category, used for SEO (Search Engine Optimisation) purposes.

meta_description
string or null

The meta description of the category, used for SEO (Search Engine Optimisation) purposes.

parent_id
integer or null

Unique identifier of the parent category

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "slug": "string",
  • "description": "string",
  • "is_published": true,
  • "meta_title": "string",
  • "meta_description": "string",
  • "parent_id": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "position": 0,
  • "avatar": "string",
  • "avatar_url": "string",
  • "products_count": 0,
  • "courses_count": 0,
  • "children_count": 0,
  • "slug": "string",
  • "description": "string",
  • "is_published": true,
  • "meta_title": "string",
  • "meta_description": "string",
  • "parent_id": 0,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

comments

Create a comment.

Authorizations:
Bearer
Request Body schema: application/json
required
content
required
string

A string representing the content of a comment.

commentable_id
integer

Identifier of the subject the comment is linked to.

commentable_type
string (CommentType)
Enum: "Account" "Invoice" "Lead" "Order" "PlannedCourse" "Program::Editions::Edition" "Task" "User"

Responses

Request samples

Content type
application/json
{
  • "content": "string",
  • "commentable_id": 0,
  • "commentable_type": "Account"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "content": "string",
  • "creator_id": 0,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Delete a comment.

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

Update a comment.

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
content
required
string

A string representing the content of a comment.

Responses

Request samples

Content type
application/json
{
  • "content": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "content": "string",
  • "creator_id": 0,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

course_locations

Get all course location records

Authorizations:
Bearer
query Parameters
page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a course location.

Authorizations:
Bearer
Request Body schema: application/json
required
name
required
string

Name of the location where the course is held.

object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "address_attributes": {
    }
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "address": {
    }
}

Get a course location record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "address": {
    }
}

Delete a course location.

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

Update a course location.

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
name
required
string

Name of the location where the course is held.

object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "address_attributes": {
    }
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "address": {
    }
}

course_tabs

Get all course tab records

Authorizations:
Bearer

Responses

Response samples

Content type
application/json
[
  • {
    }
]

course_variants

Get all course variant records

Authorizations:
Bearer
query Parameters
page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a course variant

Authorizations:
Bearer
Request Body schema: application/json
required
name
required
string

The name of the course variant.

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Get a course variant record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

courses

Get all course records

Authorizations:
Bearer
query Parameters
published
string
Value: "published"

Show only published courses

id
Array of integers
Deprecated

Filter results on id

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a course.

Authorizations:
Bearer
Request Body schema: application/json
required
category_id
required
integer

Identifier of the category of the course.

name
required
string

The name of the course.

code
required
string

The code of the course.

duration
string or null

The duration of the course.

level
string or null

A string indicating the level of the course.

meta_title
required
string or null

Meta title of the course for SEO purposes.

meta_description
required
string or null

Meta description of the course for SEO purposes.

result
string or null

The result of the course

cost
required
string or null

The price to be paid for this course.

cost_scheme
required
string
Enum: "student" "order" "tbd" "free"

How should the course be paid by default.

is_published
required
boolean

Boolean representing the publishable status of the course.

conditions
string

The conditions of the course.

custom
object

The custom properties of the program.

Array of objects

Responses

Request samples

Content type
application/json
{
  • "category_id": 0,
  • "name": "string",
  • "code": "string",
  • "duration": "string",
  • "level": "string",
  • "meta_title": "string",
  • "meta_description": "string",
  • "result": "string",
  • "cost": "string",
  • "cost_scheme": "student",
  • "is_published": true,
  • "conditions": "string",
  • "custom": { },
  • "course_tab_contents_attributes": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "position": 0,
  • "starting_price": "string",
  • "signup_url": "string",
  • "slug": "string",
  • "slug_history": [
    ],
  • "avatar": "string",
  • "avatar_url": "string",
  • "avatar_thumb_url": "string",
  • "conditions_or_default": "string",
  • "website_url": "string",
  • "certificate_template_id": 0,
  • "category_id": 0,
  • "name": "string",
  • "code": "string",
  • "duration": "string",
  • "level": "string",
  • "meta_title": "string",
  • "meta_description": "string",
  • "result": "string",
  • "cost": "string",
  • "cost_scheme": "free",
  • "is_published": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "course_tab_contents": [
    ],
  • "credit_definitions": [
    ],
  • "custom": {
    },
  • "label_ids": [
    ]
}

Get a course record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "position": 0,
  • "starting_price": "string",
  • "signup_url": "string",
  • "slug": "string",
  • "slug_history": [
    ],
  • "avatar": "string",
  • "avatar_url": "string",
  • "avatar_thumb_url": "string",
  • "conditions_or_default": "string",
  • "website_url": "string",
  • "certificate_template_id": 0,
  • "category_id": 0,
  • "name": "string",
  • "code": "string",
  • "duration": "string",
  • "level": "string",
  • "meta_title": "string",
  • "meta_description": "string",
  • "result": "string",
  • "cost": "string",
  • "cost_scheme": "free",
  • "is_published": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "course_tab_contents": [
    ],
  • "credit_definitions": [
    ],
  • "custom": {
    },
  • "label_ids": [
    ]
}

Update a course.

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
category_id
integer

Identifier of the category of the course.

name
string

The name of the course.

code
string

The code of the course.

duration
string or null

The duration of the course.

level
string or null

A string indicating the level of the course.

meta_title
string or null

Meta title of the course for SEO purposes.

meta_description
string or null

Meta description of the course for SEO purposes.

result
string or null

The result of the course

cost
string or null

The price to be paid for this course.

cost_scheme
string
Enum: "student" "order" "tbd" "free"

How should the course be paid by default.

is_published
boolean

Boolean representing the publishable status of the course.

conditions
string

The conditions of the course.

custom
object

The custom properties of the program.

Array of objects

Responses

Request samples

Content type
application/json
{
  • "category_id": 0,
  • "name": "string",
  • "code": "string",
  • "duration": "string",
  • "level": "string",
  • "meta_title": "string",
  • "meta_description": "string",
  • "result": "string",
  • "cost": "string",
  • "cost_scheme": "student",
  • "is_published": true,
  • "conditions": "string",
  • "custom": { },
  • "course_tab_contents_attributes": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "position": 0,
  • "starting_price": "string",
  • "signup_url": "string",
  • "slug": "string",
  • "slug_history": [
    ],
  • "avatar": "string",
  • "avatar_url": "string",
  • "avatar_thumb_url": "string",
  • "conditions_or_default": "string",
  • "website_url": "string",
  • "certificate_template_id": 0,
  • "category_id": 0,
  • "name": "string",
  • "code": "string",
  • "duration": "string",
  • "level": "string",
  • "meta_title": "string",
  • "meta_description": "string",
  • "result": "string",
  • "cost": "string",
  • "cost_scheme": "free",
  • "is_published": true,
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "course_tab_contents": [
    ],
  • "credit_definitions": [
    ],
  • "custom": {
    },
  • "label_ids": [
    ]
}

credit_categories

Get all credit category records

Authorizations:
Bearer
query Parameters
page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

credits

Get all credit records

Authorizations:
Bearer
query Parameters
student_id
integer

Filter results on student_id

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

educators

Get an educator record

Authorizations:
Bearer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "slug": "string",
  • "standard_planning_text": "string",
  • "default_invoice_vat_multiplier": "string",
  • "phone": "string",
  • "website_url": "string",
  • "signup_default_account_type": "personal",
  • "signup_contact_info": "string",
  • "currency": "EUR",
  • "country": "AD",
  • "email": "string",
  • "time_zone": "string",
  • "name": "string",
  • "locale": "de",
  • "terms_url": "string",
  • "invoice_address": {
    }
}

enrollments

Get all enrollment records

Authorizations:
Bearer
query Parameters
student_id
integer

Filter results on student_id

planned_course_id
integer

Filter results on planned_course_id

status
Array of strings
Items Enum: "confirmed" "active" "canceled" "completed"

Filter results on status

with_canceled
boolean
Default: true

Filter results based on whether they include a canceled status or not

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get an enrollment record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "student_id": 0,
  • "planned_course_id": 0,
  • "order_id": 0,
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "status": "confirmed",
  • "graduation_state": "awaiting_judgement",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "grade": {
    }
}

Update an enrollment

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
end_date
required
string or null

If it is an enrollment of a fixed course, it equals the end date. For a flexible course, it returns the enrollment specific end date.

Responses

Request samples

Content type
application/json
{
  • "end_date": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "student_id": 0,
  • "planned_course_id": 0,
  • "order_id": 0,
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "status": "confirmed",
  • "graduation_state": "awaiting_judgement",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "grade": {
    }
}

Cancel an enrollment

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "student_id": 0,
  • "planned_course_id": 0,
  • "order_id": 0,
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "status": "confirmed",
  • "graduation_state": "awaiting_judgement",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "grade": {
    }
}

grades

Create a grade

Authorizations:
Bearer
Request Body schema: application/json
required
grade
required
string or null

The grade awarded (at least one of grade and score is required)

score
required
number or null

The score awarded (at least one of grade and score is required)

gradeable_id
integer

Unique model identifier of the gradeable (enrollment / ...)

gradeable_type
string

Model type of the gradeable (enrollment / ...)

comment
string or null

Additional comment about the grade

enrollment_id
integer

Unique identifier of the enrollment

Responses

Request samples

Content type
application/json
{
  • "grade": "string",
  • "score": 0,
  • "gradeable_id": 0,
  • "gradeable_type": "string",
  • "comment": "string",
  • "enrollment_id": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "grader_id": 0,
  • "result": "string",
  • "grade": "string",
  • "score": "string",
  • "gradeable_id": 0,
  • "gradeable_type": "string",
  • "comment": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Get a grade record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "grader_id": 0,
  • "result": "string",
  • "grade": "string",
  • "score": "string",
  • "gradeable_id": 0,
  • "gradeable_type": "string",
  • "comment": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Delete a grade.

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

Update a grade

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
grade
string or null

The grade awarded (at least one of grade and score is required)

score
number or null

The score awarded (at least one of grade and score is required)

gradeable_id
integer

Unique model identifier of the gradeable (enrollment / ...)

gradeable_type
string

Model type of the gradeable (enrollment / ...)

comment
string or null

Additional comment about the grade

enrollment_id
integer

Unique identifier of the enrollment

Responses

Request samples

Content type
application/json
{
  • "grade": "string",
  • "score": 0,
  • "gradeable_id": 0,
  • "gradeable_type": "string",
  • "comment": "string",
  • "enrollment_id": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "grader_id": 0,
  • "result": "string",
  • "grade": "string",
  • "score": "string",
  • "gradeable_id": 0,
  • "gradeable_type": "string",
  • "comment": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

invoice_vats

Get all invoice vat records

Authorizations:
Bearer
query Parameters
page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an invoice vat.

Authorizations:
Bearer
Request Body schema: application/json
required
name
required
string

Name of the invoice vat.

percentage
required
string

Number representing the VAT percentage.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "percentage": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "percentage": "string",
  • "has_vat": true
}

invoices

Get all invoice records

Authorizations:
Bearer
query Parameters
account_id
integer

Filter results on account_id

status
Array of strings (InvoiceStatus)
Items Enum: "concept" "open" "expired" "paid" "deleted"

Filter results on status

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an invoice.

Authorizations:
Bearer
Request Body schema: application/json
required
account_id
required
integer

Identifier of the account.

invoice_set_id
integer or null
Deprecated

Unique identifier of the invoice set.

feature
string or null

Some description of the invoice which is displayed on the invoice.

footnote
required
string or null

The note displayed at the bottom of the invoice.

Array of objects

Responses

Request samples

Content type
application/json
{
  • "account_id": 0,
  • "invoice_set_id": 0,
  • "feature": "string",
  • "footnote": "string",
  • "invoice_items_attributes": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "reference_id": "string",
  • "number_int": 0,
  • "order_number": 0,
  • "status": "concept",
  • "expiration_date": "string",
  • "opened_at": "string",
  • "description": "string",
  • "account_name": "string",
  • "currency": "EUR",
  • "total_incl": "string",
  • "total_excl": "string",
  • "total_open": "string",
  • "pdf_url": "string",
  • "xml_url": "string",
  • "number": "string",
  • "account_id": 0,
  • "invoice_set_id": 0,
  • "feature": "string",
  • "footnote": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "invoice_items": [
    ],
  • "payments": [
    ]
}

Get an invoice record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "reference_id": "string",
  • "number_int": 0,
  • "order_number": 0,
  • "status": "concept",
  • "expiration_date": "string",
  • "opened_at": "string",
  • "description": "string",
  • "account_name": "string",
  • "currency": "EUR",
  • "total_incl": "string",
  • "total_excl": "string",
  • "total_open": "string",
  • "pdf_url": "string",
  • "xml_url": "string",
  • "number": "string",
  • "account_id": 0,
  • "invoice_set_id": 0,
  • "feature": "string",
  • "footnote": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "invoice_items": [
    ],
  • "payments": [
    ]
}

Changes the state from concept to open. This will assign the actual invoice number so it's ready for sending. If the current state is not concept, this endpoint does nothing.

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "reference_id": "string",
  • "number_int": 0,
  • "order_number": 0,
  • "status": "concept",
  • "expiration_date": "string",
  • "opened_at": "string",
  • "description": "string",
  • "account_name": "string",
  • "currency": "EUR",
  • "total_incl": "string",
  • "total_excl": "string",
  • "total_open": "string",
  • "pdf_url": "string",
  • "xml_url": "string",
  • "number": "string",
  • "account_id": 0,
  • "invoice_set_id": 0,
  • "feature": "string",
  • "footnote": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "invoice_items": [
    ],
  • "payments": [
    ]
}

Get the base64 encoded version of the invoice PDF

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "property1": { },
  • "property2": { }
}

labels

Get all labels

Authorizations:
Bearer
query Parameters
model_type
string
Enum: "Lead" "Order" "Catalog::Product" "User" "Account" "Teacher" "Program::Enrollment"

Filter results on model_type

search
string

Filter results on search

id
Array of integers

Filter results on id

page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a label

Authorizations:
Bearer
Request Body schema: application/json
required
name
required
string

The name of the label

color
string

Hex code of the color of the label

model_type
required
string
Enum: "Lead" "Order" "Catalog::Product" "User" "Account" "Teacher"

The model type for which this label is made available

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "color": "string",
  • "model_type": "Lead"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "color": "#aa33cc",
  • "model_type": "Account",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Get a label

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "color": "#aa33cc",
  • "model_type": "Account",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Delete a label

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

Update a label

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
name
string

The name of the label

color
string

Hex code of the color of the label

model_type
string
Enum: "Lead" "Order" "Catalog::Product" "User" "Account" "Teacher"

The model type for which this label is made available

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "color": "string",
  • "model_type": "Lead"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "color": "#aa33cc",
  • "model_type": "Account",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Add label to an order

Authorizations:
Bearer
path Parameters
id
required
integer
Request Body schema: application/json
required
label_id
required
integer

Unique identifier of the label.

Responses

Request samples

Content type
application/json
{
  • "label_id": 0
}

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

leads

Get all lead records

Authorizations:
Bearer
query Parameters
page
integer >= 1
Default: 1
Example: page=2

The page of the results to retrieve. Note: It's almost never necessary to use this parameter directly, the URL should be retrieved from the Link header.

per_page
integer [ 1 .. 100 ]
Default: 25
Example: per_page=10

The number of results to retrieve for this page.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a lead.

Authorizations:
Bearer
Request Body schema: application/json
required
title
required
string

Title of the lead

account_id
integer or null

ID of the account linked to this lead

user_id
integer or null

ID of the user linked to this lead

value
string or null

Decimal representing the price of a lead

company_name
string or null

Name of the company where this lead comes from

first_name
string or null

The first name of the lead

middle_name
string or null

The middle name of the lead

last_name
string or null

The last name of the lead

administrator_id
integer or null

ID of administrator that owns the lead

email
string or null

The email of the lead

phone
string or null

The phone number of the lead Note : Use an international phone format unless the phone number is from the educator configured country.

status
string
Enum: "prospect" "waiting_list" "won" "lost" "archive"

The status of the lead

quality
required
number or null

Star scoring for the lead

wants_newsletter
boolean

Indicates if lead wants to receive the newsletter or not

comment
string or null

Comment for a lead

label_ids
Array of integers

IDs of the labels

course_ids
Array of integers
Deprecated

IDs of the courses the lead is interested in

object
Array of objects
Deprecated

Array of courses and planned courses the lead is interested in. Note that the lead_products field takes priority and this field will then be ignored.

Array of objects

Array of products and variants the lead is interested in.

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "account_id": 0,
  • "user_id": 0,
  • "value": "string",
  • "company_name": "string",
  • "first_name": "string",
  • "middle_name": "string",
  • "last_name": "string",
  • "administrator_id": 0,
  • "email": "string",
  • "phone": "string",
  • "status": "prospect",
  • "quality": 0,
  • "wants_newsletter": true,
  • "comment": "string",
  • "label_ids": [
    ],
  • "course_ids": [
    ],
  • "address_attributes": {
    },
  • "courses_leads_attributes": [
    ],
  • "lead_products": [
    ]
}

Response samples

Content type
application/json
{
  • "errors": { },
  • "code": 0,
  • "message": "string"
}

Get one lead record

Authorizations:
Bearer
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json