> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.stafflion.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.stafflion.com/_mcp/server.

# Send events

POST https://staging.stafflion.com/api/v1/webhooks/partners
Content-Type: application/json

Send real-time updates about shifts and clinicians to Stafflion. Each request carries one event in `event_name`.

| Event | When to send it |
| --- | --- |
| `shift_request` | A clinician asks to work a shift Stafflion published to your agency. Stafflion approves the request by calling your partner API. The response says whether it was approved automatically (`auto_approved`) or is waiting for approval (`pending_approval`). Sending it again is safe. |
| `shift_claimed` | A clinician claims the shift. Stafflion adds it to its schedule. |
| `shift_update` | The time of a taken shift changes. Send it only after the `shift_claimed` for that shift. |
| `shift_call_out` | A clinician calls out or will no longer work the shift. |

Every error returns a `message` that states the reason and a `code` you can match in your code. Retry `5xx` responses and timeouts with backoff. Do not retry `4xx` responses, except an event that arrives before the event it depends on: resend it after that event is accepted.


Reference: https://developers.stafflion.com/api/api-reference/events/webhook

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Servers

- `https://staging.stafflion.com` (Staging (primary environment), default)
- `https://app.stafflion.com` (Production)

## Request

### Body (application/json)

This endpoint expects a shifts_webhook_Request.

- `shifts_webhook_Request`
  - ShiftRequestEvent: ShiftRequestEvent
  - ShiftClaimedEvent: ShiftClaimedEvent
  - ShiftUpdateEvent: ShiftUpdateEvent
  - ShiftCallOutEvent: ShiftCallOutEvent

## Response

### 200

OK

- `shifts_webhook_Response_200`
  - ShiftRequestResponse_200: ShiftRequestResponse_200
  - Shifts_Webhook_Response_200: Shifts_Webhook_Response_200

## Errors

### 400 Bad Request Error

Bad request. The event is well formed but cannot be applied. Do not retry, except for an event that arrives before the event it depends on.

- `message` (string, required) — Human-readable reason. It can change; match on `code` instead.
- `code` (string, required) — Stable error code. See the Events guide, Errors section.

### 401 Unauthorized Error

Missing, invalid or expired Bearer token. Illustrative body, confirm against staging.

- `message` (string, required) — Human-readable reason. It can change; match on `code` instead.
- `code` (string, required) — Stable error code. See the Events guide, Errors section.

### 403 Forbidden Error

The token is valid but the client is not an agency client.

- `message` (string, required) — Human-readable reason. It can change; match on `code` instead.
- `code` (string, required) — Stable error code. See the Events guide, Errors section.

### 404 Not Found Error

Not found. The shift or facility is unknown to Stafflion. For `shift_claimed`, a 404 is final: do not retry.

- `message` (string, required) — Human-readable reason. It can change; match on `code` instead.
- `code` (string, required) — Stable error code. See the Events guide, Errors section.

### 422 Unprocessable Entity Error

Validation failed. `errors` lists each invalid field when there is one.

- `message` (string, required) — Human-readable reason.
- `code` (string, required) — Stable error code, `validation_failed` for invalid input.
- `url` (string, optional) — Request path, when the error comes from input validation.
- `errors` (map from string to list of string, optional) — Optional. Invalid fields, each with a list of messages.

### 500 Internal Server Error

Temporary failure on Stafflion's side. Retry with backoff.

- `any`

### 503 Service Unavailable Error

Temporary unavailability. Retry with backoff.

- `any`

## Types

### ShiftRequestEvent

Event shift_request. Your agency requests to work a shift Stafflion published.

- `event_name` (enum, required) — Event name.
  - Allowed values: `shift_request`
- `event_data` (ShiftRequestEventData, required) — Payload for `event_name: shift_request`. The request carries the full shift and clinician details.
- `occurred_at` (datetime, required) — Date and time when the event occurred (RFC 3339). Send `Z` or an offset.

### ShiftClaimedEvent

Event shift_claimed. Your agency confirms that a clinician claimed a shift.

- `event_name` (enum, required) — Event name.
  - Allowed values: `shift_claimed`
- `event_data` (ShiftClaimedEventData, required) — Payload for `event_name: shift_claimed`.
- `occurred_at` (datetime, required) — Date and time when the event occurred (RFC 3339). Send `Z` or an offset.

### ShiftUpdateEvent

Event shift_update. Send only after a shift_claimed has been sent for this shift.

- `event_name` (enum, required) — Event name.
  - Allowed values: `shift_update`
- `event_data` (ShiftUpdateEventData, required) — Payload for `event_name: shift_update`. Send only after a `shift_claimed` has been sent for this shift.
- `occurred_at` (datetime, required) — Date and time when the event occurred (RFC 3339). Send `Z` or an offset.

### ShiftCallOutEvent

Event shift_call_out. A clinician calls out or will no longer work the shift.

- `event_name` (enum, required) — Event name.
  - Allowed values: `shift_call_out`
- `event_data` (ShiftCallOutEventData, required) — Payload for `event_name: shift_call_out`.
- `occurred_at` (datetime, required) — Date and time when the event occurred (RFC 3339). Send `Z` or an offset.

### ShiftRequestResponse_200

Response to shift_request. `status` says whether Stafflion approved the request automatically or it waits for approval. The response carries Stafflion's own IDs; it does not repeat the IDs you sent.

- `message` (string, required) — `success`.
- `status` (enum, required) — `auto_approved` when Stafflion approved the request automatically. `pending_approval` when the request waits for approval. Stafflion calls your partner API to approve it.
  - Allowed values: `auto_approved`, `pending_approval`
- `shift` (ShiftRequestResponse200Shift, required)
- `clinician` (ShiftRequestResponse200Clinician, required)
- `pickup` (ShiftRequestResponse200Pickup, required) — The pending or approved pickup for this clinician and shift.

### Shifts_Webhook_Response_200

- `message` (string, required) — `success`.
- `shift` (ShiftResponse, required) — Shift returned in a successful webhook response.
- `clinician` (ClinicianResponse, optional) — Clinician returned in a successful webhook response.

### ShiftRequestEventData

Payload for `event_name: shift_request`. The request carries the full shift and clinician details.

- `partner_facility_id` (string, required) — Partner facility ID.
- `partner_shift_id` (string, required) — Partner shift ID.
- `shift_start_time` (datetime, required) — Shift start time (RFC 3339). Send `Z` or an offset; Stafflion stores UTC.
- `shift_end_time` (datetime, required) — Shift end time (RFC 3339). Send `Z` or an offset; Stafflion stores UTC. Must be after `shift_start_time`.
- `partner_clinician` (ShiftPartnerClinician, required) — Clinician details.
- `compensation` (ShiftPartnerCompensation, optional) — Pay details for one shift and one clinician, in USD. Stafflion stores them for that assignment only. Optional; omit the object when there is no pay data.

### ShiftClaimedEventData

Payload for `event_name: shift_claimed`.

- `partner_facility_id` (string, required) — Partner facility ID.
- `partner_shift_id` (string, required) — Partner shift ID.
- `partner_clinician` (ShiftPartnerClinician, required) — Clinician details.
- `shift_id` (string, optional) — Optional. Stafflion shift ID, only if the partner maps it.
- `partner_secondary_shift_id` (string, optional) — Optional. Secondary partner shift ID.
- `shift_start_time` (datetime, optional) — Shift start time (RFC 3339). Required when Stafflion did not publish the shift. Send `Z` or an offset; Stafflion stores UTC.
- `shift_end_time` (datetime, optional) — Shift end time (RFC 3339). Required when Stafflion did not publish the shift. Send `Z` or an offset; Stafflion stores UTC. Must be after `shift_start_time`.
- `compensation` (ShiftPartnerCompensation, optional) — Pay details for one shift and one clinician, in USD. Stafflion stores them for that assignment only. Optional; omit the object when there is no pay data.

### ShiftUpdateEventData

Payload for `event_name: shift_update`. Send only after a `shift_claimed` has been sent for this shift.

- `partner_facility_id` (string, required) — Partner facility ID.
- `partner_shift_id` (string, required) — Partner shift ID.
- `shift_start_time` (datetime, required) — New shift start time (RFC 3339). Send `Z` or an offset; Stafflion stores UTC.
- `shift_end_time` (datetime, required) — New shift end time (RFC 3339). Send `Z` or an offset; Stafflion stores UTC. Must be after `shift_start_time`.
- `shift_id` (string, optional) — Optional. Stafflion shift ID, only if the partner maps it.
- `partner_clinician_id` (string, optional) — Optional. Partner clinician ID. Send it when the shift has more than one match and Stafflion cannot choose it.

### ShiftCallOutEventData

Payload for `event_name: shift_call_out`.

- `partner_facility_id` (string, required) — Partner facility ID.
- `partner_shift_id` (string, required) — Partner shift ID.
- `partner_clinician_id` (string, required) — Partner clinician ID.
- `reason` (string, optional) — Optional. Free-text reason from the clinician, stored with the call-out.

### ShiftRequestResponse200Shift

- `id` (integer, required) — Stafflion shift ID (AppShift).

### ShiftRequestResponse200Clinician

- `id` (integer, required) — Stafflion clinician ID.

### ShiftRequestResponse200Pickup

The pending or approved pickup for this clinician and shift.

- `id` (integer, required) — Stafflion pickup ID.

### ShiftResponse

Shift returned in a successful webhook response.

- `partner_shift_id` (string, required) — Partner shift ID.
- `id` (integer, optional) — Stafflion shift ID (AppShift). Returned when the shift is linked to a Stafflion shift.
- `partner_secondary_shift_id` (any, optional) — Secondary partner shift ID, or null.

### ClinicianResponse

Clinician returned in a successful webhook response.

- `id` (integer, required) — Stafflion clinician ID.
- `partner_clinician_id` (string, required) — Partner clinician ID.

### ShiftPartnerClinician

Clinician details.

- `id` (string, required) — Partner clinician ID.
- `first_name` (string, required)
- `last_name` (string, required)
- `email` (string, required)
- `phone` (string, required)
- `position` (string, required) — Exact position name, for example `LPN`.
- `clinician_tier` (string, optional) — Clinician tier as free text, for example `Tier 1`. Stored on the clinician.

### ShiftPartnerCompensation

Pay details for one shift and one clinician, in USD. Stafflion stores them for that assignment only. Optional; omit the object when there is no pay data.

- `base_hourly_rate` (double, required) — Base hourly rate without bonuses, in USD.
- `overtime_hourly_rate` (double, required) — Overtime hourly rate, in USD.
- `bonus` (ShiftPartnerBonus, optional) — Bonus for the shift, in USD. Omit it when there is no bonus. A `fixed` value is an amount. A `percentage` value is applied to `base_hourly_rate` over the shift length.

### ShiftPartnerBonus

Bonus for the shift, in USD. Omit it when there is no bonus. A `fixed` value is an amount. A `percentage` value is applied to `base_hourly_rate` over the shift length.

- `type` (enum, required) — Bonus type.
  - Allowed values: `fixed`, `percentage`
- `value` (double, required) — Fixed amount in USD, or the percentage. `10` means 10%.

## Examples

### shift_request

**Request**

```json
{
  "event_data": {
    "compensation": {
      "base_hourly_rate": 35,
      "bonus": {
        "type": "fixed",
        "value": 100
      },
      "overtime_hourly_rate": 52.5
    },
    "partner_clinician": {
      "clinician_tier": "Tier 1",
      "email": "jdoe@example.com",
      "first_name": "Jane",
      "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
      "last_name": "Doe",
      "phone": "000-000-0000",
      "position": "CNA"
    },
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T15:00:00.000Z",
    "shift_start_time": "2026-07-24T07:00:00.000Z"
  },
  "event_name": "shift_request",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}
```

**Response**

```json
{
  "clinician": {
    "id": 139898
  },
  "message": "success",
  "pickup": {
    "id": 552010
  },
  "shift": {
    "id": 1048012
  },
  "status": "auto_approved"
}
```

**SDK Code**

```python shift_request
import requests

url = "https://staging.stafflion.com/api/v1/webhooks/partners"

payload = {
    "event_data": {
        "compensation": {
            "base_hourly_rate": 35,
            "bonus": {
                "type": "fixed",
                "value": 100
            },
            "overtime_hourly_rate": 52.5
        },
        "partner_clinician": {
            "clinician_tier": "Tier 1",
            "email": "jdoe@example.com",
            "first_name": "Jane",
            "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
            "last_name": "Doe",
            "phone": "000-000-0000",
            "position": "CNA"
        },
        "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
        "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
        "shift_end_time": "2026-07-24T15:00:00.000Z",
        "shift_start_time": "2026-07-24T07:00:00.000Z"
    },
    "event_name": "shift_request",
    "occurred_at": "2026-07-24T00:00:00.000Z"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript shift_request
const url = 'https://staging.stafflion.com/api/v1/webhooks/partners';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"event_data":{"compensation":{"base_hourly_rate":35,"bonus":{"type":"fixed","value":100},"overtime_hourly_rate":52.5},"partner_clinician":{"clinician_tier":"Tier 1","email":"jdoe@example.com","first_name":"Jane","id":"a98600a7-6c73-4095-ab17-7c5d8c02870c","last_name":"Doe","phone":"000-000-0000","position":"CNA"},"partner_facility_id":"efa61cc1-caf8-4544-9f3a-a8946d51026b","partner_shift_id":"deb1b3c4-72a8-493a-ba34-46eebb81ef94","shift_end_time":"2026-07-24T15:00:00.000Z","shift_start_time":"2026-07-24T07:00:00.000Z"},"event_name":"shift_request","occurred_at":"2026-07-24T00:00:00.000Z"}'
};

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

```go shift_request
package main

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

func main() {

	url := "https://staging.stafflion.com/api/v1/webhooks/partners"

	payload := strings.NewReader("{\n  \"event_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"fixed\",\n        \"value\": 100\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_request\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\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 shift_request
require 'uri'
require 'net/http'

url = URI("https://staging.stafflion.com/api/v1/webhooks/partners")

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_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"fixed\",\n        \"value\": 100\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_request\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}"

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

```java shift_request
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging.stafflion.com/api/v1/webhooks/partners")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"event_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"fixed\",\n        \"value\": 100\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_request\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}")
  .asString();
```

```php shift_request
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging.stafflion.com/api/v1/webhooks/partners', [
  'body' => '{
  "event_data": {
    "compensation": {
      "base_hourly_rate": 35,
      "bonus": {
        "type": "fixed",
        "value": 100
      },
      "overtime_hourly_rate": 52.5
    },
    "partner_clinician": {
      "clinician_tier": "Tier 1",
      "email": "jdoe@example.com",
      "first_name": "Jane",
      "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
      "last_name": "Doe",
      "phone": "000-000-0000",
      "position": "CNA"
    },
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T15:00:00.000Z",
    "shift_start_time": "2026-07-24T07:00:00.000Z"
  },
  "event_name": "shift_request",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp shift_request
using RestSharp;

var client = new RestClient("https://staging.stafflion.com/api/v1/webhooks/partners");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"event_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"fixed\",\n        \"value\": 100\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_request\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift shift_request
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "event_data": [
    "compensation": [
      "base_hourly_rate": 35,
      "bonus": [
        "type": "fixed",
        "value": 100
      ],
      "overtime_hourly_rate": 52.5
    ],
    "partner_clinician": [
      "clinician_tier": "Tier 1",
      "email": "jdoe@example.com",
      "first_name": "Jane",
      "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
      "last_name": "Doe",
      "phone": "000-000-0000",
      "position": "CNA"
    ],
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T15:00:00.000Z",
    "shift_start_time": "2026-07-24T07:00:00.000Z"
  ],
  "event_name": "shift_request",
  "occurred_at": "2026-07-24T00:00:00.000Z"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://staging.stafflion.com/api/v1/webhooks/partners")! 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()
```

### shift_claimed

**Request**

```json
{
  "event_data": {
    "compensation": {
      "base_hourly_rate": 35,
      "bonus": {
        "type": "percentage",
        "value": 10
      },
      "overtime_hourly_rate": 52.5
    },
    "partner_clinician": {
      "clinician_tier": "Tier 1",
      "email": "jdoe@example.com",
      "first_name": "Jane",
      "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
      "last_name": "Doe",
      "phone": "000-000-0000",
      "position": "CNA"
    },
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T15:00:00.000Z",
    "shift_start_time": "2026-07-24T07:00:00.000Z"
  },
  "event_name": "shift_claimed",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}
```

**Response**

```json
{
  "clinician": {
    "id": 139898,
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c"
  },
  "message": "success",
  "shift": {
    "id": 1048012,
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94"
  }
}
```

**SDK Code**

```python shift_claimed
import requests

url = "https://staging.stafflion.com/api/v1/webhooks/partners"

payload = {
    "event_data": {
        "compensation": {
            "base_hourly_rate": 35,
            "bonus": {
                "type": "percentage",
                "value": 10
            },
            "overtime_hourly_rate": 52.5
        },
        "partner_clinician": {
            "clinician_tier": "Tier 1",
            "email": "jdoe@example.com",
            "first_name": "Jane",
            "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
            "last_name": "Doe",
            "phone": "000-000-0000",
            "position": "CNA"
        },
        "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
        "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
        "shift_end_time": "2026-07-24T15:00:00.000Z",
        "shift_start_time": "2026-07-24T07:00:00.000Z"
    },
    "event_name": "shift_claimed",
    "occurred_at": "2026-07-24T00:00:00.000Z"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript shift_claimed
const url = 'https://staging.stafflion.com/api/v1/webhooks/partners';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"event_data":{"compensation":{"base_hourly_rate":35,"bonus":{"type":"percentage","value":10},"overtime_hourly_rate":52.5},"partner_clinician":{"clinician_tier":"Tier 1","email":"jdoe@example.com","first_name":"Jane","id":"a98600a7-6c73-4095-ab17-7c5d8c02870c","last_name":"Doe","phone":"000-000-0000","position":"CNA"},"partner_facility_id":"efa61cc1-caf8-4544-9f3a-a8946d51026b","partner_shift_id":"deb1b3c4-72a8-493a-ba34-46eebb81ef94","shift_end_time":"2026-07-24T15:00:00.000Z","shift_start_time":"2026-07-24T07:00:00.000Z"},"event_name":"shift_claimed","occurred_at":"2026-07-24T00:00:00.000Z"}'
};

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

```go shift_claimed
package main

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

func main() {

	url := "https://staging.stafflion.com/api/v1/webhooks/partners"

	payload := strings.NewReader("{\n  \"event_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"percentage\",\n        \"value\": 10\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_claimed\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\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 shift_claimed
require 'uri'
require 'net/http'

url = URI("https://staging.stafflion.com/api/v1/webhooks/partners")

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_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"percentage\",\n        \"value\": 10\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_claimed\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}"

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

```java shift_claimed
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging.stafflion.com/api/v1/webhooks/partners")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"event_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"percentage\",\n        \"value\": 10\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_claimed\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}")
  .asString();
```

```php shift_claimed
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging.stafflion.com/api/v1/webhooks/partners', [
  'body' => '{
  "event_data": {
    "compensation": {
      "base_hourly_rate": 35,
      "bonus": {
        "type": "percentage",
        "value": 10
      },
      "overtime_hourly_rate": 52.5
    },
    "partner_clinician": {
      "clinician_tier": "Tier 1",
      "email": "jdoe@example.com",
      "first_name": "Jane",
      "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
      "last_name": "Doe",
      "phone": "000-000-0000",
      "position": "CNA"
    },
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T15:00:00.000Z",
    "shift_start_time": "2026-07-24T07:00:00.000Z"
  },
  "event_name": "shift_claimed",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp shift_claimed
using RestSharp;

var client = new RestClient("https://staging.stafflion.com/api/v1/webhooks/partners");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"event_data\": {\n    \"compensation\": {\n      \"base_hourly_rate\": 35,\n      \"bonus\": {\n        \"type\": \"percentage\",\n        \"value\": 10\n      },\n      \"overtime_hourly_rate\": 52.5\n    },\n    \"partner_clinician\": {\n      \"clinician_tier\": \"Tier 1\",\n      \"email\": \"jdoe@example.com\",\n      \"first_name\": \"Jane\",\n      \"id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n      \"last_name\": \"Doe\",\n      \"phone\": \"000-000-0000\",\n      \"position\": \"CNA\"\n    },\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T15:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T07:00:00.000Z\"\n  },\n  \"event_name\": \"shift_claimed\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift shift_claimed
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "event_data": [
    "compensation": [
      "base_hourly_rate": 35,
      "bonus": [
        "type": "percentage",
        "value": 10
      ],
      "overtime_hourly_rate": 52.5
    ],
    "partner_clinician": [
      "clinician_tier": "Tier 1",
      "email": "jdoe@example.com",
      "first_name": "Jane",
      "id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
      "last_name": "Doe",
      "phone": "000-000-0000",
      "position": "CNA"
    ],
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T15:00:00.000Z",
    "shift_start_time": "2026-07-24T07:00:00.000Z"
  ],
  "event_name": "shift_claimed",
  "occurred_at": "2026-07-24T00:00:00.000Z"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://staging.stafflion.com/api/v1/webhooks/partners")! 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()
```

### shift_update

**Request**

```json
{
  "event_data": {
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T16:00:00.000Z",
    "shift_start_time": "2026-07-24T08:00:00.000Z"
  },
  "event_name": "shift_update",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}
```

**Response**

```json
{
  "clinician": {
    "id": 139898,
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c"
  },
  "message": "success",
  "shift": {
    "id": 1048012,
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94"
  }
}
```

**SDK Code**

```python shift_update
import requests

url = "https://staging.stafflion.com/api/v1/webhooks/partners"

payload = {
    "event_data": {
        "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
        "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
        "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
        "shift_end_time": "2026-07-24T16:00:00.000Z",
        "shift_start_time": "2026-07-24T08:00:00.000Z"
    },
    "event_name": "shift_update",
    "occurred_at": "2026-07-24T00:00:00.000Z"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript shift_update
const url = 'https://staging.stafflion.com/api/v1/webhooks/partners';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"event_data":{"partner_clinician_id":"a98600a7-6c73-4095-ab17-7c5d8c02870c","partner_facility_id":"efa61cc1-caf8-4544-9f3a-a8946d51026b","partner_shift_id":"deb1b3c4-72a8-493a-ba34-46eebb81ef94","shift_end_time":"2026-07-24T16:00:00.000Z","shift_start_time":"2026-07-24T08:00:00.000Z"},"event_name":"shift_update","occurred_at":"2026-07-24T00:00:00.000Z"}'
};

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

```go shift_update
package main

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

func main() {

	url := "https://staging.stafflion.com/api/v1/webhooks/partners"

	payload := strings.NewReader("{\n  \"event_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T16:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T08:00:00.000Z\"\n  },\n  \"event_name\": \"shift_update\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\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 shift_update
require 'uri'
require 'net/http'

url = URI("https://staging.stafflion.com/api/v1/webhooks/partners")

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_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T16:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T08:00:00.000Z\"\n  },\n  \"event_name\": \"shift_update\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}"

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

```java shift_update
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging.stafflion.com/api/v1/webhooks/partners")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"event_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T16:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T08:00:00.000Z\"\n  },\n  \"event_name\": \"shift_update\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}")
  .asString();
```

```php shift_update
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging.stafflion.com/api/v1/webhooks/partners', [
  'body' => '{
  "event_data": {
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T16:00:00.000Z",
    "shift_start_time": "2026-07-24T08:00:00.000Z"
  },
  "event_name": "shift_update",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp shift_update
using RestSharp;

var client = new RestClient("https://staging.stafflion.com/api/v1/webhooks/partners");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"event_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"shift_end_time\": \"2026-07-24T16:00:00.000Z\",\n    \"shift_start_time\": \"2026-07-24T08:00:00.000Z\"\n  },\n  \"event_name\": \"shift_update\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift shift_update
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "event_data": [
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "shift_end_time": "2026-07-24T16:00:00.000Z",
    "shift_start_time": "2026-07-24T08:00:00.000Z"
  ],
  "event_name": "shift_update",
  "occurred_at": "2026-07-24T00:00:00.000Z"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://staging.stafflion.com/api/v1/webhooks/partners")! 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()
```

### shift_call_out

**Request**

```json
{
  "event_data": {
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "reason": "Family emergency"
  },
  "event_name": "shift_call_out",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}
```

**Response**

```json
{
  "clinician": {
    "id": 139898,
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c"
  },
  "message": "success",
  "shift": {
    "id": 1048012,
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94"
  }
}
```

**SDK Code**

```python shift_call_out
import requests

url = "https://staging.stafflion.com/api/v1/webhooks/partners"

payload = {
    "event_data": {
        "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
        "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
        "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
        "reason": "Family emergency"
    },
    "event_name": "shift_call_out",
    "occurred_at": "2026-07-24T00:00:00.000Z"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript shift_call_out
const url = 'https://staging.stafflion.com/api/v1/webhooks/partners';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"event_data":{"partner_clinician_id":"a98600a7-6c73-4095-ab17-7c5d8c02870c","partner_facility_id":"efa61cc1-caf8-4544-9f3a-a8946d51026b","partner_shift_id":"deb1b3c4-72a8-493a-ba34-46eebb81ef94","reason":"Family emergency"},"event_name":"shift_call_out","occurred_at":"2026-07-24T00:00:00.000Z"}'
};

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

```go shift_call_out
package main

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

func main() {

	url := "https://staging.stafflion.com/api/v1/webhooks/partners"

	payload := strings.NewReader("{\n  \"event_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"reason\": \"Family emergency\"\n  },\n  \"event_name\": \"shift_call_out\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\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 shift_call_out
require 'uri'
require 'net/http'

url = URI("https://staging.stafflion.com/api/v1/webhooks/partners")

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_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"reason\": \"Family emergency\"\n  },\n  \"event_name\": \"shift_call_out\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}"

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

```java shift_call_out
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging.stafflion.com/api/v1/webhooks/partners")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"event_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"reason\": \"Family emergency\"\n  },\n  \"event_name\": \"shift_call_out\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}")
  .asString();
```

```php shift_call_out
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging.stafflion.com/api/v1/webhooks/partners', [
  'body' => '{
  "event_data": {
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "reason": "Family emergency"
  },
  "event_name": "shift_call_out",
  "occurred_at": "2026-07-24T00:00:00.000Z"
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp shift_call_out
using RestSharp;

var client = new RestClient("https://staging.stafflion.com/api/v1/webhooks/partners");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"event_data\": {\n    \"partner_clinician_id\": \"a98600a7-6c73-4095-ab17-7c5d8c02870c\",\n    \"partner_facility_id\": \"efa61cc1-caf8-4544-9f3a-a8946d51026b\",\n    \"partner_shift_id\": \"deb1b3c4-72a8-493a-ba34-46eebb81ef94\",\n    \"reason\": \"Family emergency\"\n  },\n  \"event_name\": \"shift_call_out\",\n  \"occurred_at\": \"2026-07-24T00:00:00.000Z\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift shift_call_out
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "event_data": [
    "partner_clinician_id": "a98600a7-6c73-4095-ab17-7c5d8c02870c",
    "partner_facility_id": "efa61cc1-caf8-4544-9f3a-a8946d51026b",
    "partner_shift_id": "deb1b3c4-72a8-493a-ba34-46eebb81ef94",
    "reason": "Family emergency"
  ],
  "event_name": "shift_call_out",
  "occurred_at": "2026-07-24T00:00:00.000Z"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://staging.stafflion.com/api/v1/webhooks/partners")! 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()
```