Here an example

python code (IronPython3 or PythonNet3)
No solution with CPython3 (especially with Revit 2024)
import clr
import sys
import System
#
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS
#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
class CreateFailureAdvancedHandler(IFailuresPreprocessor):
__namespace__ = "CreateFailureAdvancedHandler_jdtR0sA"
def PreprocessFailures(self, failuresAccessor):
failMessages = failuresAccessor.GetFailureMessages()
if failMessages.Count == 0:
return FailureProcessingResult.Continue
transName = failuresAccessor.GetTransactionName()
#
if failuresAccessor.GetSeverity() == FailureSeverity.Warning:
for currentMessage in failMessages:
failuresAccessor.DeleteWarning(currentMessage)
return FailureProcessingResult.Continue
#
elif failuresAccessor.GetSeverity() == FailureSeverity.Error:
for currentMessage in failMessages:
failuresAccessor.ResolveFailure(currentMessage)
return FailureProcessingResult.ProceedWithCommit
#
else:
pass
return FailureProcessingResult.Continue
wall = UnwrapElement(IN[0])
offset_value = 5
# offset point
TransactionManager.Instance.ForceCloseTransaction()
sketch = doc.GetElement(wall.SketchId)
curveArray = sketch.Profile[0] # assuming there is only 1 loop
# get top line
sort_curves = sorted(curveArray, key = lambda x : x.Evaluate(0.5, True).Z)
top_line = sort_curves[-1]
rest_curves = sort_curves[:2]
# get points on top line
pt1_old = top_line.GetEndPoint(0)
pt2 = top_line.GetEndPoint(1)
#
# find adjacent vertical line
vertical_line = next((c for c in rest_curves if c.Project(pt1_old).Distance < 0.01), None)
# bottom point on vertical line
pt3 = next((vertical_line.GetEndPoint(i) for i in range(2) if vertical_line.GetEndPoint(i).DistanceTo(pt1_old) > 0.1), None)
#
new_pt = pt1_old - XYZ(0,0,offset_value)
#
new_top_line = DB.Line.CreateBound(new_pt, pt2)
new_vertical_line = DB.Line.CreateBound(pt3, new_pt)
#
sketchEditScope = SketchEditScope(doc, "Update Wall")
sketchEditScope.Start(sketch.Id)
t = Transaction(doc, "Update Wall")
t.Start()
# Remove elements referenced by the found lines.
doc.Delete(top_line.Reference.ElementId)
doc.Delete(vertical_line.Reference.ElementId)
# Model curves creation automatically puts the curve into the sketch, if sketch edit scope is running.
doc.Create.NewModelCurve(new_top_line, sketch.SketchPlane)
doc.Create.NewModelCurve(new_vertical_line, sketch.SketchPlane)
t.Commit()
sketchEditScope.Commit( CreateFailureAdvancedHandler() )
t.Dispose()
#
OUT = wall