curl --request GET \
--url https://public-api.stora.co/2025-09/deals \
--header 'Authorization: Bearer <token>'import requests
url = "https://public-api.stora.co/2025-09/deals"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://public-api.stora.co/2025-09/deals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.stora.co/2025-09/deals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.stora.co/2025-09/deals"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.stora.co/2025-09/deals")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.stora.co/2025-09/deals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"deals": [
{
"id": "deal_127b3057d5df338e",
"assignee": {
"id": "staff_947b3057d5df338e"
},
"contact": {
"id": "con_1234567890abcdef"
},
"created_at": "2025-02-22T14:41:00Z",
"creator": {
"id": "staff_947b3057d5df338e"
},
"line_items": [
{
"item": {
"id": "plvl_e8f3ad0a07e47566"
},
"quantity": 1,
"type": "protection"
},
{
"item": {
"id": "utype_f18fc91387cdf710"
},
"quantity": 1,
"type": "unit_type"
}
],
"lost_reason": null,
"metadata": {},
"name": "First Deal",
"note": "£50 per month",
"site": {
"id": "site_14b419f1096013f1"
},
"stage": {
"id": "dstg_127b3057d5df338e"
},
"starts_at": null,
"status": "open",
"updated_at": "2025-02-22T14:41:00Z",
"value_estimate": "£50 per month"
},
{
"id": "deal_227b3057d5df338e",
"assignee": null,
"contact": {
"id": "con_1234567890abcdef"
},
"created_at": "2025-02-22T14:41:00Z",
"creator": {
"id": "staff_947b3057d5df338e"
},
"line_items": [
{
"item": {
"id": "plvl_e8f3ad0a07e47566"
},
"quantity": 1,
"type": "protection"
},
{
"item": {
"id": "utype_f18fc91387cdf710"
},
"quantity": 1,
"type": "unit_type"
}
],
"lost_reason": null,
"metadata": {},
"name": "Archived Deal",
"note": "£50 per month",
"site": {
"id": "site_14b419f1096013f1"
},
"stage": {
"created_at": "2025-02-22T14:41:00Z",
"name": "Second Stage - (Deleted)",
"position": 2,
"updated_at": "2025-02-22T14:41:00Z"
},
"starts_at": null,
"status": "open",
"updated_at": "2025-02-22T14:41:00Z",
"value_estimate": "£50 per month"
}
],
"meta": {
"request_id": "01563646-58c1-4607-8fe0-cae3e92c4477",
"curies": [
{
"name": "bo",
"href": "https://app.stora.test{rel}",
"templated": true,
"title": "Backoffice"
},
{
"name": "sf",
"href": "https://acme.stora.test{rel}",
"templated": true,
"title": "Storefront"
}
],
"pagination": {
"count": 2,
"last": 1,
"limit": 50,
"next": null,
"page": 1,
"pages": 1,
"prev": null
}
}
}List all Deals
Retrieve a list of all deals.
Required authorization scope: public.deal:read
curl --request GET \
--url https://public-api.stora.co/2025-09/deals \
--header 'Authorization: Bearer <token>'import requests
url = "https://public-api.stora.co/2025-09/deals"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://public-api.stora.co/2025-09/deals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.stora.co/2025-09/deals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.stora.co/2025-09/deals"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.stora.co/2025-09/deals")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.stora.co/2025-09/deals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"deals": [
{
"id": "deal_127b3057d5df338e",
"assignee": {
"id": "staff_947b3057d5df338e"
},
"contact": {
"id": "con_1234567890abcdef"
},
"created_at": "2025-02-22T14:41:00Z",
"creator": {
"id": "staff_947b3057d5df338e"
},
"line_items": [
{
"item": {
"id": "plvl_e8f3ad0a07e47566"
},
"quantity": 1,
"type": "protection"
},
{
"item": {
"id": "utype_f18fc91387cdf710"
},
"quantity": 1,
"type": "unit_type"
}
],
"lost_reason": null,
"metadata": {},
"name": "First Deal",
"note": "£50 per month",
"site": {
"id": "site_14b419f1096013f1"
},
"stage": {
"id": "dstg_127b3057d5df338e"
},
"starts_at": null,
"status": "open",
"updated_at": "2025-02-22T14:41:00Z",
"value_estimate": "£50 per month"
},
{
"id": "deal_227b3057d5df338e",
"assignee": null,
"contact": {
"id": "con_1234567890abcdef"
},
"created_at": "2025-02-22T14:41:00Z",
"creator": {
"id": "staff_947b3057d5df338e"
},
"line_items": [
{
"item": {
"id": "plvl_e8f3ad0a07e47566"
},
"quantity": 1,
"type": "protection"
},
{
"item": {
"id": "utype_f18fc91387cdf710"
},
"quantity": 1,
"type": "unit_type"
}
],
"lost_reason": null,
"metadata": {},
"name": "Archived Deal",
"note": "£50 per month",
"site": {
"id": "site_14b419f1096013f1"
},
"stage": {
"created_at": "2025-02-22T14:41:00Z",
"name": "Second Stage - (Deleted)",
"position": 2,
"updated_at": "2025-02-22T14:41:00Z"
},
"starts_at": null,
"status": "open",
"updated_at": "2025-02-22T14:41:00Z",
"value_estimate": "£50 per month"
}
],
"meta": {
"request_id": "01563646-58c1-4607-8fe0-cae3e92c4477",
"curies": [
{
"name": "bo",
"href": "https://app.stora.test{rel}",
"templated": true,
"title": "Backoffice"
},
{
"name": "sf",
"href": "https://acme.stora.test{rel}",
"templated": true,
"title": "Storefront"
}
],
"pagination": {
"count": 2,
"last": 1,
"limit": 50,
"next": null,
"page": 1,
"pages": 1,
"prev": null
}
}
}Authorizations
Bearer Token necessary to use API
Query Parameters
This endpoint supports expandable responses. For more, see the documentation page.
Pagination: Page number
x >= 1Pagination: Limit number of items per page.
1 <= x <= 100Sorting by attribute. Default created_at
created_at, updated_at Sorting by ASC or DESC direction. Default DESC
ASC, DESC Filter by Contact IDs. Supports multiple values separated by a comma.
Filter by Site IDs. Supports multiple values separated by a comma.
Filter by Stage IDs. Supports multiple values separated by a comma.
Filters results to created after (including given date) the given ISO 8601 timestamp (e.g., 2025-01-12T15:30:00Z).
Filters results to created before (excluding given date) the given ISO 8601 timestamp (e.g., 2025-01-12T15:30:00Z).
Filters results to updated after (including given date) the given ISO 8601 timestamp (e.g., 2025-01-12T15:30:00Z).
Filters results to updated before (excluding given date) the given ISO 8601 timestamp (e.g., 2025-01-12T15:30:00Z).
Filter by Assignee ID. Supports multiple values separated by comma. Use unassigned for deals without an assignee.
Filter by deal status. Supports multiple values separated by comma.
open, won, lost Filter by lost reason. Supports multiple values separated by comma.
accessibility_concern, better_deal_elsewhere, chose_competitor, contract_terms, decided_not_to_use_storage, didnt_respond, due_to_unstaffed_site, facility_condition, financial_reasons, lack_of_response, location_issues, needs_extra_services, no_longer_needed, poor_customer_service, price_concerns, security_concerns, size_availability, timing, unable_to_reach_customer, unable_to_take_deliveries, other Was this page helpful?