Memsource REST API

Webhooks

Webhooks allow Memsource to notify 3rd-party systems about specified events. It is an arbitrary URL which handles HTTP POST requests.

Webhooks can be selected for the following events:

  • Job status changed
  • Job created
  • Job assigned
  • Job due date changed
  • Project created
  • Project status changed
  • Project due date changed
  • Shared project assigned
  • Project metadata updated
  • Pre-translation finished
  • Analysis created
  • Continuous job updated

Configure Webhooks

To configure Webhooks, follow these steps:

  1. From the Setup ( ) page, scroll down to the Integrations section. Click on Webhooks.
    The Webhooks page opens.
  2. Click New.
    The Create Webhook page opens.
  3. Enter URL.
  4. Select events.
  5. Click Save.
  6. The Webhook is added to the list on the Webhooks page.

Webhook functionality

Requests are treated in the same way as callbacks in asynchronous APIs. A JSON data structure is passed in the body of a POST request.

{
  event: "JOB_STATUS_CHANGED",
  jobParts: [
    ...
  ]
}

Webhook Errors

Memsource monitors if the webhook callback was successfully received. If the webhook reception fails 100 times, it will be automatically deactivated.

  • A message will appear in the Memsource UI in Setup under Webhooks
  • An email notification will be sent to all Admins of the Memsource account

Example

For the purpose of this example, we have used a website called RequestBin. The site will provide a URL link that can be used in Memsource Integrations section.
Webhook in Memsource Setup

The next time a Job Status is changed or a Job is created in the connected Memsource account, the URL will receive the appropriate response from the system.
Please note that this is a simple example of webhooks at work. The actual usage can be more complex and the receiving of the response should be considered a signal for the connected application to perform certain actions.

Events

Below, you'll see examples of what it looks like when a job status has changed, when a job has been assigned, when one has been created, and when the due date for a job has been changed.

  • Job status has changed
{
"jobParts": [
  {
    "id": 9,
    "uid": "ipmdz5p0sagqcOYaijTZU2",
    "internalId": "4",
    "task": "SEfSaenvqFgctE1I0_dc1",
    "fileName": "en.txt",
    "targetLang": "af",
    "workflowLevel": 1,
    "status": "NEW",
    "wordsCount": 2,
    "beginIndex": 0,
    "endIndex": 1,
    "isParentJobSplit": false,
    "dateDue": null,
    "dateCreated": "2016-11-02T17:06:54Z",
    "project": {
      "id": 2
    },
    "assignedTo": [
      {
        "vendor": {
          "id": 1,
          "name": "Abc",
          "vendorToken": "4-ifos0-CAqPo"
        }
      },
      {
        "linguist": {
          "id": 3,
          "firstName": "Admin",
          "lastName": "Admin",
          "userName": "admin",
          "email": "admin@example.com",
          "role": "ADMIN",
          "timezone": "Europe/London",
          "active": true,
          "deleted": false,
          "terminologist": false,
          "dateCreated": "2016-10-11T07:43:22Z"
        }
      }
    ]
  }
],
"event": "JOB_STATUS_CHANGED"
}
  • Job assigned
{
"jobParts": [
  {
    "id": 9,
    "uid": "ipmdz5p0sagqcOYaijTZU2",
    "internalId": "4",
    "task": "SEfSaenvqFgctE1I0_dc1",
    "fileName": "en.txt",
    "targetLang": "af",
    "workflowLevel": 1,
    "status": "NEW",
    "wordsCount": 2,
    "beginIndex": 0,
    "endIndex": 1,
    "isParentJobSplit": false,
    "dateDue": null,
    "dateCreated": "2016-11-02T17:06:54Z",
    "project": {
      "id": 2
    },
    "assignedTo": [
      {
        "vendor": {
          "id": 1,
          "name": "Abc",
          "vendorToken": "4-ifos0-CAqPo"
        }
      },
      {
        "linguist": {
          "id": 3,
          "firstName": "Admin",
          "lastName": "Admin",
          "userName": "admin",
          "email": "admin@example.com",
          "role": "ADMIN",
          "timezone": "Europe/London",
          "active": true,
          "deleted": false,
          "terminologist": false,
          "dateCreated": "2016-10-11T07:43:22Z"
        }
      }
    ]
  }
],
"event": "JOB_ASSIGNED"
}
  • Job created
{
 "jobParts": [
   {
     "id": 9,
     "uid": "ipmdz5p0sagqcOYaijTZU2",
     "internalId": "4",
     "task": "SEfSaenvqFgctE1I0_dc1",
     "fileName": "en.txt",
     "targetLang": "af",
     "workflowLevel": 1,
     "status": "NEW",
     "wordsCount": 2,
     "beginIndex": 0,
     "endIndex": 1,
     "isParentJobSplit": false,
     "dateDue": null,
     "dateCreated": "2016-11-02T17:06:54Z",
     "project": {
       "id": 2
     },
     "assignedTo": [
       {
         "vendor": {
           "id": 1,
           "name": "Abc",
           "vendorToken": "4-ifos0-CAqPo"
         }
       },
       {
         "linguist": {
           "id": 3,
           "firstName": "Admin",
           "lastName": "Admin",
           "userName": "admin",
           "email": "admin@example.com",
           "role": "ADMIN",
           "timezone": "Europe/London",
           "active": true,
           "deleted": false,
           "terminologist": false,
           "dateCreated": "2016-10-11T07:43:22Z"
         }
       }
     ]
   }
 ],
 "event": "JOB_CREATED"
}
  • Job due date changed
{
  "jobParts": [
    {
      "id": 127865777,
      "uid": "ElTXvXnNIHEN2xgL5sU2L2",
      "internalId": "1",
      "task": "LvkAHilgobApeoVm_dc4",
      "fileName": "EU White Paper Edited.doc",
      "targetLang": "de",
      "workflowLevel": 1,
      "status": "NEW",
      "wordsCount": 204,
      "beginIndex": 0,
      "endIndex": 16,
      "isParentJobSplit": false,
      "dateDue": "2018-09-11T22:00:00Z",
      "dateCreated": "2018-09-10T06:25:41Z",
      "project": {
        "id": 12277756,
        "lastWorkflowLevel": 1
      },
      "assignedTo": []
    }
  ],
  "event": "JOB_DUE_DATE_CHANGED"
}