We’re excited to announce a series of important updates to the DAP Query API / CD2 schema. These changes are designed to resolve data integrity issues, improve data types, and introduce highly requested columns to give you deeper insights and better control over your data pipelines.
The changes will go live on April 27, 2026.
Here is a summary of the upcoming schema changes:
1. Preventing Data Integrity Issues: Fixing Nullable Mismatches We identified a critical issue affecting 40 columns across 25 tables, where columns were marked as "required" in the schema but actually allowed NULL values in PostgreSQL. Because of this mismatch, the Export API was silently dropping entire rows whenever a required column was NULL, resulting in an estimated 49.4 million lost rows across our regions.
To fix this, we are changing these 40 columns to be optional. While your applications will now receive NULL values in these specific fields, getting the row with a NULL is much better than losing the row entirely. This change will require a schema version bump for every affected table.
2. Submissions Table: New Custom Grade Status We are adding a new custom_grade_status_id column (bigint, nullable, foreign key to custom_grade_statuses) to the submissions table. This addition directly addresses customer requests, allowing you to accurately calculate excused, custom, late, extended, or missing statuses.
3. Pseudonyms Table: Improved Filtering for Login Activity Canvas Identity currently writes to the pseudonyms table, which has historically caused issues for customers trying to check login activity in their data pipelines. To solve this, we are introducing the is_inst_id column (boolean, not null in Canvas, but we will add it as optional because dap-schemas does not support default values). This will allow you to easily filter out Inst ID records.
4. Context External Tools: New Settings Placements We are expanding the settings object for Context External Tools by adding 7 new placement fields: assignment_edit, assignment_view, module_index_menu_modal, module_menu_modal, submission_type_selection, top_navigation, and resource_selection. These Optional[str] fields were highly requested by customers and follow the same pattern as the existing 34 placement fields.
Update: We are not going to release the following schema change (No. 5.) because our initial testing showed it would break MSSQL and MySQL integrations.
5. Collaborations Table: Type Mismatch Fix We are fixing a minor type mismatch in the collaborations table. The resource_link_lookup_uuid column will be changed from a string (MaxLength 255) to a standard UUID type. This matches the PostgreSQL type and aligns with the other UUID columns in the codebase, requiring a schema version bump for the table.
6. Canvas_logs namespace, web_logs Table: Add 'SisBatch' Context Type: A new web_application_context_type, sisbatch, is being produced within the web_logs table. Since this is not currently included in the schema, it breaks the data contract and the DAP CLI tool when attempting to sync/download this data using the DAP CLI initdb/syncdb commands. We are adding SisBatch to the schema for the canvas_logs namespace, web_logs table, web_application_context_type column value.
What You Need to Do Because these updates involve schema version bumps across multiple tables, please ensure your data pipelines and downstream applications are prepared to handle the new version numbers, the newly added columns, and the introduction of NULL values in the corrected tables.
If you are using DAP CLI to save and store data in a relational database, then it will automatically handle the schema updates for you.
We are committed to providing you with the most accurate and high-fidelity data possible, and the documentation will be updated once the release is live to reflect the current state of the system!