parties.update

What it does

Update a counterparty name, legal name, URL, logo, categories or related-party marker; historical documents remain immutable. Refused for an archived party.

Before you send it

An authorized OAuth connection may call it, including a headless client. Effective membership, application grant and token permissions still apply. Describe parties.update through GET /v1/catalog/commands/{name} before acting.

This command does not accept source_document_id in its envelope. Any input evidence requirements remain as documented below.

Inputs

Put these fields inside the envelope’s input object. The outer envelope names the command, a stable idempotency_key and effective_at; request and recovery rules explain those separately. Use exact minor-unit integer strings for monetary fields. Take existing IDs from prior reads or command results; choose a new identity only where the command asks for one.

Required means required within its containing object; an optional parent can be omitted.

FieldTypeRequiredMeaning and accepted values
partyIdstringYesMinimum length: 1. Example: "pty_example_vendor".
namestringNoMinimum length: 1. Example: "Updated Vendor".
legalNamestringNoThe registered name, when it differs from the name the party is known by (Y Combinator’s fund, say). Minimum length: 1. Maximum length: 500. Pattern: "^[^\\r\\n]*\\S[^\\r\\n]*$".
urlstringNo
logoUrlstring or nullNoA logo in Economico’s shared public images, as the canonical https://logos.economi.co/logos/{owner-id}/{cid}.{png|jpg|webp} link an upload returns. The form is checked, not looked up: any link in that form is accepted, and any other link is refused. Anyone with the link can view the image; after replacing an image, set its new link here. Omit it to keep the current logo; null clears it. Minimum length: 1.
iristringNoMinimum length: 1.
categoriesarrayNoEach item must be "customer", "vendor", "founder", "investor", "provider", "employee".
relatedPartybooleanNo

After acceptance

When the command emits events, its documented effects and receipt are recorded in the command transaction. The response returns commandId, replayed, the command-specific result below and emitted events with their IDs and CIDs. A command is not automatically a cash movement or revenue recognition: use the behavior above to determine what this command records.

Inspect result and the affected records or reports before continuing. Save returned identifiers for later calls. Fetch GET /v1/commands/{id} with commandId to recover the accepted receipt; retry the same intent with the same idempotency key if the response was lost. Some commands can succeed with events: [] and return a transient result and commandId without persisting a receipt. A lookup of that ID can return null; retain the returned result and verify the affected record. Retrying can re-evaluate the current state rather than replay a stored result. A domain no_change is a separate success outcome with no persisted receipt.

Result fields

Required means required within its containing object; an optional parent can be omitted.

FieldTypeRequiredMeaning and accepted values
vendorCatalogstringNoMinimum length: 1.
vendorCatalogsarrayNoItems: string. Maximum items: 20.
vendorCatalogsTruncatedbooleanNoMust be true.
partyIdstringYesMinimum length: 1.
namestringYesMinimum length: 1.
legalNamestringNo
relatedPartybooleanNoCurrent, explicitly supplied relationship to this business; independent of customer/vendor roles.
urlstringNo
logoUrlstringNoFormat: uri.
logoCidstringNoMinimum length: 1.
logoOriginobjectNoWho chose the logo: business, or catalog with the vendor and catalog entry version contracts.adopt read.
iristringYesMinimum length: 1.
categoriesarrayYesEach item must be "customer", "vendor", "founder", "investor", "provider", "employee".
archivedbooleanYes
contactsarrayYesItems: object.
addressobjectNo

All commands · Operation and errors · Reusable schemas

Keep credentials out of prompts; rehearse writes only in a disposable sandbox.

Exact request schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "const": "parties.update"
    },
    "input": {
      "type": "object",
      "properties": {
        "partyId": {
          "type": "string",
          "minLength": 1
        },
        "name": {
          "type": "string",
          "minLength": 1
        },
        "legalName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "pattern": "^[^\\r\\n]*\\S[^\\r\\n]*$",
          "description": "The registered name, when it differs from the name the party is known by (Y Combinator's fund, say)."
        },
        "url": {
          "type": "string"
        },
        "logoUrl": {
          "type": [
            "string",
            "null"
          ],
          "minLength": 1,
          "description": "A logo in Economico's shared public images, as the canonical https://logos.economi.co/logos/{owner-id}/{cid}.{png|jpg|webp} link an upload returns. The form is checked, not looked up: any link in that form is accepted, and any other link is refused. Anyone with the link can view the image; after replacing an image, set its new link here. Omit it to keep the current logo; null clears it."
        },
        "iri": {
          "type": "string",
          "minLength": 1
        },
        "categories": {
          "type": "array",
          "items": {
            "enum": [
              "customer",
              "vendor",
              "founder",
              "investor",
              "provider",
              "employee"
            ]
          }
        },
        "relatedParty": {
          "type": "boolean"
        }
      },
      "required": [
        "partyId"
      ],
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "relatedParty": {
              "type": "boolean"
            }
          },
          "required": [
            "relatedParty"
          ]
        },
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            }
          },
          "required": [
            "name"
          ]
        },
        {
          "type": "object",
          "properties": {
            "legalName": {
              "type": "string"
            }
          },
          "required": [
            "legalName"
          ]
        },
        {
          "type": "object",
          "properties": {
            "url": {
              "type": "string"
            }
          },
          "required": [
            "url"
          ]
        },
        {
          "type": "object",
          "properties": {
            "logoUrl": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "logoUrl"
          ]
        },
        {
          "type": "object",
          "properties": {
            "categories": {
              "type": "array"
            }
          },
          "required": [
            "categories"
          ]
        }
      ],
      "additionalProperties": false
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256
    },
    "effective_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    }
  },
  "required": [
    "name",
    "input",
    "idempotency_key",
    "effective_at"
  ],
  "additionalProperties": false
}

Accepted command receipt

{
  "type": "object",
  "required": [
    "commandId",
    "replayed",
    "result",
    "events"
  ],
  "properties": {
    "commandId": {
      "type": "string"
    },
    "replayed": {
      "type": "boolean"
    },
    "imported": {
      "const": true,
      "description": "The command's events are history from before the business joined Economico, recorded as an import: free of monthly events."
    },
    "result": {
      "type": "object",
      "properties": {
        "vendorCatalog": {
          "type": "string",
          "minLength": 1
        },
        "vendorCatalogs": {
          "type": "array",
          "maxItems": 20,
          "items": {
            "type": "string",
            "minLength": 1
          }
        },
        "vendorCatalogsTruncated": {
          "const": true
        },
        "partyId": {
          "type": "string",
          "minLength": 1
        },
        "name": {
          "type": "string",
          "minLength": 1
        },
        "legalName": {
          "type": "string"
        },
        "relatedParty": {
          "type": "boolean",
          "description": "Current, explicitly supplied relationship to this business; independent of customer/vendor roles."
        },
        "url": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string",
          "format": "uri"
        },
        "logoCid": {
          "type": "string",
          "minLength": 1
        },
        "logoOrigin": {
          "type": "object",
          "description": "Who chose the logo: `business`, or `catalog` with the vendor and catalog entry version contracts.adopt read."
        },
        "iri": {
          "type": "string",
          "minLength": 1
        },
        "categories": {
          "type": "array",
          "items": {
            "enum": [
              "customer",
              "vendor",
              "founder",
              "investor",
              "provider",
              "employee"
            ]
          }
        },
        "archived": {
          "type": "boolean"
        },
        "contacts": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "address": {
          "type": "object"
        }
      },
      "required": [
        "partyId",
        "iri",
        "name",
        "categories",
        "archived",
        "contacts"
      ]
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "cid": {
            "type": "string"
          }
        }
      }
    }
  }
}

Example request

{
  "name": "parties.update",
  "input": {
    "partyId": "pty_example_vendor",
    "name": "Updated Vendor"
  },
  "effective_at": "2026-09-01T00:00:00Z",
  "idempotency_key": "parties.update-example-0"
}
Navigate documentation