Tim,
I will correct you, then.  *smile*  I just used my code (which uses the same core API method as Seth's code) to staple two documents together directly in a file cabinet -- no tray involved.
I did get two 500 errors, the first because I tried to staple two non-PDF documents together (which apparently throws an error) and then another 500 error when I tried to staple together documents whose IDs did not exist in the file cabinet.
Once I cleared up those error, I got a successfully stapled document, verified in the web client.
I still do not know what a 405 error may indicate. The PDFs I stapled together were in a file cabinet with versioning turned on, and the operation still had no problem once I used the right type of documents (PDF) and used the correct document IDs. My code is below:
=====================
        static public Document MergeDocuments(FileCabinet fileCabinet, List<int> docIds, ContentMergeOperation mergeOp = ContentMergeOperation.Staple)
        {
            // NOTE! This actually merges the documents in the DocuWare file cabinet, meaning a new, merged document
            // is created in the database and the documents that were merged are gone.
            LastError = "";
            if (fileCabinet == null)
            {
                LastError = "Parameter 'fileCabinet' cannot be null.";
                return null;
            }
            if ((docIds == null) || (docIds.Count == 0))
            {
                LastError = "Parameter 'docIDs' cannot be null or of zero count.";
                return null;
            }
            Document mergedDocument = null;
            try
            {
                mergedDocument = fileCabinet.PutToContentMergeOperationRelationForDocument
                    (
                        new ContentMergeOperationInfo()
                        {
                            Documents = docIds,
                            Operation = mergeOp,
                            Force = true
                        }
                    );
            }
            catch (Exception ex)
            {
                LastError = ex.Message;
            }
            return mergedDocument;
        }
 
=====================
As I said, it uses the same core API call Seth is trying to use, "PutToContentMergeOperationRelationForDocument".
 
Thanks,
Joe Kaufman