> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://developer-stage.shipbob.dev/2026-07/api/webhooks/get-subscriptions/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer-stage.shipbob.dev/_mcp/server. # Get Subscriptions GET https://sandbox-api.shipbob.com/2026-07/webhook This endpoint returns a list of webhook subscriptions. Reference: https://developer-stage.shipbob.dev/api/webhooks/get-subscriptions ## Authentication - `Authorization` header (bearer token, required) — Authentication using Personal Access Token (PAT) token - `Authorization` header (bearer token, required) — OAuth2 authentication using JWT tokens ## Request ### Query parameters - `RecordsPerPage` (integer, optional) — Number of webhooks returned per page in a paginated response. - `Cursor` (string, optional) — [Optional] A pagination token used to retrieve the next or previous page of results. Omit to start at the first page. ## Response ### 200 Success - `items` (list of Webhooks.V2.WebhookViewModelV2, optional, nullable) - `next` (string, optional, nullable) — Go to the Next page - `prev` (string, optional, nullable) — Go to the Previous page ## Errors ### 400 Bad Request Error Bad Request - `$type` (string, required) - `content_types` (list of string, optional, nullable) - `declared_type` (WebhooksBadRequestObjectResultDeclaredType, optional, nullable) - `formatters` (list of Webhooks.IOutputFormatter, optional, nullable) - `status_code` (integer, optional, nullable) - `value` (WebhooksBadRequestObjectResultValue, optional, nullable) ### 401 Unauthorized Error No access right at this time - `any` ### 403 Forbidden Error No access - `any` ## Types ### Webhooks.V2.WebhookViewModelV2 - `created_at` (datetime, optional) — TimeStamp the webhook subscription was created - `description` (string, optional, nullable) — Description of the webhook subscription - `enabled` (boolean, optional) — Indicates if the webhook subscription is enabled or not - `id` (string, optional) — ID of the webhook subscription - `topics` (list of enum, optional) — List of event types the webhook will receive notifications for - Allowed values: `order.shipped`, `order.delivered`, `order.shipment.delivered`, `order.shipment.exception`, `order.shipment.on_hold`, `order.shipment.cancelled`, `order.shipment.tracking.updated`, `order.shipment.address.updated`, `order.shipment.line_item.added`, `order.shipment.line_item.removed`, `order.shipment.line_item.updated`, `order.shipment.shipping_service.updated`, `return.created`, `return.updated`, `return.completed`, `return.load_shipment.departed`, `return.gaylord.departed`, `return.load_shipment.arrived`, `return.gaylord.arrived`, `return.gaylord.stow_completed`, `billing.charge.created`, `billing.refund.created`, `billing.credit.created`, `wro.box.arrived`, `wro.box.scanned`, `wro.box.stowed`, `wro.completed`, `wro.created`, `wro.updated` - `url` (string, optional) — URL subscription events will be posted to ### WebhooksBadRequestObjectResultDeclaredType ### Webhooks.IOutputFormatter ### WebhooksBadRequestObjectResultValue ## Examples **Response** ```json { "items": [ { "created_at": "2019-08-24T14:15:22+00:00", "description": "string", "enabled": true, "id": "12345", "topics": [ "order.shipped" ], "url": "string" } ], "next": "string", "prev": "string" } ``` **SDK Code** ```python default import requests url = "https://sandbox-api.shipbob.com/2026-07/webhook" querystring = {"RecordsPerPage":"1","Cursor":"string"} headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers, params=querystring) print(response.json()) ``` ```javascript default const url = 'https://sandbox-api.shipbob.com/2026-07/webhook?RecordsPerPage=1&Cursor=string'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go default package main import ( "fmt" "net/http" "io" ) func main() { url := "https://sandbox-api.shipbob.com/2026-07/webhook?RecordsPerPage=1&Cursor=string" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby default require 'uri' require 'net/http' url = URI("https://sandbox-api.shipbob.com/2026-07/webhook?RecordsPerPage=1&Cursor=string") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java default import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://sandbox-api.shipbob.com/2026-07/webhook?RecordsPerPage=1&Cursor=string") .header("Authorization", "Bearer ") .asString(); ``` ```php default request('GET', 'https://sandbox-api.shipbob.com/2026-07/webhook?RecordsPerPage=1&Cursor=string', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp default using RestSharp; var client = new RestClient("https://sandbox-api.shipbob.com/2026-07/webhook?RecordsPerPage=1&Cursor=string"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift default import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.shipbob.com/2026-07/webhook?RecordsPerPage=1&Cursor=string")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers 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() ```