Get Import Schema
GET /imports/proposalLineItems/schema?contextId={proposalId}
/imports/proposalLineItems/schema?contextId={proposalId}Required Tokens
| Field | Type | Required | Description |
|---|---|---|---|
| Bearer | Authorization: Bearer <api-key> | Optional | Your API key. Pass it as the Bearer token on every request. |
| Event token | x-Event-Token | Optional | Run **Get Tokens** in the Authorization folder, or call `GET /Events/{eventId}/authorize` manually. |
The attributes a target can be mapped onto. Called when the wizard's mapping step opens.
The schema is per target, and may be derived at runtime. This request is set up for the proposal line items target; see Get Events Import Schema for the org-scoped one.
Requires EventAdmin permission on the event.
Registered targets
| Target | Scope | Token | contextId means | Schema |
|---|---|---|---|---|
proposalLineItems | Event | x-Event-Token | the proposal | seven fixed attributes plus one per adjustment column |
events | Organization | x-Organization-Token | the event type | name, notes, plus that type's custom attributes |
The path segment is matched case-insensitively.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| target | string | Required | Path segment. See the table above. |
| contextId | Guid | Optional | Query. The parent the rows land in. Omitted for `events`, the schema is the first-class fields only. |
Response
| Field | Type | Description |
|---|---|---|
| target | string | Echoes the requested target. |
| attributes[].key | string | The mapping key. Proposal adjustment columns are `adjustment:{guid}`; event custom attributes are `attr:{guid}`. |
| attributes[].label | string | Display label. |
| attributes[].kind | string | `Text`, `Link`, `Number`, `Checkbox`, `Date`, `DateTime` or `Select`. |
| attributes[].path | string[] | The attribute's **ancestors only**, never the attribute itself — `["Adjustments"]` for an adjustment named `Sales tax`, the section name for events. Render `path` + `label`; `path` alone collapses every attribute in a group to the group's name. |
| attributes[].isRequired | bool | Mapping cannot continue until every required attribute is mapped. |
| attributes[].isUpdatable | bool | Whether an import may write this attribute onto an **existing** record. Always `false` for proposal line items, which are create-only. |
| attributes[].canBeUnique | bool | Whether this attribute may be nominated as the match key. Always `false` for proposal line items. |
| attributes[].options | array| null | `[{ value, label }]` on an attribute with a closed value domain — a `Select` — and `null` on every other kind. **Its presence is what marks the column reviewable**, so there is no separate flag. Always `null` for proposal line items. |
An attribute absent from this response cannot be imported at all. Attributes whose stored value a spreadsheet cell cannot express — multi-select, rich text, files, and references to crew or collaborators, which store an entity id — are omitted rather than rejected later. This is the permanent scope of structured import, not a subset awaiting a later release: the disambiguation a name-to-id lookup needs is not something a spreadsheet cell can carry.
Errors
| Status | Meaning |
|---|---|
400 | Unknown target, contextId missing for a target that needs one, or the named event type is archived. |
404 | The proposal or event type named by contextId does not exist in this scope. |