1. Knowledge Base
  2. Technical Requirements

API Overview

An overview of LCvista's API documentation

LCvista's Application Programming Interface (API) enables developers to connect external applications and/or write custom scripts to interact with data.

The API gives organizations the ability to automate tasks such as creating accounts, creating programs, and creating sessions. The API endpoints that we make available for integration are the same endpoints we use to power LCvista so any action performed in LCvista's UI can be recreated via these endpoints.

LCvista has worked to make our APIs as RESTful as possible where each resource has a unique URL and HTTP verbs are used to specify the action to be performed. JSON is returned in all responses from the API. The APIs are designed to have predictable, straightforward URLs and to use HTTP response codes to indicate API errors.

Table of Contents

Site URL

Authentication

HTTPS Verbs

Response Codes

Pagination

Browsable API Interface

Model Overview

Organization

People (User Accounts)

Person

OrganizationPerson

JurisdictionPerson

Periods

Programs, Sessions, and Session Records

Programs

Sessions

SessionRecords

Issuing Credit Workflow

Overall Compliance Report (Read Only)

Common Lookup Endpoints

FAQ

 

Site URL


Every customer has a unique site URL and includes a browsable list of endpoints. Your specific site URL will be in the format of https://<site name>.lcvista.com/ where <site name> is the name of your company.

For example, if your company name is Acme Corporation your site URL would be https://acme.lcvista.com/ (https://acme.lcvista.com/) and you can browse the API endpoints at https://acme.lcvista.com/api/v1/ (https://acme.lcvista.com/api/v1/).

Return to the table of contents

 

Authentication


Every request to the API must be transmitted over a secure channel using HTTPS and authenticated by passing an API key. You can generate an API key in the Organization admin menu in LCvista.

API endpoints use token-based authentication. Clients need to authenticate by passing the token key in the "Authorization" HTTP header, pre-pended with the string "Token ". For
example, include the following in the HTTP header with your token value:

Authorization: Token 555f5ac555da42b97f613d789819ff93537bee6a

 ▲ Return to the table of contents

 

HTTPS Verbs


LCvista uses the following verbs to take action on data through APIs.

GET
requests to return or list resources

POST
insert (create) a new resource

PATCH
update an existing resources, will update the values that are passed.
Note that PATCH calls must include the object being updated in the URL. For example, to PATCH a person record the URL will look like: https://<site name>.lcvista.com/api/v1/people/3410e169-8399-4e62-8942-4ea88c536ce6/ (https://dev2.lcvista.com/api/v1/people/3410e169-8399-4e62-8942- 4ea88c536ce6/)

PUT
NOT SUPPORTED, all creates need to be issued through a POST call

Return to the table of contents

 

Response Codes


LCvista uses the following standard response codes:
200 – Success. Resource was updated or inserted successfully
201 – Success. Resource was created
400 – Bad request. Check that your URI and request was well formed.
404 – Not Found. The resource requested was not found.

Return to the table of contents

 

Pagination


By default APIs only return 10 records at a time. You can increase the number of records returned by adding the “_limit=” parameter to end of the querystring. For example, the following call will return the first 100 people:
/api/v1/organizationpeople/?_limit=100 

Return to the table of contents

 

Browsable API Interface


Each customer site includes a browsable API interface that will allow you to interact with data on your site through the API endpoints. Before you can use the API interface your LCvista account must be granted Admin permission and you need to authenticate into your LCvista site. Once authenticated the browsable interface is available at https://<site name>.lcvista.com/api/v1/

The browsable interface will list the full set of available endpoints and you can click into each endpoint to view the data. You also have the ability to POST, PATCH or GET data via the interface. NOTE - you are directly interacting with your site data. Any changes made to data through this interface will be reflected on your LCvista site.

Example of the browsable API interface:

Return to the table of contents

 

Model Overview


In this document we will define the core endpoints needed to fulfill the most common use cases for API integration. The overview will be grouped by logical model and provide an
overview of the endpoints needed to GET, POST and PATCH data.

Return to the table of contents

 

Organization


The organization model contains configuration data related to your organization's SSO settings, custom field settings, etc. Typically a customer will have a single organization. The
organization_id is used throughout the endpoints to associate data to an organization. This endpoint is used to get your organization id which will be used to create user accounts and
other objects.

Return to the table of contents

 

Organization: Common Use Cases


Get the organization id for use in other endpoints. The organization API is available to get the UUID, however it is recommended that Organization attributes are only updated via the UI
in LCvista. 
Return to the table of contents

 

Organization: Actions


GET /api/v1/organizations/

Return to the table of contents

 

Organization: Endpoint Filters


None

Return to the table of contents

 

Organization: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

system generated UUID of the organization

name

String (up to 50)

Name of the organization

slug

Slug (up to 50)

URL slug for organization

person_fields

A JSON object

Custom field definitions

people_page_columns

Array of Strings

Array of fields to be displayed on the People page in UI

enable_learning

Boolean (Either True or False)

 

logo_id

UUID

 

color1

String (up to 6)

 

color2

String (up to 6)

 

saml_enabled

Boolean (Either True or False)

 

saml_entity_id

Text

 

saml_url

URL

 

saml_x509_cert

Text

 

saml_first_name_attribute

String (up to 255)

 

saml_last_name_attribute

String (up to 255)

 

saml_email_attribute

String (up to 255)

 

saml_username_attribute

String (up to 255)

 

saml_button_text

String (up to 255)

 

password_reset_disabled

Boolean (Either True or False)

 

password_reset_messsage

Text

 

auto_generate_alternate_ids

Boolean (Either True or False)

 

max_organizationperson_alternate_id

Integer

 

max_program_alternate_id

Integer

 

waitlist_type_default

String (up to 6) CHOICES: ['Manual', 'Auto']

 

waitlist_alert_message_default

Text

 

dashboard_announcements

Text

 

hide_user_learning_plan_menu

Boolean (Either True or False)

 

hide_transcript_credits

Boolean (Either True or False)

 

enable_webcast

Boolean (Either True or False)

 

download_link_expire_days

Positive integer

 

Return to the table of contents

 

People (User Accounts)


User account information is stored in two core models, Person and OrganizationPerson. Each person must be mapped to at least one organization.

In order to create a new account, two endpoints must be called. Person endpoint is used to create the account and the OrganizationPerson endpoint is used to associate the account to an Organization.

Return to the table of contents

 

People: Creating a New Account or Updating An Existing Account


Creating a person via API endpoints is a two step process.
Step 1: Create the person record
Step 2: Create the organizationperson record using the Person ID returned from the people endpoint.

See examples provided at the end of this section.


If user does not exist...
Make POST call to /people/
Using the LCvista id returned by POST call, make second POST call to /organizationpeople/


If user does exist…
Make PATCH call to /people/
Make PATCH call to /organizationpeople/

Return to the table of contents

 

Person


Stores information on the user's attributes needed to logon to site.

Return to the table of contents

 

Person: Common Use Cases


Search for a person's account for use in other endpoints
Create a new user account

Return to the table of contents

 

Person: Actions


GET /api/v1/people/

POST /api/v1/people/

PATCH /api/v1/people/<uuid>/

Return to the table of contents

 

Person: Endpoint Filters


id__in=<Person UUID>

email=<Email>

username=<Username> 

Return to the table of contents

 

Person: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

System generated identifier

first_name

String (up to 50)

Person first name

last_name

String (up to 50)

Person last name

username

String (up to 255)

Person username. Must be unique across a site. This field is used by SSO to authenticate a user.

bio

Text

Instructor bio

email

Email address

Person email address

is_staff

Boolean (Either True or False)

True = administrative previleges; False = standard priveleges

is_active

Boolean (Either True or False)

Default all accounts to True. See OrganizationPerson endpoint for user account status.

date_of_birth

Date (without time)

Person date of birth, used to generate reporting periods for certain jurisdictions. NOTE - Jurisdictional rules do not need a users actual birthday. To avoid PII concerns you may provide a masked birthdate that includes the actual birth month and the even/odd birth year. For example, if a users actual birthdate was Dec 4, 1996 you can provide a masked value of 12/01/1900. If birthdate was Dec 5, 1995 the masked value would be 12/01/1901.

Return to the table of contents

 

OrganizationPerson


Associates a person to a specific organization. As a client you may have multiple organizations that you manage.

The OrganizationPeople endpoint also provide the filters that allow you to lookup a person by email address. You can use this endpoint to return the person_id.

Return to the table of contents

 

OrganizationPerson: Common Use Cases


Search for a person's account for use in other endpoints
Update a user's custom field values
Create a new user account

Return to the table of contents

 

OrganizationPerson: Actions


GET /api/v1/organizationpeople/

POST /api/v1/organizationpeople/

PATCH /api/v1/organizationpeople/<uuid>/

Return to the table of contents

 

OrganizationPerson: Endpoint Filters


person__email=<Email>

person__email__in=<Email>

alternate_id=<alternate id>

jurisdiction=<Jurisdiction UUID> 

Return to the table of contents

 

OrganizationPerson: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

System generated identifier

organization

UUID

Corresponding UUID for the organization

person

UUID

Corresponding UUID for the person record

data

A JSON object

Dictionary of custom fields used by the organziation

admin_notes

Text

Misc notes on user

alternate_id

String (up to 255)

Readable identifier for a user account. This can be auto-generated by LCvista or your site can configured to provide your own alternate_id. MUST BE UNIQUE across the site.

status

String (up to 50)

CHOICES: ['Active', 'Disabled']

Return to the table of contents

 

OrganizationPerson: Example: Create or Update User Account


Creating an account via API endpoints is a two step process.  

Return to the table of contents

 

Step 1: Create Person Record


XML

GET - check if user already exists
https://acme.lcvista.com/api/v1/people/?username=jane.doe@acme.com


POST 
https://rsmus.lcvista.com/api/v1/people/
{
 "username":"jane.doe@acme.com",
 "email":"jane.doe@acme.com",
 "first_name":"Jane",
 "last_name":"Doe",
 "date_of_birth":"1900-01-01"
}


PATCH 
https://acme.lcvista.com/api/v1/people/53079970-1db2-4134-9735-ad7fc9aaff1e/
{
 "username":"jane.doe@acme.com",
 "email":"jane.doe@acme.com",
 "first_name":"Jane",
 "last_name":"Doe",
 "date_of_birth":"1900-01-01"
}

Return to the table of contents

 

Step 2: Create OrganizationPerson Record


XML

GET - check if OrganizationPeople record exists for person UUID 
https://acme.lcvista.com/api/v1/organizationpeople/?person=53079970-1db2-4134-9735-ad7fc9aaff1e


POST
https://acme.lcvista.com/api/v1/organizationpeople/
{
 "organization":"<UUID from organization endpoint>",
 "person":"<UUID from people endpoint>",
 "status": "<Active or Disabled as mapped from empl_status>",
 "data": {
 "field0": "<custom field 0>",
 "field1": "<custom field 1>",
 "field2": "<custom field 2>"
 ...
 }
}


PATCH
https://acme.lcvista.com/api/v1/organizationpeople/<UUID for organizationperson record>/
{
 "status": "<Active or Disabled as mapped from empl_status>",
 "data": {
 "field0": "<custom field 0>",
 "field1": "<custom field 1>",
 "field2": "<custom field 2>"
 ...
 }
}

Return to the table of contents

 

JurisdictionPerson


Associates a person to a jurisdiction. Creating a JurisdictionPeople instance will create all reporting periods from the original license date through the current date.

Note that LCvista does not support future dated licenses.

Return to the table of contents

 

JurisdictionPerson: Common Use Cases


Assign a jurisdiction to a person (POST)
Update a jurisdiction attribute such as license ID

Return to the table of contents

 

JurisdictionPerson: Actions


GET /api/v1/jurisdictionpeople/

POST /api/v1/jurisdictionpeople/

PATCH /api/v1/jurisdictionpeople/<uuid>/

Return to the table of contents

 

JurisdictionPerson: Endpoint Filters


jurisdiction=<Jurisdiction UUID>

organization_person=<UUID>

Return to the table of contents

 

JurisdictionPerson: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

 

jurisdiction

UUID

The UUID of the associated jurisdiction. Use the jurisdiction endpoint to get the UUID.

organization_person

UUID

The UUID for the associated account. Use the organizationperson endpoint to get the UUID.

license_id

String (up to

255)

The user's jurisdictional license ID. This may be used to generate reporting periods.

original_license_date

Date (without time)

Date the user was licensed in the jurisdiction. Must be less than the current date.

license_expiration

Date (without time)

Date the user was license expires in the jurisdiction.

period_override_date

Date (without time)

Override the pre-defined reporting period end date for a jurisdiction.

custom_date

Date (without time)

Latest license date

Return to the table of contents

 

JurisdictionPerson: Example: Associate a Jurisdiction to a Person


Associates a jurisdiction to a person. Creating a JurisdictionPeople instance will create all reporting periods from the original license date through the current date.

Note that LCvista does not support future dated licenses. Recommendation is to create only via API.

XML

GET - check if specific user is already associated with a jurisdiction
https://acme.lcvista.com/api/v1/jurisdictionpeople/?organization_person=3f212228-c680-4513-bc0f-9e4ff5c3a497&jurisdiction=31ac27ad-0bbd-4ce2-bc99-9256490


POST - jurisdictionpeople did not exist
https://acme.lcvista.com/api/v1/jurisdictionpeople/
{
 "organization_person":"<UUID from organizationpeople endpoint>",
 "jurisdiction": "<UUID from jurisdiction endpoint for the license>",
 "license_id": "<The user's jurisdictional license ID. This may be used to generate reporting periods>",
 "original_license_date": "<date issued (cannot be in the future)>",
 "license_expiration": "<optional date user license expires>"
}


PATCH
https://acme.lcvista.com/api/v1/jurisdictionpeople/<UUID>/
{
 "organization_person":"<UUID from organizationpeople endpoint>",
 "jurisdiction": "<UUID from jurisdiction endpoint for the license>",
 "license_id": "<The user's jurisdictional license ID. This may be used to generate reporting periods>",
 "license_expiration": "<optional date user license expires>"
}

Return to the table of contents

 

Periods


The reporting periods associated to jurisdiction person records. This API should be used to only modify a period status and/or jurisdiction flags. Period records are created automatically through the JurisdictionPerson API based on the jurisdiction rules. 

Return to the table of contents

 

Periods: Common Use Cases


Update a period status to Exempt or Active

Set a jurisdiction flag for a specific period or all periods 

Return to the table of contents

 

Periods: Actions


GET /api/v1/periods/

POST /api/v1/periods/

PATCH /api/v1/periods/<uuid>/

Return to the table of contents

 

Periods: Endpoint Filters


organization_person=<organization person UUID>

jurisdiction=<Jurisdiction UUID>

start_date __lte=<date value yyyy-mm-dd> include periods starting before date value

end_date__gte=<date value yyyy-mm-dd> include periods ending after date value

status__in=<period status active, inactive, exempt>

Return to the table of contents

 

Periods: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

 

jurisdiction

UUID

The UUID of the associated jurisdiction

organization_person

UUID

The UUID for the associated account

period_rule

UUID

SYSTEM GENERATED, do not modify

reporting_period

UUID

SYSTEM GENERATED, do not modify

start_date

Date (without time)

SYSTEM GENERATED, do not modify

end_date

Date (without time)

SYSTEM GENERATED, do not modify

base_start_date

Date (without time)

SYSTEM GENERATED, do not modify

extended_date

Date (without time)

An override date that extends the time a user has to complete credits for a reporting period.

previous_period

One-to-one relationship

SYSTEM GENERATED, do not modify

in_compliance

Boolean (Either True or

False)

SYSTEM GENERATED, do not modify

earned

Decimal number

SYSTEM GENERATED, do not modify

applied

Decimal number

SYSTEM GENERATED, do not modify

carry_over

Decimal number

SYSTEM GENERATED, do not modify

extension

Decimal number

SYSTEM GENERATED, do not modify

reciprocity_rule

UUID

SYSTEM GENERATED, do not modify

is_primary

Boolean (Either True or

False)

 

status

String (up to 100)

CHOICES: ['Active', 'Inactive', 'Exempt', 'Locked']

notes

Text

Free form text field to add notes on a period

last_modified

Date (with time)

SYSTEM GENERATED, do not modify

Return to the table of contents

 

Periods: Example: Add a PCAOB flag to all periods


The following shows an example of adding a PCAOB flag to each period. You can lookup the flag UUID on the ruleflags endpoint (https://qa-demo.lcvista.com/api/v1/ruleflags/).

The flag ID will be consistent across test and production.

XML

GET - get the available flags you can set on the PCAOB jurisdiction 
https://acme.lcvista.com/api/v1/ruleflags/?jurisdiction=31ac27ad-0bbd-4ce2-bc99-9256490d015b 


GET - return the list of periods created for the specific person and jurisdiction 
https://acme.lcvista.com/api/v1/periods/?organization_person=7ff3b32b-aa28-4a42-9101-ab333d5d8758&jurisdiction=31ac27ad-0bbd-4ce2-bc99-9256490d015b 


The above get call returns all of the periods for this specific user/jurisdiction 
For each period returned, make a PATCH call the periods where "reporting_period": null.  
The periods where "reporting_period": null are the parent period 
Making a PATCH call on these will automatically update the child the periods. 


To get the Flag UUID, see the Common Endpoint Lookup section in this documentation. 


PATCH  https://acme.lcvista.com/api/v1/periods/57b8e7d6-1392-493c-8029-e4517be4a2ee/ { 
    "flags": ["4915a8b6-5d75-490e-a136-438a9a49a12d"] } 


PATCH  https://acme.lcvista.com/api/v1/periods/06de1d41-79bb-4fea-8065-a5afeb97bbe8/ { 
    "flags": ["4915a8b6-5d75-490e-a136-438a9a49a12d"] }

Return to the table of contents


Programs, Sessions, and Session Records


Programs and sessions are related in a parent and child relationship. A session is an instance of each program.

A program can have multiple sessions such as a session in the Seattle Office and a session in the Portland Office. A SessionRecord is the specific user status in a Session. A single user can only have one SessionRecord per Session. All users that attend a Session will have a SessionRecord.

Notes on dictionary fields that track topic_areas and fields_of_study for programs, sessions and session records. When updating a program/session/session record, the dictionary of topic_areas or fields_of_study will overwrite all previous values for that record.

For example, if a topic_area is updated from 10 credits Accounting to 10 credits Tax, then the dictionary only needs to include the Tax credits and the previous Accounting credits will be removed.

Return to the table of contents

 

Programs


This is the parent container for a session. The program contains parent level attributes that are consistent for all sessions such as the program name, description, topic area credits (these can be overridden per session), program documentation, etc.  

Return to the table of contents

 

Programs: Common Use Cases


Create a new program

Look up a program by alternate_id to see if it exists

Return to the table of contents

 

Programs: Actions


GET /api/v1/programs/

POST /api/v1/programs/

PATCH /api/v1/programs/<uuid>/ 

Return to the table of contents

 

Programs: Endpoint Filters


Endpoint Filters id__in = <UUID>

alternate_id = <Alternate ID as provided by client>  

external_alternate_id=<external alternate id> 

catalogs__in = <Catalog UUID>

session__delivery_method = <Session Delivery Method UUID>

session__start_date = <Session Start Date YYYY-MM-DD>

session__end_date = <Session End Date YYYY-MM-DD>

requirement = <Session Field of Study UUID>

Note: Available operators for session__start_date and session__end_date are gte and lte. Please note that NULL values may be returned.

gte: Filter where records are greater than or equal to parameter value session__start_date__gte=2020-10-31

lte: Filter where records are less than or equal to parameter value session__end_date__lte=2020-10-31

 

Return to the table of contents

 

Programs: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

system generated id

organization

UUID

The site's Organization ID

name

String (up to 255)

Program name, required for program creation. Not required for updates.

description

Text

Program description. Accepts HTML mark up for displaying in the UI.

objectives

Text

Program objectives.

advanced_preparation

Text

 

prerequisites

Text

 

nasba_id

String (up to 255)

The specific ID issued by NASBA for this program.

nasba_revision

Date (without time)

The date used to track the latest revision of program content for reporting to NASBA.

length

String (up to 255)

Text field to display the duration of the program. Since this is a text field, it can be formatted for display based on your preferences. Example, 1.0 Hours, 50 Minutes, etc.

sponsor

UUID

The UUID for the Sponsor for the program.

external

Boolean (Either

True or False)

Boolean flag (true/false) to indicate if program was created through External credit UI. Typically it is recommended that programs are created via the API set this value = False.

admin_notes

Text

Text field available to add administrative notes about the program.

external_alternate_id

String (up to 255)

Additional ID field that can be used to track an additional customer specific ID or a specific content provider ID. This field is not displayed in the UI.

alternate_id

String (up to 255)

This ID is a unique across the system. This is the ID that is used to search and find programs. The ID is displayed on the program page for reference.

This field is READ-ONLY for clients that are configured to have LCvista auto-generate alternate_ids.

max_session_alternate_id

Integer

READ ONLY

level

String (up to 12)

CHOICES: ['None', 'Basic', 'Intermediate', 'Advanced', 'Overview', 'Update']

is_learningplan

Boolean (Either

True or False)

READ ONLY, Value should only be set in LCvista UI.

catalogs

Many-to-many relationship

UUID list of the LCvista catalog(s) that the program should be associated to.

tags

Many-to-many relationship

UUID list of tags to associate to a program

program_jurisdictions

Dictionary

Dictionary of jurisdiction specific program IDs

program_qualifications

Dictionary

Program qualification flag UUID to be used when issuing jurisdictional credit. If this value is passed it must be a validate qualification UUID. Note that some qualifications require an additional Jurisdiction UUID.

program_topic_areas

Dictionary

Dictionary of NASBA credits (Topic Areas)

earliest_session_start

 

READ ONLY

total_credit_minutes

 

READ ONLY

Return to the table of contents

 

Programs: Example: Create or Update a Program


XML

GET - check if program already exists 
https://acme.lcvista.com/api/v1/programs/?alternate_id=<Your LMS Program ID>


POST - create a new program https://acme.lcvista.com/api/v1/programs/ 

    "organization": "7dbab4b2-5daf-4575-8c48-95d0fe37b3c8", 
    "name": "My Test Programs 10", 
    "description": "Enter your <b>HTML</b> <i>Description</i> here...", 
    "objectives": "Enter program objectives here...", 
    "advanced_preparation": "NASBA adv prepration notes...", 
    "prerequisites": "<p>Prereqs go here...</p>", 
    "length": "5 Hours", 
    "level": "Advanced", 
    "sponsor": "<UUID for Sponsor>", 
    "program_qualifications": [ <NOTE - only used for State Ethic qualifications>     { 
      "qualification": "<UUID for Ethics qualification>", 
      "jurisdiction": "<Jurisdiction UUID for the qualifying state>" 
    } 
  ] 
    "program_topic_areas": [ 
        { 
            "topic_area": "<UUID from topicareas endpoint>", 
            "credit_minutes": 100.0 
        }, 
        { 
            "topic_area": "<UUID from topicareas endpoint>", 
            "credit_minutes": 150.0 
        } 
    ] 



PATCH - update existing program 
https://acme.lcvista.com/api/v1/programs/<LCVista UUID> 
Example call to change the credits and update the credits on all users with Passed with full credit 

    "name": "My Test Programs 10", 
    "program_topic_areas": [ 
        { 
            "topic_area": "<UUID from topicareas endpoint>", 
            "credit_minutes": 50.0 
        }, 
        { 
            "topic_area": "<UUID from topicareas endpoint>", 
            "credit_minutes": 50.0 
        } 
    ], 
    "reaccredit_program": true (NOTE - only pass this as true when credits are modified.  do not include on POST or when update doesn't modify the credit
}

Return to the table of contents


Sessions


This is the child container for a program. The session contains attributes that are specific for a session such as delivery method, venue, start date, end date, etc. NASBA credits (topic_areas) can be overridden per session as well as Jurisdiction credit (fields_of_study).

Return to the table of contents

 

Sessions: Common Use Cases


Create a new session

Look up a session to see if it exists

Return to the table of contents

 

Sessions: Actions


GET /api/v1/sessions/

POST /api/v1/sessions/

PATCH /api/v1/sessions/<uuid>/

Return to the table of contents

 

Sessions: Endpoint Filters


id__in = <Session UUID>

sponsor = <Sponsor UUID>

program__in = <Program UUID>

program = <Program UUID>

program_topic_areas = <Program Topic Area UUID>

catalogs__in = <Catalog UUID>

external_alternate_id=<external alternate id>

Return to the table of contents

 

Sessions: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

 

external_alternate_id

String (up to 255)

Optional session identifier. This field is not displayed in the UI and typically used by clients that create programs and sessions via API feeds. For clients that are creating new programs, session, and sessionrecords, this optional field is available to store a source system ID to validate if a session has previously been loaded.

program

UUID

The UUID for the parent program

delivery_method

UUID

The UUID for the NASBA delivery method for a session. The value in this column must match one of the UUIDs available from the delivery method endpoint . If an unexpected value is passed then the session will not be created.

certificate_location

String (up to 255)

Used to report the location name for nasba reporting requirements.   Typically this goes on system generated certificates

is_on_scorm_cloud

Boolean (Either True or

False)

READ ONLY.

venue

UUID

The UUID for the venue to be associated to this session. See Venue endpoint.

comment

Text

Text field available for comments

launch_type

String (up to 255)

READ ONLY. CHOICES: ['', 'SCORM/AICC/xAPI', 'URL', 'Media', 'Webcast']

launch_url

String (up to 1024)

READ ONLY

content_package

UUID

READ ONLY

media_file

UUID

READ ONLY

certificate_template

UUID

The UUID for the certificate template that will be used to generate certificates when a user completes this session.

admin_notes

Text

 

evaluation_template

UUID

The UUID for the evaluation template to be associated to this session

timezone

String (up to 50)

The default timezone used on the Session edit UI to display the start and end times of the session.

Suggested US timezones:

{"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke",

"US/Michigan", "US/Mountain", "US/Paci c", "US/Paci c-New", "US/Samoa"}

start_datetime

Date (with time)

The timestamp for the session start. Please see FAQ below on passing timestamps.

end_datetime

Date (with time)

The timestamp for the session end. Please see FAQ below on passing timestamps.

enrollment_start_datetime

Date (with time)

The timestamp for the session enrollment start. Please see FAQ below on passing timestamps.

enrollment_end_datetime

Date (with time)

The timestamp for the session enrollment end. Please see FAQ below on passing timestamps.

first_time_instructing

Boolean (Either True,

False or None)

Typically set to True. Used to determine if a user is allowed to receive instructor credit.

min_enrolled

Integer

Used to configure waitlist for the session.

max_enrolled

Integer

Used to configure waitlist for the session.

waitlist_type

String (up to 6)

CHOICES: ['Manual', 'Auto']

waitlist_alert_message

Text

Used to configure waitlist for the session.

alternate_id

String (up to 255)

READ ONLY. Incrementing integer generated by LCvista to track the session

instructors

Many-to-many relationship

For display purposes only in LCvista program catalog. A list of UUIDs for the session instructors.

session_topic_areas

Dictionary

Dictionary of TopicArea UUIDs and credit minutes. Used to override the program NASBA credits for an individual session. Not typically used, see section called Issuing Credit Workflow.

session_field_of_study

Dictionary

Dictionary of Jurisdictional credits (Fields of study) UUIDs and credit minutes. Used to override the jurisdiction credits for an individual session. Not typically used, see section called Issuing Credit Workflow.

auto_create_fieldsofstudy

Boolean

Available only in POST/PATCH calls. Indicates if fields of study credit should be created using the program TopicAreas.   See section called Issuing Credit Workflow.

Return to the table of contents

 

Sessions: Example: Create or Update a Session


XML

GET - check if session already exists 
https://acme.lcvista.com/api/v1/sessions/?program=5aad7db8-eb26-4a42-9e01-1ae682558284 


if record doesn't exist POST  
Required Fields:program, delivery_method and auto_create_fieldsofstudy 
POST https://acme.lcvista.com/api/v1/sessions/ 

    "program": "5aad7db8-eb26-4a42-9e01-1ae682558284", 
    "delivery_method": "bed4da99-6bfe-4861-9718-df5bdc715e16", 
    "auto_create_fieldsofstudy": true, 
    "instructors": [<UUID>,<UUDI>], 
    "timezone": "US/Eastern", 
    "start_datetime": "2016-08-01T12:00:00Z", 
    "end_datetime": null, 
    "venue": <venue UUID>, 
    "certificate_location": "", 
    "comment": "", 
    "certificate_template": null, 
    "external_alternate_id": "" 



if record exists PATCH 
https://acme.lcvista.com/api/v1/sessions/<session UUID>/ { 
    "program": "5aad7db8-eb26-4a42-9e01-1ae682558284", 
    "delivery_method": "bed4da99-6bfe-4861-9718-df5bdc715e16", 
    "auto_create_fieldsofstudy": true, 
    "instructors": [<UUID>,<UUDI>], 
    "timezone": "US/Eastern", 
    "start_datetime": "2016-08-01T12:00:00Z", 
    "end_datetime": null, 
    "venue": <venue UUID>, 
    "certificate_location": "", 
    "comment": "", 
    "certificate_template": null, 
    "external_alternate_id": "" 
}

Return to the table of contents


SessionRecords


SessionRecords are instances of session that are associated to a user. If a user is associated to a session (Invited, Enrolled, Passed, etc.) that association is a SessionRecord.

When creating session records you have the option to create custom credit per user by overriding the TopicAreas and FieldsOfStudy.

However, creating custom credit is typically done through the UI only. A more common scenario through an API feed is to customize the Completion Date per user.

Return to the table of contents

 

SessionRecords: Common Use Cases


Create a new sessionrecord

Update a sessionrecord status to completed

Return to the table of contents

 

SessionRecords: Actions


GET /api/v1/sessionrecords/

POST /api/v1/sessionrecords/

PATCH /api/v1/sessionrecords/<uuid>/

Return to the table of contents

 

SessionRecords: Endpoint Filters


'id': ['in']

'session': ['exact'],

'session__delivery_method': ['exact'],

'session__program': ['exact'],

'is_launchable': ['exact'],

'organization_person': ['exact'],

'completion_date': ['exact', 'gte', 'lte', 'isnull'], 'session__start_datetime': ['exact', 'gte', 'lte', 'isnull'],

'status': ['exact'],

'certificate': ['exact', 'isnull'],

'modified': ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],

Return to the table of contents

 

SessionRecords: Filter Examples


exact: Filter where record exactly matches the parameter 

session=<uuid> status=Passed with

gte: Filter where records are greater than or equal to parameter value completion_date__gte=2020-10-31

lte: Filter where records are less than or equal to parameter value completion_date__lte=2020-10-31

gt: Filter where records are greater than parameter value completion_date__gt=2020-10-31

lt: Filter where records are less than parameter value completion_date__lt=2020-10-31

Return to the table of contents

 

SessionRecords: Attributes


The available attributes can be found in the table below.

Field

Type

Description

id

UUID

 

session

UUID

UUID for the session

organization_person

UUID

UUID for the user account receiving credit

program_name

String (up to 255)

Name of the program at time the credit was issued

admin_notes

Text

 

completion_date

Date (without time)

Timezone agnostic date, used to determine and report the completion of a session

completion_timezone

String (up to 50)

READ ONLY. Used by LMS interactive sessions.

score

Decimal number

READ ONLY. Used by LMS interactive sessions.

total_time

Integer

READ ONLY. Used by LMS interactive sessions.

success

Boolean (Either True or

False)

READ ONLY. Used by LMS interactive sessions.

passed_program

Boolean (Either True or

False)

Indicate if a user passed the program

certificate

UUID

READ ONLY

status

String (up to 255)

CHOICES: ['Passed with full credit', 'Passed with custom credit', 'Failed', 'Enrolled', 'Unenrolled', 'No show', 'Incomplete', 'Invited',

'Send Evaluation', 'Waitlisted']

status_changed

Date (with time)

READ ONLY

evaluation_sent

Date (with time)

READ ONLY

first_time_instructing

Boolean (Either True or

False)

 

data

A JSON object

 

datetime_started

Date (with time)

 

datetime_completed

Date (with time)

 

datetime_enrolled

Date (with time)

 

datetime_waitlisted

Date (with time)

 

created_scorm_registration

Boolean (Either True or

False)

READ ONLY

Return to the table of contents


Issuing Credit Workflow


LCvista provides flexibility to assign and override credits at the Program, Session, and SessionRecord objects.

While there are scenarios where a Session and/or SessionRecord requires custom credit that differs from the Program, the most common scenario is to issue credits on the SessionRecords based on the Program TopicAreas.

LCvista APIs provides flags on the Session and SessionRecord API to automatically create credits.

The most common scenarios supported by these flags are Full Credit and Custom Credit. Below outlines how to use the flags and APIs to do each:

Pass with Full Credit


Create program with TopicAreas

Create Session with “auto_create_fieldsofstudy = true”

Create SessionRecord with “auto_create_earned_credits = true”

Pass with Custom Credit


Create program with TopicAreas

Create Session with “auto_create_fieldsofstudy = true”

Create SessionRecord with “auto_create_earned_credits = true” and pass in custom TopicAreacredit for the user

Return to the table of contents

 

Issuing Credit Workflow: Example: Get SessionRecords


HTML

GET - List all session records modified on or after Oct 31, 2020 
https://acme.lcvista.com/api/v1/sessionrecords/?modified__gte=2020-10-31 


GET - List all session records with a completion date on Oct 1, 2020 h
ttps://acme.lcvista.com/api/v1/sessionrecords/?completion_date=2020-08-01

Return to the table of contents

 

Issuing Credit Workflow: Example: Create or Update a SessionRecord


The following example highlights a couple scenarios on issuing credit. In particular it is important to understand if the user is being passed with Full credit or Custom credit. The status will determine if credits need to be included when issuing SessionRecord credit. 

GET - check if sessionrecord already exists 
https://acme.lcvista.com/api/v1/sessionrecords/?organization_person=93389760-f28d-432c-92fd-b62aa9913c32&session=2d9a73d9-f985-47b8-a4a1-a98df877a707 


if record doesn't exist POST  
Required Fields: session, organization_person, program_name, completion_date, status, auto_create_earned_credits, session_record_topic_areas 


Note on status:
If the user being passed earned full credit in the program then you can pass just pass the status Passed with full credit and LCvista will issue the program credit to the user. 
If the user left early and earned less credit (or more credit) then pass the user with custom credit and provide the credit amount the user earned.  


POST - Full credit (user earned all credit for which the program is accredited) https://acme.lcvista.com/api/v1/sessionrecords/ 

    "session": "5c2270e2-ad25-4d7f-a767-8a161169a112", 
    "organization_person": "2fab71d9-ebcf-49b9-83f4-771c6f29d8c0", 
    "program_name": "Name of the program", 
    "completion_date": "2018-08-01", 
    "status": "Passed with full credit", 
    "auto_create_earned_credits": true 



POST - Partial credit (user earned credit that differs, typically less, than the program) https://acme.lcvista.com/api/v1/sessionrecords/ 

    "session": "5c2270e2-ad25-4d7f-a767-8a161169a112", 
    "organization_person": "2fab71d9-ebcf-49b9-83f4-771c6f29d8c0", 
    "program_name": "Name of the program",     "completion_date": "2018-08-01", 
    "status": "Passed with custom credit", 
    "auto_create_earned_credits": true, 
    "session_record_topic_areas": [ 
        { 
            "topic_area": "f2d99c7d-533f-4394-acb8-e9da9e1d6eb9", <UUID of topic area> 
            "credit_minutes": 50.0, 
            "delivery_method": "f871ae87-b7f5-4c21-a41a-33ef1443f781" <UUID for Delivery Method> 
        }, 
        { 
            "topic_area": "3caf78fa-0ebe-4ba2-a9f8-751f9819e962", 
            "credit_minutes": 50.0, 
            "delivery_method": "f871ae87-b7f5-4c21-a41a-33ef1443f781" 
        } 
    ] 



PATCH - Full credit https://acme.lcvista.com/api/v1/sessionrecords/<session record UUID>/

    "completion_date": "2018-08-02", 
    "status": "Passed with full credit", 
    "auto_create_earned_credits": true 



PATCH - Partial credit https://acme.lcvista.com/api/v1/sessionrecords/<session record UUID>/

    "completion_date": "2018-08-01", 
    "status": "Passed with custom credit", 
    "auto_create_earned_credits": true, 
    "session_record_topic_areas": [ 
        { 
            "topic_area": "f2d99c7d-533f-4394-acb8-e9da9e1d6eb9", 
            "credit_minutes": 50.0, 
            "delivery_method": "f871ae87-b7f5-4c21-a41a-33ef1443f781" 
        }, 
        { 
            "topic_area": "3caf78fa-0ebe-4ba2-a9f8-751f9819e962", 
            "credit_minutes": 50.0, 
            "delivery_method": "f871ae87-b7f5-4c21-a41a-33ef1443f781" 
        } 
    ] 
}

Return to the table of contents


Issuing Credit Workflow: Example: Create or Update a SessionRecord - Instructor Credit


Issuing instructor credit is similar to participation credit with a few exceptions. First all instructor credit needs to be passed with a status of Passed with custom credit.

Second you will need to change the delivery method of the credit. Instead of passing the session delivery method you will need to provide the delivery method Teaching and/or Teaching (prep) for the credits earned.

NOTE - The Teaching and Teaching (prep) delivery methods should only be used on the SessionRecord. Sessions should not be created with these delivery methods.  

XML

GET- The UUIDs of the Teaching and Teaching (prep) credits. https://acme.lcvista.com/api/v1/deliverymethods/ 
        { 
            "url": "https://acme.lcvista.com/api/v1/deliverymethods/a442ae89-1f1f-4583-a57d-5c64485985ff/", 
            "id": "a442ae89-1f1f-4583-a57d-5c64485985ff", 
            "name": "Teaching", 
            "is_launchable": false, 
            "is_live_integration_allowed": false,
            "display_order": 14, 
            "type": "instruction" 
        }, 
        { 
            "url": "https://acme.lcvista.com/api/v1/deliverymethods/1f15bbcb-93cd-443e-8783-820802d1a137/", 
            "id": "1f15bbcb-93cd-443e-8783-820802d1a137", 
            "name": "Teaching (prep)", 
            "is_launchable": false, 
            "is_live_integration_allowed": false,
            "display_order": 100, 
            "type": "prep" 
        } 


GET - check if sessionrecord already exists 
https://acme.lcvista.com/api/v1/sessionrecords/?organization_person=93389760-f28d-432c-92fd-b62aa9913c32&session=2d9a73d9-f985-47b8-a4a1-a98df877a707 


if record doesn't exist POST  
Required Fields: session, organization_person, program_name, completion_date, status, auto_create_earned_credits, session_record_topic_areas 


Note on status: 
Teaching and prep credit are always issued with a status of Passed with custom credit. 


POST - Teaching credit (without prep credit) https://acme.lcvista.com/api/v1/sessionrecords/ 

    "session": "5c2270e2-ad25-4d7f-a767-8a161169a112", 
    "organization_person": "2fab71d9-ebcf-49b9-83f4-771c6f29d8c0", 
    "program_name": "Name of the program",     "completion_date": "2018-08-01", 
    "status": "Passed with custom credit", 
    "auto_create_earned_credits": true, 
    "session_record_topic_areas": [ 
        { 
            "topic_area": "f2d99c7d-533f-4394-acb8-e9da9e1d6eb9", <UUID of topic area> 
            "credit_minutes": 50.0, 
            "delivery_method": "a442ae89-1f1f-4583-a57d-5c64485985ff" <UUID for Delivery Method Teaching> 
        }, 
        { 
            "topic_area": "3caf78fa-0ebe-4ba2-a9f8-751f9819e962", 
            "credit_minutes": 50.0, 
            "delivery_method": "a442ae89-1f1f-4583-a57d-5c64485985ff" <UUID for Delivery Method Teaching> 
        } 
    ] 



POST - Teaching credit and prep credit.  Prep credit is often 2 times the teaching credit. 
https://acme.lcvista.com/api/v1/sessionrecords/ 

    "session": "5c2270e2-ad25-4d7f-a767-8a161169a112", 
    "organization_person": "2fab71d9-ebcf-49b9-83f4-771c6f29d8c0", 
    "program_name": "Name of the program",     "completion_date": "2018-08-01", 
    "status": "Passed with custom credit", 
    "auto_create_earned_credits": true, 
    "session_record_topic_areas": [ 
        { 
            "topic_area": "f2d99c7d-533f-4394-acb8-e9da9e1d6eb9", <UUID of topic area> 
            "credit_minutes": 50.0, 
            "delivery_method": "a442ae89-1f1f-4583-a57d-5c64485985ff" <UUID for Delivery Method Teaching> 
        }, 
        { 
            "topic_area": "3caf78fa-0ebe-4ba2-a9f8-751f9819e962", 
            "credit_minutes": 50.0, 
            "delivery_method": "a442ae89-1f1f-4583-a57d-5c64485985ff" <UUID for Delivery Method Teaching> 
        }, 
        { 
            "topic_area": "f2d99c7d-533f-4394-acb8-e9da9e1d6eb9", <UUID of topic area> 
            "credit_minutes": 100.0, 
            "delivery_method": "1f15bbcb-93cd-443e-8783-820802d1a137" <UUID for Delivery Method Prep> 
        }, 
        { 
            "topic_area": "3caf78fa-0ebe-4ba2-a9f8-751f9819e962", 
            "credit_minutes": 100.0, 
            "delivery_method": "1f15bbcb-93cd-443e-8783-820802d1a137" <UUID for Delivery Method Prep> 
        } 
    ] 



PATCH - Teaching and prep credit 
https://acme.lcvista.com/api/v1/sessionrecords/<session record UUID>/ 

    "completion_date": "2018-08-01", 
    "status": "Passed with custom credit", 
    "auto_create_earned_credits": true, 
    "session_record_topic_areas": [ 
        { 
            "topic_area": "f2d99c7d-533f-4394-acb8-e9da9e1d6eb9", <UUID of topic area> 
            "credit_minutes": 50.0, 
            "delivery_method": "a442ae89-1f1f-4583-a57d-5c64485985ff" <UUID for Delivery Method Teaching> 
        }, 
        { 
            "topic_area": "3caf78fa-0ebe-4ba2-a9f8-751f9819e962", 
            "credit_minutes": 50.0, 
            "delivery_method": "a442ae89-1f1f-4583-a57d-5c64485985ff" <UUID for Delivery Method Teaching> 
        }, 
        { 
            "topic_area": "f2d99c7d-533f-4394-acb8-e9da9e1d6eb9", <UUID of topic area> 
            "credit_minutes": 50.0, 
            "delivery_method": "1f15bbcb-93cd-443e-8783-820802d1a137" <UUID for Delivery Method Prep> 
        }, 
        { 
            "topic_area": "3caf78fa-0ebe-4ba2-a9f8-751f9819e962", 
            "credit_minutes": 50.0, 
            "delivery_method": "1f15bbcb-93cd-443e-8783-820802d1a137" <UUID for Delivery Method Prep> 
        } 
    ] 
}

Return to the table of contents


Issuing Credit Workflow: Example: Override Default Credit Issued by LCvista


Discuss this scenario with your LCvista account manager before moving forward. This is a workflow that is not regularly required and is only used occasionally for specific requirements.

The following scenario provides an example of how you can override credit for a specific jurisdiction. This workflow will modify the default credits issued and allow you to issue specific credits in a specific jurisdiction.

An example of why you may want to do this is, as a business you want to issue Yellow Book credit to any program where the program name contains "Yellow Book".

Step 1: Get the jurisdiction details for the credits you would like to override

XML

GET - get the jurisdiction IDs for the jurisdictions to be overridden https://acme.lcvista.com/api/v1/jurisdictions/ 


Here is an example of overriding credits for EBP, SEC Consent, Tax Practice Policy and Yellow Book  
        { 
            "url": "https://acme.lcvista.com/api/v1/jurisdictions/c770ca24-48ce-11e8-842f-0ed5f89f718b/", 
            "id": "c770ca24-48ce-11e8-842f-0ed5f89f718b", 
            "name": "AICPA EBPAQC", 
            "slug": "aicpa-ebpaqc-rolling",             ... 
        }, 
        { 
            "url": "https://acme.lcvista.com/api/v1/jurisdictions/269d2ef3-1ca5-4bbd-8a58-68f9fbbb12bd/", 
            "id": "269d2ef3-1ca5-4bbd-8a58-68f9fbbb12bd", 
            "name": "2018 SEC Consent",             "slug": "2018-sec-consent",             ... 
        }, 
        { 
            "url": "https://acme.lcvista.com/api/v1/jurisdictions/0a9322c8-cb49-403a-b0cf-86cad9aefde8/", 
            "id": "0a9322c8-cb49-403a-b0cf-86cad9aefde8", 
            "name": "Tax Practice Policy 1.7.2",             "slug": "tax-practice-policy-1.7.2",             ... 
        }, 
        { 
            "url": "https://acme.lcvista.com/api/v1/jurisdictions/10181a03-8573-4978-b168-572e6ec2c691/", 
            "id": "10181a03-8573-4978-b168-572e6ec2c691", 
            "name": "Yellow Book", 
            "slug": "yellow-book-rolling",             ... 
        } 


GET - jurisdiction delivery methods for the jurisdictions that you will be overriding 
-    There is no filter option by jurisdiction so you will need to load all delivery methods and find the delivery method required for the update by filtering on jurisdiction UUID
https://acme.lcvista.com/api/v1/jurisdictiondeliverymethods/ 


GET - jurisdiction fields of study for the jurisdictions that you will be overriding 
-    There is no filter option by jurisdiction so you will need to load all fields of study and find the FOS required for the update by filtering on jurisdiction UUID
https://acme.lcvista.com/api/v1/fieldsofstudy/

 

Step 2: Find the specific session record to be overridden and then override the credits

XML

GET - get the existing SessionRecord UUID (SessionRecord must exist before issuing credit) 
https://acme.lcvista.com/api/v1/sessionrecords/?organization_person=93389760-f28d-432c-92fd-b62aa9913c32&session=2d9a73d9-f985-47b8-a4a1-a98df877a707 
         

PATCH - Update the session record status to "Passed with custom credit" to indicate the credit will be overwritten https://acme.lcvista.com/api/v1/sessionrecords/<session record UUID>/ 

    "status": "Passed with custom credit" 



PATCH - Update the earned credits for the specific jurisdiction field of study required 
    - This PATCH requires that you provide the field_of_study and jurisdiction delivery_method for the credits.  Jurisdiction DeliveryMethod is different than the session DeliveryMethod.  It is a jurisdiction specific delivery_method.  In addition, we require the jurisdiction UUID in a separate fie       - as a confirmation that credits for this jurisdiction will be fully overwritten by this call.
https://acme.lcvista.com/api/v1/sessionrecordjurisdictioncredits/<UUID for Session Record>/ 

    "earned_credits": [        
        { 
            "field_of_study": "<UUID for the Jurisdiction Field of Study>", 
            "delivery_method": "<UUID for the Jurisdiction Delivery Method>", 
            "credit_minutes": 50.0 
        }, 
        { 
            "field_of_study": "<UUID for the Jurisdiction Field of Study>", 
            "delivery_method": "<UUID for the Jurisdiction Delivery Method>", 
            "credit_minutes": 50.0 
        } 
     ], 
    "jurisdictions": ["<UUID for the Jurisdiction>"] 
}

Return to the table of contents

 

Overall Compliance Report (Read Only)


The overallcompliance endpoint provides a method for retrieving summary compliance data from your site for a specified period (Current Period, Previous Period, etc.).

This is essentially the same data that is on the Overall Compliance report that you can run from our Reports menu. The endpoint returns a JSON structured dataset.

 

Definition of Data Returned

reporting period (start_date, end_date, extended_date)
earned (total credit minutes a user has earned in this period)
applied (total credit minutes that were counted towards a specific jurisdiction)
overall_deficit (summary of credit minutes remaining to be in compliance per the overall requirement)
overall_applied (summary of credit minutes applied to the jurisdiction per the overall requirement)
latest_annual_period - is a summary of data as it relates to the current annual period (if applicable)

 

Endpoint Options and Example

Allowed filters     
reporting_period: int (default 0) (0 = current period, 1 = previous period, 2 = previous, previous period)     
username: str     
username_in: {str}{,str}*     
jurisdiction: {str}     
jurisdiction_in: {str}{,str}*     
status: {Active|Inactive}     
include_custom_fields: {True|False} 


Paging 
    _limit: int (default 1000, max 4000) 
    _offset: int (default 0) 


Example: 
  https://acme.lcvista.com/api/v1/overallcompliance/?jurisdiction=Michigan&status=Active&include_custom_fields=True&_limit=1&_offset=1 


Response type: json 

    "count": 7, 
    "next": null, 
    "previous": null, 
    "results": [ 
        { 
            "id": "06de1d41-79bb-4fea-8065-a5afeb97bbe8", 
            "jurisdiction": { 
                "id": "31ac27ad-0bbd-4ce2-bc99-9256490d015b", 
                "name": "PCAOB", 
                "slug": "pcaob-rolling" 
            }, 
            "organization_person": { 
                "id": "7ff3b32b-aa28-4a42-9101-ab333d5d8758", 
                "custom_fields": {}, 
                "person": {                     "id": "0e30ec4f-d95f-4dcf-8c67-a384e40b23d9", 
                    "username": "admin@lcvista.com", 
                    "first_name": "Admin", 
                    "last_name": "LCVista", 
                    "email": "support@lcvista.com" 
                } 
            }, 
            "is_primary": false, 
            "status": "active", 
            "in_compliance": false, 
            "start_date": "2018-01-01", 
            "end_date": "2020-12-31", 
            "extended_date": "2020-12-31", 
            "earned": 1950.0, 
            "applied": 1950.0, 
            "overall_deficit": 4050.0, 
            "overall_applied": 1950.0, 
            "carry_over": 0.0, 
            "license_id": "123", 
            "latest_annual_period": { 
                "id": "5c62b297-a1de-4144-a4fe-83ba5c43d68b", 
                "in_compliance": true, 
                "start_date": "2020-01-01", 
                "end_date": "2020-12-31", 
                "extended_date": "2020-12-31", 
                "earned": 1950.0, 
                "applied": 1950.0, 
                "overall_applied": 1950.0, 
                "overall_deficit": 0, 
                "carry_over": 0.0 
            } 
        }, 
        { 
            "id": "169db472-a28b-4ae2-92d6-f5f2b38dbbc0", 
            "jurisdiction": { 
                "id": "31ac27ad-0bbd-4ce2-bc99-9256490d015b", 
                "name": "PCAOB", 
                "slug": "pcaob-rolling" 
            }, 
            "organization_person": {                 "id": "a7ef94ec-3dfd-4d28-bf40-ca3c21e1ab91", 
                "custom_fields": {}, 
                "person": { 
                    "id": "db3e6654-42c2-456f-844a-d7d87b0c8f47", 
                    "username": "0030577", 
                    "first_name": "Michele", 
                    "last_name": "Simovski", 
                    "email": "msimovski@demo.com"
                } 
            }, 
            "is_primary": false, 
            "status": "active", 
            "in_compliance": false, 
            "start_date": "2018-01-01", 
            "end_date": "2020-12-31", 
            "extended_date": "2020-12-31", 
            "earned": 0.0, 
            "applied": 0.0, 
            "overall_deficit": 6000.0, 
            "overall_applied": 0, 
            "carry_over": 0.0, 
            "license_id": "", 
            "latest_annual_period": { 
                "id": "4a7c0cc5-f290-417a-8b8d-b9bac5492dce", 
                "in_compliance": false, 
                "start_date": "2020-01-01", 
                "end_date": "2020-12-31", 
                "extended_date": "2020-12-31", 
                "earned": 0.0, 
                "applied": 0.0, 
                "overall_applied": 0, 
                "overall_deficit": 1000.0, 
                "carry_over": 0.0 
            } 
        }, 
        { 
            "id": "2635c85b-5d88-4374-86f6-751c9fe40daf", 
            "jurisdiction": { 
                "id": "31ac27ad-0bbd-4ce2-bc99-9256490d015b", 
                "name": "PCAOB", 
                "slug": "pcaob-rolling" 
            }, 
            "organization_person": {                 "id": "1689d86e-92f2-44fe-8de3-6bc52c579703", 
                "custom_fields": {}, 
                "person": { 
                    "id": "a660660c-885f-4691-9d30-41d3f446c2b8", 
                    "username": "10001552", 
                    "first_name": "Cindy", 
                    "last_name": "Allen", 
                    "email": "CAllen@demo.com" 
                } 
            }, 
            "is_primary": false, 
            "status": "active", 
            "in_compliance": false, 
            "start_date": "2018-01-01", 
            "end_date": "2020-12-31", 
            "extended_date": "2020-12-31", 
            "earned": 0.0, 
            "applied": 0.0, 
            "overall_deficit": 6000.0, 
            "overall_applied": 0, 
            "carry_over": 0.0, 
            "license_id": "", 
            "latest_annual_period": { 
                "id": "78522370-3961-46be-9e0d-f9c878bd83f8", 
                "in_compliance": false, 
                "start_date": "2020-01-01", 
                "end_date": "2020-12-31", 
                "extended_date": "2020-12-31", 
                "earned": 0.0, 
                "applied": 0.0, 
                "overall_applied": 0, 
                "overall_deficit": 1000.0, 
                "carry_over": 0.0 
            } 
        }, 
        { 
            "id": "2a5374d8-bc7a-4444-a5a1-e3e799d4eed0",             "jurisdiction": { 
                "id": "31ac27ad-0bbd-4ce2-bc99-9256490d015b", 
                "name": "PCAOB", 
                "slug": "pcaob-rolling" 
            }, 
            "organization_person": {                 "id": "e522ba2d-f1f6-4060-9ac1-582b377149b6", 
                "custom_fields": {}, 
                "person": { 
                    "id": "202ea2de-923a-4bee-a500-fd63e39e5af2", 
                    "username": "10001178", 
                    "first_name": "Richard", 
                    "last_name": "Haan", 
                    "email": "rhaan@demo.com" 
                } 
            }, 
            "is_primary": false, 
            "status": "active", 
            "in_compliance": false, 
            "start_date": "2018-01-01", 
            "end_date": "2020-12-31", 
            "extended_date": "2020-12-31", 
            "earned": 0.0, 
            "applied": 0.0, 
            "overall_deficit": 6000.0, 
            "overall_applied": 0, 
            "carry_over": 0.0, 
            "license_id": "", 
            "latest_annual_period": { 
                "id": "68268465-7486-4170-9c8d-335d822f4682", 
                "in_compliance": false, 
                "start_date": "2020-01-01", 
                "end_date": "2020-12-31", 
                "extended_date": "2020-12-31", 
                "earned": 0.0, 
                "applied": 0.0, 
                "overall_applied": 0, 
                "overall_deficit": 1000.0, 
                "carry_over": 0.0 
            } 
        }, 
        { 
            "id": "85a3f9a0-1543-44e7-baba-033579d0c50c", 
            "jurisdiction": { 
                "id": "31ac27ad-0bbd-4ce2-bc99-9256490d015b", 
                "name": "PCAOB", 
                "slug": "pcaob-rolling" 
            }, 
            "organization_person": {                 "id": "2054d37f-8336-43ce-b6d4-f5d72a8acdb4", 
                "custom_fields": {}, 
                "person": { 
                    "id": "56b15cb6-0952-465b-bb33-9d9768957538", 
                    "username": "0020662", 
                    "first_name": "Isabel", 
                    "last_name": "Silva Aldridge", 
                    "email": "ISilva@demo.com" 
                } 
            }, 
            "is_primary": false, 
            "status": "active", 
            "in_compliance": false, 
            "start_date": "2018-01-01", 
            "end_date": "2020-12-31", 
            "extended_date": "2020-12-31", 
            "earned": 0.0, 
            "applied": 0.0, 
            "overall_deficit": 6000.0, 
            "overall_applied": 0, 
            "carry_over": 0.0, 
            "license_id": "", 
            "latest_annual_period": { 
                "id": "b53a1b1b-3d99-414c-92ad-d7a1421cf4ab", 
                "in_compliance": false, 
                "start_date": "2020-01-01", 
                "end_date": "2020-12-31", 
                "extended_date": "2020-12-31", 
                "earned": 0.0, 
                "applied": 0.0, 
                "overall_applied": 0, 
                "overall_deficit": 1000.0, 
                "carry_over": 0.0 
            } 
        }, 
        { 
            "id": "92f767ee-820e-404d-a95f-5a7ca308e723", 
            "jurisdiction": { 
                "id": "31ac27ad-0bbd-4ce2-bc99-9256490d015b", 
                "name": "PCAOB", 
                "slug": "pcaob-rolling" 
            }, 
            "organization_person": {                 "id": "50701a98-a6b2-4d84-8ec9-21541deae67f", 
                "custom_fields": {}, 
                "person": { 
                    "id": "edfcfda5-6a46-4c30-80b5-8e320d01569a", 
                    "username": "10000676", 
                    "first_name": "Tracey", 
                    "last_name": "Waite", 
                    "email": "TWaite@demo.com" 
                } 
            }, 
            "is_primary": false, 
            "status": "active", 
            "in_compliance": false, 
            "start_date": "2018-01-01", 
            "end_date": "2020-12-31", 
            "extended_date": "2020-12-31", 
            "earned": 0.0, 
            "applied": 0.0, 
            "overall_deficit": 6000.0, 
            "overall_applied": 0, 
            "carry_over": 0.0, 
            "license_id": "", 
            "latest_annual_period": { 
                "id": "962dfbef-a017-45df-b9be-c8a5825fc744", 
                "in_compliance": false, 
                "start_date": "2020-01-01", 
                "end_date": "2020-12-31", 
                "extended_date": "2020-12-31", 
                "earned": 0.0, 
                "applied": 0.0, 
                "overall_applied": 0, 
                "overall_deficit": 1000.0, 
                "carry_over": 0.0 
            } 
        }, 
        { 
            "id": "b4d9a616-038a-47a7-aa75-41076ab0d21c", 
            "jurisdiction": { 
                "id": "31ac27ad-0bbd-4ce2-bc99-9256490d015b", 
                "name": "PCAOB", 
                "slug": "pcaob-rolling" 
            }, 
            "organization_person": {                 "id": "2fa8e13c-784f-4195-9247-5e2bf0105357", 
                "custom_fields": {}, 
                "person": { 
                    "id": "0727489e-0116-40d3-bb5b-128d4ef2c534", 
                    "username": "0030326", 
                    "first_name": "Jason", 
                    "last_name": "Rhodes", 
                    "email": "jrhodes@demo.com" 
                } 
            }, 
            "is_primary": false, 
            "status": "active", 
            "in_compliance": false, 
            "start_date": "2018-06-04", 
            "end_date": "2020-12-31", 
            "extended_date": "2020-12-31", 
            "earned": 0.0, 
            "applied": 0.0, 
            "overall_deficit": 2000.0, 
            "overall_applied": 0, 
            "carry_over": 0.0, 
            "license_id": "", 
            "latest_annual_period": { 
                "id": "fc4ac194-eba0-4846-92aa-63b0aa68004f", 
                "in_compliance": false, 
                "start_date": "2020-01-01", 
                "end_date": "2020-12-31", 
                "extended_date": "2020-12-31", 
                "earned": 0.0, 
                "applied": 0.0, 
                "overall_applied": 0, 
                "overall_deficit": 1000.0, 
                "carry_over": 0.0 
            } 
        } 
    ] 
}

Return to the table of contents

Common Lookup Endpoints


In the above documentation there are endpoint domain attributes that require a UUID. Here we will list some of the common endpoints that can be used to lookup UUID of the domain values.

It is possible to either do a lookup for each individual record in your data workflow or it is also common practice to load the domain values into a lookup dictionary one time at the beginning of the data workflow and keep these values in memory.

The following endpoints are all located at the standard URL /api/v1/<endpoint name>/ and available in the browsable API interface.

Endpoint

Notes

catalogs

List the catalog names and each programs associated to a catalog

certificatetemplate

List the certificate templates available on your site to associate to a session for autogenerated certificates

deliverymethods

List the available NASBA delivery methods for use when creating a session. Note that only deliverymethods with a type of prep and instruction cannot be used when creating a session.

fieldsofstudy

List the Jurisdiction FieldOfStudy available to use when overriding credit. It is very uncommon for jurisdiction credit to be overridden in an API feed.   Please consult LCvista before attempting to integrate credit overrides in an API feed.

jurisdictions

List the jurisdictions available on your site

organizations

Get your site organization id

qualifications

Get the list of jurisdiction credit qualifications that can be set at the program level.

sponsors

Get the list of sponsor available on your site

topicareas

Get the list of NASBA fields of study available to issue credit on the program and session record

venues

Get the list of available venues on your site

Return to the table of contents

 

FAQ


Frequently asked questions

Return to the table of contents

 

FAQ: Cross Site Forgery (CSRF)


CSRF check is disabled when using token authentication. If you receive a CSRF error it is likely due to an incorrect URL. Be sure that URLs end with “/”. 

Return to the table of contents

 

FAQ: Timestamp Formatting


LCvista stores timestamps internally as UTC time. LCvista will display timestamps based on the time zone setting of the user's browser. Most scripting languages have built-in functions to handle time conversions, but you must ensure that your timestamp values have been correctly formatted to UTC before passing to an endpoint. There are two options for formatting timestamps in UTC when passing to an endpoint:

Raw UTC time with no offset provided

2019-01-08T19:00:00.000Z

Timestamp including the timezone offset

2019-01-07T13:00:00-06:00

Return to the table of contents

 

FAQ: Postman Collections


LCvista has a collection of Postman calls to provide an idea of how to interact with API endpoints. The collection includes common functionality used by clients loading data to LCvista and are attached to this guide for download. You can download Postman at https://www.getpostman.com/ (https://www.getpostman.com/).

There are two variables that need to be set in the attached collection in order to work on your site. You will need to set the site_url_slug to your site specific URL.

For example, the site https://acme.lcvista.com (https://acme.lcvista.com) has a site_url_slug of acme. You will need to set the site_token to the token generated on your lcvista.com site.

Return to the table of contents