> Calendly developer docs. For page Markdown, append .md to any URL.
> Index: https://developer.calendly.com/llms.txt
> API catalog: https://developer.calendly.com/.well-known/api-catalog
> OpenAPI: https://developer.calendly.com/openapi/calendly-api.yaml
> OAuth authorization server: https://calendly.com/.well-known/oauth-authorization-server
> MCP protected resource: https://mcp.calendly.com/.well-known/oauth-protected-resource
> Scheduling MCP endpoint: https://mcp.calendly.com
> Docs search MCP: https://developer.calendly.com/_mcp/server

# Create Share

POST https://api.calendly.com/shares
Content-Type: application/json

Endpoint for our [Customize Once and Share](https://calendly.com/help/how-to-create-a-single-use-link) feature. This allows you to customize events for a specific invitee without needing to make an entirely new event type.
***This feature is only available for one-on-one event types.***
**Note: Any parameter which is not provided in the request body will be copied from the target event type.**

> `shares:write`

Reference: https://developer.calendly.com/api-docs/calendly-api/shares/create-share

## Authentication

- `Authorization` header (bearer token, required) — OAuth 2.0
- `Authorization` header (bearer token, required) — Personal Access Token

## Request

### Body (application/json)

This endpoint expects an object.

- `event_type` (string, required)
- `name` (string, optional)
- `duration` (integer, optional) — Must be one of the provided duration options. If duration options aren't provided then duration must be one of the duration options inherited from the event type.
- `duration_options` (list of integer, optional) — A maximum of 4 unique options is allowed. Each option must be >= 1 and \<= 720.
- `period_type` (enum, optional)
  - Allowed values: `available_moving`, `moving`, `fixed`, `unlimited`
- `start_date` (string, optional) — is required when `period_type` is 'fixed' Format: `YYYY-MM-DD`
- `end_date` (string, optional) — is required when `period_type` is 'fixed' Format: `YYYY-MM-DD`
- `max_booking_time` (integer, optional) — is required when `period_type` is 'moving' or 'available_moving'
- `hide_location` (boolean, optional) — determines if a location is hidden until invitee books a spot, only respected when there is a single custom location configured
- `location_configurations` (list of SharesPostRequestBodyContentApplicationJsonSchemaLocationConfigurationsItems, optional)
- `availability_rule` (SharesPostRequestBodyContentApplicationJsonSchemaAvailabilityRule, optional)

## Response

### 201

Created

- `resource` (Share, required)

## Errors

### 400 Bad Request Error

Request is not valid

- `title` (enum, required)
  - Allowed values: `Resource Not Found`
- `message` (enum, required)
  - Allowed values: `The server could not find the requested resource.`
- `details` (list of ErrorResponseDetailsItem, optional)

### 401 Unauthorized Error

Cannot authenticate caller

- `title` (enum, required)
  - Allowed values: `Resource Not Found`
- `message` (enum, required)
  - Allowed values: `The server could not find the requested resource.`
- `details` (list of ErrorResponseDetailsItem, optional)

### 403 Forbidden Error

Permission denied or insufficient scope

- `Create-shareRequestForbiddenError`

### 404 Not Found Error

Requested resource not found

- `title` (enum, required)
  - Allowed values: `Resource Not Found`
- `message` (enum, required)
  - Allowed values: `The server could not find the requested resource.`
- `details` (list of ErrorResponseDetailsItem, optional)

### 500 Internal Server Error

Internal Server Error

- `any`

## Types

### SharesPostRequestBodyContentApplicationJsonSchemaLocationConfigurationsItems

- `location` (string, optional) — is only supported when `kind` is 'physical', 'custom' or 'ask_invitee'
- `additional_info` (string, optional) — is only supported when `kind` is 'physical' or 'inbound_call'
- `phone_number` (string, optional) — is required when `kind` is 'inbound_call'
- `position` (integer, optional)
- `kind` (enum, optional)
  - Allowed values: `physical`, `ask_invitee`, `custom`, `outbound_call`, `inbound_call`, `google_conference`, `gotomeeting_conference`, `microsoft_teams_conference`, `webex_conference`, `zoom_conference`

### SharesPostRequestBodyContentApplicationJsonSchemaAvailabilityRule

- `rules` (list of SharesPostRequestBodyContentApplicationJsonSchemaAvailabilityRuleRulesItems, optional) — are required when an availability rule is provided
- `timezone` (string, optional) — is required when an availability rule is provided

### Share

- `scheduling_links` (list of ShareSchedulingLinksItems, required)
- `share_override` (ShareShareOverride, required)

### ErrorResponseDetailsItem

- `message` (string, required)
- `parameter` (string, optional)
- `code` (string, optional)

### CreateShareRequestForbiddenError0

Error Object

- `title` (enum, required)
  - Allowed values: `Permission Denied`
- `message` (enum, required)
  - Allowed values: `You do not have permission to access this resource.`, `You do not have permission`
- `details` (list of ErrorResponseDetailsItem, optional)

### InsufficientScopeError

Caller does not have required oauth scopes

- `title` (enum, required)
  - Allowed values: `Insufficient scope`
- `message` (enum, required)
  - Allowed values: `This operation requires the scopes listed in the 'required_scopes' array.`
- `required_scopes` (list of string, required)

### SharesPostRequestBodyContentApplicationJsonSchemaAvailabilityRuleRulesItems

- `type` (enum, optional)
  - Allowed values: `wday`, `date`
- `wday` (enum, optional) — is required when `type` is 'wday'
  - Allowed values: `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`
- `date` (string, optional) — is required when `type` is 'date' Format: `YYYY-MM-DD`
- `intervals` (list of SharesPostRequestBodyContentApplicationJsonSchemaAvailabilityRuleRulesItemsIntervalsItems, optional)

### ShareSchedulingLinksItems

- `booking_url` (string, required) — Scheduling link url
- `owner` (string, optional) — A link to the resource that owns this Scheduling Link (currently, this is always an Event Type)
- `owner_type` (enum, optional) — Resource type (currently, this is always EventType)
  - Allowed values: `EventType`

### ShareShareOverride

- `name` (string, optional)
- `duration` (integer, optional)
- `duration_options` (list of integer, optional, nullable)
- `period_type` (enum, optional)
  - Allowed values: `available_moving`, `moving`, `fixed`, `unlimited`
- `start_date` (string, optional, nullable) — Format: `YYYY-MM-DD`
- `end_date` (string, optional, nullable) — Format: `YYYY-MM-DD`
- `max_booking_time` (integer, optional, nullable)
- `hide_location` (boolean, optional, nullable)
- `location_configurations` (list of ShareShareOverrideLocationConfigurationsItems, optional)
- `availability_rule` (ShareShareOverrideAvailabilityRule, optional)

### SharesPostRequestBodyContentApplicationJsonSchemaAvailabilityRuleRulesItemsIntervalsItems

- `from` (string, optional) — Format: `"hh:mm"`
- `to` (string, optional) — Format: `"hh:mm"`

### ShareShareOverrideLocationConfigurationsItems

- `location` (string, optional, nullable)
- `additional_info` (string, optional, nullable)
- `phone_number` (string, optional, nullable)
- `position` (integer, optional)
- `kind` (enum, optional)
  - Allowed values: `physical`, `ask_invitee`, `custom`, `outbound_call`, `inbound_call`, `google_conference`, `gotomeeting_conference`, `microsoft_teams_conference`, `zoom_conference`

### ShareShareOverrideAvailabilityRule

- `rules` (list of ShareShareOverrideAvailabilityRuleRulesItems, required)
- `timezone` (string, required)

### ShareShareOverrideAvailabilityRuleRulesItems

- `type` (enum, required)
  - Allowed values: `wday`, `date`
- `wday` (enum, optional)
  - Allowed values: `sunday`, `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`
- `date` (string, optional) — Format: `YYYY-MM-DD`
- `intervals` (list of ShareShareOverrideAvailabilityRuleRulesItemsIntervalsItems, optional)

### ShareShareOverrideAvailabilityRuleRulesItemsIntervalsItems

- `from` (string, optional) — Format: `"hh:mm"`
- `to` (string, optional) — Format: `"hh:mm"`

## Examples

**Request**

```json
{
  "event_type": "https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA",
  "name": "15 Minute Meeting",
  "duration": 15,
  "duration_options": [
    1,
    13,
    15,
    720
  ],
  "period_type": "available_moving",
  "start_date": "2019-01-02",
  "end_date": "2019-01-03",
  "max_booking_time": 300,
  "hide_location": true,
  "location_configurations": [
    {
      "location": "123 Abc St.",
      "additional_info": "Example additional information",
      "position": 0,
      "kind": "physical"
    }
  ],
  "availability_rule": {
    "rules": [
      {
        "type": "wday",
        "wday": "sunday",
        "intervals": [
          {
            "from": "07:00",
            "to": "11:00"
          }
        ]
      }
    ],
    "timezone": "America/New_York"
  }
}
```

**Response**

```json
{
  "resource": {
    "scheduling_links": [
      {
        "booking_url": "https://calendly.com/d/abcd-brv8/15-minute-meeting",
        "owner": "https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA",
        "owner_type": "EventType"
      }
    ],
    "share_override": {
      "name": "15 Minute Meeting",
      "duration": 15,
      "duration_options": [
        1,
        13,
        15,
        720
      ],
      "period_type": "fixed",
      "start_date": "2019-01-02",
      "end_date": "2019-01-03",
      "max_booking_time": 300,
      "hide_location": true,
      "location_configurations": [
        {
          "location": "123 Abc St.",
          "additional_info": "Example additional info",
          "phone_number": "+1 888-888-8888",
          "position": 0,
          "kind": "physical"
        }
      ],
      "availability_rule": {
        "rules": [
          {
            "type": "wday",
            "wday": "friday",
            "intervals": [
              {
                "from": "07:00",
                "to": "11:00"
              }
            ]
          }
        ],
        "timezone": "America/New_York"
      }
    }
  }
}
```

**SDK Code**

```python Create share request
import requests

url = "https://api.calendly.com/shares"

payload = {
    "event_type": "https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA",
    "name": "15 Minute Meeting",
    "duration": 15,
    "duration_options": [1, 13, 15, 720],
    "period_type": "available_moving",
    "start_date": "2019-01-02",
    "end_date": "2019-01-03",
    "max_booking_time": 300,
    "hide_location": True,
    "location_configurations": [
        {
            "location": "123 Abc St.",
            "additional_info": "Example additional information",
            "position": 0,
            "kind": "physical"
        }
    ],
    "availability_rule": {
        "rules": [
            {
                "type": "wday",
                "wday": "sunday",
                "intervals": [
                    {
                        "from": "07:00",
                        "to": "11:00"
                    }
                ]
            }
        ],
        "timezone": "America/New_York"
    }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Create share request
const url = 'https://api.calendly.com/shares';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"event_type":"https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA","name":"15 Minute Meeting","duration":15,"duration_options":[1,13,15,720],"period_type":"available_moving","start_date":"2019-01-02","end_date":"2019-01-03","max_booking_time":300,"hide_location":true,"location_configurations":[{"location":"123 Abc St.","additional_info":"Example additional information","position":0,"kind":"physical"}],"availability_rule":{"rules":[{"type":"wday","wday":"sunday","intervals":[{"from":"07:00","to":"11:00"}]}],"timezone":"America/New_York"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Create share request
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.calendly.com/shares"

	payload := strings.NewReader("{\n  \"event_type\": \"https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA\",\n  \"name\": \"15 Minute Meeting\",\n  \"duration\": 15,\n  \"duration_options\": [\n    1,\n    13,\n    15,\n    720\n  ],\n  \"period_type\": \"available_moving\",\n  \"start_date\": \"2019-01-02\",\n  \"end_date\": \"2019-01-03\",\n  \"max_booking_time\": 300,\n  \"hide_location\": true,\n  \"location_configurations\": [\n    {\n      \"location\": \"123 Abc St.\",\n      \"additional_info\": \"Example additional information\",\n      \"position\": 0,\n      \"kind\": \"physical\"\n    }\n  ],\n  \"availability_rule\": {\n    \"rules\": [\n      {\n        \"type\": \"wday\",\n        \"wday\": \"sunday\",\n        \"intervals\": [\n          {\n            \"from\": \"07:00\",\n            \"to\": \"11:00\"\n          }\n        ]\n      }\n    ],\n    \"timezone\": \"America/New_York\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Create share request
require 'uri'
require 'net/http'

url = URI("https://api.calendly.com/shares")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"event_type\": \"https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA\",\n  \"name\": \"15 Minute Meeting\",\n  \"duration\": 15,\n  \"duration_options\": [\n    1,\n    13,\n    15,\n    720\n  ],\n  \"period_type\": \"available_moving\",\n  \"start_date\": \"2019-01-02\",\n  \"end_date\": \"2019-01-03\",\n  \"max_booking_time\": 300,\n  \"hide_location\": true,\n  \"location_configurations\": [\n    {\n      \"location\": \"123 Abc St.\",\n      \"additional_info\": \"Example additional information\",\n      \"position\": 0,\n      \"kind\": \"physical\"\n    }\n  ],\n  \"availability_rule\": {\n    \"rules\": [\n      {\n        \"type\": \"wday\",\n        \"wday\": \"sunday\",\n        \"intervals\": [\n          {\n            \"from\": \"07:00\",\n            \"to\": \"11:00\"\n          }\n        ]\n      }\n    ],\n    \"timezone\": \"America/New_York\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Create share request
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.calendly.com/shares")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"event_type\": \"https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA\",\n  \"name\": \"15 Minute Meeting\",\n  \"duration\": 15,\n  \"duration_options\": [\n    1,\n    13,\n    15,\n    720\n  ],\n  \"period_type\": \"available_moving\",\n  \"start_date\": \"2019-01-02\",\n  \"end_date\": \"2019-01-03\",\n  \"max_booking_time\": 300,\n  \"hide_location\": true,\n  \"location_configurations\": [\n    {\n      \"location\": \"123 Abc St.\",\n      \"additional_info\": \"Example additional information\",\n      \"position\": 0,\n      \"kind\": \"physical\"\n    }\n  ],\n  \"availability_rule\": {\n    \"rules\": [\n      {\n        \"type\": \"wday\",\n        \"wday\": \"sunday\",\n        \"intervals\": [\n          {\n            \"from\": \"07:00\",\n            \"to\": \"11:00\"\n          }\n        ]\n      }\n    ],\n    \"timezone\": \"America/New_York\"\n  }\n}")
  .asString();
```

```php Create share request
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.calendly.com/shares', [
  'body' => '{
  "event_type": "https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA",
  "name": "15 Minute Meeting",
  "duration": 15,
  "duration_options": [
    1,
    13,
    15,
    720
  ],
  "period_type": "available_moving",
  "start_date": "2019-01-02",
  "end_date": "2019-01-03",
  "max_booking_time": 300,
  "hide_location": true,
  "location_configurations": [
    {
      "location": "123 Abc St.",
      "additional_info": "Example additional information",
      "position": 0,
      "kind": "physical"
    }
  ],
  "availability_rule": {
    "rules": [
      {
        "type": "wday",
        "wday": "sunday",
        "intervals": [
          {
            "from": "07:00",
            "to": "11:00"
          }
        ]
      }
    ],
    "timezone": "America/New_York"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Create share request
using RestSharp;

var client = new RestClient("https://api.calendly.com/shares");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"event_type\": \"https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA\",\n  \"name\": \"15 Minute Meeting\",\n  \"duration\": 15,\n  \"duration_options\": [\n    1,\n    13,\n    15,\n    720\n  ],\n  \"period_type\": \"available_moving\",\n  \"start_date\": \"2019-01-02\",\n  \"end_date\": \"2019-01-03\",\n  \"max_booking_time\": 300,\n  \"hide_location\": true,\n  \"location_configurations\": [\n    {\n      \"location\": \"123 Abc St.\",\n      \"additional_info\": \"Example additional information\",\n      \"position\": 0,\n      \"kind\": \"physical\"\n    }\n  ],\n  \"availability_rule\": {\n    \"rules\": [\n      {\n        \"type\": \"wday\",\n        \"wday\": \"sunday\",\n        \"intervals\": [\n          {\n            \"from\": \"07:00\",\n            \"to\": \"11:00\"\n          }\n        ]\n      }\n    ],\n    \"timezone\": \"America/New_York\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Create share request
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "event_type": "https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA",
  "name": "15 Minute Meeting",
  "duration": 15,
  "duration_options": [1, 13, 15, 720],
  "period_type": "available_moving",
  "start_date": "2019-01-02",
  "end_date": "2019-01-03",
  "max_booking_time": 300,
  "hide_location": true,
  "location_configurations": [
    [
      "location": "123 Abc St.",
      "additional_info": "Example additional information",
      "position": 0,
      "kind": "physical"
    ]
  ],
  "availability_rule": [
    "rules": [
      [
        "type": "wday",
        "wday": "sunday",
        "intervals": [
          [
            "from": "07:00",
            "to": "11:00"
          ]
        ]
      ]
    ],
    "timezone": "America/New_York"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.calendly.com/shares")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```