Company ( company )

The company represents a legal or natural entity identified on your platform — corporation, sole proprietorship, or natural person acting as a business partner. It is a pivotal business-model object: invoices, payments, onboarding cases, and credit limits are all attached to it.

Role

A company may first represent the merchant's own identity. In that case, is_self is read-only and is true for the merchant company. It may also qualify a commercial partner along two orthogonal dimensions: is_buyer and is_supplier. These flags are independent — the same entity may be merchant, buyer, and supplier according to the model.

  • Buyer (is_buyer: true) — the company receives invoices, makes payments, and may receive a credit limit.

  • Supplier (is_supplier: true) — the company issues invoices, receives payments, and may be financed.

Qualification can be set at creation or changed later through the set_company_typenode. It guides downstream processes: invoicing, credit, and reconciliation nodes use it to validate their inputs.

Identifier and structure

Each company has a stable identifier prefixed with cmp_. This identifier remains stable over time and lets clients identify object type without an extra API call.

JSON
"company":{23 items
"object":"company"
"id":"cmp_3a8f1d9c2b4e7f6a"
"legal_name":"Dupont Industries SAS"
"trade_name":"Dupont Industries"
"display_name":"Dupont Industries"
"legal_form":"SAS"
"registration_number":"123456789"
"registration_country":"FR"
"tax_identifier":"FR12345678901"
"registered_address":{4 items
"line1":"12 rue de la Paix"
"city":"Paris"
"postal_code":"75001"
"country":"FR"
}
"incorporation_date":"2018-03-15"
"share_capital":1000000
"currency":"EUR"
"is_self":false
"suspended":false
"suspended_at":null
"suspension_reason":null
"is_buyer":true
"is_supplier":false
"source_reference":"CLIENT-00842"
"metadata":{}0 items
"created_at":"2026-01-10T09:00:00.000Z"
"updated_at":"2026-06-15T14:32:00.000Z"
}
{
"object": "company",
"id": "cmp_3a8f1d9c2b4e7f6a",
"legal_name": "Dupont Industries SAS",
"trade_name": "Dupont Industries",
"display_name": "Dupont Industries",
"legal_form": "SAS",
"registration_number": "123456789",
"registration_country": "FR",
"tax_identifier": "FR12345678901",
"registered_address": {
  "line1": "12 rue de la Paix",
  "city": "Paris",
  "postal_code": "75001",
  "country": "FR"
},
"incorporation_date": "2018-03-15",
"share_capital": 1000000,
"currency": "EUR",
"is_self": false,
"suspended": false,
"suspended_at": null,
"suspension_reason": null,
"is_buyer": true,
"is_supplier": false,
"source_reference": "CLIENT-00842",
"metadata": {},
"created_at": "2026-01-10T09:00:00.000Z",
"updated_at": "2026-06-15T14:32:00.000Z"
}

Fields

FieldTypeRequiredDescription
idstringyesCompany identifier (prefix `cmp_`).
objectstringyesAlways "company".
merchant_idstringyesMerchant to which the company belongs.
legal_namestringyesLegal name.
trade_namestringnoOptional trade name.
display_namestringyesRead-only. Trading name when present, otherwise legal name.
legal_formstringnoForme juridique (SAS, SARL, EI…).
registration_numberstringnoSIREN, RCS, or equivalent registration number.
registration_countrystringnoISO 3166-1 alpha-2 country code of the registry.
tax_identifierstringnoTax identifier or VAT number.
registered_addressaddressnoRegistered office address.
incorporation_datedatenoCreation/incorporation date (ISO 8601).
share_capitalintegernoShare capital in minor currency units.
currencystringnoDefault currency (ISO 4217).
is_selfbooleanyesRead-only. Indicates that the company represents the merchant's own identity.
suspendedbooleanyesWhether the company is suspended.
suspended_atdatetimenoDate and time of suspension.
suspension_reasonstringnoFree-form reason for the current suspension. `credit_limit_exceeded` for automatic suspension after exceeding a limit.
is_buyerbooleanyesThe company acts as a buyer.
is_supplierbooleanyesThe company acts as a supplier.
source_referencestringnoReference in your system (CRM, ERP…).
metadataobjectnoFlat map of `string | number | boolean` scalars, following the API metadata convention.
created_atdatetimeyesCreation date.
updated_atdatetimeyesLast update date.

Suspension

A company may be manually suspended through POST /v1/companies/:id/suspend, which accepts an optional reason . Suspension sets suspended: true, timestamps suspended_at, and records suspension_reason. It emits the company.suspended event that your processes can consume.

Consequences driven by your processes

The platform blocks nothing automatically when a company is suspended. Your processes must react to the company.suspended event or check company.suspended before initiating an operation. Examples of consequences you can orchestrate: stop accepting new orders, block credit disbursements, assign or collect outstanding receivables.

Suspension is lifted through POST /v1/companies/:id/reactivate, which sets suspended to false and emits company.reactivated.

Suspending a company does not suspend its contacts. Blocking a natural person is handled at contactlevel, with its own suspended.

Relationships

The company is the anchor point for most commercial and financial objects on the platform.

Linked objectCardinalityAccessDescription
merchant0..1merchant.company_idMerchant whose own identity this company represents.
contact0..nGET /v1/companies/:id/contactsContacts attached to the company.
company_group0..nGET /v1/companies/:id/company-groupsGroups to which the company belongs.
onboarding_case0..nProcess parameterOnboarding cases started for this company.
invoice0..nFiltrer invoices?buyer_id=…Invoices where the company is the buyer.
credit_limit0..nProcess parameterCredit limits granted to the company.

A company's contacts can be resolved by role and certification level at a given date through GET /v1/companies/:id/contacts/resolve. This access point is useful for identifying the right person — legal representative, payment authorizer, etc. — in a process. Contact roles are documented on the Contact role.

Receivable and payable

page. The platform calculates two financial indicators in real time for every company:

  • Receivable (GET /v1/companies/:id/receivable) — total amount owed by the company as buyer, calculated from issued invoices not yet fully settled.

  • Payable (GET /v1/companies/:id/payable) — total amount owed to the company as supplier.

HTTP
GET /v1/companies/cmp_3a8f/receivable
"receivable":{10 items
"object":"receivable"
"buyer_id":"cmp_3a8f1d9c2b4e7f6a"
"currency":"EUR"
"balance_excluding_tax":120000
"balance_including_tax":144000
"balance_due_excluding_tax":40000
"balance_due_including_tax":48000
"oldest_due_date":"2026-05-01"
"latest_due_date":"2026-07-31"
"computed_at":"2026-06-17T10:00:00.000Z"
}
{
"object": "receivable",
"buyer_id": "cmp_3a8f1d9c2b4e7f6a",
"currency": "EUR",
"balance_excluding_tax": 120000,
"balance_including_tax": 144000,
"balance_due_excluding_tax": 40000,
"balance_due_including_tax": 48000,
"oldest_due_date": "2026-05-01",
"latest_due_date": "2026-07-31",
"computed_at": "2026-06-17T10:00:00.000Z"
}

These values are calculated dynamically from current invoices and payments. The calculate_receivable node exposes this calculation in orchestration processes.

In processes

Several catalog nodes operate directly on companies. Downstream invoicing, credit, and payment nodes consistently accept a company input to attach their objects to the correct company.

NodeRoleKey inputs / outputs
get_merchant_companyRetrieves the current merchant's legal identity without a parameterProduces: company (is_self: true)
create_companyCreates a new companyProduces: company
search_companySearches for an existing company by business identityRoute found / not_found · found produces: company, matched_by
set_company_typeSets `is_buyer` and/or `is_supplier`Accepts: company or draft · Produces: company
calculate_receivableCalculates the current receivableAccepts: company

The node search_company performs a search by business identity — source_reference, registration_number, tax_identifier or legal_name + country — and routes according to whether the company already exists. This pattern is central to onboarding processes to avoid duplicates.

HTTP
GET /v1/companies/search
?registration_number=123456789
&country=FR
"company_search_result":{3 items
"object":"company_search_result"
"company":{3 items
"id":"cmp_3a8f"
"registration_number":"123456789"
"registration_country":"FR"
}
"matched_by":"registration_number"
}
{
"object": "company_search_result",
"company": {
  "id": "cmp_3a8f",
  "registration_number": "123456789",
  "registration_country": "FR"
},
"matched_by": "registration_number"
}

Events

Every significant transition emits an event delivered by webhook. The complete company object is included in the payload — no additional API call is needed to retrieve current state.

EventTrigger
company.createdThe company was just created.
company.updatedOne or more fields were updated.
company.suspendedThe company was suspended.
company.reactivatedThe suspension was lifted.

Webhook configuration and the complete event list are documented in the Receive webhooks and the event catalog.