Skip to main content
PATCH
/
2025-09
/
deals
/
{deal_id}
Update a Deal
curl --request PATCH \
  --url https://public-api.stora.co/2025-09/deals/{deal_id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "Acme Corp Storage (Renamed)",
  "line_items": [
    {
      "type": "unit_type",
      "item": {
        "id": "utype_f18fc91387cdf710"
      }
    }
  ]
}
'
import requests

url = "https://public-api.stora.co/2025-09/deals/{deal_id}"

payload = {
"name": "Acme Corp Storage (Renamed)",
"line_items": [
{
"type": "unit_type",
"item": { "id": "utype_f18fc91387cdf710" }
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

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

print(response.text)
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Acme Corp Storage (Renamed)',
line_items: [{type: 'unit_type', item: {id: 'utype_f18fc91387cdf710'}}]
})
};

fetch('https://public-api.stora.co/2025-09/deals/{deal_id}', 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/{deal_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Acme Corp Storage (Renamed)',
'line_items' => [
[
'type' => 'unit_type',
'item' => [
'id' => 'utype_f18fc91387cdf710'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

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

func main() {

url := "https://public-api.stora.co/2025-09/deals/{deal_id}"

payload := strings.NewReader("{\n \"name\": \"Acme Corp Storage (Renamed)\",\n \"line_items\": [\n {\n \"type\": \"unit_type\",\n \"item\": {\n \"id\": \"utype_f18fc91387cdf710\"\n }\n }\n ]\n}")

req, _ := http.NewRequest("PATCH", 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(string(body))

}
HttpResponse<String> response = Unirest.patch("https://public-api.stora.co/2025-09/deals/{deal_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Acme Corp Storage (Renamed)\",\n \"line_items\": [\n {\n \"type\": \"unit_type\",\n \"item\": {\n \"id\": \"utype_f18fc91387cdf710\"\n }\n }\n ]\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://public-api.stora.co/2025-09/deals/{deal_id}")

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

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Acme Corp Storage (Renamed)\",\n \"line_items\": [\n {\n \"type\": \"unit_type\",\n \"item\": {\n \"id\": \"utype_f18fc91387cdf710\"\n }\n }\n ]\n}"

response = http.request(request)
puts response.read_body
{
  "deal": {
    "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": "utype_f18fc91387cdf710"
        },
        "quantity": 1,
        "type": "unit_type"
      }
    ],
    "lost_reason": null,
    "metadata": {},
    "name": "Acme Corp Storage (Renamed)",
    "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"
  },
  "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"
      }
    ]
  }
}
{
"error": {
"code": "resource_not_found",
"details": [],
"links": [
{
"kind": "open_api",
"name": "OpenAPI specification",
"url": "https://docs.stora.test/2025-09/openapi.json"
},
{
"kind": "documentation",
"name": "Errors",
"url": "https://docs.stora.test/2025-09/guides/errors"
}
],
"message": "The Site was not found.",
"request_id": "01563646-58c1-4607-8fe0-cae3e92c4477",
"type": "invalid_request_error"
}
}
{
"error": {
"code": "invalid_content",
"details": [
{
"message": "Name can't be blank",
"pointer": "/name"
}
],
"links": [
{
"kind": "open_api",
"name": "OpenAPI specification",
"url": "https://docs.stora.test/2025-09/openapi.json"
},
{
"kind": "documentation",
"name": "Errors",
"url": "https://docs.stora.test/2025-09/guides/errors"
}
],
"message": "The request body content is not valid.",
"request_id": "01563646-58c1-4607-8fe0-cae3e92c4477",
"type": "invalid_request_error"
}
}

Authorizations

Authorization
string
header
required

Bearer Token necessary to use API

Path Parameters

deal_id
string
required

The ID of the deal to retrieve

Query Parameters

expand
string[]

This endpoint supports expandable responses. For more, see the documentation page.

Body

application/json

Update Deal Request

name
string

The name of the deal

contact
object
stage
object
assignee
object | null

To remove the association, set assignee to null.

site
object | null

To remove the association, set site to null.

note
string | null

Free-text note for the deal. Displayed under 'Deal value estimate' in Backoffice. To remove the existing value, set to null.

starts_at
string<date-time> | null

The intended move-in date. To remove the existing move-in date, set to null.

metadata
object | null

Set of key-value pairs for storing additional information on the deal. Learn more about metadata.

line_items
object[] | null

Skip this property (do not include it inside the request) if you don't want to update the line items. Existing line items not included here in the update request will be removed. To remove all line items, provide an empty array. At most one item per type is allowed.

Maximum array length: 2

Deal Unit Type Line Item

Response

deal updated

Single Deal

deal
object

Deal

meta
object