Example subscription
curl --request POST \
--url https://api-sandbox.argyle.com/v2/webhooks \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"events": [
"shifts.partially_synced"
],
"name": "name-for-the-webhook-subscription",
"url": "https://your-webhook-backend.com",
"secret": "optional-secret",
"config": {
"days_synced": 60
}
}
'import requests
url = "https://api-sandbox.argyle.com/v2/webhooks"
payload = {
"events": ["shifts.partially_synced"],
"name": "name-for-the-webhook-subscription",
"url": "https://your-webhook-backend.com",
"secret": "optional-secret",
"config": { "days_synced": 60 }
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
events: ['shifts.partially_synced'],
name: 'name-for-the-webhook-subscription',
url: 'https://your-webhook-backend.com',
secret: 'optional-secret',
config: {days_synced: 60}
})
};
fetch('https://api-sandbox.argyle.com/v2/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.argyle.com/v2/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'events' => [
'shifts.partially_synced'
],
'name' => 'name-for-the-webhook-subscription',
'url' => 'https://your-webhook-backend.com',
'secret' => 'optional-secret',
'config' => [
'days_synced' => 60
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.argyle.com/v2/webhooks"
payload := strings.NewReader("{\n \"events\": [\n \"shifts.partially_synced\"\n ],\n \"name\": \"name-for-the-webhook-subscription\",\n \"url\": \"https://your-webhook-backend.com\",\n \"secret\": \"optional-secret\",\n \"config\": {\n \"days_synced\": 60\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.argyle.com/v2/webhooks")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"events\": [\n \"shifts.partially_synced\"\n ],\n \"name\": \"name-for-the-webhook-subscription\",\n \"url\": \"https://your-webhook-backend.com\",\n \"secret\": \"optional-secret\",\n \"config\": {\n \"days_synced\": 60\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.argyle.com/v2/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"events\": [\n \"shifts.partially_synced\"\n ],\n \"name\": \"name-for-the-webhook-subscription\",\n \"url\": \"https://your-webhook-backend.com\",\n \"secret\": \"optional-secret\",\n \"config\": {\n \"days_synced\": 60\n }\n}"
response = http.request(request)
puts response.read_body{
"event": "shifts.partially_synced",
"name": "name-for-the-webhook-subscription",
"data": {
"account": "0187c66e-e7e5-811c-b006-2232f00f426a",
"user": "018051aa-f7a9-a0db-2f38-6cfa325e9d69",
"available_from": "2023-01-02T0:000:00Z",
"available_to": "2023-03-03T0:000:00Z",
"available_count": 97,
"days_synced": 60
}
}Shifts
Shifts.partially_synced webhook
The shifts.partially_synced webhook is sent when shifts going back a specified number of days prior (starting from the date when the account was added) have been retrieved. By default, this period is set to 30 days.
You can subscribe to this webhook multiple times with different numbers of specified days.
- This webhook is sent only during initial data retrieval (not ongoing refresh).
- If the number of shifts for an account is small and captured completely with only one data pull, this webhook will not be sent. Instead the
shifts.fully_syncedwebhook will be sent.
POST
/
v2
/
webhooks
Example subscription
curl --request POST \
--url https://api-sandbox.argyle.com/v2/webhooks \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"events": [
"shifts.partially_synced"
],
"name": "name-for-the-webhook-subscription",
"url": "https://your-webhook-backend.com",
"secret": "optional-secret",
"config": {
"days_synced": 60
}
}
'import requests
url = "https://api-sandbox.argyle.com/v2/webhooks"
payload = {
"events": ["shifts.partially_synced"],
"name": "name-for-the-webhook-subscription",
"url": "https://your-webhook-backend.com",
"secret": "optional-secret",
"config": { "days_synced": 60 }
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
events: ['shifts.partially_synced'],
name: 'name-for-the-webhook-subscription',
url: 'https://your-webhook-backend.com',
secret: 'optional-secret',
config: {days_synced: 60}
})
};
fetch('https://api-sandbox.argyle.com/v2/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.argyle.com/v2/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'events' => [
'shifts.partially_synced'
],
'name' => 'name-for-the-webhook-subscription',
'url' => 'https://your-webhook-backend.com',
'secret' => 'optional-secret',
'config' => [
'days_synced' => 60
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.argyle.com/v2/webhooks"
payload := strings.NewReader("{\n \"events\": [\n \"shifts.partially_synced\"\n ],\n \"name\": \"name-for-the-webhook-subscription\",\n \"url\": \"https://your-webhook-backend.com\",\n \"secret\": \"optional-secret\",\n \"config\": {\n \"days_synced\": 60\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.argyle.com/v2/webhooks")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"events\": [\n \"shifts.partially_synced\"\n ],\n \"name\": \"name-for-the-webhook-subscription\",\n \"url\": \"https://your-webhook-backend.com\",\n \"secret\": \"optional-secret\",\n \"config\": {\n \"days_synced\": 60\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.argyle.com/v2/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"events\": [\n \"shifts.partially_synced\"\n ],\n \"name\": \"name-for-the-webhook-subscription\",\n \"url\": \"https://your-webhook-backend.com\",\n \"secret\": \"optional-secret\",\n \"config\": {\n \"days_synced\": 60\n }\n}"
response = http.request(request)
puts response.read_body{
"event": "shifts.partially_synced",
"name": "name-for-the-webhook-subscription",
"data": {
"account": "0187c66e-e7e5-811c-b006-2232f00f426a",
"user": "018051aa-f7a9-a0db-2f38-6cfa325e9d69",
"available_from": "2023-01-02T0:000:00Z",
"available_to": "2023-03-03T0:000:00Z",
"available_count": 97,
"days_synced": 60
}
}Authorizations
Username = api_key_id, Password = api_key_secret
Body
application/json
shifts.partially_synced
Your name for the webhook subscription.
Where you want to receive webhook delivery. This can be either a backend URL that you manage, or a URL provided by a webhook management service. Argyle handles URL encoding for webhook URLs. Send the URL in its normal, unencoded form.
Optional secret used to verify webhooks.
days_synced: specifies how many days of synced shifts (starting from the date of the most recent shift) are needed to trigger the webhook.
⌘I