addAttr is undoable, queryable, and editable.
      
| Type of attribute | Flag and argument to use | 
|---|
| boolean | -at bool | 
| 32 bit integer | -at long | 
| 16 bit integer | -at short | 
| 8 bit integer | -at byte | 
| char | -at char | 
 | enum | -at enum (specify the enum names using the enumName flag) | 
| float | -at "float" (use quotes
                                                                        since float is a mel keyword) | 
| double | -at double | 
| angle value | -at doubleAngle | 
| linear value | -at doubleLinear | 
| string | -dt "string" (use quotes
                                                                        since string is a mel keyword) | 
| array of strings | -dt stringArray | 
| compound | -at compound | 
| message (no data) | -at message | 
| time | -at time | 
| 4x4 double matrix | -dt "matrix" (use quotes
                                                                        since matrix is a mel keyword) | 
| 4x4 float matrix | -at fltMatrix | 
| reflectance | -dt reflectanceRGB | 
| reflectance (compound) | -at reflectance | 
| spectrum | -dt spectrumRGB | 
| spectrum (compound) | -at spectrum | 
| 2 floats | -dt float2 | 
| 2 floats (compound) | -at float2 | 
| 3 floats | -dt float3 | 
| 3 floats (compound) | -at float3 | 
| 2 doubles | -dt double2 | 
| 2 doubles (compound) | -at double2 | 
| 3 doubles | -dt double3 | 
| 3 doubles (compound) | -at double3 | 
| 2 32-bit integers | -dt long2 | 
| 2 32-bit integers (compound) | -at long2 | 
| 3 32-bit integers | -dt long3 | 
| 3 32-bit integers (compound) | -at long3 | 
| 2 16-bit integers | -dt short2 | 
| 2 16-bit integers (compound) | -at short2 | 
| 3 16-bit integers | -dt short3 | 
| 3 16-bit integers (compound) | -at short3 | 
| array of doubles | -dt doubleArray | 
| array of floats | -dt floatArray | 
| array of 32-bit ints | -dt Int32Array | 
| array of vectors | -dt vectorArray | 
| nurbs curve | -dt nurbsCurve | 
| nurbs surface | -dt nurbsSurface | 
| polygonal mesh | -dt mesh | 
| lattice | -dt lattice | 
| array of double 4D points | -dt pointArray | 
	  
      In query mode, return type is based on queried flag.
      
		
		  | Long name (short name) | Argument types | Properties | 
		
	
	  | -longName(-ln) | string |    | 
	
	  | 
	      
		|  | Sets the long name of the attribute. |  | 
	
	  | -shortName(-sn) | string |    | 
	
	  | 
	      
		|  | Sets the short name of the attribute. |  | 
	
	  | -niceName(-nn) | string |     | 
	
	  | 
	      
		|  | Sets the nice name of the attribute for display in the UI.  Setting the
attribute's nice name to a non-empty string overrides the default
behaviour of looking up the nice name from Maya's
string catalog.   (Use the MEL commands
"attributeNiceName" and "attributeQuery -niceName" to lookup an attribute's
nice name in the catalog.) |  | 
	
	  | -binaryTag(-bt) | string |    | 
	
	  | 
	      
		|  | This flag is obsolete and does not do anything any more |  | 
	
	  | -attributeType(-at) | string |    | 
	
	  | 
	      
		|  | Specifies the attribute type, see above table for more details.
Note that the attribute types "float", "matrix" and "string"
are also MEL keywords and must be enclosed in quotes. |  | 
	
	  | -dataType(-dt) | string |     | 
	
	  | 
	      
		|  | Specifies the data type.  See "setAttr" for
more information on data type names. |  | 
	
	  | -defaultValue(-dv) | float |     | 
	
	  | 
	      
		|  | Specifies the default value for the attribute
(can only be used for numeric attributes). |  | 
	
	  | -multi(-m) |  |    | 
	
	  | 
	      
		|  | Makes the new attribute a multi-attribute. |  | 
	
	  | -indexMatters(-im) | boolean |    | 
	
	  | 
	      
		|  | Sets whether an index must be used when connecting
to this multi-attribute. Setting indexMatters to false forces the
attribute to non-readable. |  | 
	
	  | -minValue(-min) | float |     | 
	
	  | 
	      
		|  | Specifies the minimum value for the attribute
(can only be used for numeric attributes). |  | 
	
	  | -hasMinValue(-hnv) | boolean |     | 
	
	  | 
	      
		|  | Flag indicating whether an attribute has a minimum value.
(can only be used for numeric attributes). |  | 
	
	  | -maxValue(-max) | float |     | 
	
	  | 
	      
		|  | Specifies the maximum value for the attribute
(can only be used for numeric attributes). |  | 
	
	  | -hasMaxValue(-hxv) | boolean |     | 
	
	  | 
	      
		|  | Flag indicating whether an attribute has a maximum value.
(can only be used for numeric attributes). |  | 
	
	  | -cachedInternally(-ci) | boolean |    | 
	
	  | 
	      
		|  | Whether or not attribute data is cached internally in the node.
This flag is currently not supported (it will always be set
to a default value of true). |  | 
	
	  | -internalSet(-is) | boolean |    | 
	
	  | 
	      
		|  | Whether or not the internal cached value is set when
this attribute value is changed.  This is an internal flag
used for updating UI elements. |  | 
	
	  | -parent(-p) | string |    | 
	
	  | 
	      
		|  | Attribute that is to be the new attribute's parent. |  | 
	
	  | -numberOfChildren(-nc) | uint |    | 
	
	  | 
	      
		|  | How many children will the new attribute have? |  | 
	
	  | -usedAsColor(-uac) |  |    | 
	
	  | 
	      
		|  | Is the attribute to be used as a color definition?
Must have 3 DOUBLE or 3 FLOAT children to use this
flag.  The attribute type "-at" should be "double3"
or "float3" as appropriate.  It can also be used to
less effect with data types "-dt" as "double3" or
"float3" as well but some parts of the code do not
support this alternative.  The special attribute
types/data "spectrum" and "reflectance" also support
the color flag and on them it is set by default. |  | 
	
	  | -usedAsFilename(-uaf) |  |    | 
	
	  | 
	      
		|  | Is the attribute to be treated as a filename definition?
This flag is only supported on attributes with data type "-dt" of "string". |  | 
	
	  | -hidden(-h) | boolean |    | 
	
	  | 
	      
		|  | Will this attribute be hidden from the UI? |  | 
	
	  | -readable(-r) | boolean |    | 
	
	  | 
	      
		|  | Can outgoing connections be made from this attribute? |  | 
	
	  | -writable(-w) | boolean |    | 
	
	  | 
	      
		|  | Can incoming connections be made to this attribute? |  | 
	
	  | -storable(-s) | boolean |    | 
	
	  | 
	      
		|  | Can the attribute be stored out to a file? |  | 
	
	  | -keyable(-k) | boolean |    | 
	
	  | 
	      
		|  | Is the attribute keyable by default? |  | 
	
	  | -fromPlugin(-fp) | boolean |    | 
	
	  | 
	      
		|  | Was the attribute originally created by a plugin? Normally set
automatically when the API call is made - only added here to support
storing it in a file independently from the creating plugin. |  | 
	
	  | -softMinValue(-smn) | float |     | 
	
	  | 
	      
		|  | Soft minimum, valid for numeric attributes only.  Specifies the
upper default limit used in sliders for this attribute. |  | 
	
	  | -hasSoftMinValue(-hsn) | boolean |    | 
	
	  | 
	      
		|  | Flag indicating whether a numeric attribute has a soft minimum. |  | 
	
	  | -softMaxValue(-smx) | float |     | 
	
	  | 
	      
		|  | Soft maximum, valid for numeric attributes only.  Specifies the
upper default limit used in sliders for this attribute. |  | 
	
	  | -hasSoftMaxValue(-hsx) | boolean |    | 
	
	  | 
	      
		|  | Flag indicating whether a numeric attribute has a soft maximum. |  | 
	
	  | -category(-ct) | string |      | 
	
	  | 
	      
		|  | An attribute category is a string associated with the attribute to identify it.
(e.g. the name of a plugin that created the attribute, version information, etc.)
Any attribute can be associated with an arbitrary number of categories however
categories can not be removed once associated. |  | 
	
	  | -enumName(-en) | string |     | 
	
	  | 
	      
		|  | Flag used to specify the ui names corresponding to the enum values. The specified string should contain a colon-separated list of the names, with optional values. If values are not specified, they will treated as sequential integers starting with 0. For example: -enumName "A:B:C" would produce options: A,B,C with values of 0,1,2; -enumName "zero:one:two:thousand=1000" would produce four options with values 0,1,2,1000; and -enumName "solo=1:triplet=3:quintet=5" would produce three options with values 1,3,5.  (Note that there is a current limitation of the Channel Box that will sometimes incorrectly display an enumerated attribute's pull-down menu.  Extra menu items can appear that represent the numbers inbetween non-sequential option values.  To avoid this limitation, specify sequential values for the options of any enumerated attributes that will appear in the Channel Box.  For example: "solo=1:triplet=2:quintet=3".) |  | 
	
	  | -exists(-ex) |  |    | 
	
	  | 
	      
		|  | Returns true if the attribute queried is a user-added, dynamic attribute; false if not. |  |