Problem
How do I Unsuspend a Client (end-user) under my Partner account using the Partner API? 
Unsuspending a client end-user using the RESTful Partner API?
Solution
The following example of code shows you how to unsuspend a client (end-user) under your partner account.
Note, Unsuspending (enabling) a client will enable the client from a previous suspend/disable but it only enables the client. It will not enable & unsuspend the services under the client. For this you will need to call /live_services/suspension for each service to reactivate.
Prerequisites
To use the Partner API you must meet the following criteria
- Have a working development environment.
- Have an active Partner account. If you need a partner account you can sign up here.
- Enabled your account to use the API and set the access controls.
- Have valid API Credentials.
- Optional - Setup your development environment to initially use the Sandbox Testing Portal.
For Partner API reference documentation please see https://portal.my-engine.com/apidocs/index.html
Example Code
The examples below uses the sandbox. For a production environment remember to change the following:
- API Url
- Partner ID
- Partner API Key
<?php
/**
 * client-unsuspend.php
 * 
 * This example will Unsuspend a client.
 * 
 */
$apiPartnerId = "<PartnerID>";
$apiSecretKey = "___PartnerKey___";
$apiUrl       = "https://sandbox.my-engine.com/api-v1/clients";
$crlf         = "<br />";
// Client ID to unsuspend
$clientid = "9987608";
// Create the array for the client data
$client    = array();
$client["enable"] = 1;
// Init Curl
$curl = curl_init();
// API Authentication:
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "$apiPartnerId:$apiSecretKey");
// Set Curl Options
curl_setopt($curl, CURLOPT_URL, $apiUrl . '/' . $clientid . '/enabled');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// API PATCH 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($client));
// Tell it we're sending a JSON set of data in the POST
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    ));
    
// API PATCH
$jsonResult = curl_exec($curl);
// Check for a valid HTTP 200 success and process the returned result
// or handler the failure.
if (curl_getinfo($curl, CURLINFO_RESPONSE_CODE) == 200) {
    $result = json_decode($jsonResult, true);
    if (json_last_error() == JSON_ERROR_NONE)   {
        echo "status = " . $result["meta"]["success"] . $crlf;
    } else {
        print_r($result);
    }
    
} else {
    echo "Response Code = " . curl_getinfo($curl, CURLINFO_RESPONSE_CODE) . $crlf;
    
    $result = json_decode($jsonResult, true);
    if (json_last_error() == JSON_ERROR_NONE)   {
        echo "error = " . $result["error"]["name"] . $crlf;
        echo "url = " . $result["error"]["url"] . $crlf;
        echo "message = " . $result["error"]["message"] . $crlf;
    } else {
        echo $jsonResult;
    }
}
curl_close($curl);
/**
 * client-unsuspend.cs
 * 
 * This example will Unsuspend a client.
 * 
 */
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
namespace clients_unsuspend
{
    class Program
    {
        private const string apiPartnerId = "<PartnerID>";
        private const string apiSecretKey = "_PartnerKey_";
        private const string apiUrl = "https://sandbox.my-engine.com/api-v1/clients";
        static void Main(string[] args)
        {
            // ID of the client to Unsuspend.
            // Remember this is the my-engine id, not your own id (aka external-id)
            string id = "9987608";
            // Create the patch client data
            Dictionary<string, string> patchClient = new Dictionary<string, string>();
            patchClient.Add("enable", "1");
            // Convert the Dictionary to Json
            string patchClientJsonStr = JsonConvert.SerializeObject(patchClient, Formatting.Indented);
            // Create HTTP resource
            HttpClient client = new HttpClient();
            // Add an Accept header for JSON format.
            client.DefaultRequestHeaders.Add("ContentType", "application/json");
            // Set the Authorisation
            var authToken = System.Text.Encoding.UTF8.GetBytes(apiPartnerId + ":" + apiSecretKey);
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", System.Convert.ToBase64String(authToken));
            // Create the content
            var content = new StringContent(patchClientJsonStr, Encoding.UTF8, "application/json");
            // Do the PATCH
            var response = client.PatchAsync(apiUrl + "/" + id + "/enabled", content).Result;
            // Check the result for a valid HTTP 200 success and process the returned result
            // or handler the failure.
            if (response.IsSuccessStatusCode)
            {
                // Get the created ID
                var jsonResponseStr = response.Content.ReadAsStringAsync().Result;
                dynamic jsonResponse = JsonConvert.DeserializeObject(jsonResponseStr);
                if (jsonResponse.ContainsKey("data"))
                {
                    Console.WriteLine("status = {0}", jsonResponse["meta"]["success"]);
                }
                else
                {
                    Console.WriteLine("response = {0}", response);
                    Console.WriteLine("json response = {0}", jsonResponse);
                }
            }
            else
            {
                // Get the Json Error response and convert it
                var jsonResponseStr = response.Content.ReadAsStringAsync().Result;
                dynamic jsonResponse = JsonConvert.DeserializeObject(jsonResponseStr);
                Console.WriteLine("name = {0}", jsonResponse["error"]["name"]);
                Console.WriteLine("url = {0}", jsonResponse["error"]["url"]);
                Console.WriteLine("message = {0}", jsonResponse["error"]["message"]);
                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
            }
            //Dispose once all HttpClient calls are complete.
            client.Dispose();
        }
		
    }
}
'
' client-unsuspend.vb
' 
' This example will Unsuspend a client.
'  
'
Imports Newtonsoft.Json
Imports System
Imports System.Collections.Generic
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Text
Module Program
    Private Const apiPartnerId As String = "<PartnerID>"
    Private Const apiSecretKey As String = "_PartnerKey_"
    Private Const apiUrl As String = "https://sandbox.my-engine.com/api-v1/clients"
    Sub Main(args As String())
        ' ID of the client to Unsuspend.
        ' Remember this Is the my-engine id, Not your own id (aka external-id)
        Dim id As String = "9987608"
        ' Create the New client data
        Dim patchClient As Dictionary(Of String, String) = New Dictionary(Of String, String)
        patchClient.Add("enable", "1")
        ' Convert the Dictionary to Json
        Dim patchClientJsonStr As String = JsonConvert.SerializeObject(patchClient, Formatting.Indented)
        ' Create HTTP resource
        Dim client As New HttpClient()
        ' Add an Accept header for JSON format.
        client.DefaultRequestHeaders.Add("ContentType", "application/json")
        ' Set the Authorisation
        Dim authToken = System.Text.Encoding.UTF8.GetBytes(apiPartnerId + ":" + apiSecretKey)
        client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Basic", System.Convert.ToBase64String(authToken))
        ' Create the content
        Dim content = New StringContent(patchClientJsonStr, Encoding.UTF8, "application/json")
        ' Do the PATCH
        Dim response As HttpResponseMessage = client.PatchAsync(apiUrl + "/" + id + "/enabled", content).Result
        ' Check the result for a valid HTTP 200 success And process the returned result
        ' Or handler the failure.
        If (response.IsSuccessStatusCode) Then
            ' Get the created ID
            Dim jsonResponseStr = response.Content.ReadAsStringAsync().Result
            Dim jsonResponse As Object = JsonConvert.DeserializeObject(jsonResponseStr)
            If jsonResponse.ContainsKey("data") Then
                Console.WriteLine("status = {0}", jsonResponse("meta")("success"))
            Else
                Console.WriteLine("response = {0}", response)
                Console.WriteLine("json response = {0}", jsonResponse)
            End If
        Else
            ' Get the Json Error response And convert it
            Dim jsonResponseStr = response.Content.ReadAsStringAsync().Result
            Dim jsonResponse As Object = JsonConvert.DeserializeObject(jsonResponseStr)
            Console.WriteLine("name = {0}", jsonResponse("error")("name"))
            Console.WriteLine("url = {0}", jsonResponse("error")("url"))
            Console.WriteLine("message = {0}", jsonResponse("error")("message"))
            Console.WriteLine("{0} ({1})", response.StatusCode, response.ReasonPhrase)
        End If
        'Dispose once all HttpClient calls are complete.
        client.Dispose()
    End Sub
End Module
/**
 * client-unsuspend.js
 * 
 * This example will Unsuspend a client.
 * 
 */
var apiPartnerId = "<PartnerID>";
var apiSecretKey = "_PartnerKey_";
var apiUrl = "https://sandbox.my-engine.com/api-v1/clients";
// Set the ID of the client to unsuspend.
var clientId = "9987608";
var jsondata = { "enable": 1 };
// Setup the Ajax request
var settings = {
    url: apiUrl + '/' + clientId + '/enabled',
    headers: {
        'Authorization': 'Basic ' + btoa(apiPartnerId + ":" + apiSecretKey),
        'cache-control': 'no-cache'
    },
    crossDomain: true,
    // Uncomment the lines below if you want to POST data as JSON.
    //   If so comment the "data: jsondata" out
    //     contentType: 'application/json',
    //     data: JSON.stringify(jsondata),
    // Comment the line below out, if you've uncomment the two line above.
    //   The "data: jsondata" method will POST data as application/x-www-form-urlencoded
    data: jsondata,
    dataType: 'json',
    async: true,
    method: "PATCH"
};
// API PATCH
$.ajax(settings)
    .done(function(response) {
        console.log("status = " + response.meta.success);
        console.log(" ");
    })
    .fail(function(request, textStatus, errorThrown) {
        try {
            var errObj = $.parseJSON(request.responseText);
            console.log("API Error - " + errObj.name);
            console.log("API Msg   - " + errObj.message);
            console.log("API url   - " + errObj.url);
        } catch (e) {
            console.log("Error - " + errorThrown);
            console.log("Status - " + request.status);
            console.log(request);
        }
    });


