Party
Overview
Party Groups represent organizations or individuals that your company does business with. They capture customer, supplier, carrier, and tax authority information in a flexible structure that allows a single entity to play multiple roles. This eliminates data duplication when the same company is both a customer and a supplier.
Customers are parties who buy from you. Their records include contact information, shipping and billing addresses, pricing level assignments, payment terms, and credit limits. When sales orders and invoices are created, they reference the customer party, linking all sales activity back to the customer record. This provides a complete view of the customer relationship including order history, payment status, and total revenue.
Suppliers are parties who sell to you. Their records capture similar contact details plus supplier-specific information like default lead times and ordering preferences. Purchase orders and bills reference the supplier party, letting you track your purchasing relationship including open orders, payment obligations, and purchase history. This supports supplier management and accounts payable operations.
Carriers are parties who transport shipments. When you ship products, you specify which carrier is handling the shipment. Carrier records can include license information, hazmat contact details, and service preferences. This supports shipping operations and carrier performance analysis.
The multi-role capability is powerful. A company might be a customer for your finished products and also a supplier of raw materials. Rather than maintaining separate records and losing sight of the full relationship, one party record can have both customer and supplier roles. This provides a complete view of your interaction with that business partner.
Contact information is richly structured. A party can have multiple email addresses (billing, work, payment), multiple phone numbers (direct, mobile, fax), and multiple addresses (billing, shipping, payment). This supports complex organizational structures and ensures communications reach the right people. Addresses are stored as separate but related records, allowing historical tracking and multiple active addresses.
The primary party group is special - it represents your own company. This appears on invoices as the seller, on bills as the buyer, and in reports as the entity name. There's exactly one primary party group, and its information is used throughout the system to represent your business in transactions and documents.
GraphQL API
The party collection provides access to party data via the GraphQL API. All queries use the Relay connection specification with cursor-based pagination.
Query Name: partyViewConnection
Available Features:
- Cursor-based pagination (first/last/after/before)
- 9 filter options
- 5 sortable fields
- 4 relations to other collections
Query Examples
Basic Query
The party collection is accessed via the partyViewConnection query, which returns a Relay-style connection with pagination support.
query {
partyViewConnection(first: 10) {
edges {
node {
contactName
defaultSource
defaultTerms
emailAddressBilling
emailAddresses
}
}
pageInfo {
hasNextPage
endCursor
}
}
}Pagination
Use cursor-based pagination to retrieve large datasets:
# First page
query {
partyViewConnection(first: 50) {
edges {
node { partyId }
}
pageInfo {
hasNextPage
endCursor
}
}
}
# Subsequent pages
query {
partyViewConnection(first: 50, after: "cursor-from-previous-page") {
edges {
node { partyId }
}
pageInfo {
hasNextPage
endCursor
}
}
}Filtering
Apply filters to narrow results (see Filters section for all available options):
query {
partyViewConnection(
first: 10
connectionRelationErrorDates: { begin: "2024-01-01", end: "2024-12-31" }
) {
edges {
node { partyId }
}
}
}Sorting
Sort results by one or more fields:
query {
partyViewConnection(
first: 10
sort: [{ field: "contactName", mode: "desc" }]
) {
edges {
node {
partyId
contactName
}
}
}
}Relations
Query related data (see Relations section for all available relations):
query {
partyViewConnection(first: 10) {
edges {
node {
partyId
addressBilling {
name
formatted
}
}
}
}
}Summary and Aggregation
This collection supports metrics aggregation through the summary field. You can calculate totals, averages, counts, and other aggregate values across filtered data.
Note: This collection does not support groupBy dimensions. For dimensional analysis, use collections like product, order, or invoice.
For a comprehensive guide to using aggregations, see the Aggregation Concept Guide.
Query Structure
partyViewConnection(filters...) {
summary {
errorCode
errorMessage
metrics {
# Calculated metrics (see table below)
}
}
}Available Metrics
This collection provides 1 metric that can be aggregated:
| Metric | Parameters | Description |
|---|---|---|
count | None | Count of items in the result set |
Common Parameters:
operator- Aggregation function:sum,mean,min,maxtransform- Mathematical transformation:absdateRange- Filter to specific date rangefacilityUrlList- Filter to specific facilities
Examples
Example 1: Total party Metrics
Calculate aggregate metrics across all party records:
query {
partyViewConnection(first: 1) {
summary {
errorCode
errorMessage
metrics {
totalCount: count
}
}
}
}Expected result structure:
{
"data": {
"partyViewConnection": {
"summary": {
"errorCode": null,
"errorMessage": null,
"metrics": {
"totalCount": [1523]
}
}
}
}
}Fields
This collection has 37 fields:
- 34 simple fields
- 2 enum fields (with predefined values)
- 1 parameterized fields (accept query options)
Note on Field Formatting: All scalar fields support the
formatterargument to control output format. Available options:"html","none","abbreviated","blank-zero". Some fields have a default formatter (shown below). See the Formatting guide for details.
Note on Sorting: Field sortability may vary depending on the UI context and query parameters used. Some parameter options explicitly disable sorting (marked with ⚠️ not sortable).
Simple Fields
These fields return values directly without additional options.
contactName
contactNameThe primary contact name for the party. This is used for display purposes in party listings and represents the main point of contact or organization name.
Label: Contact name
Sortable: Yes
defaultSource
defaultSourceThe default source party reference for purchasing relationships. This identifies the preferred supplier or source when this party is used in procurement transactions.
Label: Default source
Sortable: No
defaultTerms
defaultTermsThe default payment terms applied to transactions with this party. This defines the standard billing and payment conditions, such as net 30 or due on receipt, used when creating orders or invoices.
Label: Default terms
Sortable: No
emailAddressBilling
emailAddressBillingThe email address designated for billing-related communications. This is where invoices, payment reminders, and other accounting correspondence should be sent for this party.
Label: Email address billing
Sortable: No
emailAddresses
emailAddressesA list of all email addresses associated with the party. This aggregates multiple contact methods from the party's contact mechanisms, providing a comprehensive view of available email channels for communication.
Label: Email addresses
Sortable: No
Default Formatter: html
Example Query:
{
party(partyUrl: "example-url") {
emailAddresses # Uses default formatter: html
emailAddressesRaw: emailAddresses(formatter: "none") # Get raw value
}
}emailAddressHome
emailAddressHomeThe personal or home email address for the party contact. This is typically used for informal communications or when a personal contact method is preferred over business channels.
Label: Email address home
Sortable: No
emailAddressPayment
emailAddressPaymentThe email address designated for payment-related notifications. This is where payment confirmations, receipts, and transaction updates should be sent for this party.
Label: Email address payment
Sortable: No
emailAddressWork
emailAddressWorkThe business or work email address for the party contact. This is typically used for formal business communications and operational correspondence.
Label: Email address work
Sortable: No
hazmatContactPhoneNumber
hazmatContactPhoneNumberLabel: Hazmat contact phone number
Sortable: No
hazmatContractNumber
hazmatContractNumberLabel: Hazmat contract number
Sortable: No
leadTime
leadTimeLabel: Default lead days
Sortable: Yes
licenseExpiration
licenseExpirationLabel: License expiration
Sortable: No
licenseNumber
licenseNumberLabel: License number
Sortable: No
logisticsBillingPricePerProduct
logisticsBillingPricePerProductLabel: Logistics billing price per product
Sortable: No
logisticsBillingPricePerProductFormula
logisticsBillingPricePerProductFormulaLabel: Logistics billing price per product formula
Sortable: No
logisticsBillingPricePerShipment
logisticsBillingPricePerShipmentLabel: Logistics billing price per shipment
Sortable: No
logisticsBillingPricePerUnit
logisticsBillingPricePerUnitLabel: Logistics billing price per unit
Sortable: No
name
nameLabel: Name
Sortable: Yes
Default Formatter: html
Example Query:
{
party(partyUrl: "example-url") {
name # Uses default formatter: html
nameRaw: name(formatter: "none") # Get raw value
}
}notes
notesLabel: Notes
Sortable: No
partyId
partyIdLabel: Party ID
Sortable: No
Default Formatter: html
Example Query:
{
party(partyUrl: "example-url") {
partyId # Uses default formatter: html
partyIdRaw: partyId(formatter: "none") # Get raw value
}
}partyUrl
partyUrlLabel: Party Url
Sortable: No
phoneNumberDirect
phoneNumberDirectLabel: Phone number direct
Sortable: No
phoneNumberFax
phoneNumberFaxLabel: Phone number fax
Sortable: No
phoneNumberHome
phoneNumberHomeLabel: Phone number home
Sortable: No
phoneNumberMobile
phoneNumberMobileLabel: Phone number mobile
Sortable: No
phoneNumbers
phoneNumbersLabel: Phone numbers
Sortable: No
Default Formatter: html
Example Query:
{
party(partyUrl: "example-url") {
phoneNumbers # Uses default formatter: html
phoneNumbersRaw: phoneNumbers(formatter: "none") # Get raw value
}
}phoneNumberWork
phoneNumberWorkLabel: Phone number work
Sortable: No
priceLevel
priceLevelLabel: Price level
Sortable: No
primaryAddress
primaryAddressLabel: Primary address
Sortable: No
primaryEmailAddress
primaryEmailAddressLabel: Primary email address
Sortable: No
Default Formatter: html
Example Query:
{
party(partyUrl: "example-url") {
primaryEmailAddress # Uses default formatter: html
primaryEmailAddressRaw: primaryEmailAddress(formatter: "none") # Get raw value
}
}primaryPhoneNumber
primaryPhoneNumberLabel: Primary phone number
Sortable: No
Default Formatter: html
Example Query:
{
party(partyUrl: "example-url") {
primaryPhoneNumber # Uses default formatter: html
primaryPhoneNumberRaw: primaryPhoneNumber(formatter: "none") # Get raw value
}
}primaryWebAddress
primaryWebAddressLabel: Primary web address
Sortable: No
Default Formatter: html
Example Query:
{
party(partyUrl: "example-url") {
primaryWebAddress # Uses default formatter: html
primaryWebAddressRaw: primaryWebAddress(formatter: "none") # Get raw value
}
}recordCreated
recordCreatedLabel: Record created
Sortable: Yes
recordLastUpdated
recordLastUpdatedLabel: Record last updated
Sortable: Yes
Enum Fields
These fields return one of a predefined set of values.
role
roleLabel: Role
Sortable: No
Possible Values:
CUSTOMER- CustomerSUPPLIER- SupplierCARRIER- CarrierTAX_AUTHORITY- Tax authority
status
statusLabel: Status
Sortable: No
Possible Values:
PARTY_ENABLED- ActivePARTY_DISABLED- Inactive
Parameterized Fields
These fields accept parameters to customize the returned data. Parameters allow filtering by location, date ranges, aggregation methods, and more.
portalScreenView
portalScreenViewLabel: Portal screen view
Sortable: No
Parameters:
- screenViewPurpose (
String) Screen View Purpose
Example Query:
{
party(partyUrl: "example-url") {
portalScreenView(
screenViewPurpose: "example-value"
)
}
}Relations
addressBilling
- Related Collection: address
- Label: Billing address
TODO: Add relation description
connectionRelation
- Related Collection: connectionRelation
- Label: Integration
TODO: Add relation description
addressPayment
- Related Collection: address
- Label: Payment address
TODO: Add relation description
addressShipping
- Related Collection: address
- Label: Shipping address
TODO: Add relation description
Filters
connectionRelationErrorDates
- Label: Latest error date
- Type: dateRangeInput
- Enabled: Yes
Filter Type: Date range
Input Structure:
{
begin: string // ISO date format: "2024-01-01"
end: string // ISO date format: "2024-12-31"
}Usage Example:
query {
partyViewConnection(
first: 10
connectionRelationErrorDates: {
begin: "2024-01-01"
end: "2024-12-31"
}
) {
edges {
node {
name
connectionRelationErrorDates
}
}
}
}connectionRelationSyncStatuses
- Label: Sync status
- Type: List|String
- Enabled: Yes
- Options:
- Excluded from syncing (##crStatusSkipped)
- Has error (##crStatusError)
- Not synced (##crStatusNotPushed)
- Partially synced (##crStatusPartiallySynced)
- Synced (##crStatusPushed)
Filter Type: Predefined options
Get Current Options:
These options may vary by account configuration. To get the current list:
query {
dataSetMeta(purpose: "uiCustomerOrganization") {
dataSets(name: "party") {
filters {
name
optionList {
value
label
}
}
}
}
}Usage Example:
query {
partyViewConnection(
first: 10
connectionRelationSyncStatuses: ["##crStatusNotPushed", "##crStatusPushed"]
) {
edges {
node {
name
connectionRelationSyncStatuses
}
}
}
}partyUrl
- Label: Party
- Type: List|PartyUrlString
- Enabled: Yes
Filter Type: Text value
This filter accepts freeform text values.
Usage Example:
query {
partyViewConnection(
first: 10
partyUrl: "/finaleengineer/api/partygroup/100000"
) {
edges {
node {
name
partyUrl
}
}
}
}recordCreated
- Label: Created date
- Type: dateRangeInput
- Enabled: Yes
Filter Type: Date range
Input Structure:
{
begin: string // ISO date format: "2024-01-01"
end: string // ISO date format: "2024-12-31"
}Usage Example:
query {
partyViewConnection(
first: 10
recordCreated: {
begin: "2024-01-01"
end: "2024-12-31"
}
) {
edges {
node {
name
recordCreated
}
}
}
}recordLastUpdated
- Label: Last updated date
- Type: dateRangeInput
- Enabled: Yes
Filter Type: Date range
Input Structure:
{
begin: string // ISO date format: "2024-01-01"
end: string // ISO date format: "2024-12-31"
}Usage Example:
query {
partyViewConnection(
first: 10
recordLastUpdated: {
begin: "2024-01-01"
end: "2024-12-31"
}
) {
edges {
node {
name
recordLastUpdated
}
}
}
}role
- Label: Role
- Type: List|String
- Enabled: Yes
- Options:
- Carrier (CARRIER)
- Customer (CUSTOMER)
- Supplier (SUPPLIER)
- Tax authority (TAX_AUTHORITY)
Filter Type: Predefined options
Get Current Options:
These options may vary by account configuration. To get the current list:
query {
dataSetMeta(purpose: "uiCustomerOrganization") {
dataSets(name: "party") {
filters {
name
optionList {
value
label
}
}
}
}
}Usage Example:
query {
partyViewConnection(
first: 10
role: ["CUSTOMER", "SUPPLIER"]
) {
edges {
node {
name
role
}
}
}
}search
- Label: Not specified
- Type: SearchString
- Enabled: Yes
Filter Type: Search text
This filter performs a text search across multiple fields.
Usage Example:
query {
partyViewConnection(
first: 10
search: "search term"
) {
edges {
node {
name
}
}
}
}searchCustom
- Label: Not specified
- Type: searchCustomFilter
- Enabled: Yes
Filter Type: Advanced search with result expansion
See the Advanced Search guide for complete documentation on how this filter works.
Collection-Specific Examples:
Example 1: Basic search:
query {
partyViewConnection(
first: 10
searchCustom: {
terms: "red widget"
}
) {
edges {
node {
name
}
}
}
}Example 2: Include additional fields in search:
# Searches defaults PLUS company and contact name fields
query {
partyViewConnection(
first: 10
searchCustom: {
terms: "acme"
include: ["partyCompanyName", "partyContactName"]
}
) {
edges {
node {
name
}
}
}
}Example 3: Expand results to include related records:
# For each match, also return the related record
query {
partyViewConnection(
first: 10
searchCustom: {
terms: "urgent"
extend: ["relatedRecordUrl"]
}
) {
edges {
node {
name
}
}
}
}Example 4: Combine include and extend:
# Search in defaults + additional fields, then expand to related records
query {
partyViewConnection(
first: 10
searchCustom: {
terms: "acme corp"
include: ["customField1"]
extend: ["relatedRecordUrl"]
}
) {
edges {
node {
name
}
}
}
}status
- Label: Status
- Type: List|String
- Enabled: Yes
- Options:
- Active (PARTY_ENABLED)
- Inactive (PARTY_DISABLED)
Filter Type: Predefined options
Get Current Options:
These options may vary by account configuration. To get the current list:
query {
dataSetMeta(purpose: "uiCustomerOrganization") {
dataSets(name: "party") {
filters {
name
optionList {
value
label
}
}
}
}
}Usage Example:
query {
partyViewConnection(
first: 10
status: ["PARTY_ENABLED", "PARTY_DISABLED"]
) {
edges {
node {
name
status
}
}
}
}