V2 Merge Data Field Reference
This reference documents every field available in V2 merge data for tag templates. It is organized by top-level namespace. Use the field paths here directly in template tags.
For tag syntax (loops, conditionals, rich text), see How Tag Templates Work and the Template Expression Reference.
Top-Level Structure
V2 merge data is organized into four namespaces plus several top-level collections.
| Namespace / Collection | What it contains |
|---|---|
project | Project metadata, contacts, narratives, attachments, custom fields |
project_pricing | Financial totals, professional services, managed services, products, governance |
project_payments | Payment terms, pricing model, payment schedule |
locations | Service locations with phases and services nested inside |
language_fields | Aggregated language content (deliverables, assumptions, etc.) by type |
currency | Currency settings for the project |
survey_responses | Questionnaire response values, keyed by response slug |
Important: project_pricing and project_payments are top-level namespaces. They are not children of project. Using {project.project_pricing} will not work.
project fields
Core metadata
| Field | Example tag | Notes |
|---|---|---|
project_name | {project.project_name} | The project’s name |
client_name | {project.client_name} | Client company name |
account_name | {project.account_name} | Your organization’s name |
created_on | {project.created_on} | Date the project was created |
printed_on | {project.printed_on} | Current date (when document is generated) |
submitted_at | {project.submitted_at} | Date and time the project was submitted for approval |
approved_at | {project.approved_at} | Date and time the project was approved |
msa_date | {project.msa_date} | MSA date, if set on the project |
project_version | {project.project_version} | Latest version name string |
Date fields like created_on and printed_on support the .to_short_date filter when Include Formatting is enabled:
{project.printed_on.to_short_date}Current version object
The current_version object exposes details about the most recently created named version.
| Field | Example tag |
|---|---|
| Name | {project.current_version.name} |
| Comment | {project.current_version.comment} |
| Created by | {project.current_version.created_by} |
| Created date | {project.current_version.created} |
Narrative fields
Narrative fields are arrays of strings (one entry per paragraph). Loop over them to render each paragraph, or use the formatted_ version for a single rich text block.
| Narrative | Array tag | Formatted tag |
|---|---|---|
| Executive summary | {#project.executive_summary}{.}{/project.executive_summary} | {~~project.formatted_executive_summary} |
| Solution summary | {#project.solution_summary}{.}{/project.solution_summary} | {~~project.formatted_solution_summary} |
| Our responsibilities | {#project.our_responsibilities}{.}{/project.our_responsibilities} | {~~project.formatted_our_responsibilities} |
| Customer responsibilities | {#project.customer_responsibilities}{.}{/project.customer_responsibilities} | {~~project.formatted_customer_responsibilities} |
| Out of scope | {#project.out_of_scope}{.}{/project.out_of_scope} | {~~project.formatted_out_of_scope} |
Use the array approach when you need to apply per-paragraph styling or numbering. Use formatted_ when you want a single formatted block without per-item control.
The array ({.}) form renders plain text only. Markdown or HTML in the field value is inserted literally — HTML is escaped to visible characters, and a nested Markdown list collapses to one bullet per line. To render rich text (bold, links, nested bullet lists), use the formatted_ variable with the {~~} tag.
Contacts
All contact objects expose name, email, title, and phone.
Primary contact
The project’s primary customer contact. Wrap in a conditional block in case none is set.
{#project.primary_contact}
{name}
{title}
{email}
{phone}
{/project.primary_contact}Primary contacts also include user_defined_fields if your account has custom contact variables defined.
Presales engineer and sales executive
{#project.presales_engineer}
{name} — {email}
{/project.presales_engineer}
{#project.sales_executive}
{name} — {email}
{/project.sales_executive}All contacts (loop)
project.contacts is an array of all active contacts on the project. Each contact includes name, email, title, phone, and contact_type (a slug such as primary_customer_contact).
{#project.contacts}
{name} ({contact_type})
{/project.contacts}Teammates
Project collaborators (internal team members). Each teammate exposes the same name, email, title, phone fields.
{#project.teammates}
{name} — {email}
{/project.teammates}Client object
project.client is an object with all non-sensitive client attributes. Commonly used fields:
| Field | Example tag |
|---|---|
| Name | {project.client.name} |
| Logo URL | {project.client.logo_url} |
| Custom client variables | merged directly onto the client object |
Business unit
project.business_unit is an object with the project’s business unit, if assigned.
| Field | Example tag |
|---|---|
| Name | {project.business_unit.name} |
| Logo URL | {project.business_unit.logo_url} |
| Slug | {project.business_unit.unit_slug} |
Rate table
| Field | Example tag |
|---|---|
| Name | {project.rate_table.name} |
| Accounting code | {project.rate_table.accounting_code} |
| Slug | {project.rate_table.slug} |
Tags
project.tags is an array of tag strings applied to the project.
{#project.tags}{.}{/project.tags}Terms and conditions
An array of active terms and conditions attached to the project. Each item has name, slug, content (plain text), and formatted_content (HTML).
{#project.terms_and_conditions.length>0}
{#project.terms_and_conditions}
{~~formatted_content}
{/project.terms_and_conditions}
{/project.terms_and_conditions.length>0}Note: terms and conditions must be accessed with the project. prefix. {#terms_and_conditions} without a prefix will not render.
Text blocks
Text blocks are pre-written content configured in ScopeStack settings. Access them under project.text_blocks using the block’s slug. Always use {~~} rich text syntax.
{~~project.text_blocks.signatures}
{~~project.text_blocks.project_acceptance}
{~~project.text_blocks.change_management}User-defined fields (custom project variables)
Custom variables defined in your account settings are available under project.user_defined_fields. Each field is accessed by its variable name and exposes a value property.
{project.user_defined_fields.project_number.value}
{project.user_defined_fields.duration_weeks.value}
{project.user_defined_fields.sow_id.value}Use conditionals to show content based on a custom variable’s value:
{#project.user_defined_fields.msa_on_file.value=="yes"}
MSA is on file.
{/project.user_defined_fields.msa_on_file.value=="yes"}Attachments and logos
| Field | Example tag | Notes |
|---|---|---|
| Account logo | {%project.account_logo_url} | Use {%} image syntax |
| Client logo | {%project.client.logo_url} | Use {%} image syntax |
| Attachments | see below | Array of attachment objects |
project.attachments is an array. Each attachment has a slug (derived from its type name) and a url.
{#project.attachments}
{url}
{/project.attachments}project_pricing fields
Top-level totals
These are the rollup financial figures for the entire project.
| Field | Example tag | Notes |
|---|---|---|
total_contract_revenue | {project_pricing.total_contract_revenue.to_currency} | PS revenue + MRR over contract length |
total_contract_value | {project_pricing.total_contract_value.to_currency} | Contract revenue (alias) |
total_service_revenue | {project_pricing.total_service_revenue.to_currency} | PS + MS + third party revenue |
total_contract_cost | {project_pricing.total_contract_cost.to_currency} | Total cost |
total_contract_profit | {project_pricing.total_contract_profit.to_currency} | Revenue minus cost |
total_contract_margin | {project_pricing.total_contract_margin} | Margin as a percentage string |
total_customer_payment | {project_pricing.total_customer_payment.to_currency} | Contract revenue minus payment credits |
total_location_service_revenue | {project_pricing.total_location_service_revenue.to_currency} | Sum of service revenue across all locations |
Currency fields require .to_currency when Include Formatting is enabled.
professional_services
The professional_services object contains phases, locations, and lines of business for PS work, plus summary figures.
| Field | Example tag | Notes |
|---|---|---|
revenue | {project_pricing.professional_services.revenue.to_currency} | Total PS revenue |
net_revenue | {project_pricing.professional_services.net_revenue.to_currency} | PS revenue after adjustments |
adjustment | {project_pricing.professional_services.adjustment.to_currency} | Price adjustment amount |
discounted? | {#project_pricing.professional_services.discounted?} | Exists in merge data but crashes the template parser if used in a tag. Use a numeric comparison on adjustment instead. |
any? | {#project_pricing.professional_services.any?} | Exists in merge data but crashes the template parser if used in a tag. Use a .length > 0 check on phases or services instead. |
Phases
project_pricing.professional_services.phases is an array. Each phase contains a list of services and rollup financials.
| Field | Notes |
|---|---|
name | Phase display name |
slug | Phase identifier slug (e.g., no_phase, onsite_implement_language) |
services | Array of service objects for this phase |
locations | Array of location objects for this phase |
total_revenue | Phase total revenue |
total_cost | Phase total cost |
service_revenue | Phase service revenue |
service_cost | Phase service cost |
pm_revenue | Phase PM revenue |
language_fields | Array of language field objects aggregated for this phase |
{#project_pricing.professional_services.phases}
{^slug=="no_phase"}Phase: {name}{/slug=="no_phase"}
{#services}
{name}
{~~formatted_service_description}
{/services}
{/project_pricing.professional_services.phases}Common phase slugs: no_phase, inhouse_prep_language, onsite_implement_language, remote_implement_language, post_support_langauge (note: the last slug has a typo in the platform — “langauge” — and must be used exactly as written).
Lines of business
project_pricing.professional_services.lines_of_business is an array of LOB objects. Each LOB has name, code, slug, services (array), and service_categories (array of service category objects).
Each service category under a LOB also has name, code, slug, and services.
Locations (within professional_services)
project_pricing.professional_services.locations is an array of location objects. Each location has name, address, services, and rollup financial fields (total_revenue, service_revenue, etc.).
managed_services
| Field | Example tag | Notes |
|---|---|---|
mrr | {project_pricing.managed_services.mrr.to_currency} | Monthly recurring revenue |
mrr_adjustment | {project_pricing.managed_services.mrr_adjustment.to_currency} | MRR price adjustment |
billing_frequency | {project_pricing.managed_services.billing_frequency} | e.g., “Monthly”, “Quarterly” |
billing_interval | {project_pricing.managed_services.billing_interval} | e.g., “month”, “quarter” |
billing_revenue | {project_pricing.managed_services.billing_revenue.to_currency} | MRR times billing months |
billing_discount | {project_pricing.managed_services.billing_discount.to_currency} | MRR adjustment times billing months |
billing_net_revenue | {project_pricing.managed_services.billing_net_revenue.to_currency} | Net MRR times billing months |
contract_start_date | {project_pricing.managed_services.contract_start_date.to_short_date} | Service start date |
contract_end_date | {project_pricing.managed_services.contract_end_date.to_short_date} | Calculated contract end date |
contract_length | {project_pricing.managed_services.contract_length} | Number of months |
discounted? | {#project_pricing.managed_services.discounted?} | Exists in merge data but crashes the template parser if used in a tag. Use a numeric comparison on mrr_adjustment instead. |
any? | {#project_pricing.managed_services.any?} | Exists in merge data but crashes the template parser if used in a tag. Use a .length > 0 check on services instead. |
services | see service fields | Array of managed service objects |
locations | array | MS locations, same structure as PS locations |
lines_of_business | array | Same LOB structure as PS |
resources
project_pricing.resources is an array of resource summary rows. One row per resource, plus a TOTAL row at the end.
| Field | Notes |
|---|---|
resource_name | Resource display name (or TOTAL for the summary row) |
resource_slug | URL-safe slug (e.g., senior_engineer). The total row uses project_total. |
external_name | Resource external name |
description | Resource description |
accounting_code | Resource accounting code |
line_of_business | Name of the LOB the resource is assigned to |
quantity | Total hours for this resource |
hourly_rate | Resource hourly rate |
hourly_cost | Resource hourly cost |
discounted_rate | Same as hourly_rate |
service_revenue | Revenue from services (excluding governance) |
pm_revenue | Revenue from governance/PM |
total_revenue | Service revenue plus PM revenue |
total | Total revenue (alias for total_revenue) |
To loop over resources and exclude the total row:
{#project_pricing.resources}
{^resource_slug=="project_total"}
{resource_name} | {quantity} hrs | {hourly_rate.to_currency}/hr | {total.to_currency}
{/resource_slug=="project_total"}
{/project_pricing.resources}To show only the total row:
{#project_pricing.resources}
{#resource_slug=="project_total"}
Total: {total.to_currency}
{/resource_slug=="project_total"}
{/project_pricing.resources}product
The project_pricing.product object contains hardware and product line items.
| Field | Notes |
|---|---|
items | Array of product line items (see fields below) |
revenue | Total product revenue |
cost | Total product cost |
categories | Array of unique category slugs present in the product list |
subcategories | Array of unique subcategory slugs present in the product list |
Each item in project_pricing.product.items:
| Field | Notes |
|---|---|
name | Product name |
description | Product description |
sku | SKU |
quantity | Quantity |
unit_of_measure | Unit of measure |
category | Category name |
category_slug | Category name as a slug |
subcategory | Subcategory name |
subcategory_slug | Subcategory name as a slug |
manufacturer_part_number | Manufacturer part number |
custom | Whether this is a custom product |
list_price | List price per unit |
unit_price | Selling price per unit |
unit_cost | Cost per unit |
vendor_discount | Vendor discount percentage |
markup | Markup percentage |
revenue | Extended selling price (quantity times unit_price) |
cost | Extended cost |
location_name | Name of the service location this product is assigned to |
location_address | Address of the service location |
user_defined_fields | Custom product variables, if defined |
project_governance
project_pricing.project_governance contains governance items (project management, overhead, etc.).
| Field | Notes |
|---|---|
items | Array of governance line items (see fields below) |
revenue | Total governance revenue |
cost | Total governance cost |
Each item in project_pricing.project_governance.items:
| Field | Notes |
|---|---|
description | Governance description |
external_name | External-facing name |
hourly_rate | Hourly billing rate |
hourly_cost | Hourly cost |
hours | Total hours |
resource | Resource name |
resource_slug | Resource name as a slug |
revenue | Revenue for this governance item |
cost | Cost for this governance item |
calculation_type | How the item is calculated (e.g., fixed_hours, percent_of_total) |
rate | Rate value — either a percentage string or a number, depending on calculation_type |
assign_effort_to_service | Boolean — whether effort counts toward service hours |
travel_and_expense
project_pricing.travel_and_expense contains expense line items.
| Field | Notes |
|---|---|
included? | Boolean — whether expenses are included in the contract price |
items | Array of expense items (see fields below) |
revenue | Total expense revenue |
cost | Total expense cost |
travel_hours | Total travel hours across all resource-rate expenses |
Each item in project_pricing.travel_and_expense.items:
| Field | Notes |
|---|---|
name | Expense name |
description | Expense description |
quantity | Quantity |
rate | Unit rate |
revenue | Extended revenue |
cost | Extended cost |
travel_hours | Travel hours (only present for resource-rate expenses) |
payment_credits
project_pricing.payment_credits contains applied payment credits.
| Field | Notes |
|---|---|
items | Array of credit items |
total | Total credit amount |
Each item:
| Field | Notes |
|---|---|
criteria | Array of strings describing the credit criteria |
formatted_criteria | HTML-formatted criteria (use {~~}) |
amount | Credit amount |
payment_source | Source of the credit |
description | Credit description |
third_party_services
project_pricing.third_party_services contains subcontractor quotes.
| Field | Notes |
|---|---|
revenue | Total third party revenue |
cost | Total third party cost |
profit | Total third party profit |
items | Array of quote objects (see fields below) |
Each item in items:
| Field | Notes |
|---|---|
description | Quote description |
total_hours | Total quoted hours |
cost | Quote cost |
revenue | Quote price |
hourly_revenue | Revenue per hour |
hourly_cost | Cost per hour |
profit | Quote profit |
line_of_business | LOB name |
service_category | Service category name |
service_type | Service type slug |
pricing_level | Either service or quote |
subcontractor | Vendor object with name and address fields |
services | Array of third party service line items |
Service fields
Service objects appear inside phase loops ({#services}), location phase loops, LOB loops, and managed services. A service can be either a professional service or a managed service.
The following fields are available on every service object.
Identification
| Field | Notes |
|---|---|
name | Service name |
uuid | Service UUID |
service_type | professional or managed (StringInquirer — supports service_type=="professional") |
task_source | Source of the service (e.g., standard, custom) |
sku | SKU, if set |
lob | Line of business name |
service_category | Service category name |
do_not_print | Boolean — if true, the service is marked to exclude from documents |
Hours and quantity
| Field | Notes |
|---|---|
quantity | Quantity (number of units) |
total_hours | Total hours for this service — the service’s own hours plus the rolled-up hours of all its subservices. Rendered as text (a string), so for a per-service hours total render this field directly rather than summing subservices with sumBy. |
extended_hours | Extended hours for the service itself (accounts for overrides), as a string. Does not include subservices — use total_hours for the rollup. |
override_hours | Override hours value, if set |
actual_hours | Actual hours logged, if tracked |
multiple? | Boolean — true when quantity is greater than 1 |
Pricing
| Field | Notes |
|---|---|
total_revenue | Total revenue including PM allocation |
total_cost | Total cost |
service_revenue | Service revenue (excluding PM) |
service_cost | Service cost |
pm_revenue | PM revenue allocated to this service |
unit_revenue | Revenue per unit (total_revenue divided by quantity) |
pricing_model | String: time_and_materials or fixed_fee |
pricing_strategy | Pricing strategy integer code |
target_margin | Target margin, if set |
advanced_pricing | Boolean — true if custom price or custom hours are set |
Resource
| Field | Notes |
|---|---|
resource_name | Resource name (or subcontractor name for third party services) |
resource_external_name | Resource external name |
resource_accounting_code | Resource accounting code |
third_party? | Boolean — true for subcontractor services |
Description
| Field | Notes |
|---|---|
service_description | Array of strings (paragraphs). Always iterate: {#service_description}{.}{/service_description} |
formatted_service_description | HTML-formatted description. Use {~~formatted_service_description}. At subservice level, use the array form instead to avoid duplication. |
Uniqueness and deduplication
| Field | Notes |
|---|---|
unique | Boolean — true for the first occurrence of this service name in the project |
unique? | Exists in merge data but crashes the template parser if used in a tag. Use unique (without ?) instead. |
unique_count | Number of times this service name appears in the project (set only when unique is true) |
Use unique to de-duplicate services when you want to show each service name only once:
{#services}
{#unique}
{name} (appears {unique_count} times)
{/unique}
{/services}Language fields on a service
Each service has a language_fields object keyed by language field slug. Access per-service language content directly without an outer loop:
{#services}
{name}
{#language_fields.deliverable.sentences}
{.}
{/language_fields.deliverable.sentences}
{#language_fields.customer.sentences}
{.}
{/language_fields.customer.sentences}
{/services}User-defined fields on a service
If your account has custom service variables defined, they appear under user_defined_fields on each service object, using the same structure as project-level variables.
Subservices
Each service has a subservices array. Subservices share most fields with services but have a reduced set.
| Field | Notes |
|---|---|
name | Subservice name |
quantity | Quantity (a true number — sumBy:"quantity" totals correctly) |
extended_hours | Extended hours for this subservice (quantity times unit hours), rendered as text (a string like "2.0"). Subservices have no total_hours field — to total a service’s subservice hours, render total_hours at the service scope rather than summing this with sumBy (which concatenates strings). |
service_description | Array of strings. Always use {#service_description}{.}{/service_description} at subservice level. Do not use {~~formatted_service_description} on subservices — it causes content duplication. |
total_revenue | Revenue |
total_cost | Cost |
service_revenue | Service revenue |
service_cost | Service cost |
resource_name | Resource name |
language_fields | Language fields object keyed by slug |
{#services}
{name}
{#service_description}{.}{/service_description}
{#subservices}
({quantity}) {name}
{#service_description}{.}{/service_description}
{/subservices}
{/services}locations fields
locations is a top-level array of service location objects. Use this for location-first document layouts. Each location includes all its phases and services pre-organized.
Location object fields
| Field | Notes |
|---|---|
name | Location name |
street | Street address line 1 |
street2 | Street address line 2 |
city | City |
state | State |
postal_code | Postal code |
country | Country name (full English name, not code) |
address | Full formatted address string (combines street, city, state, postal code, country) |
remote | Boolean — true for remote locations |
service_revenue | Total service revenue for this location |
phases | Array of phase objects containing services at this location |
lines_of_business | Array of LOB objects for this location |
products | Array of product items assigned to this location |
user_defined_fields | Custom location variables, if defined |
Phases within a location
Each phase object inside locations[].phases has:
| Field | Notes |
|---|---|
name | Phase name |
slug | Phase slug |
services | Services at this location in this phase |
user_defined_fields | Custom location variables for this phase-location combination |
Location-first template pattern
{#locations}
{name}
{address}
{#phases}
{^slug=="no_phase"}
Phase: {name}
{/slug=="no_phase"}
{#services}
{name}
{~~formatted_service_description}
{#subservices}
({quantity}) {name}
{#service_description}{.}{/service_description}
{/subservices}
{/services}
{/phases}
{/locations}language_fields
Language fields aggregate supplementary content (deliverables, assumptions, customer responsibilities, out-of-scope items) across all services. They exist at three scopes: top-level (entire project), per-phase, and per-service.
Top-level language_fields
language_fields is a top-level array. Each entry represents one language field type.
| Field | Notes |
|---|---|
name | Display name of the language field |
slug | Identifier slug |
introduction | Array of preamble strings |
formatted_introduction | HTML-formatted preamble. Use {~~formatted_introduction}. |
conclusion | Array of postamble strings |
formatted_conclusion | HTML-formatted postamble. Use {~~formatted_conclusion}. |
sentences | Array of all content sentences aggregated from services |
formatted_sentences | HTML-formatted sentences. Use {~~formatted_sentences}. |
phases | Array of phase objects, each with name, slug, sentences, and formatted_sentences |
managed_services | Object with sentences and formatted_sentences for MS-only content |
Standard language field slugs
| Slug | Section |
|---|---|
deliverable | Deliverables |
customer | Customer Responsibilities |
assumptions | Key Assumptions |
out | Out of Scope |
Note: the slugs are abbreviated. Use "out", not "out_of_scope". Use "customer", not "customer_responsibilities".
Top-level language field loop
{#language_fields}
{#slug=="deliverable"}
Deliverables
{~~formatted_introduction}
{~~formatted_sentences}
{~~formatted_conclusion}
{/slug=="deliverable"}
{#slug=="customer"}
Customer Responsibilities
{~~formatted_introduction}
{~~formatted_sentences}
{/slug=="customer"}
{/language_fields}The body of each field is rendered with {~~formatted_sentences}, the rich-text tag over the field’s HTML variable. This is what produces formatted output — bold, links, and nested bullet lists authored in the field. The plain {#sentences}{.}{/sentences} loop instead inserts each raw line as plain text (escaping HTML and flattening a nested list to one bullet per line), so use it only when you deliberately want unformatted, per-line output. To group the content by phase, use {#phases}{~~formatted_sentences}{/phases}.
This is a different field and loop context than service_description at the subservice level, where the array form is required to avoid duplication. That duplication caveat does not apply to language fields.
This example always prints the section heading. To hide a heading when the field has no content on a project, wrap the heading and content in a \{#sentences.length > 0\} guard. See Hiding a heading when its section is empty.
Phase-scoped language content
To show language content grouped by phase, use the phases array within each language field:
{#language_fields}
{#slug=="deliverable"}
{#phases}
{name}
{#sentences}{.}{/sentences}
{/phases}
{/slug=="deliverable"}
{/language_fields}project_payments fields
Payment terms and schedule data live under project_payments.
Pricing model and payment terms
| Field | Notes |
|---|---|
pricing_model | String: fixed_fee, time_and_materials, mixed, or other. mixed is the default when no payment term is set. |
payment_terms.name | Payment terms name |
payment_terms.include_expenses | Boolean — whether expenses are included in pricing |
payment_terms.include_hardware | Boolean — whether hardware is included in pricing |
payment_terms.slug | Payment terms slug |
Currency objects
| Field | Notes |
|---|---|
default_currency.name | Default currency name |
default_currency.conversion_rate | Conversion rate |
project_currency.name | Project currency name |
project_currency.converted? | Boolean — true when project currency matches default |
Payment schedule
project_payments.schedule is an array of payment schedule items.
| Field | Notes |
|---|---|
description | Payment description or milestone |
amount_due | Amount due for this payment |
payment_date | Scheduled payment date (if set) |
{#project_payments.schedule.length>0}
Payment Schedule:
{#project_payments.schedule}
{description}: {amount_due.to_currency}
{#payment_date}{payment_date.to_short_date}{/payment_date}
{/project_payments.schedule}
{/project_payments.schedule.length>0}project_payments.arr_schedule follows the same structure but groups payments annually.
Conditional blocks by pricing model
{#project_payments.pricing_model=="fixed_fee"}
This is a fixed fee engagement.
{/project_payments.pricing_model=="fixed_fee"}
{#project_payments.pricing_model=="time_and_materials"}
This engagement is billed on a time and materials basis.
{/project_payments.pricing_model=="time_and_materials"}
{^project_payments.payment_terms.include_expenses}
Expenses are billed separately and are not included in this estimate.
{/project_payments.payment_terms.include_expenses}currency fields
currency is a top-level object with the project’s currency settings.
| Field | Notes |
|---|---|
name | Currency name (e.g., “US Dollar”) |
symbol | Currency symbol (e.g., ”$“) |
iso_code | ISO currency code (e.g., “USD”) |
conversion_rate | Exchange rate from default currency |
unit | Currency symbol for manual formatting (e.g., ”$”). Use as {currency.unit}{value*1|toFixed:2} when formatting is disabled. |
separator | Decimal separator character (e.g., ”.”) |
delimiter | Thousands grouping character (e.g., ”,“) |
precision | Number of decimal places for currency display |
survey_responses
survey_responses is a flat object keyed by response slug. Each value is the response text or a selected option value. Date-type responses are formatted according to account settings.
{survey_responses.implementation_scope}
{survey_responses.customer_size}Formatted fields summary
Every field that has a formatted_ counterpart is listed below. These fields contain HTML and must be rendered with {~~}.
| Raw field | Formatted field |
|---|---|
project.executive_summary (array) | project.formatted_executive_summary |
project.solution_summary (array) | project.formatted_solution_summary |
project.our_responsibilities (array) | project.formatted_our_responsibilities |
project.customer_responsibilities (array) | project.formatted_customer_responsibilities |
project.out_of_scope (array) | project.formatted_out_of_scope |
service_description (array) | formatted_service_description (service level only) |
language_fields[].introduction (array) | language_fields[].formatted_introduction |
language_fields[].conclusion (array) | language_fields[].formatted_conclusion |
language_fields[].sentences (array) | language_fields[].formatted_sentences |
project.terms_and_conditions[].content | project.terms_and_conditions[].formatted_content |
project_pricing.payment_credits.items[].criteria (array) | project_pricing.payment_credits.items[].formatted_criteria |
project.text_blocks.* | (text blocks are always HTML — always use {~~}) |
User-defined fields summary
Custom variables can be defined at multiple levels in ScopeStack. Each level’s variables appear under a user_defined_fields object on the corresponding item.
| Context | Access path |
|---|---|
| Project | {project.user_defined_fields.<name>.value} |
| Contact (primary) | {#project.primary_contact}...{user_defined_fields.<name>.value}...{/project.primary_contact} |
| Service | {#services}...{user_defined_fields.<name>.value}...{/services} |
| Product | {#project_pricing.product.items}...{user_defined_fields.<name>.value}...{/...} |
| Service location | {#locations}...{user_defined_fields.<name>.value}...{/locations} |
| Teammate | {#project.teammates}...{user_defined_fields.<name>.value}...{/project.teammates} |
The variable name in the path is the internal variable name set in your account’s project variables configuration, not the display label.