> ## Documentation Index > Fetch the complete documentation index at: https://developers.cmicglobal.com/llms.txt > Use this file to discover all available pages before exploring further. # PostRecord > # POST /v2/user-extension - Insert Record ## Overview This endpoint inserts a new row into any UE table. You pass the table code, the object key values that identify the parent record, and the UDF field values to write. The API validates the parent record exists, re-fetches the authoritative key values from the parent table, validates every UDF field, and then inserts the row. On success it returns the newly inserted row as re-queried from the database. | Property | Value | | --- | --- | | URL | `{base_url}/sys-rest-api/jersey/v2/user-extension` | | Method | `POST` | | Consumes / Produces | `application/json` | | Success Status | `201 Created` | | Auth | Basic (`Authorization: Basic {credentials}`) | --- ## Notes Authentication and authorization are required. `tableCode` must be present in the request body. If it is blank or missing the request is rejected immediately. The `data` map must contain at least `objectKey1`. Additional object keys (`objectKey2` through `objectKey10`) are required for composite-key tables. The object key values you send are used only to locate the parent record. The values that actually get written into the UE row are re-fetched from the parent table using the resolved ORASEQ. This means the inserted row will always have the correct casing, padding, and formatting as stored in the parent — not whatever the caller typed. Every UDF field value is validated and normalised before the insert runs. If any field fails validation (wrong LOV value, wrong case, unparseable date) the entire request is rejected and nothing is written. `dateFormat` defaults to `YYYY-MM-DD` if not supplied. It controls how date field values in the `data` map are interpreted. After a successful insert the row is re-queried from the physical UE table and returned in the response. If the re-query fails, the response falls back to the resolved input values — the row was still inserted and committed. --- ## UI Navigation User Extension tables are attached to the parent object's own screen in CMiC. There is no standalone navigation path. This endpoint is the API equivalent of filling in the UE fields on an object's record and saving. --- ## Request Body | Field | Type | Required | Description | | --- | --- | --- | --- | | `tableCode` | String | Yes | UE table code to insert into (e.g. `CIITEM_K`). | | `dateFormat` | String | No | Oracle date mask for date fields in `data`. Defaults to `YYYY-MM-DD`. | | `data` | Map | Yes | Field code to value map. Must include `objectKey1` (and additional keys for composite-key tables). All other entries are treated as UDF field codes. | | `data.objectKey1` | String | Yes | First business key of the parent record (e.g. `01` for Company Code). | | `data.objectKey2` through `objectKey10` | String | Depends | Additional keys for composite-key objects. | | `data.{UDF_FIELD_CODE}` | String | No | UDF field value to insert (e.g. `UDF_NOTES`, `UDF_RATING`, `UDF_REVIEW_DATE`). | --- ## Attributes ### Response — 201 Created | Field | Type | Description | Example | | --- | --- | --- | --- | | `status` | String | Always `success` on 201 | `success` | | `tableCode` | String | UE table code that was inserted into | `CIITEM_K` | | `rowsAffected` | Integer | Number of rows inserted (normally 1) | `1` | | `message` | String | Confirmation message | `Successfully inserted 1 row.` | | `data` | Map | The re-queried inserted row. Column names are prefixed with the table code. System columns excluded. | | | `data.{TABLECODE}_COMP_CODE` | String | Company Code as stored in the UE row | `01` | | `data.{TABLECODE}_ITEM_CODE` | String | Item Code as stored in the UE row | `BOLT-123` | | `data.{TABLECODE}_{UDF_FIELD}` | String | Inserted UDF field value (normalised) | `A` | | `data.UE__IU__CREATE_DATE` | String (ISO 8601) | Row create timestamp | `2026-06-30T10:30:00-04:00` | | `data.UE__IU__UPDATE_DATE` | String (ISO 8601) | Row update timestamp | `2026-06-30T10:30:00-04:00` | --- ## Example ### Request ``` POST {base_url}/sys-rest-api/jersey/v2/user-extension Content-Type: application/json Authorization: Basic {credentials} { "tableCode": "CIITEM_K", "dateFormat": "YYYY-MM-DD", "data": { "objectKey1": "01", "objectKey2": "BOLT-123", "UDF_NOTES": "Approved by Engineering", "UDF_RATING": "a", "UDF_REVIEW_DATE": "2026-06-30" } } ``` ### Response — 201 Created ``` { "status": "success", "tableCode": "CIITEM_K", "rowsAffected": 1, "message": "Successfully inserted 1 row.", "data": { "CIITEM_K_COMP_CODE": "01", "CIITEM_K_ITEM_CODE": "BOLT-123", "CIITEM_K_UDF_NOTES": "Approved by Engineering", "CIITEM_K_UDF_RATING": "A", "CIITEM_K_UDF_REVIEW_DATE": "2026-06-30T00:00:00-04:00", "UE__IU__CREATE_DATE": "2026-06-30T10:30:00-04:00", "UE__IU__UPDATE_DATE": "2026-06-30T10:30:00-04:00" } } ``` Note: `UDF_RATING` was sent as `"a"` but the field is configured with uppercase case flag, so the API normalised it to `"A"` before inserting. ### Error — Parent Record Not Found (400) ``` { "error": "SD-000376-ERR: Master record does not exist for the given key values." } ``` --- ## Error Codes | HTTP | Error Code | Reason | | --- | --- | --- | | 400 | `SD-000380-ERR` | Request body is null or empty | | 400 | `SD-000381-ERR` | Request body is not valid JSON | | 400 | `SD-000375-ERR` | `tableCode` is blank or missing | | 400 | `SD-000382-ERR` | `data` map is null or empty | | 400 | `SD-000376-ERR` | Table code invalid or parent record not found for the supplied keys | | 400 | `IllegalArgumentException` | No `objectKey1` found in `data`; key mapping not found for the table; a UDF field does not exist; UDF field validation failed | | 500 | — | Unhandled database or server error — auto rollback | ## OpenAPI ````json POST /sys-rest-api/jersey/v2/user-extension { "openapi": "3.0.0", "info": { "title": "API Catalog", "description": "", "version": "1.0.0" }, "servers": [ { "url": "https://mobtest.cmiccloudr12.com/cmictestrti", "description": "CMIC API Server" } ], "security": [ { "cmicBasicAuth": [] } ], "tags": [ { "name": "Highlights" }, { "name": "Asset Management | Equipment" }, { "name": "Asset Management | Fixed Assets" }, { "name": "Asset Management | Purchase Order" }, { "name": "Asset Management | Inventory" }, { "name": "Asset Management | Requisition" }, { "name": "Asset Management | Purchase Change Order" }, { "name": "Bim Model" }, { "name": "Bim Model Revision" }, { "name": "Bim Tag Model" }, { "name": "Bim Tags" }, { "name": "Bim FileUpload Jersey" }, { "name": "Core System | Business Partners" }, { "name": "Core System | Business Partner Addresses" }, { "name": "Core System | Bank" }, { "name": "Core System | Currency" }, { "name": "Core System | Exchange Rates" }, { "name": "Core System | Global Table Text Codes" }, { "name": "Core System | Global Table Regions" }, { "name": "Core System | Terms" }, { "name": "Core System | System Contact" }, { "name": "Core System | Weight Measures" }, { "name": "Core System | Field User Defined Classifiers" }, { "name": "Core System | User Defined Classifiers by Object" }, { "name": "Core System | User Extension Definitions by Object" }, { "name": "Core System | User Extention Field Data Value" }, { "name": "Core System | User Extension Values by Object" }, { "name": "Core System | User System Role" }, { "name": "Core System | User Project Role" }, { "name": "Core System | Documents by Object" }, { "name": "Core System | Audit Status Log by Object" }, { "name": "Core System | Licensed Users" }, { "name": "Core System | Company Access" }, { "name": "Core System | Copy User Settings" }, { "name": "Core System | User Maintenance" }, { "name": "Core System | User Roles" }, { "name": "Core System | Security Groups" }, { "name": "Core System | Job/Project Security" }, { "name": "Core System | Weight Measure with Conversions Code" }, { "name": "Core System | Weight Measure Conversions Code" }, { "name": "Core System | User-defined-fields" }, { "name": "Core System | User-extension" }, { "name": "ECM and Workflow | Image Manager" }, { "name": "Financials | General Ledger" }, { "name": "Financials | Accounts Payable" }, { "name": "Financials | Accounts Receivable" }, { "name": "Preventative Maintenance | Issue Work Orders" }, { "name": "Preventative Maintenance | Issue Work Items" }, { "name": "Preventative Maintenance | Issue Work Budgets" }, { "name": "Preventative Maintenance | Issue Priorities" }, { "name": "Preventative Maintenance | Issue Status" }, { "name": "Preventative Maintenance | Issue Types" }, { "name": "Preventative Maintenance | Accumulative Equipment" }, { "name": "Preventative Maintenance | Work Orders" }, { "name": "Preventative Maintenance | Work Items" }, { "name": "Preventative Maintenance | Work Budgets" }, { "name": "Preventative Maintenance | Priorities" }, { "name": "Preventative Maintenance | Tasks" }, { "name": "HCM | UKG Pay Deductions" }, { "name": "HCM | UKG Pay Earnings" }, { "name": "HCM | UKG Pay Headers" }, { "name": "HCM | UKG Pay Taxes" }, { "name": "HCM | Payroll Geographical States" }, { "name": "HCM | Payroll Trades" }, { "name": "HCM | Payroll Union" }, { "name": "HCM | Payroll Pay Runs" }, { "name": "HCM | Payroll Pay Groups" }, { "name": "HCM | Payroll Tax" }, { "name": "HCM | Payroll Worker Compensation" }, { "name": "HCM | Payroll Work Locations" }, { "name": "HCM | Payroll Trade Pay Rates" }, { "name": "HCM | Payroll Union Pay Rates" }, { "name": "HCM | Payroll Job Pay Rates" }, { "name": "HCM | Payroll Master Benefits" }, { "name": "HCM | Payroll Master Deductions" }, { "name": "HCM | Payroll Ben/Ded/Leave Base Codes" }, { "name": "HCM | Payroll Ben/Ded Plans" }, { "name": "HCM | Payroll Ben/Ded Plan Options" }, { "name": "HCM | Payroll Company Benefits" }, { "name": "HCM | Payroll Company Deductions" }, { "name": "HCM | Payroll Vertex Geographic Locations" }, { "name": "HCM | Payroll Checks" }, { "name": "HCM | Payroll Timesheets" }, { "name": "HCM | Employee" }, { "name": "HCM | Employee (Minimum payload)" }, { "name": "HCM | Employee History" }, { "name": "HCM | Tax Exemptions" }, { "name": "HCM | Employee Tax Overrides" }, { "name": "HCM | Employee Pay Splits" }, { "name": "HCM | Employee Benefits" }, { "name": "HCM | Employee Clock In and Out" }, { "name": "HCM | Employee Deductions" }, { "name": "HCM | Employee Leaves" }, { "name": "HCM | Employee Leave History" }, { "name": "HCM | Employee Hour Types" }, { "name": "HCM | Employee Pay History" }, { "name": "HCM | Employee Work Statuses" }, { "name": "HCM | Employee Security Group" }, { "name": "HCM | Crewtime Crew" }, { "name": "HCM | Crewtime Employee Timesheet" }, { "name": "HCM | Crewtime Equipment Timesheet" }, { "name": "HCM | Crew Maintenance Activity Assignment" }, { "name": "HCM | Crew Maintenance Member Assignment" }, { "name": "HCM | Crew Maintenance Member Trade and Union Assignment" }, { "name": "HCM | Crew Maintenance Equipment Assignment" }, { "name": "HCM | Crew Maintenance Equipment Detail Assignment" }, { "name": "HCM | HR Requisitions" }, { "name": "HCM | HR Relations" }, { "name": "HCM | HR Employee Skills" }, { "name": "HCM | HR Incident" }, { "name": "HCM | HR Employee Relatives / Dependents" }, { "name": "HCM | HR Employee Positions" }, { "name": "HCM | HR Applicants" }, { "name": "HCM | HR Applications" }, { "name": "HCM | Vertex Location City" }, { "name": "HCM | HR Application History" }, { "name": "HCM | HR Dependent Benefits" }, { "name": "HCM | HR Dependent Deductions" }, { "name": "HCM | HR Employee Elected Plans" }, { "name": "HCM | HR Employee Training Certifications" }, { "name": "HCM | HR Trainings" }, { "name": "HCM | E-Timesheets" }, { "name": "HCM | System Contacts" }, { "name": "HCM | System User Payroll Security Group" }, { "name": "HCM | Payroll Timesheet Posting" }, { "name": "HCM | CrewTimesheet Posting" }, { "name": "HCM | HR Positions Master" }, { "name": "HCM | Payroll Pay Periods" }, { "name": "HCM | Payroll Rate Codes" }, { "name": "HCM | Payroll Overhead Codes and Rates" }, { "name": "HCM | Payroll Assigned Overhead to Jobs" }, { "name": "Materials Management | Material Sale Orders" }, { "name": "Materials Management | Material Sale Orders Details" }, { "name": "Materials Management | Truck Rate Detail" }, { "name": "Opportunity Management | Competitors" }, { "name": "Opportunity Management | Opportunities" }, { "name": "Opportunity Management | Revenue Details" }, { "name": "Opportunity Management | Opportunity History" }, { "name": "Opportunity Management | Organization" }, { "name": "Project Controls | Job Billing" }, { "name": "Project Controls | Job Cost" }, { "name": "Project Controls | PCI Details" }, { "name": "Project Controls | Unposted PCI Details" }, { "name": "Project Controls | PCI Headers" }, { "name": "Project Controls | Owner Change Orders" }, { "name": "Project Controls | CM Statuses" }, { "name": "Project Controls | CM Types" }, { "name": "Project Controls | CM Vendor Details" }, { "name": "Project Controls | Post PCI" }, { "name": "Project Management | Uploading Documents" }, { "name": "Project Management | Downloading Documents" }, { "name": "Project Management | Foreign Bid Item Imports" }, { "name": "Project Management | Communications" }, { "name": "Project Management | Daily Journals" }, { "name": "Project Management | Communications Types" }, { "name": "Project Management | Daily Journal Daily Work Plans" }, { "name": "Project Management | Daily Journal Field Forces" }, { "name": "Project Management | Daily Journal Labour" }, { "name": "Project Management | Daily Journal Materials" }, { "name": "Project Management | Daily Journal Owner Equipment" }, { "name": "Project Management | Daily Journal Quality Control" }, { "name": "Project Management | Daily Journal Tasks" }, { "name": "Project Management | Daily Journal Trade Equipment" }, { "name": "Project Management | Daily Journal Transactions" }, { "name": "Project Management | Daily Journal User Defined Data" }, { "name": "Project Management | Daily Journal Visitors" }, { "name": "Project Management | Daily Journal Bill Details" }, { "name": "Project Management | Field Work Directives" }, { "name": "Project Management | Contract Types" }, { "name": "Project Management | Company Contacts" }, { "name": "Project Management | Distribution BCC" }, { "name": "Project Management | Distribution CC" }, { "name": "Project Management | Field Work Directive Statuses" }, { "name": "Project Management | Issues" }, { "name": "Project Management | Key Players" }, { "name": "Project Management | Meetings" }, { "name": "Project Management | Meeting Attendees" }, { "name": "Project Management | Meeting Item Statuses" }, { "name": "Project Management | Meeting Tracks" }, { "name": "Project Management | Notes" }, { "name": "Project Management | Projects" }, { "name": "Project Management | Project Items" }, { "name": "Project Management | Project Item Phase Segment Sums" }, { "name": "Project Management | Project Partners" }, { "name": "Project Management | Notices" }, { "name": "Project Management | Notice Statuses" }, { "name": "Project Management | Owner JS Query" }, { "name": "Project Management | PCI Real Locations" }, { "name": "Project Management | Project Contacts" }, { "name": "Project Management | RFIs (Requests for Information)" }, { "name": "Project Management | RFI Statuses" }, { "name": "Project Management | Submittal Packages" }, { "name": "Project Management | Submittal Package Details" }, { "name": "Project Management | Submittal Package Status" }, { "name": "Project Management | Submittals" }, { "name": "Project Management | Submittal Status" }, { "name": "Project Management | Transmittals" }, { "name": "Project Management | Subcontract Headers" }, { "name": "Project Management | Subcontract Schedules" }, { "name": "Project Management | Subcontract Sechedule Phase Segment Sums" }, { "name": "Project Management | User Roles" }, { "name": "Project Management | Punchlists" }, { "name": "Project Management | Punchlist Details" }, { "name": "Project Management | Punchlist Statuses" }, { "name": "Project Management | Meeting Items" }, { "name": "Project Management | Self Perform Vendor" }, { "name": "Project Management | Submittal Types" }, { "name": "Project Management | Assign contact and partner to project" }, { "name": "Project Management | Subcontract Prequal" }, { "name": "Project Management | Bid Item Package" } ], "paths": { "/sys-rest-api/jersey/v2/user-extension": { "post": { "tags": [ "Core System | User-extension" ], "summary": "PostRecord", "description": "# POST /v2/user-extension - Insert Record\n\n## Overview\n\nThis endpoint inserts a new row into any UE table. You pass the table code, the object key values that identify the parent record, and the UDF field values to write. The API validates the parent record exists, re-fetches the authoritative key values from the parent table, validates every UDF field, and then inserts the row. On success it returns the newly inserted row as re-queried from the database.\n\n| Property | Value |\n| --- | --- |\n| URL | `{base_url}/sys-rest-api/jersey/v2/user-extension` |\n| Method | `POST` |\n| Consumes / Produces | `application/json` |\n| Success Status | `201 Created` |\n| Auth | Basic (`Authorization: Basic {credentials}`) |\n\n---\n\n## Notes\n\nAuthentication and authorization are required.\n\n`tableCode` must be present in the request body. If it is blank or missing the request is rejected immediately.\n\nThe `data` map must contain at least `objectKey1`. Additional object keys (`objectKey2` through `objectKey10`) are required for composite-key tables.\n\nThe object key values you send are used only to locate the parent record. The values that actually get written into the UE row are re-fetched from the parent table using the resolved ORASEQ. This means the inserted row will always have the correct casing, padding, and formatting as stored in the parent — not whatever the caller typed.\n\nEvery UDF field value is validated and normalised before the insert runs. If any field fails validation (wrong LOV value, wrong case, unparseable date) the entire request is rejected and nothing is written.\n\n`dateFormat` defaults to `YYYY-MM-DD` if not supplied. It controls how date field values in the `data` map are interpreted.\n\nAfter a successful insert the row is re-queried from the physical UE table and returned in the response. If the re-query fails, the response falls back to the resolved input values — the row was still inserted and committed.\n\n---\n\n## UI Navigation\n\nUser Extension tables are attached to the parent object's own screen in CMiC. There is no standalone navigation path. This endpoint is the API equivalent of filling in the UE fields on an object's record and saving.\n\n---\n\n## Request Body\n\n| Field | Type | Required | Description |\n| --- | --- | --- | --- |\n| `tableCode` | String | Yes | UE table code to insert into (e.g. `CIITEM_K`). |\n| `dateFormat` | String | No | Oracle date mask for date fields in `data`. Defaults to `YYYY-MM-DD`. |\n| `data` | Map | Yes | Field code to value map. Must include `objectKey1` (and additional keys for composite-key tables). All other entries are treated as UDF field codes. |\n| `data.objectKey1` | String | Yes | First business key of the parent record (e.g. `01` for Company Code). |\n| `data.objectKey2` through `objectKey10` | String | Depends | Additional keys for composite-key objects. |\n| `data.{UDF_FIELD_CODE}` | String | No | UDF field value to insert (e.g. `UDF_NOTES`, `UDF_RATING`, `UDF_REVIEW_DATE`). |\n\n---\n\n## Attributes\n\n### Response — 201 Created\n\n| Field | Type | Description | Example |\n| --- | --- | --- | --- |\n| `status` | String | Always `success` on 201 | `success` |\n| `tableCode` | String | UE table code that was inserted into | `CIITEM_K` |\n| `rowsAffected` | Integer | Number of rows inserted (normally 1) | `1` |\n| `message` | String | Confirmation message | `Successfully inserted 1 row.` |\n| `data` | Map | The re-queried inserted row. Column names are prefixed with the table code. System columns excluded. | |\n| `data.{TABLECODE}_COMP_CODE` | String | Company Code as stored in the UE row | `01` |\n| `data.{TABLECODE}_ITEM_CODE` | String | Item Code as stored in the UE row | `BOLT-123` |\n| `data.{TABLECODE}_{UDF_FIELD}` | String | Inserted UDF field value (normalised) | `A` |\n| `data.UE__IU__CREATE_DATE` | String (ISO 8601) | Row create timestamp | `2026-06-30T10:30:00-04:00` |\n| `data.UE__IU__UPDATE_DATE` | String (ISO 8601) | Row update timestamp | `2026-06-30T10:30:00-04:00` |\n\n---\n\n## Example\n\n### Request\n\n```\nPOST {base_url}/sys-rest-api/jersey/v2/user-extension\nContent-Type: application/json\nAuthorization: Basic {credentials}\n{\n \"tableCode\": \"CIITEM_K\",\n \"dateFormat\": \"YYYY-MM-DD\",\n \"data\": {\n \"objectKey1\": \"01\",\n \"objectKey2\": \"BOLT-123\",\n \"UDF_NOTES\": \"Approved by Engineering\",\n \"UDF_RATING\": \"a\",\n \"UDF_REVIEW_DATE\": \"2026-06-30\"\n }\n}\n\n ```\n\n### Response — 201 Created\n\n```\n{\n \"status\": \"success\",\n \"tableCode\": \"CIITEM_K\",\n \"rowsAffected\": 1,\n \"message\": \"Successfully inserted 1 row.\",\n \"data\": {\n \"CIITEM_K_COMP_CODE\": \"01\",\n \"CIITEM_K_ITEM_CODE\": \"BOLT-123\",\n \"CIITEM_K_UDF_NOTES\": \"Approved by Engineering\",\n \"CIITEM_K_UDF_RATING\": \"A\",\n \"CIITEM_K_UDF_REVIEW_DATE\": \"2026-06-30T00:00:00-04:00\",\n \"UE__IU__CREATE_DATE\": \"2026-06-30T10:30:00-04:00\",\n \"UE__IU__UPDATE_DATE\": \"2026-06-30T10:30:00-04:00\"\n }\n}\n\n ```\n\nNote: `UDF_RATING` was sent as `\"a\"` but the field is configured with uppercase case flag, so the API normalised it to `\"A\"` before inserting.\n\n### Error — Parent Record Not Found (400)\n\n```\n{\n \"error\": \"SD-000376-ERR: Master record does not exist for the given key values.\"\n}\n\n ```\n\n---\n\n## Error Codes\n\n| HTTP | Error Code | Reason |\n| --- | --- | --- |\n| 400 | `SD-000380-ERR` | Request body is null or empty |\n| 400 | `SD-000381-ERR` | Request body is not valid JSON |\n| 400 | `SD-000375-ERR` | `tableCode` is blank or missing |\n| 400 | `SD-000382-ERR` | `data` map is null or empty |\n| 400 | `SD-000376-ERR` | Table code invalid or parent record not found for the supplied keys |\n| 400 | `IllegalArgumentException` | No `objectKey1` found in `data`; key mapping not found for the table; a UDF field does not exist; UDF field validation failed |\n| 500 | — | Unhandled database or server error — auto rollback |", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "example": { "tableCode": "CIITEM_K", "data": { "objectKey1": "ZZ", "objectKey2": "DIESEL", "NUMBEROKEY": "16.15", "AAA": "123" } } } } } }, "responses": { "201": { "description": "Created", "headers": { "Content-Type": { "schema": { "type": "string", "example": "application/json" } } }, "content": { "text/plain": { "schema": { "type": "string" }, "example": "{\n \"status\": \"success\",\n \"tableCode\": \"CIITEM_K\",\n \"rowsAffected\": 1,\n \"message\": \"Successfully inserted 1 row.\",\n \"data\": {\n \"COMP_CODE\": \"ZZ\",\n \"ITEM_CODE\": \"DIESEL\",\n \"NUMBEROKEY\": \"16.15\",\n \"AAA\": \"123\",\n \"UE__IU__CREATE_DATE\": \"2026-07-20T11:37:41-04:00\",\n \"UE__IU__UPDATE_DATE\": null,\n \"CLTEST\": null\n }\n}" } } } } } } }, "components": { "securitySchemes": { "cmicBasicAuth": { "type": "http", "scheme": "basic", "description": "Basic authentication" } } } } ````