The iRODS API has traditionally been a hard-coded table of values and names. With the pluggable RPC API now available, a plugin can provide new API calls.

At runtime, if a reqested API number is not already in the table, it is dynamically loaded from plugins/api and executed. As it is a dynamic system, there is the potential for collisions between existing API numbers and any new dynamically loaded API numbers. It is considered best practice to use a dynamic API number above 10000 to ensure no collisions with the existing static API calls.

API plugins self-describe their IN and OUT packing instructions (examples coming soon). These packing instructions are loaded into the table at runtime along with the API name, number, and the operation implementation being described.

All newly defined operations are architecturally assured of being wrapped in Dynamic Policy Enforcements Points (both a '_pre' and '_post').