Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Workramp Academies API
version: '1.0'
description: 'Operations tagged Academies across 2 of this provider''s published API definitions: workramp-api-settings-openapi.yml, workramp-json-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://app.workramp.com
security:
- sec0: []
tags:
- name: Academies
paths:
/api/v1/academies/{academy_id}/users:
get:
summary: Get All Contacts
description: Get all Contacts in an Academy. Results can be filtered by name, email, email domain, status, and custom registration fields. All filters combine with AND. By default, both Active and Deactivated Contacts are returned, including Contacts with a pending invitation. Results are always sorted by email, ascending.
operationId: get-academy-customer-users
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: page
in: query
description: The page number of the results
schema:
type: integer
format: int32
default: 1
- name: per_page
in: query
description: The number of results returned per page
schema:
type: integer
format: int32
default: 20
- name: name
in: query
description: Optional. Returns Contacts whose name contains this value (case-insensitive, partial match).
schema:
type: string
- name: email
in: query
description: Optional. Returns Contacts whose email address contains this value (case-insensitive partial match). For example, `email=bob@example.com` also matches `alice.bob@example.com`. To match one address exactly, use `exact_email`.
schema:
type: string
- in: query
name: email_domain
schema:
type: string
description: 'Optional. Returns Contacts whose email address ends in exactly `@<value>` (case-insensitive). Subdomains are not included: `example.com` does not match `bob@mail.example.com`.'
- in: query
name: exact_email
schema:
type: string
description: Optional. Returns only the Contact whose email address exactly matches this value. Matching is case-insensitive, and surrounding whitespace is ignored. No partial matching is performed. When `exact_email` is provided, the `email` and `email_domain` parameters are ignored.
- name: status
in: query
description: Optional. `Active` returns only active Contacts; `Deactivated` returns only deactivated Contacts. If omitted, both are returned.
schema:
type: string
enum:
- Active
- Deactivated
- name: custom_registration_fields
in: query
description: Optional object with a single key-value pair where the key represents the custom registration field name and the value represents the custom attribute field value. (e.g. `custom_registration_fields%5Bnickname%5D=Bobby` ) -- **NOTE:** This tool can't generate this parameter for you because the parameter name itself (such as `custom_registration_fields[example]`) is dynamic.
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"page\": 1,\n \"per_page\": 100,\n \"has_more\": false,\n \"url\": \"https://app.workramp.com/api/v1/academies/:academy_id/users\",\n \"data\": {\n \"users\": [\n {\n \"id\": \"d3d6edf4-e25d-11ea-be19-0242ac140003\",\n \"email\": \"ted+apitester1234@workramp.com\",\n \"segments\": [],\n \"display_name\": \"Jane Doe\",\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"created_at\": \"2022-06-08 14:59:04 UTC\",\n \"custom_registration_field_values\": [\n {\n \"value\": \"Gold\",\n \"name\": \"customer_tier\"\n }\n ]\n },\n {...},\n {...}\n ]\n }\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
tags:
- Academies
post:
summary: Create Contact
description: Creates a new contact in your Academy. You can create a contact with a password, or, if you use SSO or another login mechanism, you can just use this to ensure that the user has been created, for instance, if you want to add them to a segment before they first visit the site.
operationId: create-contact
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: Content-Type
in: header
description: Always application/json
schema:
type: string
default: application/json
requestBody:
content:
application/json:
schema:
type: object
required:
- email
- name
properties:
email:
type: string
description: The email address of the Contact
name:
type: string
description: The name of the Contact
password:
type: string
description: (Optional) If you'd like the contact to sign in with a password. Not needed when using SSO, magic links, or another login mechanism.
custom_registration_fields:
type: string
description: 'JSON dictionary where keys are the "API Name" of your registration field to set, and the values are the values to set. e.g. `{"favorite_color": "blue"}`'
default: '{}'
format: json
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"url\": \"/api/v1/academies/c8be6efc-c511-11ee-8dca-000000000001/users\",\n \"data\": {\n \"user\": {\n \"id\": \"01902776-8464-76c5-a173-293333b17baa\",\n \"email\": \"john@doe.com\",\n \"segments\": [],\n \"display_name\": \"John Doe\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"created_at\": \"2024-06-17 18:29:56 UTC\",\n \"custom_registration_field_values\": [\n \t{\n \t\t\"academy_registration_field_id\": \"field-id-1234\",\n \t\t\"name\": \"department\",\n \t\t\"value\": \"Sales\"\n \t\t}\n ],\n \"status\": \"Active\"\n }\n }\n}"
schema:
type: object
properties:
url:
type: string
example: /api/v1/academies/c8be6efc-c511-11ee-8dca-000000000001/users
data:
type: object
properties:
user:
type: object
properties:
id:
type: string
example: 01902776-8464-76c5-a173-293333b17baa
email:
type: string
example: john@doe.com
segments:
type: array
display_name:
type: string
example: John Doe
first_name:
type: string
example: John
last_name:
type: string
example: Doe
created_at:
type: string
example: 2024-06-17 18:29:56 UTC
custom_registration_field_values:
type: array
items:
type: object
properties:
academy_registration_field_id:
type: string
example: field-id-1234
name:
type: string
example: department
value:
type: string
example: Sales
status:
type: string
example: Active
'400':
description: '400'
content:
application/json:
examples:
Result:
value: "{\n \"type\": \"invalid_params\",\n \"message\": \"Invalid custom parameters: badField1, badField2\"\n}"
schema:
type: object
properties:
type:
type: string
example: invalid_params
message:
type: string
example: 'Invalid custom parameters: badField1, badField2'
deprecated: false
tags:
- Academies
servers:
- url: https://app.workramp.com
/api/v1/academies/{academy_id}/users/{contact_id}:
get:
summary: Get Contact
description: Get a specific Contact in an Academy
operationId: get-user
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: contact_id
in: path
description: The id of the Contact
schema:
type: string
required: true
- name: page
in: query
description: The page number of the results
schema:
type: integer
format: int32
default: 1
- name: per_page
in: query
description: The number of results returned per page
schema:
type: integer
format: int32
default: 20
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"page\": 1,\n \"per_page\": 100,\n \"has_more\": false,\n \"url\": \"https://app.workramp.com/api/v1/academies/:academy_id/users/:user_id\",\n \"data\": {\n \"user\": {\n \"id\": \"d3d6edf4-e25d-11ea-be19-0242ac140003\",\n \"email\": \"ted+apitester1234@workramp.com\",\n \"display_name\": \"Jane Doe\",\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\"\n }\n }\n}"
schema:
type: object
properties:
page:
type: integer
example: 1
default: 0
per_page:
type: integer
example: 100
default: 0
has_more:
type: boolean
example: false
default: true
url:
type: string
example: https://app.workramp.com/api/v1/academies/:academy_id/users/:user_id
data:
type: object
properties:
user:
type: object
properties:
id:
type: string
example: d3d6edf4-e25d-11ea-be19-0242ac140003
email:
type: string
example: ted+apitester1234@workramp.com
display_name:
type: string
example: Jane Doe
first_name:
type: string
example: Jane
last_name:
type: string
example: Doe
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Academies
delete:
summary: Delete Contact
description: Soft-delete/deactivate an Academy Contact
operationId: delete-academy-user
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: contact_id
in: path
description: The id of the Contact
schema:
type: string
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Academies
patch:
summary: Update Contact
description: Updates any of a Academy Contact's default or custom attributes using a JSON dictionary
operationId: update-academy-user
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: contact_id
in: path
description: The id of the Contact
schema:
type: string
required: true
- name: Content-Type
in: header
description: Always send JSON format
schema:
type: string
default: application/json
requestBody:
content:
application/json:
schema:
type: object
properties:
RAW_BODY:
type: object
description: Send as JSON
properties:
name:
type: string
description: new full name for the contact
email:
type: string
description: new email for the contact
password:
type: string
description: new password to set for the contact
custom_registration_fields:
type: string
description: 'JSON dictionary where keys are the "API Name" of your registration field to set, and the values are the values to set. e.g. `{"favorite_color": "blue"}`'
format: json
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": \"abcdef-1234\",\n \"created_at\": 1689013085,\n \"custom_registration_field_values\": [\n {\n \"academy_registration_field_id\": \"field-id-1234\",\n \"name\": \"department\",\n \"value\": \"Sales\"\n }\n ],\n \"display_name\": \"John Doe\",\n \"email\": \"johndoe@example.com\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"segments\": [],\n \"status\": \"Active\" \n}"
schema:
type: object
properties:
id:
type: string
example: abcdef-1234
created_at:
type: integer
example: 1689013085
default: 0
custom_registration_field_values:
type: array
items:
type: object
properties:
academy_registration_field_id:
type: string
example: field-id-1234
name:
type: string
example: department
value:
type: string
example: Sales
display_name:
type: string
example: John Doe
email:
type: string
example: johndoe@example.com
first_name:
type: string
example: John
last_name:
type: string
example: Doe
segments:
type: array
status:
type: string
example: Active
'400':
description: '400'
content:
application/json:
examples:
Result:
value: "{\n \"type\": \"invalid_params\",\n \"message\": \"Invalid custom parameters: badField1, badField2\"\n}"
schema:
type: object
properties:
type:
type: string
example: invalid_params
message:
type: string
example: 'Invalid custom parameters: badField1, badField2'
deprecated: false
tags:
- Academies
servers:
- url: https://app.workramp.com
/api/v1/academies/{academy_id}/invite:
post:
summary: Invite Contacts
description: Invite Contacts to an Academy
operationId: invite-users
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: Content-type
in: header
description: Always application/json
schema:
type: string
default: application/json
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
userEmailsToInvite:
type: array
description: Array of Contact emails you'd like to invite to the academy.
items:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"errors\": [],\n \"newAcademyInvitations\": [\n {\n \"email\": \"test2@workramp.com\",\n \"id\": \"6b6efe96-117c-11ed-90c8-3ea79e467329\",\n \"inviteHash\": \"LibFxu3D9lms3F8VMadf-A\",\n \"lastInvitedAt\": 1659346159439,\n \"originallyInvitedAt\": 1659346159439\n }\n ]\n}"
schema:
type: object
properties:
errors:
type: array
newAcademyInvitations:
type: array
items:
type: object
properties:
email:
type: string
example: test2@workramp.com
id:
type: string
example: 6b6efe96-117c-11ed-90c8-3ea79e467329
inviteHash:
type: string
example: LibFxu3D9lms3F8VMadf-A
lastInvitedAt:
type: integer
example: 1659346159439
default: 0
originallyInvitedAt:
type: integer
example: 1659346159439
default: 0
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Academies
servers:
- url: https://app.workramp.com
/api/v1/academies/{academy_id}/segments/{segment_id}/remove_users:
delete:
summary: Remove Contacts from Segment
description: Remove Contacts from Academy Segment
operationId: remove-users-from-segment
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: segment_id
in: path
description: The id of the segment
schema:
type: string
required: true
- name: Content-Type
in: header
description: Always application/json
schema:
type: string
default: application/json
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
userEmails:
type: array
description: Array of Contact emails you'd like to remove from the segment.
items:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"status\": true\n}"
schema:
type: object
properties:
status:
type: boolean
example: true
default: true
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Academies
servers:
- url: https://app.workramp.com
/api/v1/academies/{academy_id}/users-duplicate:
get:
summary: Get All Contacts (support duplicated)
description: Get all Contacts in an Academy
operationId: get-all-users-support-duplicated
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: page
in: query
description: The page number of the results
schema:
type: integer
format: int32
default: 1
- name: per_page
in: query
description: The number of results returned per page
schema:
type: integer
format: int32
default: 20
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
custom_registration_fields:
type: string
format: json
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"page\": 1,\n \"per_page\": 100,\n \"has_more\": false,\n \"url\": \"https://app.workramp.com/api/v1/academies/:academy_id/users\",\n \"data\": {\n \"users\": [\n {\n \"id\": \"d3d6edf4-e25d-11ea-be19-0242ac140003\",\n \"email\": \"ted+apitester1234@workramp.com\",\n \"segments\": [],\n \"display_name\": \"Jane Doe\",\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"created_at\": \"2022-06-08 14:59:04 UTC\",\n \"custom_registration_field_values\": [\n {\n \"value\": \"Gold\",\n \"name\": \"customer_tier\"\n }\n ]\n },\n {...},\n {...}\n ]\n }\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Academies
servers:
- url: https://app.workramp.com
/api/v1/academies/{academy_id}/segments/{segment_id}/invite:
post:
summary: Assign Segments
description: Add Contacts to an Academy Segment
operationId: assign-segments
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: segment_id
in: path
description: The id of the segment
schema:
type: string
required: true
- name: userEmails
in: query
description: 'Array of Contact emails you''d like to invite to the segment. **NOTE: Contact must be registered in order to be placed in a segment**'
schema:
type: array
items:
type: string
- name: Content-type
in: header
schema:
type: string
default: application/json
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"numAddedToGroup\": 1,\n \"numConvertedToManual\": 0,\n \"numAlreadyInGroup\": 0,\n \"numDeletedUser\": 0,\n \"numUnregisteredUser\": 0\n}"
schema:
type: object
properties:
numAddedToGroup:
type: integer
example: 1
default: 0
numConvertedToManual:
type: integer
example: 0
default: 0
numAlreadyInGroup:
type: integer
example: 0
default: 0
numDeletedUser:
type: integer
example: 0
default: 0
numUnregisteredUser:
type: integer
example: 0
default: 0
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: curl
code: 'curl "https://app.workramp.com/api/v1/academies/233710e8-a938-11ec-ae72-3ea79e46732a/segments/cd0ce734-0e85-11ed-bc8c-3ea79e467329/invite
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-type: application/json" \
-d ''{ "userEmails": ["testemail@workramp.com"] }'' \
-X POST'
samples-languages:
- curl
tags:
- Academies
servers:
- url: https://app.workramp.com
/api/v1/academies/{academy_id}/users/{contact_id}/awarded_certifications:
get:
summary: Get All Awarded Certifications For a Contact
description: ''
operationId: get-all-awarded-certifications-for-a-user
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: contact_id
in: path
description: The id of the Contact
schema:
type: string
required: true
- name: page
in: query
description: The page number of the results
schema:
type: integer
format: int32
default: 1
- name: per_page
in: query
description: The number of results returned per page
schema:
type: integer
format: int32
default: 20
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"page\": 1,\n \"per_page\": 100,\n \"has_more\": false,\n \"url\": \"https://app.workramp.com/api/v1/academies/:academy_id/users/:user_id/awarded_certifications\" ,\n \"data\": {\n \"user_id\": \"d3d6edf4-e25d-11ea-be19-0242ac140003\",\n \"awarded_certifications\": [\n {\n \"id\": 242424,\n \"badge_image\": \"some_img_1.jpg\",\n \"display_title\": \"Certified Cert\"\n }\n ]\n }\n}"
schema:
type: object
properties:
page:
type: integer
example: 1
default: 0
per_page:
type: integer
example: 100
default: 0
has_more:
type: boolean
example: false
default: true
url:
type: string
example: https://app.workramp.com/api/v1/academies/:academy_id/users/:user_id/awarded_certifications
data:
type: object
properties:
user_id:
type: string
example: d3d6edf4-e25d-11ea-be19-0242ac140003
awarded_certifications:
type: array
items:
type: object
properties:
id:
type: integer
example: 242424
default: 0
badge_image:
type: string
example: some_img_1.jpg
display_title:
type: string
example: Certified Cert
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Academies
servers:
- url: https://app.workramp.com
/api/v1/academies/{academy_id}/certifications/{certification_id}/invite:
post:
summary: Assign Certificates
description: Assign certificates to Academy Contacts
operationId: assign-certificates
parameters:
- name: academy_id
in: path
description: The id of the Academy
schema:
type: string
required: true
- name: certification_id
in: path
description: The id of the certificate
schema:
type: string
required: true
- name: Content-type
in: header
description: Always use application/json
schema:
type: string
default: application/json
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
userEmails:
type: array
description: Array of Contact emails you'd like to invite to the training.
items:
type: string
dueAt:
type: integer
description: Number of milliseconds since 19
# --- truncated at 32 KB (183 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/workramp/refs/heads/main/openapi/workramp-academies-api-openapi.yml