HTTP POST
If you have a 3rd party application, such as your own custom CRM, you may wish to receive notifications there. Deploy can generate notifications by way of HTTP, so you can set up an endpoint to display the notifications in your application.
To set up a new notification, click the Integrations link on the left hand side of your project, then the New Integration button to get started.
![]()
Start by selecting HTTP in the service picker, then enter the URL of your endpoint, and a username and API key or password (depending on the authentication method you have set up on your endpoint), if you want to, or just select None.

Also, you can use the default payload, or you can click on Custom and configure the one that you want to be added to the custom one.
Choose when to trigger the integration, and choose any servers you wish to trigger it for, or keep the Trigger integration when any server or group deployed? option checked if you want to trigger for all servers.
![]()
Finally, click Create Integration to finish.
Notification format and payload
Deploy supports sending notifications in form-encoded format when a deployment is made. The payload will be delivered to the specified HTTP/HTTPS URL along with a base64-encoded signature field in the POST body from Deploy so you can verify where the message originated from.
Important: This integration type sends data as application/x-www-form-urlencoded with two fields:
- payload: A JSON string containing the deployment data
- signature: A base64-encoded signature for verification
Note: HTTP POST is a legacy integration type. For new integrations, we recommend using the HTTP integration (also called HTTP Request), which sends pure JSON payloads with the signature in an HTTP header. See the "HTTP Request Integration" documentation for details.
Accessing the signature field
When DeployHQ sends the webhook, you'll receive form-encoded data with two fields. Here's how to access them:
PHP:
php
$payload = json_decode($_POST['payload'], true);
$signature = $_POST['signature'];
Node.js/Express:
javascript
const payload = JSON.parse(req.body.payload);
const signature = req.body.signature;
Python/Flask:
python
payload = json.loads(request.form['payload'])
signature = request.form['signature']
Our public key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXJcP2N6NtcN26Q8nVaidXOA0w
RxWK2HQTblIaQdGRDjqTvhrSlFuV5N4jz7w/w8uskP20G7ZQ+CkHwIXrWk76KZJn
pdoOHPO6AqRmEFgV5Q6Y1CR77mvnT9O21hTnfzfyyiAdQC2oO8M9/jeLRPTAqmkG
xdQa8iepUz4BwrrHmwIDAQAB
-----END PUBLIC KEY-----
Example payload
{
"payload" : {
"identifier" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
"servers" : [
{
"id" : 494506,
"identifier" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
"name" : "test",
"protocol_type" : "ftp",
"server_path" : "htdocs",
"auto_deploy_url" : "https://adamw.deployhq.com/deploy/codebase-project/to/test/xxxxxxxxxxx",
"last_revision" : "abcdef123456",
"preferred_branch" : "master",
"branch" : "",
"notify_email" : "",
"server_group_identifier" : ,
"hostname" : "ftp.test.com",
"username" : "test",
"port" : 21,
"passive" : true,
"force_hidden_files" : false
}
],
"project" : {
"name" : "Codebase Project",
"permalink" : "codebase-project",
"public_key" : "xxxxxxxx",
"repository" : {
"scm_type" : "git",
"url" : "git@codebasehq.com:adamw/first-project/repository.git",
"port" : nil,
"username" : "adamw",
"branch" : "master",
"cached" : true,
"hosting_service" : {
"name" : "Codebase",
"url" : "http://www.codebasehq.com",
"tree_url" : "https://adamw.codebasehq.com/projects/first-project/repositories/repository/tree/master",
"commits_url" : "https://adamw.codebasehq.com/projects/first-project/repositories/repository/commits/master"
}
}
},
"deployer" : "Adam West",
"start_revision" : {
"ref" : "abcdef123456",
"author" : "Adam West",
"email" : "adamw@atech.media",
"timestamp" : "2017-06-08T16:33:12.000+01:00",
"message" : "test",
"short_message" : "test",
"tags" : []
},
"end_revision" : {
"ref" : "123456abcdef",
"author" : "Adam West",
"email" : "adamw@atechmedia.com",
"timestamp" : "2018-01-02T15:10:56.000+00:00",
"message" : "test",
"short_message" : "test",
"tags" : []
},
"status" : "completed",
"timestamps" : {
"queued_at" : "2018-01-10T15:58:22.000Z",
"started_at" : "2018-01-10T15:58:22.000Z",
"completed_at" : "2018-01-10T15:58:44.000Z",
"duration" : ""
},
"files" : {
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx" : {
"changed" : [
"gulpfile.js",
"test/controllers/.keep",
"test/controllers/articles_controller_test.rb",
"test/controllers/comments_controller_test.rb",
"test/controllers/welcome_controller_test.rb",
"test/fixtures/.keep",
"test/fixtures/articles.yml",
"test/fixtures/comments.yml",
"test/helpers/.keep",
"test/integration/.keep",
"test/mailers/.keep",
"test/models/.keep",
"test/models/article_test.rb",
"test/models/comment_test.rb",
"test/test_helper.rb",
"test1/test.txt",
"test2/test.txt",
"test3",
"testfile1.txt"
],
"removed" : [
"testfile.txt"
]
}
},
"configuration" : {
"copy_config_files" : true,
"notification_addresses" : ""
},
"legacy" : false
}
}