Best place to start for sending data from custom forms into Keap?

After reading though the list of items below I have some simple questions:

PREMISE:
Because I want to simply send some data from a custom landing page with a custom form using PHP to collect UTM vars and custom fields from paid SEM campaigns…

Is this a TRUE statement:
A) I should use the infusionsoft/infusionsoft-php SDK to make an XML-RPC call to the API via HTTP POST method to the V1 url using access_token = Legacy API Key here: /crm/xmlrpc/v1?access_token=123abc - because this will make my life easy and it will be around for a long time

Is this a TRUE statement:
B)- I should use use a Service Account Key and V2 of the API because its better and the Legacy stuff is going away one day (which is why its called legacy)

or…
Is this a TRUE statement:
C) Both are true because either could be used, but option A is the best choice for PHP and the low volume usage case we are expecting

I have read through the following:

The simplest and most future-proofed method would be B, using a Service Account Key against our Rest V2 API.

Once we submit data from our custom forms the UTM vars are being rejected.

the process looks like this:
We use the APi key to send data from a custom form into:
A: email
B: our local database
C: Keap of course

We use PUT via createOrUpdateContactUsingPUT
https://developer.infusionsoft.com/docs/rest/#tag/Contact/operation/createOrUpdateContactUsingPUT

Then we catch the contactId for the use and run this
https://developer.infusionsoft.com/docs/rest/#tag/Contact/operation/insertUTMsUsingPOST

However… insertUTMsUsingPOST
Always fails to update the UTM vars.

The output “says” it works.
the code returned is 200, along with all of the following:
[utmSource] => test01source
[utmMedium] => test01medium
[utmTerm] => test01term
[utmCampaign] => test01campaign
[utmContent] => test01content

However… That data never gets inserted into the user record.

We use the following call:
https://api.infusionsoft.com/crm/rest/v1/contacts/{contactId}/utm
We have tried using all of the following for keapSourceId
-1
0
115 (our default form ID)

How do we get the UTM vars into createOrUpdateContactUsingPUT or insertUTMsUsingPOST?

I just tried this using Postman and I received a 201 created response when I used the form’s XID value.