curl --request POST \
--url https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search \
--header 'Content-Type: application/json' \
--data '
{
"contracts": [
{
"deal_name": "<string>"
}
]
}
'import requests
url = "https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search"
payload = { "contracts": [{ "deal_name": "<string>" }] }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({contracts: [{deal_name: '<string>'}]})
};
fetch('https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search', 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.meetcampfire.com/rr/api/v1/contracts/bulk-search",
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([
'contracts' => [
[
'deal_name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"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.meetcampfire.com/rr/api/v1/contracts/bulk-search"
payload := strings.NewReader("{\n \"contracts\": [\n {\n \"deal_name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.meetcampfire.com/rr/api/v1/contracts/bulk-search")
.header("Content-Type", "application/json")
.body("{\n \"contracts\": [\n {\n \"deal_name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"contracts\": [\n {\n \"deal_name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"id": 123,
"entity_name": "<string>",
"client_name": "<string>",
"client_campfire_id": "<string>",
"client_terms": "<string>",
"default_payment_term_name": "<string>",
"department_name": "<string>",
"parent_department_name": "<string>",
"parent_department": 123,
"total_revenue": 0,
"total_mrr": 0,
"total_deferred_revenue": 0,
"entity_currency": "<string>",
"attachments": [
{
"id": 123,
"customer": 123,
"created_at": "2023-11-07T05:31:56Z",
"created_by": 123,
"created_by_name": "<string>",
"created_by_email": "<string>",
"last_modified_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"url": "<string>",
"s3_path": "<string>",
"app": "<string>",
"model": "<string>",
"is_deleted": false,
"deleted_at": "2023-11-07T05:31:56Z",
"s3_content_type": "<string>",
"s3_content_length": 1073741823,
"object_id": 1073741823
}
],
"last_modified_at": "2023-11-07T05:31:56Z",
"is_deleted": "<string>",
"deleted_at": "<string>",
"has_invoices": false,
"has_journal_entries": false,
"has_credit_memos": false,
"effective_end_date": "2023-12-25",
"working_end_date": "2023-12-25",
"evergreen_locked_date": "2023-12-25",
"search_vector": "<string>",
"search_text": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"customer": 123,
"tags": "<string>",
"currency": "USD",
"contract_end_date": "2023-12-25",
"is_evergreen": false,
"auto_send_invoices": false,
"skip_evergreen_invoice_generation": false,
"auto_apply_customer_stripe_config_to_invoices": false,
"usage_tiers": "<string>",
"billing_frequency": "monthly",
"deal_name": "<string>",
"deal_id": "<string>",
"consultant": "<string>",
"closed_date": "2023-12-25",
"total_contract_value": 0,
"contract_start_date": "2023-12-25",
"exchange_rate": 0,
"exchange_rate_book": 0,
"crm_link": "<string>",
"contract_link": "<string>",
"status": "ACTIVE",
"source": "SALESFORCE",
"source_deal_data": null,
"auto_renew": true,
"auto_renew_duration": -1,
"auto_renew_invoice": true,
"evergreen_date_boundary_mode": "CONTRACT_PERIOD",
"tag_ids": [
0
],
"tag_group_ids": [
0
],
"minimum_monthly_commitment_amount": 0,
"minimum_monthly_commitment_quantity": 0,
"purchase_order_number": "<string>",
"entity": 123,
"client": 123,
"default_payment_term": 123,
"department": 123,
"journal_entries": [
123
]
}
]Bulk Search Contracts
Search for contracts by deal_name in a single request.
curl --request POST \
--url https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search \
--header 'Content-Type: application/json' \
--data '
{
"contracts": [
{
"deal_name": "<string>"
}
]
}
'import requests
url = "https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search"
payload = { "contracts": [{ "deal_name": "<string>" }] }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({contracts: [{deal_name: '<string>'}]})
};
fetch('https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search', 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.meetcampfire.com/rr/api/v1/contracts/bulk-search",
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([
'contracts' => [
[
'deal_name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"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.meetcampfire.com/rr/api/v1/contracts/bulk-search"
payload := strings.NewReader("{\n \"contracts\": [\n {\n \"deal_name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.meetcampfire.com/rr/api/v1/contracts/bulk-search")
.header("Content-Type", "application/json")
.body("{\n \"contracts\": [\n {\n \"deal_name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetcampfire.com/rr/api/v1/contracts/bulk-search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"contracts\": [\n {\n \"deal_name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"id": 123,
"entity_name": "<string>",
"client_name": "<string>",
"client_campfire_id": "<string>",
"client_terms": "<string>",
"default_payment_term_name": "<string>",
"department_name": "<string>",
"parent_department_name": "<string>",
"parent_department": 123,
"total_revenue": 0,
"total_mrr": 0,
"total_deferred_revenue": 0,
"entity_currency": "<string>",
"attachments": [
{
"id": 123,
"customer": 123,
"created_at": "2023-11-07T05:31:56Z",
"created_by": 123,
"created_by_name": "<string>",
"created_by_email": "<string>",
"last_modified_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"url": "<string>",
"s3_path": "<string>",
"app": "<string>",
"model": "<string>",
"is_deleted": false,
"deleted_at": "2023-11-07T05:31:56Z",
"s3_content_type": "<string>",
"s3_content_length": 1073741823,
"object_id": 1073741823
}
],
"last_modified_at": "2023-11-07T05:31:56Z",
"is_deleted": "<string>",
"deleted_at": "<string>",
"has_invoices": false,
"has_journal_entries": false,
"has_credit_memos": false,
"effective_end_date": "2023-12-25",
"working_end_date": "2023-12-25",
"evergreen_locked_date": "2023-12-25",
"search_vector": "<string>",
"search_text": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"customer": 123,
"tags": "<string>",
"currency": "USD",
"contract_end_date": "2023-12-25",
"is_evergreen": false,
"auto_send_invoices": false,
"skip_evergreen_invoice_generation": false,
"auto_apply_customer_stripe_config_to_invoices": false,
"usage_tiers": "<string>",
"billing_frequency": "monthly",
"deal_name": "<string>",
"deal_id": "<string>",
"consultant": "<string>",
"closed_date": "2023-12-25",
"total_contract_value": 0,
"contract_start_date": "2023-12-25",
"exchange_rate": 0,
"exchange_rate_book": 0,
"crm_link": "<string>",
"contract_link": "<string>",
"status": "ACTIVE",
"source": "SALESFORCE",
"source_deal_data": null,
"auto_renew": true,
"auto_renew_duration": -1,
"auto_renew_invoice": true,
"evergreen_date_boundary_mode": "CONTRACT_PERIOD",
"tag_ids": [
0
],
"tag_group_ids": [
0
],
"minimum_monthly_commitment_amount": 0,
"minimum_monthly_commitment_quantity": 0,
"purchase_order_number": "<string>",
"entity": 123,
"client": 123,
"default_payment_term": 123,
"department": 123,
"journal_entries": [
123
]
}
]Body
Show child attributes
Show child attributes
Response
-10000000000000 < x < 10000000000000-10000000000000 < x < 10000000000000-10000000000000 < x < 10000000000000Show child attributes
Show child attributes
Rolling horizon end date for active evergreen contracts. It will be auto-generated by Campfire backend. Null for standard contracts.
Canonical end date used by the system. Equals contract_end_date for standard or terminated contracts, and effective_end_date for active evergreen contracts.
Inclusive lock date for evergreen contracts based on paid invoices and close books date. Dates on or before this value are immutable. Null for non-evergreen contracts, or when no financial locking events exist.
Fixed end date for standard contracts. Leave null for evergreen contracts (is_evergreen=true).
Set true for evergreen contracts (no fixed end date). Evergreen contracts cannot also be auto-renew. Auto-renew is a legacy method to extend contracts.
When true, generated invoices are automatically sent on their invoice date.
For Evergreen contracts only. Set at contract creation; existing contracts cannot change this setting. False means current behavior. True skips only Campfire's auto-generated evergreen invoices; revenue transactions still generate; existing invoices are not cleaned up.
Evergreen contracts only. When true, evergreen-generated invoices inherit stripe_connection and use_stripe_auto_bill from the contract customer.
monthly- Monthlyquarterly- Quarterlybiannual- Bi Annualyannual- Annualone_time- One Timecustom- Custom
monthly, quarterly, biannual, annual, one_time, custom 250250250-1000000000000000000 < x < 1000000000000000000-100000000000000 < x < 100000000000000-100000000000000 < x < 100000000000000500500ACTIVE- ActivePENDING- PendingCOMPLETED- CompletedDELETED- Deleted
ACTIVE, PENDING, COMPLETED, DELETED SALESFORCE- SalesforceHUBSPOT- HubspotSTRIPE- StripeMANUAL- Manual
SALESFORCE, HUBSPOT, STRIPE, MANUAL -2147483648 <= x <= 2147483647Controls evergreen subscription date boundaries. CONTRACT_PERIOD preserves contract billing-period alignment; EXACT_DATE uses the subscriptions' exact service dates.
CONTRACT_PERIOD- Contract billing periodEXACT_DATE- Exact service dates
CONTRACT_PERIOD, EXACT_DATE -9223372036854776000 <= x <= 9223372036854776000-9223372036854776000 <= x <= 9223372036854776000Minimum monthly commitment amount (allowance threshold)
-1000000000000000000 < x < 1000000000000000000Minimum monthly commitment quantity (allowance threshold in units)
-1000000000000000000 < x < 1000000000000000000120Contract-level default payment term for generated invoices. Currently applied only to automatically generated Evergreen invoices; other contract invoice flows retain their existing payment-term selection behavior. Support may be extended to additional contract types in the future.