Sample code for 30+ languages & platforms
Swift

Send DocuSign XML Request

See more HTTP Misc Examples

Demonstrates how to send a DocuSign XML request.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    // This requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    let req = CkoHttpRequest()!

    req.httpVerb = "POST"

    // Replace "12999999" with your own account number. (12999999 is a ficticious account number)
    req.path = "/restapi/v2/accounts/12999999/envelopes"

    req.addHeader(name: "Accept", value: "application/xml")

    // Don't worry about the boundary string.  Chilkat will automatically generate one and include it.
    req.contentType = "multipart/form-data"

    let xmlCred = CkoXml()!
    xmlCred.tag = "DocuSignCredentials"
    xmlCred.updateChildContent(tagPath: "Username", value: "YOUR_DOCUSIGN_USERNAME")
    xmlCred.updateChildContent(tagPath: "Password", value: "YOUR_DOCUSIGN_PASSWORD")
    xmlCred.updateChildContent(tagPath: "IntegratorKey", value: "ABCD-12345678-1234-AAAA-BBBB-abcdabcdabcd")
    xmlCred.emitXmlDecl = false
    xmlCred.emitCompact = true
    req.addHeader(name: "X-DocuSign-Authentication", value: xmlCred.getXml())

    // Don't worry about Host or Content-Length headers, Chilkat automatically adds them...

    // Build the XML for the 1st body part..
    let xml = CkoXml()!
    xml.tag = "envelopeDefinition"
    xml.addAttribute(name: "xmlns", value: "http://www.docusign.com/restapi")
    xml.updateChildContent(tagPath: "emailSubject", value: "Signature Request: Test Test:001019:033611")
    xml.updateChildContent(tagPath: "status", value: "sent")
    xml.updateChildContent(tagPath: "documents|document|documentId", value: "1")
    xml.updateChildContent(tagPath: "documents|document|name", value: "001019_TestTest_RetailDeals_163357")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|hostEmail", value: "admin@chilkatsoft.com")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|hostName", value: "Chilkat Admin")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|signerName", value: "Test  Test")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|recipientId", value: "1")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|routingOrder", value: "1")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|signerEmail", value: "test@tyest.com")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorString", value: "\\SDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|optional", value: "False")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorString", value: "\\OSDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|optional", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorString", value: "\\OPSSDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|optional", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|scaleValue", value: "0.7")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorString", value: "\\PSSDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|optional", value: "False")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|scaleValue", value: "0.7")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorString", value: "\\IDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|optional", value: "False")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorString", value: "\\OIDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|optional", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorString", value: "\\OPSIDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|optional", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|scaleValue", value: "0.5")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorString", value: "\\PSIDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|optional", value: "False")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|scaleValue", value: "0.5")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|hostEmail", value: "admin@chilkatsoft.com")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|hostName", value: "Chilkat Admin")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|signerName", value: "Dealer Representative")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|recipientId", value: "2")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|routingOrder", value: "2")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorString", value: "\\DSDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|optional", value: "False")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorString", value: "\\DOSDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|optional", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorString", value: "\\DIDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|optional", value: "False")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent", value: "True")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorString", value: "\\DOIDP")
    xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|optional", value: "True")
    xml.emitXmlDecl = false

    print("\(xml.getXml()!)")

    xml.emitCompact = true

    req.addString(forUpload2: "", filename: "", strData: xml.getXml(), charset: "utf-8", contentType: "application/xml")
    req.addFile(forUpload2: "", path: "qa_data/pdf/signatureForm.pdf", contentType: "application/pdf")
    req.addSubHeader(index: 1, name: "Content-Disposition", value: "file; filename=\"signatureForm.pdf\";documentid=1")

    let http = CkoHttp()!

    http.sessionLogFilename = "qa_output/log.txt"

    let resp = CkoHttpResponse()!
    success = http.httpSReq(domain: "na2.docusign.net", port: 443, ssl: true, request: req, response: resp)
    if success == false {
        print("\(http.lastErrorText!)")
        return
    }

    if resp.statusCode.intValue != 201 {
        print("\(resp.bodyStr!)")
        print("Response status code: \(resp.statusCode.intValue)")
        print("Failed.")
        return
    }

    // Examine the response..
    xml.load(xmlData: resp.bodyStr)
    var envelopeId: String? = xml.getChildContent(tagPath: "envelopeId")
    print("envelopeId = \(envelopeId!)")
    var status: String? = xml.getChildContent(tagPath: "status")
    print("status = \(status!)")
    var statusDateTime: String? = xml.getChildContent(tagPath: "statusDateTime")
    print("statusDateTime = \(statusDateTime!)")
    var uri: String? = xml.getChildContent(tagPath: "uri")
    print("uri = \(uri!)")

}