Models

Upload, query, and manage 3D BIM models within projects. Includes endpoints for model import, property queries, quantity calculations, dynamic properties, IFC export, and edit sessions.

GET https://api.qonic.com/v1/projects/:projectId/models

Get models in a project.

Returns a list of the accessible models the caller has on the project's main branch, where the import state is valid, ordered by name. A model that has been removed from the project is not listed. Recommended OAuth scope: models:read.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.

Response fields

  • Name
    models
    Type
    array<object>
    Required
    Optional
    Description
    List of models the current user can see in the project.
    • Name
      id
      Type
      string
      Required
      Optional
      Description
      Identifier of the model. Use this as the modelId path parameter.
    • Name
      guid
      Type
      string
      Required
      Optional
      Description
      Globally unique identifier of the model.
    • Name
      name
      Type
      string
      Required
      Optional
      Description
      Name of the model.
    • Name
      image
      Type
      string
      Required
      Optional
      Description
      Public URL of the model thumbnail image, if available.
    • Name
      tags
      Type
      array<string>
      Required
      Optional
      Description
      A list of tags categorizing the model (e.g. "Architecture", "MEP", "Structural").
    • Name
      canEdit
      Type
      boolean
      Required
      Optional
      Description
      Indicates whether the current user can modify this model.
    • Name
      url
      Type
      string
      Required
      Optional
      Description
      Direct URL to open this model in the Qonic web app.
    • Name
      latestPublicSource
      Type
      object
      Required
      Optional
      Description
      The immutable source state that supplies a model and its shared data.
      • Name
        projectVersionId
        Type
        string
        Required
        Optional
        Description
        Identifier of the complete project snapshot containing the model source.
      • Name
        modelVersionId
        Type
        string
        Required
        Optional
        Description
        Identifier of the model-specific geometry and property state.
      • Name
        sharedDataVersionId
        Type
        string
        Required
        Optional
        Description
        Identifier of the project-wide shared data used with the model.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The project identifier or request parameters are invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/problem+json
    Description
    The requested resource was not found

    Body: ProblemDetails


POST https://api.qonic.com/v1/projects/:projectId/models

Create a new model and start an import.

Creates a new model in the specified project and starts an import process for a previously uploaded file. Recommended OAuth scope: models:write. The file must already be uploaded using a key from the /v1/files/upload-url endpoint. Supported extensions include Revit (.rvt), SketchUp (.skp), Rhino (.3dm), IFC (.ifc) and ZIP (.zip) An import process is started immediately unless the file or arguments are invalid, in which case a standard error response is returned. Any tags supplied that do not yet exist in the project are created automatically and linked to the model. Models cannot be created in the automatically generated sample project; such requests are rejected with a 400 Bad Request.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.

Request body

  • Name
    modelName
    Type
    string
    Required
    Required
    Description
    Name of the model as it will appear in the project.
  • Name
    uploadKey
    Type
    string
    Required
    Required
    Description
    Storage key returned from GET /v1/files/upload-url, referencing the uploaded model file.
  • Name
    uploadFileName
    Type
    string
    Required
    Required
    Description
    File name of the uploaded model (including extension). Used to determine the file type (IFC, Revit, SketchUp, Rhino, ZIP).
  • Name
    tags
    Type
    array<string>
    Required
    Optional
    Description
    A list of tags to categorize the model (e.g. "Architecture", "MEP", "Structural"). Tags that do not yet exist in the project are added to it automatically.
  • Name
    defaultRole
    Type
    string
    Required
    Optional
    Description
    Optional default role assigned to project members for this model.

Response fields

  • Name
    modelId
    Type
    string
    Required
    Optional
    Description
    Identifier of the created model.
  • Name
    modelGuid
    Type
    string
    Required
    Required
    Description
    Globally unique identifier of the created model.
  • Name
    id
    Type
    string
    Required
    Optional
    Description
    Public identifier of the operation.
  • Name
    kind
    Type
    "ImportIfc" | "ExportIfc" | "CalculateQuantities" | "CalculateDerivedProperties"
    Required
    Optional
    Description
    Type of operation (for example importing, exporting, calculating quantities).
  • Name
    status
    Type
    "Queued" | "InProgress" | "Ready" | "Failed"
    Required
    Optional
    Description
    Current status of the operation (queued, in progress, ready, failed).
  • Name
    percentageCompleted
    Type
    integer
    Required
    Optional
    Description
    Progress of the operation in percent from 0 to 100.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The file, discipline, role, upload URL or other arguments are invalid, or the target project is the sample project.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/problem+json
    Description
    The requested resource was not found

    Body: ProblemDetails


GET https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/properties/available-data

Get available product fields for a model.

Returns the names of product fields that can be requested when querying products in this model. Recommended OAuth scope: models:read.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Query parameters

  • Name
    page
    Type
    integer
    Required
    Optional
    Description
    Page number to return (1-based, default 1).
  • Name
    pageSize
    Type
    integer
    Required
    Optional
    Description
    Number of fields per page (default 1000, max 5000).

Response fields

  • Name
    fields
    Type
    array<string>
    Required
    Optional
    Description
    Names of fields that can be requested when querying products.
  • Name
    fieldDetails
    Type
    array<object>
    Required
    Optional
    Description
    Per-property metadata (data type, unit, enumeration values) for the fields on the current page. Fixed attributes such as Guid, Class and Name are plain strings and are not listed here.
    • Name
      name
      Type
      string
      Required
      Optional
      Description
      Property name, as used in the fields and filters of a product query.
    • Name
      dataType
      Type
      string
      Required
      Optional
      Description
      Underlying value type, e.g. String, Real, Integer, Boolean or Enum. Null when the type cannot be determined.
    • Name
      unit
      Type
      string
      Required
      Optional
      Description
      Unit of the property value, e.g. Millimetre or SquareMetre. Null when the property is unitless.
    • Name
      enumerationValues
      Type
      array<string>
      Required
      Optional
      Description
      Allowed values when the property is an enumeration; otherwise null.
  • Name
    totalCount
    Type
    integer
    Required
    Optional
    Description
    Total number of available fields (before pagination).
  • Name
    page
    Type
    integer
    Required
    Optional
    Description
    The current page number (1-based).
  • Name
    pageSize
    Type
    integer
    Required
    Optional
    Description
    The maximum number of fields returned per page.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The project or model identifier is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/properties/query

Get products in a model using a JSON query.

Returns the requested fields for all products that satisfy the provided filters. The request body must be a JSON object with the following shape: ```json { "fields": ["id", "name", "length"], "filters": [ { "property": "name", "operator": "Equals", "value": "Steel Beam" }, { "property": "status", "operator": "In", "value": ["active", "pending"] } ] } ``` - fields (optional): array of product property names to include in the response. If omitted or empty, all default fields are returned. - filters (optional): array of filter objects. Each filter has: - property: the name of the product property to filter on. - operator: the comparison to apply. Supported values: - Equals: property must be equal to value. - NotEquals: property must not be equal to value. - In: property value must be one of the items in value. - NotIn: property value must not be any of the items in value. - Contains: string property must contain the substring value (case-insensitive). - value: - for Equals, NotEquals, or Contains, a single JSON value (string, number, boolean, etc.); - for In or NotIn, a JSON array of values. All filters are combined with logical AND: only products that satisfy every filter are included in the result. Recommended OAuth scope: models:read.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Query parameters

  • Name
    page
    Type
    integer
    Required
    Optional
    Description
    Page number to return (1-based, default 1).
  • Name
    pageSize
    Type
    integer
    Required
    Optional
    Description
    Number of products per page (default 1000, max 5000).

Request body

  • Name
    fields
    Type
    array<string>
    Required
    Optional
    Description
    Product fields to include in the response. If null or empty, all available fields will be returned.
  • Name
    filters
    Type
    array<object>
    Required
    Optional
    Description
    Filters to apply to the products. All filters are combined using logical AND.
    • Name
      property
      Type
      string
      Required
      Required
      Description
      Name of the product property to filter on.
    • Name
      value
      Type
      any
      Required
      Required
      Description
      Filter value. For the equality operators this is a single value; for the In/NotIn operators it should be a JSON array of values.
    • Name
      operator
      Type
      "Equals" | "NotEquals" | "In" | "NotIn" | "Contains"
      Required
      Required
      Description
      Operator to apply when comparing the property to the filter value.

Response fields

  • Name
    totalCount
    Type
    integer
    Required
    Optional
    Description
    Total number of products matching the query filters (before pagination).
  • Name
    page
    Type
    integer
    Required
    Optional
    Description
    The current page number (1-based).
  • Name
    pageSize
    Type
    integer
    Required
    Optional
    Description
    The maximum number of products returned per page.
  • Name
    result
    Type
    array<object>
    Required
    Optional
    Description
    Collection of products, each represented as a dictionary of field names and values.

Error responses

  • Name
    400
    Type
    application/json
    Description
    Filters or parameters are invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/quantities/query

Start a quantity calculation for products in a model.

Starts an asynchronous calculation of quantities for all products that satisfy the given filters. The request body specifies which quantity calculators to use and which filters to apply. The request body must be a JSON object with the following shape: ```json { "calculators": [ "Count", "NetVolume", "GrossArea" ], "filters": [ { "property": "category", "operator": "Equals", "value": "Beam" }, { "property": "status", "operator": "In", "value": [ "active", "pending" ] } ] } ``` - calculators (required): array of calculator names. Supported values: - Count – counts the number of matching products. - Length – sums the length of matching products. - NetArea – sums the net area of matching products. - GrossArea – sums the gross area of matching products. - NetVolume – sums the net volume of matching products. - GrossVolume – sums the gross volume of matching products. - filters (optional): array of filter objects. Each filter has: - property: the name of the product property to filter on. - operator: the comparison to apply. Supported values: - Equals: property must be equal to value. - NotEquals: property must not be equal to value. - In: property value must be one of the items in value. - NotIn: property value must not be any of the items in value. - Contains: string property must contain the substring value (case-insensitive). - value: - for Equals, NotEquals, or Contains, a single JSON value (string, number, boolean, etc.); - for In or NotIn, a JSON array of values. All filters are combined with logical AND: only products that satisfy every filter are included in the calculation. The response contains an operation object that can be polled using the operations endpoint, and used with the quantities result endpoint to obtain the final result. Recommended OAuth scope: models:read.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Request body

  • Name
    calculators
    Type
    array<"Count" | "Length" | "NetArea" | "GrossArea" | "NetVolume" | "GrossVolume">
    Required
    Required
    Description
    The calculators to use for quantity calculation (e.g. Count, Length, NetArea).
  • Name
    filters
    Type
    array<object>
    Required
    Optional
    Description
    Optional filters to restrict which products are included in the calculation.
    • Name
      property
      Type
      string
      Required
      Required
      Description
      Name of the product property to filter on.
    • Name
      value
      Type
      any
      Required
      Required
      Description
      Filter value. For the equality operators this is a single value; for the In/NotIn operators it should be a JSON array of values.
    • Name
      operator
      Type
      "Equals" | "NotEquals" | "In" | "NotIn" | "Contains"
      Required
      Required
      Description
      Operator to apply when comparing the property to the filter value.

Response fields

  • Name
    id
    Type
    string
    Required
    Optional
    Description
    Public identifier of the operation.
  • Name
    kind
    Type
    "ImportIfc" | "ExportIfc" | "CalculateQuantities" | "CalculateDerivedProperties"
    Required
    Optional
    Description
    Type of operation (for example importing, exporting, calculating quantities).
  • Name
    status
    Type
    "Queued" | "InProgress" | "Ready" | "Failed"
    Required
    Optional
    Description
    Current status of the operation (queued, in progress, ready, failed).
  • Name
    percentageCompleted
    Type
    integer
    Required
    Optional
    Description
    Progress of the operation in percent from 0 to 100.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The request body is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


GET https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/quantities/:operationId/result

Get the result of a quantity calculation.

Returns the presigned download URL for a completed quantity calculation result. Recommended OAuth scope: models:read. If the operation has not finished or has failed, a standard error response with a descriptive error code and message is returned. Result URLs are temporary and expire after seven days.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.
  • Name
    operationId
    Type
    string
    Required
    Required
    Description
    Identifier of the operation.

Response fields

  • Name
    downloadUrl
    Type
    string
    Required
    Required
    Description
    Presigned URL to download the quantities result file. Valid for seven days.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The operation is not ready or has failed.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project, model or operation does not exist or is not accessible.

    Body: ErrorView


GET https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/dynamic-properties/available-data

Get available product dynamic fields for a model.

Returns the names of product dynamic fields that can be requested when querying products in this model. Recommended OAuth scope: models:read.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Query parameters

  • Name
    page
    Type
    integer
    Required
    Optional
    Description
    Page number to return (1-based, default 1).
  • Name
    pageSize
    Type
    integer
    Required
    Optional
    Description
    Number of fields per page (default 1000, max 5000).

Response fields

  • Name
    fields
    Type
    array<string>
    Required
    Optional
    Description
    Names of fields that can be requested when querying products.
  • Name
    fieldDetails
    Type
    array<object>
    Required
    Optional
    Description
    Per-property metadata (data type, unit, enumeration values) for the fields on the current page. Fixed attributes such as Guid, Class and Name are plain strings and are not listed here.
    • Name
      name
      Type
      string
      Required
      Optional
      Description
      Property name, as used in the fields and filters of a product query.
    • Name
      dataType
      Type
      string
      Required
      Optional
      Description
      Underlying value type, e.g. String, Real, Integer, Boolean or Enum. Null when the type cannot be determined.
    • Name
      unit
      Type
      string
      Required
      Optional
      Description
      Unit of the property value, e.g. Millimetre or SquareMetre. Null when the property is unitless.
    • Name
      enumerationValues
      Type
      array<string>
      Required
      Optional
      Description
      Allowed values when the property is an enumeration; otherwise null.
  • Name
    totalCount
    Type
    integer
    Required
    Optional
    Description
    Total number of available fields (before pagination).
  • Name
    page
    Type
    integer
    Required
    Optional
    Description
    The current page number (1-based).
  • Name
    pageSize
    Type
    integer
    Required
    Optional
    Description
    The maximum number of fields returned per page.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The project or model identifier is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/dynamic-properties/query

Start a dynamic property calculation for products in a model.

Starts an asynchronous calculation of dynamic properties for all products that satisfy the given filters. The request body specifies which dynamic properties to use and which filters to apply. The request body must be a JSON object with the following shape: ```json { "fields": ["Mass", "GrossFootPrintArea"], "filters": [ { "property": "category", "operator": "Equals", "value": "Beam" }, { "property": "status", "operator": "In", "value": [ "active", "pending" ] } ] } ``` - fields (optional): array of product dynamic property names to include in the response. If omitted or empty, all default fields are returned. - filters (optional): array of filter objects. Each filter has: - property: the name of the product property to filter on. Dynamic properties are not supported for filters. - operator: the comparison to apply. Supported values: - Equals: property must be equal to value. - NotEquals: property must not be equal to value. - In: property value must be one of the items in value. - NotIn: property value must not be any of the items in value. - Contains: string property must contain the substring value (case-insensitive). - value: - for Equals, NotEquals, or Contains, a single JSON value (string, number, boolean, etc.); - for In or NotIn, a JSON array of values. All filters are combined with logical AND: only products that satisfy every filter are included in the calculation. The response contains an operation object that can be polled using the operations endpoint, and used with the dynamic properties result endpoint to obtain the final result. Recommended OAuth scope: models:read. More on Dynamic Properties

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Request body

  • Name
    fields
    Type
    array<string>
    Required
    Optional
    Description
    Product fields to include in the response. If null or empty, all available fields will be returned.
  • Name
    filters
    Type
    array<object>
    Required
    Optional
    Description
    Filters to apply to the products. All filters are combined using logical AND.
    • Name
      property
      Type
      string
      Required
      Required
      Description
      Name of the product property to filter on.
    • Name
      value
      Type
      any
      Required
      Required
      Description
      Filter value. For the equality operators this is a single value; for the In/NotIn operators it should be a JSON array of values.
    • Name
      operator
      Type
      "Equals" | "NotEquals" | "In" | "NotIn" | "Contains"
      Required
      Required
      Description
      Operator to apply when comparing the property to the filter value.

Response fields

  • Name
    id
    Type
    string
    Required
    Optional
    Description
    Public identifier of the operation.
  • Name
    kind
    Type
    "ImportIfc" | "ExportIfc" | "CalculateQuantities" | "CalculateDerivedProperties"
    Required
    Optional
    Description
    Type of operation (for example importing, exporting, calculating quantities).
  • Name
    status
    Type
    "Queued" | "InProgress" | "Ready" | "Failed"
    Required
    Optional
    Description
    Current status of the operation (queued, in progress, ready, failed).
  • Name
    percentageCompleted
    Type
    integer
    Required
    Optional
    Description
    Progress of the operation in percent from 0 to 100.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The request body is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


GET https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/dynamic-properties/:operationId/result

Get the result of a dynamic properties query.

Returns the presigned download URL for a completed dynamic properties query result. Recommended OAuth scope: models:read. If the operation has not finished or has failed, a standard error response with a descriptive error code and message is returned. Result URLs are temporary and expire after seven days.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.
  • Name
    operationId
    Type
    string
    Required
    Required
    Description
    Identifier of the operation.

Response fields

  • Name
    downloadUrl
    Type
    string
    Required
    Required
    Description
    Presigned URL to download the dynamic properties result file. Valid for seven days.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The operation is not ready or has failed.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project, model or operation does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/start-session

Start a modification session on a model.

Starts an external modification session that groups subsequent changes under a client-generated session id. Recommended OAuth scope: models:write. The request must include an X-Client-Session-Id header. The same value must be sent when calling modification endpoints such as product modification, product deletion, discarding changes and publishing. Sessions expire automatically after 30 minutes of inactivity. Only one active session per user and model is allowed.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The session header or request parameters are invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/end-session

End a modification session on a model.

Ends a previously started modification session identified by the X-Client-Session-Id header. If the session has already expired or does not exist, the request succeeds without further effect.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The session header or request parameters are invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/products

Modify product properties in a model.

Applies one or more modifications to product properties in the model. The request body describes added, updated, deleted or upserted properties grouped by field name and product identifier. Recommended OAuth scope: models:write. The request must include an X-Client-Session-Id header corresponding to an active modification session. If any modification in the request is invalid, no changes are applied and a list of input errors is returned.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Request body

  • Name
    add
    Type
    object
    Required
    Optional
    Description
    Properties that should be added for the specified products. Keys are property names, values are keyed by product GUID.
  • Name
    update
    Type
    object
    Required
    Optional
    Description
    Properties that should be updated on existing products. Keys are property names, values are keyed by product GUID.
  • Name
    delete
    Type
    object
    Required
    Optional
    Description
    Properties that should be removed from products. Keys are property names, values are keyed by product GUID.
  • Name
    addOrUpdate
    Type
    object
    Required
    Optional
    Description
    Properties that should be added if missing or updated if they already exist. Keys are property names, values are keyed by product GUID.

Response fields

  • Name
    errors
    Type
    array<object>
    Required
    Optional
    Description
    Validation errors grouped by product and field.
    • Name
      guid
      Type
      string
      Required
      Optional
      Description
      GUID of the product for which the error occurred.
    • Name
      field
      Type
      string
      Required
      Optional
      Description
      Name of the field that caused the error.
    • Name
      error
      Type
      string
      Required
      Optional
      Description
      Short error code describing the type of problem.
    • Name
      description
      Type
      string
      Required
      Optional
      Description
      Human-readable description of the problem.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The session header or modification payload is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


DELETE https://api.qonic.com/v1/projects/:projectId/models/:modelId/products/:productId

Delete a product from a model.

Deletes the product with the given identifier from the model. Recommended OAuth scope: models:write. The request must include an X-Client-Session-Id header corresponding to an active modification session. If the identifier is invalid or the product cannot be removed, a standard error response is returned.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.
  • Name
    productId
    Type
    string
    Required
    Required
    Description
    Identifier of the product to delete.

Response fields

  • Name
    errors
    Type
    array<object>
    Required
    Optional
    Description
    Validation errors grouped by product and field.
    • Name
      guid
      Type
      string
      Required
      Optional
      Description
      GUID of the product for which the error occurred.
    • Name
      field
      Type
      string
      Required
      Optional
      Description
      Name of the field that caused the error.
    • Name
      error
      Type
      string
      Required
      Optional
      Description
      Short error code describing the type of problem.
    • Name
      description
      Type
      string
      Required
      Optional
      Description
      Human-readable description of the problem.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The identifier is invalid or the product cannot be deleted.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/publish

Publish all personal changes of the current user for the project

Publishes the current user's personal changes for the project as a new public version. Recommended OAuth scope: models:write. The request must include an X-Client-Session-Id header corresponding to an active modification session. If there are no personal changes for the project, the request completes successfully but has no effect. Publishing occurs at project level and can happen in parallel with changes by other users.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model whose changes are being published.

Request body

  • Name
    title
    Type
    string
    Required
    Required
    Description
    Title for the new public version.
  • Name
    description
    Type
    string
    Required
    Optional
    Description
    Optional description describing the changes that are being published.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The project identifier is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/discard

Discard all personal changes of the current user for a model inside of a project

Discards any un-published personal changes for the specified project for the current user. Recommended OAuth scope: models:write. The request must include an X-Client-Session-Id header. If there are no personal changes for the project, the request completes successfully without effect.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The project identifier is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


POST https://api.qonic.com/v1/projects/:projectId/models/:modelId/export-ifc

Start an IFC export for the latest public version of a model.

Starts an asynchronous IFC export using the latest public version of the given model. Recommended OAuth scope: models:read. The response contains an operation object that can be polled using the operations endpoint, and used with the IFC export result endpoint to obtain the final IFC file.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.

Response fields

  • Name
    source
    Type
    object
    Required
    Optional
    Description
    The immutable source state that supplies a model and its shared data.
    • Name
      projectVersionId
      Type
      string
      Required
      Optional
      Description
      Identifier of the complete project snapshot containing the model source.
    • Name
      modelVersionId
      Type
      string
      Required
      Optional
      Description
      Identifier of the model-specific geometry and property state.
    • Name
      sharedDataVersionId
      Type
      string
      Required
      Optional
      Description
      Identifier of the project-wide shared data used with the model.
  • Name
    id
    Type
    string
    Required
    Optional
    Description
    Public identifier of the operation.
  • Name
    kind
    Type
    "ImportIfc" | "ExportIfc" | "CalculateQuantities" | "CalculateDerivedProperties"
    Required
    Optional
    Description
    Type of operation (for example importing, exporting, calculating quantities).
  • Name
    status
    Type
    "Queued" | "InProgress" | "Ready" | "Failed"
    Required
    Optional
    Description
    Current status of the operation (queued, in progress, ready, failed).
  • Name
    percentageCompleted
    Type
    integer
    Required
    Optional
    Description
    Progress of the operation in percent from 0 to 100.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The project or model identifier is invalid.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project or model does not exist or is not accessible.

    Body: ErrorView


GET https://api.qonic.com/v1/projects/:projectId/models/:modelId/export-ifc/:operationId/result

Get the result of an IFC export operation.

Returns the result of an IFC export operation as an HTTP redirect to a file, once the operation has finished successfully. If the operation has not finished or has failed, a standard error response with a descriptive error code and message is returned. Result URLs are temporary and expire after seven days.

Path parameters

  • Name
    projectId
    Type
    string
    Required
    Required
    Description
    Identifier of the project.
  • Name
    modelId
    Type
    string
    Required
    Required
    Description
    Identifier of the model.
  • Name
    operationId
    Type
    string
    Required
    Required
    Description
    Identifier of the operation.

Response fields

  • Name
    downloadUrl
    Type
    string
    Required
    Optional
    Description
    Presigned URL to download the exported IFC file. Valid for seven days.

Error responses

  • Name
    400
    Type
    application/json
    Description
    The operation is not ready or has failed.

    Body: ErrorView

  • Name
    401
    Type
    application/problem+json
    Description
    Authentication required. Provide a valid Bearer token in the Authorization header.

    Body: ProblemDetails

  • Name
    403
    Type
    application/json
    Description
    The user does not have sufficient permissions for this operation.

    Body: ErrorView

  • Name
    404
    Type
    application/json
    Description
    The project, model or operation does not exist or is not accessible.

    Body: ErrorView