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,
"monthly_billing_alignment_locked": true,
"effective_end_date": "2023-12-25",
"working_end_date": "2023-12-25",
"evergreen_locked_date": "2023-12-25",
"tax_exempt": true,
"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",
"termination_date": "2023-12-25",
"is_evergreen": false,
"auto_send_invoices": false,
"skip_evergreen_invoice_generation": false,
"auto_apply_customer_stripe_config_to_invoices": false,
"exclude_from_tax_connection": false,
"usage_tiers": "<string>",
"invoice_email": "jsmith@example.com",
"billing_frequency": "monthly",
"monthly_billing_period_alignment": "anniversary",
"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>",
"billing_address": "<string>",
"billing_addressee": "<string>",
"shipping_address": "<string>",
"shipping_addressee": "<string>",
"invoice_cc_emails": "<string>",
"vat_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,
"monthly_billing_alignment_locked": true,
"effective_end_date": "2023-12-25",
"working_end_date": "2023-12-25",
"evergreen_locked_date": "2023-12-25",
"tax_exempt": true,
"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",
"termination_date": "2023-12-25",
"is_evergreen": false,
"auto_send_invoices": false,
"skip_evergreen_invoice_generation": false,
"auto_apply_customer_stripe_config_to_invoices": false,
"exclude_from_tax_connection": false,
"usage_tiers": "<string>",
"invoice_email": "jsmith@example.com",
"billing_frequency": "monthly",
"monthly_billing_period_alignment": "anniversary",
"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>",
"billing_address": "<string>",
"billing_addressee": "<string>",
"shipping_address": "<string>",
"shipping_addressee": "<string>",
"invoice_cc_emails": "<string>",
"vat_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
Whether financial activity makes monthly billing period alignment immutable.
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 sent, partial, or 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).
First unearned service date when a standard contract was terminated early.
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.
When true, invoices generated from this contract are created with exclude_from_tax_connection set, so no tax is calculated through the entity's tax connection.
254monthly- Monthlyquarterly- Quarterlybiannual- Bi Annualyannual- Annualone_time- One Timecustom- Custom
monthly, quarterly, biannual, annual, one_time, custom Controls service-period boundaries for monthly subscription and usage billing. Anniversary preserves contract-date boundaries; calendar month creates leading and trailing stubs.
anniversary- Contract anniversarycalendar_month- Calendar month
anniversary, calendar_month 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 < 1000000000000000000120Bill-to address for invoices from this contract. Null inherits the client's.
Bill-to addressee for invoices from this contract. Null inherits the client's.
255Ship-to address for invoices from this contract. Null inherits the client's.
Ship-to addressee for invoices from this contract. Null inherits the client's.
255Comma-separated addresses copied on invoices from this contract.
Tax ID printed on invoices from this contract. Null inherits the client's.
250Contract-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.