To access the API, you can reach out to your customer success manager who will provide you securely with an access token which is valid for one year.
This token should be included in any requests you make to Surfboard’s API in the Authorization
header in 'bearer token' format, like so:
curl 'https://api.teamsurfboard.com/...' \
-H 'Authorization: Bearer ...'
API requests without authentication will fail.
The API enforces a rate limit of 60 requests per minute to ensure stability. Once this limit is exceeded, the API will respond with a status code of 429.
Over time, new endpoints will be made available and existing endpoints may evolve, but backwards compability will be maintained. Fields will not be removed from response payloads, but new fields may be added to existing endpoints.
Any backwards-incompatible changes will be made in a new version of the API, and existing versions will remain functional.
Returns the published schedule within the specified date range.
start required | |
end required | |
page[size] | number Default: 100 The maximum number of entities to be returned in one response. |
page[after] | string The pagination cursor to be used for the next response. If a response has more than one page, the full URL for the next page (including the appropriate page[after] parameter) will be included in the /links/next field in the response payload. |
{- "data": [
- {
- "type": "shift",
- "surfer": {
- "id": "1",
- "email": "john.doe@example.com"
}, - "interval": {
- "start": "2024-06-25T09:00:00.000Z",
- "end": "2024-06-25T17:00:00.000Z"
}, - "shiftTemplate": {
- "id": "7",
- "name": "Regular nine to five"
}, - "taskSchedule": [
- {
- "interval": {
- "start": "2024-06-25T09:00:00.000Z",
- "end": "2024-06-25T12:00:00.000Z"
}, - "task": {
- "type": "activity",
- "id": "10",
- "name": "Phones",
- "ticketGroups": [
- {
- "id": "100",
- "name": "General Support",
- "connectedTicketingSystem": "zendesk"
}
]
}
}, - {
- "interval": {
- "start": "2024-06-25T12:00:00.000Z",
- "end": "2024-06-25T13:00:00.000Z"
}, - "task": {
- "type": "break",
- "id": "20",
- "name": "Lunch"
}
}, - {
- "interval": {
- "start": "2024-06-25T13:00:00.000Z",
- "end": "2024-06-25T16:30:00.000Z"
}, - "task": {
- "type": "activity",
- "id": "11",
- "name": "Email",
- "ticketGroups": [
- {
- "id": "101",
- "name": "VIP Support",
- "connectedTicketingSystem": "zendesk"
}
]
}
}, - {
- "interval": {
- "start": "2024-06-25T16:30:00.000Z",
- "end": "2024-06-25T17:00:00.000Z"
}, - "task": {
- "type": "blocked-time",
- "name": "Team Meeting"
}
}
]
}, - {
- "type": "time-off",
- "subtype": "Holiday",
- "remoteSubtype": "Annual Leave",
- "surfer": {
- "id": "2",
- "email": "jane.smith@example.com"
}, - "interval": {
- "start": "2024-06-25T00:00:00.000Z",
- "end": "2024-06-25T23:59:59.999Z"
}
}
], - "links": {
- "next": null
}
}
Returns a list of all tasks.
page[size] | number Default: 100 The maximum number of entities to be returned in one response. |
page[after] | string The pagination cursor to be used for the next response. If a response has more than one page, the full URL for the next page (including the appropriate page[after] parameter) will be included in the /links/next field in the response payload. |
{- "data": [
- {
- "type": "activity",
- "id": "11",
- "version": 7,
- "name": "Email"
}
]
}
Returns all the shift change requests submitted by surfer.
state | Array of strings Items Enum: "pending" "approved" "rejected" "void" |
page[size] | number Default: 100 The maximum number of entities to be returned in one response. |
page[after] | string The pagination cursor to be used for the next response. If a response has more than one page, the full URL for the next page (including the appropriate page[after] parameter) will be included in the /links/next field in the response payload. |
{- "data": [
- {
- "state": "pending",
- "requestedBy": {
- "id": "string",
- "email": "string"
}, - "requestedAt": "2024-06-25T00:00:00.000Z",
- "originalStart": "2024-06-25T00:00:00.000Z",
- "originalEnd": "2024-06-25T00:00:00.000Z",
- "surferNote": "string",
- "managerNote": "string",
- "reviewedAt": "2024-06-25T00:00:00.000Z",
- "reviewedBy": "2024-06-25T00:00:00.000Z"
}
], - "links": {
- "self": "string",
- "next": "string"
}
}
Returns the surfers.
page[size] | number Default: 100 The maximum number of entities to be returned in one response. |
page[after] | string The pagination cursor to be used for the next response. If a response has more than one page, the full URL for the next page (including the appropriate page[after] parameter) will be included in the /links/next field in the response payload. |
{- "data": [
- {
- "id": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "string",
- "timezone": "string",
- "teamId": "string"
}
], - "links": {
- "self": "string",
- "next": "string"
}
}
Creates a new surfer in Surfboard.
firstName required | string |
lastName required | string |
email required | string |
timezone required | string |
teamId | string |
{- "firstName": "string",
- "lastName": "string",
- "email": "string",
- "timezone": "string",
- "teamId": "string"
}
{- "id": "string"
}
Updates the details of the surfer.
id required | string |
firstName | string |
lastName | string |
timezone | string |
teamId | string |
{- "firstName": "string",
- "lastName": "string",
- "timezone": "string",
- "teamId": "string"
}
{ }
Returns the managers.
page[size] | number Default: 100 The maximum number of entities to be returned in one response. |
page[after] | string The pagination cursor to be used for the next response. If a response has more than one page, the full URL for the next page (including the appropriate page[after] parameter) will be included in the /links/next field in the response payload. |
{- "data": [
- {
- "id": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}
], - "links": {
- "self": "string",
- "next": "string"
}
}
Creates a new manager in Surfboard.
firstName required | string |
lastName required | string |
email required | string |
{- "firstName": "string",
- "lastName": "string",
- "email": "string"
}
{- "id": "string"
}
Updates the details of the manager.
id required | string |
firstName | string |
lastName | string |
{- "firstName": "string",
- "lastName": "string"
}
{ }
Returns the ticket groups used to categorize the work volume from other systems.
page[size] | number Default: 100 The maximum number of entities to be returned in one response. |
page[after] | string The pagination cursor to be used for the next response. If a response has more than one page, the full URL for the next page (including the appropriate page[after] parameter) will be included in the /links/next field in the response payload. |
{- "data": [
- {
- "id": "string",
- "name": "string",
- "connectedTicketingSystem": "aircall"
}
], - "links": {
- "self": "string",
- "next": "string"
}
}
Returns the forecasting prediction for the given interval.
ticketGroupId required | string |
start required | |
end required | |
page[size] | number Default: 100 The maximum number of entities to be returned in one response. |
page[after] | string The pagination cursor to be used for the next response. If a response has more than one page, the full URL for the next page (including the appropriate page[after] parameter) will be included in the /links/next field in the response payload. |
{- "data": [
- {
- "timestamp": "2024-06-25T00:00:00.000Z",
- "forecasted_volume": 0,
- "forecasted_staffing": 0
}
], - "links": {
- "self": "string",
- "next": "string"
}
}