function spooler_process_after( spooler_process_result ) {
    spooler_log.info( "order id is " + spooler_task.order().id ) ;   // the order object is available
    return spooler_process_result;
 }

It is NOT available in spooler_task_after(), because no order is running for the current task any more.

 function spooler_task_after() {
    if ( spooler_task.order() == null ) {
      spooler_log.info( "spooler_task.order is null" );           // the order object is NOT available
    }
 }

It makes no difference if you run a shell job or an API job - this behaviour is the same.