Status code 405 on Updating Deal, yet not on Creating


#1

Hello!

I’m having an issue with the “Update deal” method of the API. Without any error response, I’m getting a 405 Status Code and I’m unable to update a deal.

As far as I can tell, I don’t find any syntaxis errors on the JSON nor I’m sending incorrect data for each property. In fact I tried to send each property individually and I’m getting the same result.

Also I succesfully created a Deal with this same JSON (adding associations and changing the endpoint of course), however updating always gives me the same status code.

I have not had any issues with other methods such as Update Contact, Get all Deals, Get All Contacts, Create Deal, etc.

I’ll appreciate your help, thanks!

PHP code used:

$post_json = '
 {
	"properties": [
		{
			"value": "contractsent",
			"name": "dealstage"
		},
		{
			"value": "default",
			"name": "pipeline"
		},
		{
			"value": 150162347327,
			"name": "closedate"
		},
		{
			"value": "570",
			"name": "amount"
		},
		{
			"value": 63234,
			"name": "id_venta"
		},
		{
			"value": "Cerrado con ID de alumno 12843 y ID de venta 63234 en ERP. MUY BUENA OFERTA.",
			"name": "closed_won_reason"
		}
	]
}
';
$endpoint = 'https://api.hubapi.com/deals/v1/deal/180356891?hapikey=MY-HAPI-KEY';
$ch = @curl_init();
@curl_setopt($ch, CURLOPT_POST, true);
@curl_setopt($ch, CURLOPT_POSTFIELDS, $post_json);
@curl_setopt($ch, CURLOPT_URL,        $endpoint);
@curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response    = curl_exec($ch);
$status_code = @curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curl_errors = curl_error($ch);
@curl_close($ch);
if( !empty($curl_errors) || $status_code!=204 ){
    $errors = true;
    echo "
    <ul>
    <li>Curl Errors: " .$curl_errors ."</li>
	<li>Status code: " .$status_code ."</li>
	<li>Response:    " .$response    ."</li>
	<i>Endpoint:     " .$endpoint    ."</li>
	<li>Data sent:   " .$post_json   ."</li>
    </ul>
    ";
}

Results I get from the PHP;


#2

Hi @MrClick,

Thanks for the detailed note, the status code 405 means the method is not allowed for that endpoint. For this line @curl_setopt($ch, CURLOPT_POST, true); you should instead use url_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); Essentially you are making a POST request when you need to be making a PUT request.

I’m not a PHP expert but based on some quick googling https://stackoverflow.com/questions/21271140/curl-and-php-how-can-i-pass-a-json-through-curl-by-put-post-get that should do the trick.

-Zack


#3

Thank you very much Zack, this solved my problem.

Regards and have a nice day!