Showing results for 
Search instead for 
Did you mean: 

Getting E00059 while trying to cancel a subscription

I am currently working on subscription integration with Authorize.Net using their ARB service. I am able to create a subscription without any issues. However; when I try to cancel the newly created subscription I get  the E00059 error : The authentication type is not allowed for this method call. Both the create and cancel functions use the same authenticate function. So I am confused why one works but the other doesnt.


I am currently using the SDK in C#.Net to create the request scripts. I've been stumped for this issue for about a day now so any help would be greatly appreciated. 




There are 2 way to connect on the SDKs. one use the XML, the other is the API controller.

Which one are you using?

Can you post your code?


I am connecting using the XML method. I did not see an API controller so I am wonder if the SDK I refereced may be outdated. Below is my code for the cancel:



public void CancelSubscription(ref String result, String SubscriptionID)
            ARBCancelSubscriptionRequest cancelSubscriptionRequest = new ARBCancelSubscriptionRequest();

            //Populate Request with SubscriptionID & Merchant Authentication
            cancelSubscriptionRequest.subscriptionId = SubscriptionID;

            bool bResult = true;
            object response = null;
            XmlDocument xmldoc = null;
            //Post Cancel Request
            bResult = PostRequest(cancelSubscriptionRequest, out xmldoc);

            //Process Response
            if (bResult) bResult = ProcessXmlResponse(xmldoc, out response);
            if (bResult) ProcessResponse(response);

            ANetApiResponse baseResponse = (ANetApiResponse)response;

            if (baseResponse.messages.resultCode == messageTypeEnum.Ok)
                //Subscription canceled
                result = "Success";
                result = "Error";
                for (int i = 0; i < baseResponse.messages.message.Length; i++)
                    result += "[" + baseResponse.messages.message[i].code + "]" + baseResponse.messages.message[i].text + "<br/>";


private void PopulateMerchantAuthentication(ANetApiRequest request)
            request.merchantAuthentication = new merchantAuthenticationType();
   = LoginID;
            request.merchantAuthentication.Item = TransactionKey;
            request.merchantAuthentication.ItemElementName = ItemChoiceType.transactionKey;


public bool PostRequest(object apiRequest, out XmlDocument xmldoc)
            bool bResult = false;
            XmlSerializer serializer;
            string _apiUrl = @" ";

            xmldoc = null;

                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(_apiUrl);
                webRequest.Method = "POST";
                webRequest.ContentType = "text/xml";
                webRequest.KeepAlive = true;

                // Serialize the request
                serializer = new XmlSerializer(apiRequest.GetType());
                XmlWriter writer = new XmlTextWriter(webRequest.GetRequestStream(), Encoding.UTF8);
                serializer.Serialize(writer, apiRequest);

                // Get the response
                WebResponse webResponse = webRequest.GetResponse();

                // Load the response from the API server into an XmlDocument.
                xmldoc = new XmlDocument();

                bResult = true;
            catch (Exception ex)
                bResult = false;

            return bResult;

 Please let me know if there is any additional information I can provide.


Thank you for your time.

The code look ok. might have to debug it to see if it got the correct value.