{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"034f9569-adcc-4632-aee0-445e0234c14d","name":"FreeBusy REST API","description":"Preliminary API documentation subject to change.\n\n# API Security\n\nAll requests made to the FreeBusy REST API require an authorization token in the form of an API Key. API Keys are scoped to either teams or individuals:\n\n*   Team API Keys allow you to create webhooks scoped to all team scheduling activity and can be obtained from the [Team Management Page](https://freebusy.io/app/subscriptions) (formerly known as the Subscription Management Page).\n*   Individual API Keys allow you to create webhook scope to an individual's scheduling activity and can be obtained from the [Calendars & Integrations Page](https://freebusy.io/app/integrations) (coming soon)\n    \n\nThe API Key must be supplied with every REST API request in the `Authorization` header using the `Bearer` scheme, like this:\n\n```\nPOST https://api.freebusy.io/v1/webhook\nAuthorization: Bearer [API Key]\n\n```\n\n# Webhook Notifications\n\nYou can create webhooks to be notified about these types of scheduling activity:\n\n*   `event.scheduled`  \n    Triggered when a calendar event is created by FreeBusy as a result of an appointment being scheduled via a booking page (whether manually as a result of Manual Accept or automatically as a result of Auto-Accept policy) or a poll being scheduled (whether manually by the organizer or delegate or automatically because it reached consensus)\n*   `event.rescheduled`  \n    Triggered when the time for a calendar event created by FreeBusy is changed as a result of either the host or a guest using the reschedule link to reschedule via FreeBusy. This notification is not triggered when the calendar event is changed directly in the calendar.\n*   `event.cancelled`  \n    Triggered when the calendar event created by FreeBusy is cancelled and deleted as a result of either the host or a guest using the reschedule link to cancel via FreeBusy. This notification is not triggered when the calendar event is removed directly from the calendar.\n    \n\n# Webhook Security\n\n## Ensuring authenticity of Create Webhook request\n\nTo protect the target URL from abuse and to ensure that a Create Webhook request is submitted by the owner of the webhook target URL, FreeBusy validates the Create Webhook request by posting a validation message to the target URL with an activation code in the `X-Webhook-ActivationCode` header.\n\nTo confirm authenticity of the Create Webhook request, target URL must reflect the `X-Webhook-ActivationCode` header and value back to FreeBusy by including it in the response.\n\n### **Sample validation sequence:**\n\nRequest from FreeBusy to target URL:\n\n```\nPOST https://hooks.freebusy.io/freebusy\nX-Webhook-ActivationCode: abcdefgh\n\n```\n\nResponse from target URL to FreeBusy:\n\n```\n200 OK\nX-Webhook-ActivationCode: abcdefgh\n\n```\n\n### Best practice:\n\nDon't treat the validation response as a one-off operation, rather implement your webhook so it continuously reflects the `X-Webhook-ActivationCode` header value back to FreeBusy for any request that contains it. This is because FreeBusy may use this validation technique if your webhook becomes inactive due to repeated errors why notifications are being POST-ed.\n\nAn easy way to do this is to include the validation handling code at the top of the function that processes incoming webhook notifications like this (pseudocode):\n\n```\nif (request.headers[\"X-Webhook-Activation\"] !== null) {\n  response.headers.add(\"X-Webhook-Activation\", request.headers[\"X-Webhook-Activation\"].value);\n  return Ok();\n}\n\n```\n\n## Ensuring authenticity of posted Webhook Notifications\n\nTo ensure that notifications POST-ed to the target URL originate with FreeBusy, target URL owner can submit a self-generated secret when creating the webhook. FreeBusy will use this secret to compute a SHA-1 [HMAC](https://en.wikipedia.org/wiki/HMAC) for the POST-ed notification and will include the SHA-1 [HMAC](https://en.wikipedia.org/wiki/HMAC) value in the `X-Webhook-Signature` header. Target URL can use its own self-generated secret to perform its own [HMAC](https://en.wikipedia.org/wiki/HMAC) calculation and compare with the FreeBusy value included with the notification.\n\n### Sample Webhook Notification\n\n```\nPOST https://hooks.freebusy.io/freebusy\nX-Webhook-Signature: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9\n{\n    \"webhookId\": \"e4230c8b-f0b2-4625-bacc-573adc21785c\",\n    \"notificationId\": \"161c60cf-b926-417a-94cb-2a8bf6966b4c\",\n    \"notificationType\": \"event.scheduled\",\n    \"notificationTimestamp\": 1647292633,\n    \"payload\": {\n        \"id\": \"efc8ddfd88874fd38cd289053ce560b1\",\n        \"startTime\": \"2022-03-14T21:17:13.6798312Z\",\n        \"durationInMin\": 45,\n        \"subject\": \"This field would contain the name of the event\",\n        \"location\": \"This field would contain the locatin of the event\",\n        \"organizer\": {\n            \"email\": \"organizer@example.com\",\n            \"name\": \"Orgnizer Name\",\n            \"timeZone\": \"America/New_York\"\n        },\n        \"participants\": [\n            {\n                \"email\": \"organizer@example.com\",\n                \"name\": \"Orgnizer Name\",\n                \"timeZone\": \"America/New_York\"\n            },\n            {\n                \"email\": \"participant@example.com\",\n                \"name\": \"Participant Name\",\n                \"timeZone\": \"America/Los_Angeles\"\n            }\n        ],\n        \"link\": \"https://freebusy.io/example/event-template\",\n        \"rescheduleUrl\": \"https://freebusy.io/m/efc8ddfd88874fd38cd289053ce560b1\",\n        \"cancelUrl\": \"https://freebusy.io/m/efc8ddfd88874fd38cd289053ce560b1/cancel\"\n    }\n}\n\n```\n\nContact Support:  \nEmail: [hello@freebusy.io](mailto:hello@freebusy.io)","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"14312939","team":1529319,"collectionId":"034f9569-adcc-4632-aee0-445e0234c14d","publishedId":"UVsHSnYq","public":true,"publicUrl":"https://documenter-api.postman.tech/view/14312939/UVsHSnYq","privateUrl":"https://go.postman.co/documentation/14312939-034f9569-adcc-4632-aee0-445e0234c14d","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2022-03-10T20:25:48.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/d55e036c5a80002d4c86bd13e0a2f8e0f2a945313904fd49438bb92fc3fb568c","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/UVsHSnYq"}