Sample code for 30+ languages & platforms
Xbase++

Yousign Create Procedure after Uploading the PDF

See more Yousign Examples

Demonstrates the 2nd step of Yousign procedure creation. This is the call to create the procedure after previously uploading the PDF file.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oHttp
LOCAL oJson
LOCAL oResp
LOCAL oSbResponseBody
LOCAL oJResp
LOCAL nRespStatusCode
LOCAL cUser
LOCAL cV_type
LOCAL cFirstname
LOCAL cLastname
LOCAL cEmail
LOCAL cPhone
LOCAL nPosition
LOCAL cComment
LOCAL cOperationLevel
LOCAL cOperationModeSmsConfig
LOCAL j
LOCAL nCount_j
LOCAL cFileId
LOCAL cFileName
LOCAL cFileType
LOCAL cFileContentType
LOCAL cFileDescription
LOCAL cFileCreatedAt
LOCAL cFileUpdatedAt
LOCAL cFileSha256
LOCAL cFileWorkspace
LOCAL cFileCreator
LOCAL nFileProtected
LOCAL nFilePosition
LOCAL cFileParent
LOCAL nPage
LOCAL cPosition_str
LOCAL cFieldName
LOCAL cMention
LOCAL cMention2
LOCAL cReason
LOCAL k
LOCAL nCount_k
LOCAL cStrVal
LOCAL cContentType
LOCAL cSha256
LOCAL nV_protected
LOCAL cId
LOCAL cName
LOCAL cDescription
LOCAL cCreatedAt
LOCAL cUpdatedAt
LOCAL cFinishedAt
LOCAL cExpiresAt
LOCAL cStatus
LOCAL cCreator
LOCAL cCreatorFirstName
LOCAL cCreatorLastName
LOCAL cWorkspace
LOCAL nTemplate
LOCAL nOrdered
LOCAL cParent
LOCAL nRelatedFilesEnable
LOCAL nArchive
LOCAL i
LOCAL nCount_i

nSuccess := 0

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

oHttp := CreateObject("Chilkat.Http")

//  Implements the following CURL command:

//  curl --location --request POST 'https://staging-api.yousign.com/procedures' \
//  --header 'Authorization: Bearer YOUR_API_KEY' \
//  --header 'Content-Type: application/json' \
//  --data-raw '{
//      "name": "My first procedure",
//      "description": "Awesome! Here is the description of my first procedure",
//      "members": [
//          {
//              "firstname": "John",
//              "lastname": "Doe",
//              "email": "john.doe@yousign.fr",
//              "phone": "+33612345678",
//              "fileObjects": [
//                  {
//                      "file": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//                      "page": 2,
//                      "position": "230,499,464,589",
//                      "mention": "Read and approved",
//                      "mention2": "Signed by John Doe"
//                  }
//              ]
//          }
//      ]
//  }'

//  Use the following online tool to generate HTTP code from a CURL command
//  Convert a cURL Command to HTTP Source Code

//  Use this online tool to generate code from sample JSON:
//  Generate Code to Create JSON

//  The following JSON is sent in the request body.

//  {
//    "name": "My first procedure",
//    "description": "Awesome! Here is the description of my first procedure",
//    "members": [
//      {
//        "firstname": "John",
//        "lastname": "Doe",
//        "email": "john.doe@yousign.fr",
//        "phone": "+33612345678",
//        "fileObjects": [
//          {
//            "file": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//            "page": 2,
//            "position": "230,499,464,589",
//            "mention": "Read and approved",
//            "mention2": "Signed by John Doe"
//          }
//        ]
//      }
//    ]
//  }

oJson := CreateObject("Chilkat.JsonObject")
oJson:UpdateString("name", "My first procedure")
oJson:UpdateString("description", "Awesome! Here is the description of my first procedure")
oJson:UpdateString("members[0].firstname", "John")
oJson:UpdateString("members[0].lastname", "Doe")
oJson:UpdateString("members[0].email", "john.doe@yousign.fr")
oJson:UpdateString("members[0].phone", "+33612345678")
oJson:UpdateString("members[0].fileObjects[0].file", "/files/6c123a8d-e5cf-4534-8da0-81886376ba2c")
oJson:UpdateInt("members[0].fileObjects[0].page", 2)
oJson:UpdateString("members[0].fileObjects[0].position", "230,499,464,589")
oJson:UpdateString("members[0].fileObjects[0].mention", "Read and approved")
oJson:UpdateString("members[0].fileObjects[0].mention2", "Signed by John Doe")

//  Adds the "Authorization: Bearer YOUR_API_KEY" header.
oHttp:AuthToken := "YOUR_API_KEY"

oResp := CreateObject("Chilkat.HttpResponse")
nSuccess := oHttp:HttpJson("POST", "https://staging-api.yousign.com/procedures", oJson, "application/json", oResp)
IF (nSuccess == 0)
    ? oHttp:LastErrorText
    oHttp:destroy()
    oJson:destroy()
    oResp:destroy()
    RETURN
ENDIF

oSbResponseBody := CreateObject("Chilkat.StringBuilder")
oResp:GetBodySb(oSbResponseBody)
oJResp := CreateObject("Chilkat.JsonObject")
oJResp:LoadSb(oSbResponseBody)
oJResp:EmitCompact := 0

? "Response Body:"
? oJResp:Emit()

nRespStatusCode := oResp:StatusCode
? "Response Status Code = " + Str(nRespStatusCode)
IF (nRespStatusCode >= 400)
    ? "Response Header:"
    ? oResp:Header
    ? "Failed."
    oHttp:destroy()
    oJson:destroy()
    oResp:destroy()
    oSbResponseBody:destroy()
    oJResp:destroy()
    RETURN
ENDIF

//  Sample JSON response:
//  (Sample code for parsing the JSON response is shown below)

//  {
//    "id": "/procedures/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//    "name": "My first procedure",
//    "description": "Awesome! Here is the description of my first procedure",
//    "createdAt": "2018-12-01T11:49:11+01:00",
//    "updatedAt": "2018-12-01T11:49:11+01:00",
//    "finishedAt": null,
//    "expiresAt": null,
//    "status": "active",
//    "creator": null,
//    "creatorFirstName": null,
//    "creatorLastName": null,
//    "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//    "template": false,
//    "ordered": false,
//    "parent": null,
//    "metadata": [
//    ],
//    "config": [
//    ],
//    "members": [
//      {
//        "id": "/members/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//        "user": null,
//        "type": "signer",
//        "firstname": "John",
//        "lastname": "Doe",
//        "email": "john.doe@yousign.fr",
//        "phone": "+33612345678",
//        "position": 1,
//        "createdAt": "2018-12-01T11:49:11+01:00",
//        "updatedAt": "2018-12-01T11:49:11+01:00",
//        "finishedAt": null,
//        "status": "pending",
//        "fileObjects": [
//          {
//            "id": "/file_objects/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//            "file": {
//              "id": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//              "name": "The best name for my file.pdf",
//              "type": "signable",
//              "contentType": "application/pdf",
//              "description": null,
//              "createdAt": "2018-12-01T11:36:20+01:00",
//              "updatedAt": "2018-12-01T11:49:11+01:00",
//              "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2",
//              "metadata": [
//              ],
//              "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//              "creator": null,
//              "protected": false,
//              "position": 0,
//              "parent": null
//            },
//            "page": 2,
//            "position": "230,499,464,589",
//            "fieldName": null,
//            "mention": "Read and approved",
//            "mention2": "Signed by John Doe",
//            "createdAt": "2018-12-01T11:49:11+01:00",
//            "updatedAt": "2018-12-01T11:49:11+01:00",
//            "parent": null,
//            "reason": "Signed by Yousign"
//          }
//        ],
//        "comment": null,
//        "notificationsEmail": [
//        ],
//        "operationLevel": "custom",
//        "operationCustomModes": [
//          "sms"
//        ],
//        "operationModeSmsConfig": null,
//        "parent": null
//      }
//    ],
//    "subscribers": [
//    ],
//    "files": [
//      {
//        "id": "/files/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//        "name": "The best name for my file.pdf",
//        "type": "signable",
//        "contentType": "application/pdf",
//        "description": null,
//        "createdAt": "2018-12-01T11:36:20+01:00",
//        "updatedAt": "2018-12-01T11:49:11+01:00",
//        "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2",
//        "metadata": [
//        ],
//        "workspace": "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
//        "creator": null,
//        "protected": false,
//        "position": 0,
//        "parent": null
//      }
//    ],
//    "relatedFilesEnable": false,
//    "archive": false,
//    "archiveMetadata": [
//    ],
//    "fields": [
//    ],
//    "permissions": [
//    ]
//  }

//  Sample code for parsing the JSON response...
//  Use the following online tool to generate parsing code from sample JSON:
//  Generate Parsing Code from JSON

cId := oJResp:StringOf("id")
cName := oJResp:StringOf("name")
cDescription := oJResp:StringOf("description")
cCreatedAt := oJResp:StringOf("createdAt")
cUpdatedAt := oJResp:StringOf("updatedAt")
cFinishedAt := oJResp:StringOf("finishedAt")
cExpiresAt := oJResp:StringOf("expiresAt")
cStatus := oJResp:StringOf("status")
cCreator := oJResp:StringOf("creator")
cCreatorFirstName := oJResp:StringOf("creatorFirstName")
cCreatorLastName := oJResp:StringOf("creatorLastName")
cWorkspace := oJResp:StringOf("workspace")
nTemplate := oJResp:BoolOf("template")
nOrdered := oJResp:BoolOf("ordered")
cParent := oJResp:StringOf("parent")
nRelatedFilesEnable := oJResp:BoolOf("relatedFilesEnable")
nArchive := oJResp:BoolOf("archive")
i := 0
nCount_i := oJResp:SizeOfArray("metadata")
DO WHILE i < nCount_i
    oJResp:I := i
    i := i + 1
ENDDO
i := 0
nCount_i := oJResp:SizeOfArray("config")
DO WHILE i < nCount_i
    oJResp:I := i
    i := i + 1
ENDDO
i := 0
nCount_i := oJResp:SizeOfArray("members")
DO WHILE i < nCount_i
    oJResp:I := i
    cId := oJResp:StringOf("members[i].id")
    cUser := oJResp:StringOf("members[i].user")
    cV_type := oJResp:StringOf("members[i].type")
    cFirstname := oJResp:StringOf("members[i].firstname")
    cLastname := oJResp:StringOf("members[i].lastname")
    cEmail := oJResp:StringOf("members[i].email")
    cPhone := oJResp:StringOf("members[i].phone")
    nPosition := oJResp:IntOf("members[i].position")
    cCreatedAt := oJResp:StringOf("members[i].createdAt")
    cUpdatedAt := oJResp:StringOf("members[i].updatedAt")
    cFinishedAt := oJResp:StringOf("members[i].finishedAt")
    cStatus := oJResp:StringOf("members[i].status")
    cComment := oJResp:StringOf("members[i].comment")
    cOperationLevel := oJResp:StringOf("members[i].operationLevel")
    cOperationModeSmsConfig := oJResp:StringOf("members[i].operationModeSmsConfig")
    cParent := oJResp:StringOf("members[i].parent")
    j := 0
    nCount_j := oJResp:SizeOfArray("members[i].fileObjects")
    DO WHILE j < nCount_j
        oJResp:J := j
        cId := oJResp:StringOf("members[i].fileObjects[j].id")
        cFileId := oJResp:StringOf("members[i].fileObjects[j].file.id")
        cFileName := oJResp:StringOf("members[i].fileObjects[j].file.name")
        cFileType := oJResp:StringOf("members[i].fileObjects[j].file.type")
        cFileContentType := oJResp:StringOf("members[i].fileObjects[j].file.contentType")
        cFileDescription := oJResp:StringOf("members[i].fileObjects[j].file.description")
        cFileCreatedAt := oJResp:StringOf("members[i].fileObjects[j].file.createdAt")
        cFileUpdatedAt := oJResp:StringOf("members[i].fileObjects[j].file.updatedAt")
        cFileSha256 := oJResp:StringOf("members[i].fileObjects[j].file.sha256")
        cFileWorkspace := oJResp:StringOf("members[i].fileObjects[j].file.workspace")
        cFileCreator := oJResp:StringOf("members[i].fileObjects[j].file.creator")
        nFileProtected := oJResp:BoolOf("members[i].fileObjects[j].file.protected")
        nFilePosition := oJResp:IntOf("members[i].fileObjects[j].file.position")
        cFileParent := oJResp:StringOf("members[i].fileObjects[j].file.parent")
        nPage := oJResp:IntOf("members[i].fileObjects[j].page")
        cPosition_str := oJResp:StringOf("members[i].fileObjects[j].position")
        cFieldName := oJResp:StringOf("members[i].fileObjects[j].fieldName")
        cMention := oJResp:StringOf("members[i].fileObjects[j].mention")
        cMention2 := oJResp:StringOf("members[i].fileObjects[j].mention2")
        cCreatedAt := oJResp:StringOf("members[i].fileObjects[j].createdAt")
        cUpdatedAt := oJResp:StringOf("members[i].fileObjects[j].updatedAt")
        cParent := oJResp:StringOf("members[i].fileObjects[j].parent")
        cReason := oJResp:StringOf("members[i].fileObjects[j].reason")
        k := 0
        nCount_k := oJResp:SizeOfArray("members[i].fileObjects[j].file.metadata")
        DO WHILE k < nCount_k
            oJResp:K := k
            k := k + 1
        ENDDO
        j := j + 1
    ENDDO
    j := 0
    nCount_j := oJResp:SizeOfArray("members[i].notificationsEmail")
    DO WHILE j < nCount_j
        oJResp:J := j
        j := j + 1
    ENDDO
    j := 0
    nCount_j := oJResp:SizeOfArray("members[i].operationCustomModes")
    DO WHILE j < nCount_j
        oJResp:J := j
        cStrVal := oJResp:StringOf("members[i].operationCustomModes[j]")
        j := j + 1
    ENDDO
    i := i + 1
ENDDO
i := 0
nCount_i := oJResp:SizeOfArray("subscribers")
DO WHILE i < nCount_i
    oJResp:I := i
    i := i + 1
ENDDO
i := 0
nCount_i := oJResp:SizeOfArray("files")
DO WHILE i < nCount_i
    oJResp:I := i
    cId := oJResp:StringOf("files[i].id")
    cName := oJResp:StringOf("files[i].name")
    cV_type := oJResp:StringOf("files[i].type")
    cContentType := oJResp:StringOf("files[i].contentType")
    cDescription := oJResp:StringOf("files[i].description")
    cCreatedAt := oJResp:StringOf("files[i].createdAt")
    cUpdatedAt := oJResp:StringOf("files[i].updatedAt")
    cSha256 := oJResp:StringOf("files[i].sha256")
    cWorkspace := oJResp:StringOf("files[i].workspace")
    cCreator := oJResp:StringOf("files[i].creator")
    nV_protected := oJResp:BoolOf("files[i].protected")
    nPosition := oJResp:IntOf("files[i].position")
    cParent := oJResp:StringOf("files[i].parent")
    j := 0
    nCount_j := oJResp:SizeOfArray("files[i].metadata")
    DO WHILE j < nCount_j
        oJResp:J := j
        j := j + 1
    ENDDO
    i := i + 1
ENDDO
i := 0
nCount_i := oJResp:SizeOfArray("archiveMetadata")
DO WHILE i < nCount_i
    oJResp:I := i
    i := i + 1
ENDDO
i := 0
nCount_i := oJResp:SizeOfArray("fields")
DO WHILE i < nCount_i
    oJResp:I := i
    i := i + 1
ENDDO
i := 0
nCount_i := oJResp:SizeOfArray("permissions")
DO WHILE i < nCount_i
    oJResp:I := i
    i := i + 1
ENDDO

oHttp:destroy()
oJson:destroy()
oResp:destroy()
oSbResponseBody:destroy()
oJResp:destroy()