# Webhooks ## Webhook Path: `/webhooks/:uuid`
Allowed methods: `GET`, `PUT`, `DELETE`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "uuid": "d2181b32-8b03-4daf-8cc0-d9168b2f6fac", "description": "an example webhook", "consumer": { "name": "Foo" }, "provider": { "name": "Bar" }, "enabled": true, "request": { "method": "POST", "url": "https://example.org/webhook", "headers": { "Content-Type": "application/json" }, "body": { "pactUrl": "${pactbroker.pactUrl}" } }, "events": [ { "name": "contract_content_changed" } ], "createdAt": "2021-09-01T00:07:21+00:00", "_links": { "self": { "title": "an example webhook", "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac" }, "pb:execute": { "title": "Test the execution of the webhook with the latest matching pact or verification by sending a POST request to this URL", "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac/execute" }, "pb:consumer": { "title": "Consumer", "name": "Foo", "href": "https://pact-broker/pacticipants/Foo" }, "pb:provider": { "title": "Provider", "name": "Bar", "href": "https://pact-broker/pacticipants/Bar" }, "pb:pact-webhooks": { "title": "All webhooks for consumer Foo and provider Bar", "href": "https://pact-broker/webhooks/provider/Bar/consumer/Foo" }, "pb:webhooks": { "title": "All webhooks", "href": "https://pact-broker/webhooks" } } } ``` ### PUT #### Request Headers: `{"Content-Type":"application/json","Accept":"application/hal+json"}`
Body: ``` { "description": "an example webhook", "events": [ { "name": "contract_content_changed" } ], "request": { "method": "POST", "url": "https://example.org/example", "username": "username", "password": "password", "headers": { "Accept": "application/json" }, "body": { "pactUrl": "${pactbroker.pactUrl}" } } } ``` #### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "uuid": "d2181b32-8b03-4daf-8cc0-d9168b2f6fac", "description": "an example webhook", "enabled": true, "request": { "method": "POST", "url": "https://example.org/example", "headers": { "Accept": "application/json" }, "body": { "pactUrl": "${pactbroker.pactUrl}" }, "username": "username", "password": "**********" }, "events": [ { "name": "contract_content_changed" } ], "createdAt": "2021-09-01T00:07:21+00:00", "_links": { "self": { "title": "an example webhook", "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac" }, "pb:execute": { "title": "Test the execution of the webhook with the latest matching pact or verification by sending a POST request to this URL", "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac/execute" }, "pb:webhooks": { "title": "All webhooks", "href": "https://pact-broker/webhooks" } } } ``` ## Webhooks Path: `/webhooks`
Allowed methods: `GET`, `POST`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "_links": { "self": { "title": "Webhooks", "href": "http://example.org/webhooks" }, "pb:create": { "title": "POST to create a webhook", "href": "http://example.org/webhooks" }, "pb:webhooks": [ { "title": "A webhook for the pact between Foo and Bar", "name": "an example webhook", "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac" } ], "curies": [ { "name": "pb", "href": "https://pact-broker/doc/webhooks-{rel}", "templated": true } ] } } ``` ### POST #### Request Headers: `{"Content-Type":"application/json","Accept":"application/hal+json"}`
Body: ``` { "description": "an example webhook", "events": [ { "name": "contract_content_changed" } ], "request": { "method": "POST", "url": "https://example.org/example", "username": "username", "password": "password", "headers": { "Accept": "application/json" }, "body": { "pactUrl": "${pactbroker.pactUrl}" } } } ``` #### Response Status: `201`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8","Location":"https://pact-broker/webhooks/dCGCl-Ba3PqEFJ_iE9mJkQ"}`
Body: ``` { "uuid": "dCGCl-Ba3PqEFJ_iE9mJkQ", "description": "an example webhook", "enabled": true, "request": { "method": "POST", "url": "https://example.org/example", "headers": { "Accept": "application/json" }, "body": { "pactUrl": "${pactbroker.pactUrl}" }, "username": "username", "password": "**********" }, "events": [ { "name": "contract_content_changed" } ], "createdAt": "2021-09-01T00:07:21+00:00", "_links": { "self": { "title": "an example webhook", "href": "https://pact-broker/webhooks/dCGCl-Ba3PqEFJ_iE9mJkQ" }, "pb:execute": { "title": "Test the execution of the webhook with the latest matching pact or verification by sending a POST request to this URL", "href": "https://pact-broker/webhooks/dCGCl-Ba3PqEFJ_iE9mJkQ/execute" }, "pb:webhooks": { "title": "All webhooks", "href": "https://pact-broker/webhooks" } } } ``` ## Webhooks for consumer Path: `/webhooks/consumer/:consumer_name`
Allowed methods: `POST`, `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "_links": { "self": { "title": "Webhooks", "href": "http://example.org/webhooks/consumer/Foo" }, "pb:create": { "title": "POST to create a webhook", "href": "http://example.org/webhooks/consumer/Foo" }, "pb:webhooks": [ ], "curies": [ { "name": "pb", "href": "https://pact-broker/doc/webhooks-{rel}", "templated": true } ] } } ``` ## Webhooks for a provider Path: `/webhooks/provider/:provider_name`
Allowed methods: `POST`, `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "_links": { "self": { "title": "Webhooks", "href": "http://example.org/webhooks/provider/Bar" }, "pb:create": { "title": "POST to create a webhook", "href": "http://example.org/webhooks/provider/Bar" }, "pb:webhooks": [ ], "curies": [ { "name": "pb", "href": "https://pact-broker/doc/webhooks-{rel}", "templated": true } ] } } ``` ## Webhooks for consumer and provider Path: `/webhooks/provider/:provider_name/consumer/:consumer_name`
Allowed methods: `POST`, `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "_links": { "self": { "title": "Webhooks", "href": "http://example.org/webhooks/provider/Bar/consumer/Foo" }, "pb:create": { "title": "POST to create a webhook", "href": "http://example.org/webhooks/provider/Bar/consumer/Foo" }, "pb:webhooks": [ { "title": "A webhook for the pact between Foo and Bar", "name": "an example webhook", "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac" } ], "curies": [ { "name": "pb", "href": "https://pact-broker/doc/webhooks-{rel}", "templated": true } ] } } ``` ## Pact webhooks Path: `/pacts/provider/:provider_name/consumer/:consumer_name/webhooks`
Allowed methods: `POST`, `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "_links": { "self": { "title": "Pact webhooks", "href": "http://example.org/pacts/provider/Bar/consumer/Foo/webhooks" }, "pb:create": { "title": "POST to create a webhook", "href": "http://example.org/pacts/provider/Bar/consumer/Foo/webhooks" }, "pb:webhooks": [ { "title": "A webhook for the pact between Foo and Bar", "name": "an example webhook", "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac" } ], "curies": [ { "name": "pb", "href": "https://pact-broker/doc/webhooks-{rel}", "templated": true } ] } } ``` ## Webhooks status Path: `/pacts/provider/:provider_name/consumer/:consumer_name/webhooks/status`
Allowed methods: `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "summary": { "successful": 0, "failed": 0, "notRun": 1 }, "_embedded": { "triggeredWebhooks": [ { "name": "POST example.org", "status": "not_run", "attemptsMade": 1, "attemptsRemaining": 6, "triggerType": "resource_creation", "eventName": "contract_content_changed", "triggeredAt": "2021-09-01T00:07:21+00:00", "_links": { "pb:logs": { "href": "https://pact-broker/triggered-webhooks/6cd5cc48-db3c-4a4c-a36d-e9bedeb9d91e/logs", "title": "Webhook execution logs", "name": "POST example.org" }, "pb:webhook": { "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac", "title": "Webhook", "name": "POST example.org" } } } ] }, "_links": { "self": { "href": "http://example.org/pacts/provider/Bar/consumer/Foo/webhooks/status", "title": "Webhooks status" }, "pb:error-logs": [ ], "pb:pact-webhooks": { "title": "Webhooks for the pact between Foo and Bar", "href": "https://pact-broker/pacts/provider/Bar/consumer/Foo/webhooks" }, "pb:pact-version": { "href": "https://pact-broker/pacts/provider/Bar/consumer/Foo/version/3e1f00a04", "title": "Pact", "name": "Pact between Foo (3e1f00a04) and Bar" }, "pb:consumer": { "href": "https://pact-broker/pacticipants/Foo", "title": "Consumer", "name": "Foo" }, "pb:provider": { "href": "https://pact-broker/pacticipants/Bar", "title": "Provider", "name": "Bar" } } } ``` ## Executing a saved webhook Path: `/webhooks/:uuid/execute`
Allowed methods: `POST`
### POST #### Request Headers: `{"Content-Type":"application/json","Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "request": { "headers": { "accept": "*/*", "user-agent": "Pact Broker", "content-type": "application/json" }, "body": { "pactUrl": "https://pact-broker/pacts/provider/Bar/consumer/Foo/pact-version/3e193ecb37ad04b43ce974a38352c704b2e0ed6b/metadata/3e193ecb37ad04b43ce974a38352c704b2e0ed6b" }, "url": "/webhook" }, "response": { "status": 200, "headers": { }, "body": "" }, "logs": "[2021-09-01T10:07:21Z] DEBUG: Webhook context {\"base_url\":\"https://pact-broker\",\"event_name\":\"test\"}\n[2021-09-01T10:07:21Z] INFO: HTTP/1.1 POST https://example.org/webhook\n[2021-09-01T10:07:21Z] INFO: accept: */*\n[2021-09-01T10:07:21Z] INFO: user-agent: Pact Broker\n[2021-09-01T10:07:21Z] INFO: content-type: application/json\n[2021-09-01T10:07:21Z] INFO: {\"pactUrl\":\"https://pact-broker/pacts/provider/Bar/consumer/Foo/pact-version/3e193ecb37ad04b43ce974a38352c704b2e0ed6b/metadata/3e193ecb37ad04b43ce974a38352c704b2e0ed6b\"}\n[2021-09-01T10:07:21Z] INFO: HTTP/1.0 200 \n[2021-09-01T10:07:21Z] INFO: \n", "success": true, "_links": { } } ``` ## Executing an unsaved webhook Path: `/webhooks/execute`
Allowed methods: `POST`
### POST #### Request Headers: `{"Content-Type":"application/json","Accept":"application/hal+json"}`
Body: ``` { "description": "an example webhook", "events": [ { "name": "contract_content_changed" } ], "request": { "method": "POST", "url": "https://example.org/example", "username": "username", "password": "password", "headers": { "Accept": "application/json" }, "body": { "pactUrl": "${pactbroker.pactUrl}" } } } ``` #### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "request": { "headers": { "accept": "application/json", "user-agent": "Pact Broker", "authorization": "**********" }, "body": { "pactUrl": "https://pact-broker/pacts/provider/Bar/consumer/Foo/pact-version/3e193ecb37ad04b43ce974a38352c704b2e0ed6b/metadata/3e193ecb37ad04b43ce974a38352c704b2e0ed6b" }, "url": "/example" }, "response": { "status": 200, "headers": { }, "body": "" }, "logs": "[2021-09-01T10:07:21Z] DEBUG: Webhook context {\"base_url\":\"https://pact-broker\",\"event_name\":\"test\"}\n[2021-09-01T10:07:21Z] INFO: HTTP/1.1 POST https://example.org/example\n[2021-09-01T10:07:21Z] INFO: accept: application/json\n[2021-09-01T10:07:21Z] INFO: user-agent: Pact Broker\n[2021-09-01T10:07:21Z] INFO: authorization: **********\n[2021-09-01T10:07:21Z] INFO: {\"pactUrl\":\"https://pact-broker/pacts/provider/Bar/consumer/Foo/pact-version/3e193ecb37ad04b43ce974a38352c704b2e0ed6b/metadata/3e193ecb37ad04b43ce974a38352c704b2e0ed6b\"}\n[2021-09-01T10:07:21Z] INFO: HTTP/1.0 200 \n[2021-09-01T10:07:21Z] INFO: \n", "success": true, "_links": { } } ``` ## Triggered webhooks for pact publication Path: `/pacts/provider/:provider_name/consumer/:consumer_name/version/:consumer_version_number/triggered-webhooks`
Allowed methods: `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "_embedded": { "triggeredWebhooks": [ { "name": "POST example.org", "status": "not_run", "attemptsMade": 1, "attemptsRemaining": 6, "triggerType": "resource_creation", "eventName": "contract_content_changed", "triggeredAt": "2021-09-01T00:07:21+00:00", "_links": { "pb:logs": { "href": "https://pact-broker/triggered-webhooks/6cd5cc48-db3c-4a4c-a36d-e9bedeb9d91e/logs", "title": "Webhook execution logs", "name": "POST example.org" }, "pb:webhook": { "href": "https://pact-broker/webhooks/d2181b32-8b03-4daf-8cc0-d9168b2f6fac", "title": "Webhook", "name": "POST example.org" } } } ] }, "_links": { "self": { "title": "Webhooks triggered by the publication of the pact between Foo (3e1f00a04) and Bar", "href": "http://example.org/pacts/provider/Bar/consumer/Foo/version/3e1f00a04/triggered-webhooks" } } } ``` ## Triggered webhooks for verification publication Path: `/pacts/provider/:provider_name/consumer/:consumer_name/pact-version/:pact_version_sha/verification-results/:verification_number/triggered-webhooks`
Allowed methods: `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"application/hal+json;charset=utf-8"}`
Body: ``` { "_embedded": { "triggeredWebhooks": [ ] }, "_links": { "self": { "title": "Webhooks triggered by the publication of verification result 1", "href": "http://example.org/pacts/provider/Bar/consumer/Foo/pact-version/3e193ecb37ad04b43ce974a38352c704b2e0ed6b/verification-results/1/triggered-webhooks" } } } ``` ## Logs of triggered webhook Path: `/triggered-webhooks/:uuid/logs`
Allowed methods: `GET`
### GET #### Request Headers: `{"Accept":"application/hal+json"}`
#### Response Status: `200`
Headers: `{"Content-Type":"text/plain;charset=utf-8"}`
Body: ``` logs ```