Webhooks

Webhooks notify and help you collect information about the key events that happen in your Crowdin project, like completed translations or proofreading. After you configure a webhook for the project, Crowdin will start sending POST or GET requests with data to the webhook URL via HTTP.

Only owners and project managers can register a webhook.

Use Cases

You can add webhooks to build integrations with the services or with your backend. For example:

  • Set up a webhook to send notifications to the system you use.
  • Pass information to the third-party services with the specific request requirements (for example, HTTP method, сontent type).
  • Create custom integrations with Crowdin.

Events

You can configure webhooks for the following types of events:

  • File fully translated

  • File fully reviewed

  • File added

  • File updated

  • File reverted

  • File deleted

  • Project fully translated

  • Project fully reviewed

  • Exported translation updated – final translation of a string is updated

  • Source string added

  • Source string updated

  • Source string deleted

  • Suggested translation added – a string in the project is translated

  • Suggested translation updated – a translation for a string in the project is updated

  • Suggested translation deleted – one of the translations is deleted

  • Suggested translation approved – a translation for a string is approved

  • Suggested translation disapproved – approval for a previously added translation is removed

  • Task added

  • Task status changed

  • Task deleted

Webhook Payload Examples

  • File fully translated
{
  "events": [
    {
      "event": "file.translated",
      "project": "impact",
      "project_id": "778899",
      "language": "uk",
      "file_id": "1",
      "file": "example.txt"
    }
  ]
}
  • File fully reviewed
{
  "events": [
    {
      "event": "file.approved",
      "project": "impact",
      "project_id": "778899",
      "language": "uk",
      "file_id": "1",
      "file": "example.txt"
    }
  ]
}
  • File added
{
  "events": [
    {
      "event": "file.added",
      "project": "impact",
      "project_id": "778899",
      "file_id": "1",
      "file": "example.txt",
      "user_id": "1",
      "user": "john_doe",
      "revision": "1"
    }
  ]
}
  • File updated
{
  "events": [
    {
      "event": "file.updated",
      "project": "impact",
      "project_id": "778899",
      "file_id": "1",
      "file": "example.txt",
      "user_id": "1",
      "user": "john_doe",
      "revision": "1"
    }
  ]
}
  • File reverted
{
    "events": [
        {
            "event": "file.reverted",
            "project": "impact",
            "project_id": "778899",
            "file_id": "1",
            "file": "example.txt",
            "user_id": "1",
            "user": "john_doe",
            "revision": "1"
        }
    ]
}
  • File deleted
{
    "events": [
        {
            "event": "file.deleted",
            "project": "impact",
            "project_id": "778899",
            "file_id": "1",
            "file": "example.txt",
            "user_id": "1",
            "user": "john_doe"
        }
    ]
}
  • Project fully translated
{
    "events": [
        {
            "event": "project.translated",
            "project": "impact",
            "project_id": "778899",
            "language": "uk"
        }
    ]
}
  • Project fully reviewed
{
    "events": [
        {
            "event": "project.approved",
            "project": "impact",
            "project_id": "778899",
            "language": "uk"
        }
    ]
}
  • Exported translation updated
{
    "events": [
        {
            "event": "translation.updated",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "source_string_id": "1",
            "old_translation_id": "1",
            "new_translation_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Source string added
{
    "events": [
        {
            "event": "string.added",
            "project": "impact",
            "project_id": "778899",
            "string_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Source string updated
{
    "events": [
        {
            "event": "string.updated",
            "project": "impact",
            "project_id": "778899",
            "string_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Source string deleted
{
    "events": [
        {
            "event": "string.deleted",
            "project": "impact",
            "project_id": "778899",
            "string_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Suggested translation added
{
    "events": [
        {
            "event": "suggestion.added",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "source_string_id": "1",
            "translation_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Suggested translation updated
{
    "events": [
        {
            "event": "suggestion.updated",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "source_string_id": "1",
            "translation_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Suggested translation deleted
{
    "events": [
        {
            "event": "suggestion.deleted",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "source_string_id": "1",
            "translation_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Suggested translation approved
{
    "events": [
        {
            "event": "suggestion.approved",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "source_string_id": "1",
            "translation_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Suggested translation disapproved
{
    "events": [
        {
            "event": "suggestion.disapproved",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "source_string_id": "1",
            "translation_id": "1",
            "user": "john_doe",
            "user_id": "1",
            "file_id": "1",
            "file": "example.txt"
        }
    ]
}
  • Task added
{
    "events": [
        {
            "event": "task.added",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "task_id": "",
            "user": "john_doe",
            "user_id": "1"
        }
    ]
}
  • Task status changed
{
    "events": [
        {
            "event": "task.statusChanged",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "task_id": "",
            "old_status": "",
            "new_status": "",
            "user": "john_doe",
            "user_id": "1"
        }
    ]
}
  • Task deleted
{
    "events": [
        {
            "event": "task.deleted",
            "project": "impact",
            "project_id": "778899",
            "language": "uk",
            "task_id": "",
            "user": "john_doe",
            "user_id": "1"
        }
    ]
}

Adding Webhooks

To configure webhooks in Crowdin, open your project and go to Integrations > Webhooks. Click Add Webhook to start configuring your new webhook.

You will need to provide the following information to register a webhook:

  • The webhook name (for example, “App Project Translated”).
  • The URL where the callback should be sent.
  • The request method that indicates the desired action to be performed for a given resource (use either GET or POST).
  • The content type for the POST request method (multipart/form-data, application/json, or application/x-www-form-urlencoded).
  • For the application/json content type, you can select Batch webhooks to merge multiple events into a single request.
  • The events to post to the URL. You can select either one event or a specific set of events.

When adding a webhook, click Test to see how your application will react to that call.

Add Webhook

Depending on your approach to webhooks management, you might need to add dedicated Crowdin IP addresses to your firewall to allow Crowdin to open the pre-configured webhook URLs.

Read more about IP Addresses.

Edit or Delete Webhooks

You can access the list of all existing webhooks within a specific project. You will be able to edit or delete webhooks right from the list of webhooks displayed.

Manage Webhooks

Calls History

In the Calls History section you can see the list of calls of all webhooks that were added in the project. Use the filter to view all or only unsuccessful webhook notifications.

calls history

Seeking Assistance

Need help working with Webhooks or have any questions? Contact Support Team.

Was this article helpful?