Applies To:
-
Pinnacle Series Admins.
Common Causes/Issues:
- You would like to learn more about how the Pinnacle Series API works.
Solution Overview:
About This Data Dictionary
This data dictionary defines the fields used in Pinnacle Series reporting APIs. It is designed to support both technical users (such as developers and data analysts) and non-technical users (such as learning leaders, customer success managers, and admins) who need to understand how data connects across reports, dashboards, and analytics tools.
Each entry includes:
- Field Name – The technical name used in the API.
- Data Type – The expected format of the data (e.g., String, Boolean, Array).
- Description – What the field represents, in plain English.
- API Usefulness – How and where the field is typically used for joins or filters.
- BI/Dashboard Value – How this field adds value in analytics, tracking, or segmentation.
- Example Value – A real-world sample to make interpretation easier.
Registered Users – API: /reporting/registeredUsers
| Field Name | Data Type | Description | API Usefulness | BI/Dashboard Value | Example Value |
|---|---|---|---|---|---|
| user_id | String | Unique identifier for the user | Primary join key across all user-based APIs | Core field for tracking engagement, assignments, and behavior by user | 9cfb86c4-2243-475e-9321-abcde7f00791 |
| tenant_id | String | Customer tenant (organization) ID | Used for multi-tenant filtering | Useful for enterprise-wide dashboards across multiple clients (for partners or MSPs) | 7bda123a-8823-4d71-8fd2-tenant9876 |
| display_name | String | User's full name | Used for readable reports and exports | Helps personalize dashboards and reports for presentation to stakeholders | Jane Doe |
| String | Email address of the user | Useful for matching with HR or external systems | Enables user-level targeting or outreach via email campaigns | jane.doe@example.com | |
| attributes | Array[String] | Custom user attributes (e.g., office, job title) | Supports segmentation and filtering | Enables advanced analytics by department, geography, or role | ["London", "Structural Engineer"] |
| groups | Array[String] | Groups the user is part of | Filter, assign, and analyze by group | Measure group-level adoption and performance | ["EMEA", "Interns"] |
| managers | Array[String] | Managers associated with the user | For targeted reporting or manager-driven assignments | Enable dashboards showing team engagement per manager | ["ann.smith@abc.com"] |
| created_date | DateTime (ISO 8601) | When the user account was created | Sort/filter users by account age | Supports aging reports or onboarding tracking | 2025-07-01T10:00:00Z |
| deleted_date | DateTime (ISO 8601) | If deleted, date the user was deleted | Track deletion activity | Useful for cleanup audits or license optimization | 2025-07-15T09:30:00Z |
| is_deleted | Boolean | Whether the user account is deleted | Used to exclude from current analysis | Filter out obsolete users from dashboards and reports | true |
| is_anonymized | Boolean | Whether user data has been anonymized | Privacy handling for GDPR compliance | Ensure sensitive data is not included in exports | false |
| number_of_logins | Int | Total number of logins | Measure user engagement | Analyze activation, adoption, and user health scoring | 12 |
Logins – API: /reporting/logins
| Field Name | Data Type | Description | API Usefulness | BI/Dashboard Value | Example Value |
|---|---|---|---|---|---|
| login_id | String | Unique identifier for each login record | Primary key for tracking logins | Enables user session tracking and audit trails | 12345abc |
| tenant_id | String | Unique identifier for the customer organization | Filter by tenant for multi-tenant environments | Segmentation by organization; tenant-specific adoption reporting | tenant_xyz |
| user_id | String | Unique identifier of the user who logged in | Join key to user metadata | User-level activity tracking | user_001 |
| display_name | String | Display name of the user | Readable reference for API consumers | Enables personalized dashboards; executive summaries | Jane Doe |
| String | Email address of the user | Alternative join or lookup key | Clear identification of user in reporting | jane.doe@example.com | |
| attributes | Array[String] | User attributes as key-value pairs | Retrieve and display user profile context | Enable demographic/attribute-based segmentation of logins | ["Hire Date:2021-04-03","Phone Number:608-763-2420"] |
| groups | Array[String] | Groups the user belongs to | Filter/sort by organizational group | Analyze adoption by team or department | ["Administrator","HR"] |
| managers | Array[String] | Managers associated with the user | Add organizational context to API data | Report on manager-level adoption patterns | ["Harold Otter","Timothy Reynolds"] |
| login_time | DateTime (ISO 8601) | Date and time of login (UTC) | Filter/sort logins chronologically | Analyze platform usage patterns, peak times | 2025-07-17T08:00:00Z |
| logout_time | DateTime (ISO 8601) | Date and time of logout (UTC) | Calculate session duration | Measure average session length, user stickiness | 2025-07-17T10:00:00Z |
| version | String | Pinnacle Series version used at login | Contextual detail for API consumers | Identify version adoption; monitor legacy version usage | 5.0.2 |
| device_type | String | Device type used at login | Filter/sort API results by device | Analyze user behavior by device type; support mobile adoption initiatives | Desktop |
| ip_address | String | IP address from which user logged in | Audit trail | Enable geo-based adoption analysis, compliance review | 192.168.1.100 |
| total_logins | Int | Total Number of Logins | Engagement Tracking | Supports system-wide reporting, adoption ratio insights, and analysis of login patterns | 5261 |
1) Use login_time and logout_time to calculate average session durations and identify peak engagement hours. Target email nudges or training campaigns to coincide with high-traffic periods.
2) Segment total_logins by manager or group to highlight power users vs. inactive teams. Use insights in success reviews to recognize champions or coach underperforming groups.
Resources Accessed – API: /reporting/resourcesAccessed
| Field Name | Data Type | Description | API Usefulness | BI/Dashboard Value | Example Value |
|---|---|---|---|---|---|
| access_id | String | Unique identifier for each resource accessed record | Primary key for tracking logins | Enables tracking unique resources accessed | 12345abc |
| tenant_id | String | Unique identifier for the customer organization | Filter by tenant for multi-tenant environments | Segmentation by organization; tenant-specific adoption reporting | tenant_xyz |
| user_id | String | Unique identifier of the user who logged in | Join key to user metadata | User-level activity tracking | user_001 |
| String | Email address of the user who accessed the resource | Identify the user uniquely; join to user metadata | Enables personalized reporting; identify active users by email | jane.doe@example.com | |
| attributes | Array[String] | User attributes at time of access | Add demographic context to access logs | Analyze usage trends by department, location, etc. | ["Region:EMEA","Job Title:BIM Manager"] |
| groups | Array[String] | Groups the user belongs to at time of access | Filter by team, department, or region | Adoption by organizational segment | ["Design Team"] |
| managers | Array[String] | Managers associated with the user | Organizational reporting | Enables roll-up adoption dashboards by manager | ["Harold Otter"] |
| accessed_date | DateTime (ISO 8601) | Timestamp when resource was accessed | Filter/sort chronologically | Analyze engagement over time; identify peak periods | 2025-07-15T09:30:00Z |
| content_id | String | Unique identifier for the accessed content | Primary join key to content metadata | Enables content-level usage reporting | abc123 |
| content_name | String | Name/title of the content accessed | Human-readable reference | Improves dashboard readability; content-level insights | Revit Basics |
| content_type | String | Type of content (e.g., Video, Document) | Filter/sort API results | Analyze engagement by format | Video |
| publisher | String | Content publisher | Filter/sort API results | Distinguish internal vs external content performance | Eagle Point Software |
| topics | Array[String] | Topics associated with the content | Filter API responses; enrich metadata | Analyze usage by subject areas | BIM, Architecture |
| subtopics | Array[String] | Subtopics for additional granularity | Refine API queries | Deeper usage insights for niche areas | Revit Families |
| libraries | Array[String] | Libraries that own the content | Contextual grouping | Analyze adoption by library or collection | Corporate Library |
| referred_by | String | Area of the platform that led to the interaction | Engagement source tracking | Understand what area of the platform led to the interaction | "Browse", "Work Centre", "Learning Center" |
| TotalCount | Int | Total Number of Interactions | Engagement Tracking | Supports system-wide reporting, adoption ratio insights, and analysis of content type popularity | TotalCount: 1235 |
1) Combine user_id, content_id and accessed_date to measure how recently users are engaging with critical resources. This is perfect for identifying stale users or celebrating high-value engagement.
2) Use referred_by to pinpoint how users are discovering content. This helps optimize homepage widgets, campaign placements, and guided workflows.
Searches – API: /reporting/searches
| Field Name | Data Type | Description | API Usefulness | BI/Dashboard Value | Example Value |
|---|---|---|---|---|---|
| search_id | String | Unique identifier for each search record | Primary key for search logs | Enables individual search-level analysis and auditing | 12345abc |
| tenant_id | String | Unique identifier for customer organization | Filter by tenant | Segmentation by organization; organization-specific search trend analysis | tenant_xyz |
| user_id | String | Unique identifier of the user performing the search | Join key to user metadata | User-level intent analysis; behavioral profiling | user_001 |
| display_name | String | Display name of the searching user | Readable reference in API responses | Clear attribution in dashboards | Jane Doe |
| String | Email address of the searching user | Alternative join key | Personalized adoption reports; identify active users | jane.doe@example.com | |
| attributes | Array[String] | User attributes at time of search | Add demographic context | Analyze search trends by department, region, etc. | ["Region:EMEA","Discipline:Architecture"] |
| groups | Array[String] | User’s groups at time of search | Filter by organizational structure | Analyze search behavior by department/team | ["BIM Managers"] |
| managers | Array[String] | Managers responsible for user | Contextual join | Roll-up reporting for manager-driven initiatives | ["Harold Otter"] |
| search_date | DateTime (ISO 8601) | Timestamp when search occurred | Filter/sort chronologically | Analyze search volume trends over time; identify peak search periods | 2025-07-17T09:37:55.465Z |
| search_term | String | Search query submitted by user | Analyze intent and discoverability | Identify most common search terms; gap analysis | "Revit Templates" |
| totalCount | Int | Total number of searches performed | Engagement Tracking | Supports system-wide reporting, adoption ratio insights, volume of searches per group or attribute | 2365 |
1) search_term + search_date can reveal gaps between what users look for vs. what exists. Highlight content strategy wins or surface unmet demand by comparing top queries to available content.
2) Use attributes and groups to break down search trends by region, role, or discipline. This drives relevance in search and supports localized content strategies.
3) Search_date patterns can surface peak search times—ideal for promoting self-directed learning and spotlighting timely campaigns during high engagement windows.
4) totalcount is a strong proxy for platform trust. If search volume is rising, highlight this metric to show learners are actively seeking knowledge.
Course Enrollments – /reporting/courseenrollment
| Field Name | Data Type | Description | API Usefulness | BI/Dashboard Value | Example Value |
|---|---|---|---|---|---|
| enrollment_id | String | Unique enrollment record identifier | Primary key for enrollment data | Tracks individual learner engagement | abc123 |
| tenant_id | String | Customer organization identifier | Filter by tenant | Segmentation by company | tenant_xyz |
| assigned_to_user_id | String | ID of the user assigned the course | Join key to user metadata | Track course assignment per user | user_001 |
| assigned_to_display_name | String | User’s name | Human-readable reference | Personalized reporting | Jane Doe |
| assigned_to_email | String | User’s email address | Alternative join key | Targeting or communication | jane.doe@example.com |
| assigned_by_user_id | String | ID of the assigner | Join key for reporting | Assignment ownership tracking | manager001 |
| assigned_by_display_name | String | Name of the assigner | Readable reference | Manager assignment insights | Harold Otter |
| assigned_date | DateTime | Date the course was assigned | Sort chronologically | Monitor campaign timing | 2025-07-17T09:37:55.465Z |
| attributes | Array[String] | User attributes at time of assignment | Contextual joins | Segment by role, region, etc. | ["Job Title:BIM Manager"] |
| groups | Array[String] | User’s groups at time of assignment | Filter by org structure | Team-level insights | ["Design Team"] |
| managers | Array[String] | Managers for the user | Roll-up reporting | Manager-level accountability | ["Timothy Reynolds"] |
| course_id | String | Unique identifier for the course | Join key to content | Track course-level adoption | course_456 |
| course_version | String | Version of the course | Content accuracy check | Track outdated materials | v2 |
| course | String | Title of the course | Readable label | Improve dashboard readability | Revit Fundamentals |
| topics | Array[String] | Course topics | Filter by topic | Training segmentation | ["Architecture"] |
| subtopics | Array[String] | Course subtopics | Granular filtering | Detailed content analysis | ["Revit Families"] |
| libraries | Array[String] | Libraries hosting the content | Library-level filtering | Monitor adoption by library | ["Corporate Library"] |
| course_duration_minutes | Int | Total course length | Time allocation | Baseline for engagement tracking | 60 |
| assigned_minutes | Int | Minutes assigned to learner | Assignment scope | Effort expectation | 45 |
| viewed_minutes | Int | Minutes actually viewed | Engagement metric | Consumption vs. assignment | 30 |
| percent_reviewed | Int | % of course reviewed | Progress indicator | Detect skimming | 66 |
| learning_path_id | String | ID of the related learning path | Join key to path metadata | Path-level tracking | LP_advanced_revit |
| learning_path | String | Title of the related path | Content grouping | Analyze path vs standalone usage | Advanced Revit |
| status | String | Assignment status | Funnel analysis | Monitor learning journey | Completed |
| quiz_status | String | Status of any quiz | Measure quiz outcome | Quiz effectiveness tracking | Passed |
| due_date | DateTime | Deadline for the course | Deadline enforcement | Drives completion urgency | 2025-08-01T10:00:00.000Z |
| completed_date | DateTime | Date course was completed | Track timing | Completion trend analysis | 2025-08-02T14:00:00.000Z |
| dropped_date | DateTime | Date course was dropped | Monitor disengagement | Retention insights | 2025-08-01T15:30:00.000Z |
| is_self_enrolled | Boolean | True if self-enrolled | Identify autonomous users | Champion potential | true |
| has_due_date | Boolean | True if due date is set | Enables due filtering | Accountability metric | true |
| is_completed | Boolean | Completion flag | Track success | Completion tracking | true |
| is_dropped | Boolean | Dropout flag | Retention analysis | Spot red flags | false |
| is_scorm | Boolean | True if SCORM content | SCORM-specific logic | SCORM behavior insights | false |
| is_personalized | Boolean | Auto-assigned via assessment | Training ROI field | Personalization success tracking | true |
| assessment | String | Linked assessment ID | Join to assessment results | Show skills gap alignment | KS101 |
| totalCount | Int | Total number of enrollments | Engagement tracking | Overall platform usage | 2365 |
1) Use is_self-enrolled to surface high-autonomy learners—ideal champions for pilot groups or feedback loops.
2) Blend viewed_minutes and percent_reviewed with status to flag users who completed content without meaningful engagement.
3) is_personalized = true is the goldmine field for showing ROI on personalized learning workflows.
Content Analysis – /reporting/content
This API provides comprehensive metadata for all content in the LMS, including title, duration, type, difficulty, keywords, and personalization tags. This dataset powers content audits, usage analytics, discoverability scoring, and alignment to personalized learning journeys.
| Field Name | Data Type | Description | API Usefulness | BI/Dashboard Value | Example Value |
|---|---|---|---|---|---|
| content_id | String | Unique content identifier (join key) | Join key across APIs | Core for content-level reporting | abc456 |
| content_name | String | Title of the content | Readable label in dashboards | Content usage labeling | Getting Started with Revit |
| content_type | String | Type (e.g., Video, Document, Workflow) | Filter by type | Analyze media mix and effectiveness | Video |
| courses / learning_paths | Int | Number of linked courses and paths | Indicates reuse across training programs | Flag high-value content | 3 |
| topics / subtopics / libraries | Array[String] | Associated metadata categories | Filter by taxonomy | Content grouping and structure analytics | ["Architecture","Getting Started"] |
| url | String | Direct link to content | Reference for quick access | Support linking in adoption campaigns | https://lms.company.com/view/abc456 |
| duration_minutes / calculated_duration / video_duration | Int | Timing and duration metadata | Time-cost estimation | Identify long-form vs. microlearning | 12 |
| difficulty | String | Difficulty level (Beginner, Intermediate, Advanced) | Surface level-appropriate content | Match difficulty to learner skill | Beginner |
| publisher | String | Content publisher (internal or 3rd party) | Filter by source | Internal vs. external analysis | Pinnacle Series |
| created_date / modified_date | DateTime | Audit and freshness dates | Track content lifecycle | Identify stale vs. recently updated | 2025-06-01T12:00:00Z |
| created_by / modified_by | String | Audit trail (user IDs) | Identify content contributors | Highlight active content creators | jane.doe |
| last_accessed_date / last_accessed_by | DateTime / String | Last usage information | Measure activity | Detect unused or high-traffic items | 2025-07-20 / user_001 |
| learning_tags | Array[String] | Mapped training tags from KnowledgeSmart | Personalization signal | Align content to skill assessments | ["Tag: Revit Templates"] |
| command_tags | Array[String] | Referenced Autodesk commands | Technical metadata | Just-in-time command lookup | ["REVCLOUD", "TEXT"] |
| keywords | Array[String] | Searchable free-text keywords | Improve discoverability | Enhance metadata search results | ["family","parameter","template"] |
| folder / parent_folder | String | Content location metadata | Track content storage | Support content library audits | Getting Started |
| folder_path | String | Full hierarchical folder path | Filter by location | Reveal nested content patterns | /Architecture/Getting Started/Revit |
Tips:
1) Use last_accessed_date to identify content that is frequently viewed vs. ignored—great for surfacing popular assets and retiring low-impact ones.
2) Highlight content with learning_tags or command_tags to demonstrate alignment with skill frameworks and just-in-time Autodesk help.
Join Scenarios for Cross-API Analysis
To extract meaningful insights from Pinnacle Series API data, it’s often necessary to join tables across multiple endpoints. This table outlines common join scenarios, key fields, and strategic use cases from both platform and customer success perspectives.
| Join Scenario | Primary Table | Join Table(s) | Key Fields | Purpose / Insight |
|---|---|---|---|---|
| User engagement | Registered Users | Logins, Resources Accessed, Searches | user_id | Analyze total engagement per user |
| Training adoption | Registered Users | Course Enrollments | user_id | Track assignments vs completions by user |
| Content utilization | Content | Resources Accessed | content_id | Analyze which content is being accessed most often |
| Personalized learning | Registered Users | Course Enrollments, Content | user_id, content_id | Identify personalized journeys and training alignment |
Recommendations:
- Use inner joins for activity-based analysis (e.g., completed enrollments, actual logins).
- Use left joins to include users even if no activity is recorded.
- Be cautious of nullable fields like learning_pathj_id - check for existence before filtering.
- Ensure all date fields follow ISO 8601 format and UTC timezone for accurate joins.