As per the marketo documentation, the REST Api "rest/v1/leads/push.json", is to upsert a lead, and generates the activity. This is working fine.
The concern is, we have multiple program names configured for each download item on our website. We have configured batch process for the marketo data handling. As the API input data supports one program name per api call, we would require multiple API calls for each lead data to be pushed. Is there work around in this situation, so we can optimize the http server calls.
The workaround is to not use Push Lead at all. I'd be very wary of using Push Lead in response to untrusted requests, let alone multiple times in response to a single request. It's a glaring DoS attack vulnerability unless you have a proper resource governor in place.
If you're using a form, you should be using the Forms 2.0 JS API to submit data.
If you must use Push Lead for some reason, you could pack multiple program names into the Reason field and fork out from there using a flow step.