How do I define a family parameter in RevitAPI 2024 using python block in DesignScript?

Not sure - I’ll set the enable disable to an input though…

Ran out of time - so I’ll have to look into this Monday.

1 Like

Had this issue - thanks to this thread was reminded of the Forge Type ID! (Facepalm!) Thanks for the help!

So in PY Node to create family parameters (Text in this case) this is working:

import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitServices')

import Autodesk.Revit.DB as DB
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

# Input from Dynamo: list of parameter names
param_names = IN[0] or []

# Revit context
doc = DocumentManager.Instance.CurrentDBDocument
family_manager = doc.FamilyManager

# Known built-in names to avoid
reserved_names = {
    "NAME", "COMMENTS", "TYPE", "ID", "ADDRESS", "CLASS", "CATEGORY", "LEVEL"
}

results = []

# Check if parameter exists
def parameter_exists(name):
    for p in family_manager.Parameters:
        if p.Definition and p.Definition.Name.lower() == name.lower():
            return True
    return False

# Add parameter using Revit 2024+/2025-compliant API (ForgeTypeId)
def create_parameter(name):
    clean_name = name.strip()
    if not clean_name:
        return "Skipped: empty name"

    if clean_name.upper() in reserved_names:
        clean_name += "_Custom"

    if parameter_exists(clean_name):
        return "Already exists: " + clean_name

    try:
        param = family_manager.AddParameter(
            clean_name,
            DB.GroupTypeId.Text,       # Parameter group
            DB.SpecTypeId.String.Text, # Forge SpecType for text
            False                      # False = Type parameter
        )
        return "Created: " + clean_name
    except Exception as e:
        return "Error creating '" + clean_name + "': " + str(e)

# Run only in family document
if not doc.IsFamilyDocument:
    OUT = ["Not a family document."]
else:
    TransactionManager.Instance.EnsureInTransaction(doc)
    for name in param_names:
        results.append(create_parameter(name))
    TransactionManager.Instance.TransactionTaskDone()
    OUT = results
1 Like