I'm going to start with some documentation links. IBM Maximo REST API Guide – IBM Maximo REST API Guide & Maximo - IBM TechXchange Community
You have the newer JSON API in your first two examples and then switch to the legacy REST API in the third. The /maxrest context should not be used for anything new at this point. The two links above are only the newer JSON API.
The first error is because you the PATCHTYPE MERGE means you have the HREF to an existing record in the POST URL. IE after the /MXPO you would have something like /mxpo/_MTAwMS8wL0JFREZPUkQ-
That would inform which Maximo you are intended to update.
Since you likely don't want to get the HREF for your update, the second option of using SYNC would normally work but you are missing the ?lean=1 query parameter. The JSON API was built on top of our support of a standard called OSLC. Outside of some specific product situations (like Maximo Anywhere), OSLC is not really used. The lean=1 query parameter informs Maximo you want to use the JSON API. If you see the error message in the format oslc:Error, it means you are using the OSLC API rather than the JSON API. It requires everything to be defined very differently.
In the body, you should just have the contents inside of the MXPO section in your JSON sent for the REST call. And I would make the attribute names all lowercase to match how Maximo would send it.
Something like:
{
"ponum": "X0080892",
"siteid": "BEDFORD",
"orgid": "EAGLENA",
"revisionnum": "0",
"poline": [
{
"polinenum": "1",
"vendeliverydate": "2025-06-15"
}
]
}