curl --request POST \
--url https://api.journeybee.io/v1/deals/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lead_uuid": "<string>",
"label": "<string>",
"deal_value": 0,
"stage_uuid": "<string>",
"currency_uuid": "<string>",
"expiration_date": "<string>",
"tag_uuids": [
"<string>"
],
"custom_fields": [
{
"custom_field_uuid": "<string>",
"value": {
"text": "<string>",
"number": 123,
"date": "<string>",
"boolean": true,
"select": 123,
"multi_select": [
123
]
}
}
]
}
'import requests
url = "https://api.journeybee.io/v1/deals/"
payload = {
"lead_uuid": "<string>",
"label": "<string>",
"deal_value": 0,
"stage_uuid": "<string>",
"currency_uuid": "<string>",
"expiration_date": "<string>",
"tag_uuids": ["<string>"],
"custom_fields": [
{
"custom_field_uuid": "<string>",
"value": {
"text": "<string>",
"number": 123,
"date": "<string>",
"boolean": True,
"select": 123,
"multi_select": [123]
}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lead_uuid: '<string>',
label: '<string>',
deal_value: 0,
stage_uuid: '<string>',
currency_uuid: '<string>',
expiration_date: '<string>',
tag_uuids: ['<string>'],
custom_fields: [
{
custom_field_uuid: '<string>',
value: {
text: '<string>',
number: 123,
date: '<string>',
boolean: true,
select: 123,
multi_select: [123]
}
}
]
})
};
fetch('https://api.journeybee.io/v1/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://api.journeybee.io/v1/deals/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'lead_uuid' => '<string>',
'label' => '<string>',
'deal_value' => 0,
'stage_uuid' => '<string>',
'currency_uuid' => '<string>',
'expiration_date' => '<string>',
'tag_uuids' => [
'<string>'
],
'custom_fields' => [
[
'custom_field_uuid' => '<string>',
'value' => [
'text' => '<string>',
'number' => 123,
'date' => '<string>',
'boolean' => true,
'select' => 123,
'multi_select' => [
123
]
]
]
]
]),
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://api.journeybee.io/v1/deals/"
payload := strings.NewReader("{\n \"lead_uuid\": \"<string>\",\n \"label\": \"<string>\",\n \"deal_value\": 0,\n \"stage_uuid\": \"<string>\",\n \"currency_uuid\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"tag_uuids\": [\n \"<string>\"\n ],\n \"custom_fields\": [\n {\n \"custom_field_uuid\": \"<string>\",\n \"value\": {\n \"text\": \"<string>\",\n \"number\": 123,\n \"date\": \"<string>\",\n \"boolean\": true,\n \"select\": 123,\n \"multi_select\": [\n 123\n ]\n }\n }\n ]\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(string(body))
}HttpResponse<String> response = Unirest.post("https://api.journeybee.io/v1/deals/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lead_uuid\": \"<string>\",\n \"label\": \"<string>\",\n \"deal_value\": 0,\n \"stage_uuid\": \"<string>\",\n \"currency_uuid\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"tag_uuids\": [\n \"<string>\"\n ],\n \"custom_fields\": [\n {\n \"custom_field_uuid\": \"<string>\",\n \"value\": {\n \"text\": \"<string>\",\n \"number\": 123,\n \"date\": \"<string>\",\n \"boolean\": true,\n \"select\": 123,\n \"multi_select\": [\n 123\n ]\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.journeybee.io/v1/deals/")
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 \"lead_uuid\": \"<string>\",\n \"label\": \"<string>\",\n \"deal_value\": 0,\n \"stage_uuid\": \"<string>\",\n \"currency_uuid\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"tag_uuids\": [\n \"<string>\"\n ],\n \"custom_fields\": [\n {\n \"custom_field_uuid\": \"<string>\",\n \"value\": {\n \"text\": \"<string>\",\n \"number\": 123,\n \"date\": \"<string>\",\n \"boolean\": true,\n \"select\": 123,\n \"multi_select\": [\n 123\n ]\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"uuid": "<string>",
"label": "<string>",
"deal_value": 123,
"total_commission_value": 123,
"expiration_date": "<string>",
"stage": {
"uuid": "<string>",
"label": "<string>"
},
"lead": {
"uuid": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"company_name": "<string>"
},
"partner": {
"uuid": "<string>",
"name": "<string>"
},
"currency": {
"uuid": "<string>",
"code": "<string>",
"label": "<string>"
},
"tags": [
{
"uuid": "<string>",
"label": "<string>"
}
],
"assigned_users": [
{
"uuid": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
],
"custom_fields": [
{
"uuid": "<string>",
"label": "<string>",
"value": {
"text": "<string>",
"number": 123,
"date": "<string>",
"boolean": true,
"select": 123,
"multi_select": [
123
]
},
"options": [
{
"id": 123,
"label": "<string>"
}
]
}
],
"created_at": "<string>",
"updated_at": "<string>"
}Create a deal
Create a deal on a lead. A lead is required. Multiple deals can exist on the same lead. If no stage is provided, the first deal stage for the lead’s partner type is used. If no currency is provided, the company’s default currency is used. Deal stages and custom fields are scoped by partner type. Custom fields may be required or rule-controlled (visibility, locking, auto-population) — validation errors return per-field details with a machine-readable reason. See the Custom Field Validation section of the Error Handling guide.
curl --request POST \
--url https://api.journeybee.io/v1/deals/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lead_uuid": "<string>",
"label": "<string>",
"deal_value": 0,
"stage_uuid": "<string>",
"currency_uuid": "<string>",
"expiration_date": "<string>",
"tag_uuids": [
"<string>"
],
"custom_fields": [
{
"custom_field_uuid": "<string>",
"value": {
"text": "<string>",
"number": 123,
"date": "<string>",
"boolean": true,
"select": 123,
"multi_select": [
123
]
}
}
]
}
'import requests
url = "https://api.journeybee.io/v1/deals/"
payload = {
"lead_uuid": "<string>",
"label": "<string>",
"deal_value": 0,
"stage_uuid": "<string>",
"currency_uuid": "<string>",
"expiration_date": "<string>",
"tag_uuids": ["<string>"],
"custom_fields": [
{
"custom_field_uuid": "<string>",
"value": {
"text": "<string>",
"number": 123,
"date": "<string>",
"boolean": True,
"select": 123,
"multi_select": [123]
}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lead_uuid: '<string>',
label: '<string>',
deal_value: 0,
stage_uuid: '<string>',
currency_uuid: '<string>',
expiration_date: '<string>',
tag_uuids: ['<string>'],
custom_fields: [
{
custom_field_uuid: '<string>',
value: {
text: '<string>',
number: 123,
date: '<string>',
boolean: true,
select: 123,
multi_select: [123]
}
}
]
})
};
fetch('https://api.journeybee.io/v1/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://api.journeybee.io/v1/deals/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'lead_uuid' => '<string>',
'label' => '<string>',
'deal_value' => 0,
'stage_uuid' => '<string>',
'currency_uuid' => '<string>',
'expiration_date' => '<string>',
'tag_uuids' => [
'<string>'
],
'custom_fields' => [
[
'custom_field_uuid' => '<string>',
'value' => [
'text' => '<string>',
'number' => 123,
'date' => '<string>',
'boolean' => true,
'select' => 123,
'multi_select' => [
123
]
]
]
]
]),
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://api.journeybee.io/v1/deals/"
payload := strings.NewReader("{\n \"lead_uuid\": \"<string>\",\n \"label\": \"<string>\",\n \"deal_value\": 0,\n \"stage_uuid\": \"<string>\",\n \"currency_uuid\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"tag_uuids\": [\n \"<string>\"\n ],\n \"custom_fields\": [\n {\n \"custom_field_uuid\": \"<string>\",\n \"value\": {\n \"text\": \"<string>\",\n \"number\": 123,\n \"date\": \"<string>\",\n \"boolean\": true,\n \"select\": 123,\n \"multi_select\": [\n 123\n ]\n }\n }\n ]\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(string(body))
}HttpResponse<String> response = Unirest.post("https://api.journeybee.io/v1/deals/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lead_uuid\": \"<string>\",\n \"label\": \"<string>\",\n \"deal_value\": 0,\n \"stage_uuid\": \"<string>\",\n \"currency_uuid\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"tag_uuids\": [\n \"<string>\"\n ],\n \"custom_fields\": [\n {\n \"custom_field_uuid\": \"<string>\",\n \"value\": {\n \"text\": \"<string>\",\n \"number\": 123,\n \"date\": \"<string>\",\n \"boolean\": true,\n \"select\": 123,\n \"multi_select\": [\n 123\n ]\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.journeybee.io/v1/deals/")
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 \"lead_uuid\": \"<string>\",\n \"label\": \"<string>\",\n \"deal_value\": 0,\n \"stage_uuid\": \"<string>\",\n \"currency_uuid\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"tag_uuids\": [\n \"<string>\"\n ],\n \"custom_fields\": [\n {\n \"custom_field_uuid\": \"<string>\",\n \"value\": {\n \"text\": \"<string>\",\n \"number\": 123,\n \"date\": \"<string>\",\n \"boolean\": true,\n \"select\": 123,\n \"multi_select\": [\n 123\n ]\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"uuid": "<string>",
"label": "<string>",
"deal_value": 123,
"total_commission_value": 123,
"expiration_date": "<string>",
"stage": {
"uuid": "<string>",
"label": "<string>"
},
"lead": {
"uuid": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"company_name": "<string>"
},
"partner": {
"uuid": "<string>",
"name": "<string>"
},
"currency": {
"uuid": "<string>",
"code": "<string>",
"label": "<string>"
},
"tags": [
{
"uuid": "<string>",
"label": "<string>"
}
],
"assigned_users": [
{
"uuid": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
],
"custom_fields": [
{
"uuid": "<string>",
"label": "<string>",
"value": {
"text": "<string>",
"number": 123,
"date": "<string>",
"boolean": true,
"select": 123,
"multi_select": [
123
]
},
"options": [
{
"id": 123,
"label": "<string>"
}
]
}
],
"created_at": "<string>",
"updated_at": "<string>"
}Authorizations
API key authentication. Use "Bearer <api_key>" or "Api-Key <api_key>".
Body
Monetary amount in WHOLE currency units (the displayed amount, e.g. 1000.00 = one thousand) — NOT minor units/cents. Do NOT divide or multiply by 100; send and show the amount as-is.
Show child attributes
Show child attributes
Response
Default Response
Monetary amount in WHOLE currency units (the displayed amount, e.g. 1000.00 = one thousand) — NOT minor units/cents. Do NOT divide or multiply by 100; send and show the amount as-is.
Monetary amount in WHOLE currency units (the displayed amount, e.g. 1000.00 = one thousand) — NOT minor units/cents. Do NOT divide or multiply by 100; send and show the amount as-is.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes