Ves al contingut principal

Organizations

An organization is the account that owns members, censuses, processes and API keys. Almost every endpoint is scoped to an organization address.

Managing organizations for customers?

If you're an integrator provisioning organizations on behalf of your customers, also see Managed organizations for creating, listing and deleting them with your integrator key. Everything on this page applies to those organizations too.

An organization is the tenant that owns members, censuses, and elections. As an integrator you don't operate one shared org - you create one managed organization per customer and run everything inside it with your integrator key. This page covers what an organization is and how to read and update it; creating and deleting managed organizations is covered in Managed organizations.

Anatomy

Field Type Description
address hex string The organization's on-chain account. It identifies the org in every path and is the value you carry forward after creation. See Identifiers.
type string A free-form classification, for example association, company or cooperative.
meta object A free-form metadata map - at minimum a name. Display values are multilanguage strings.

Creating an organization

Create an organization with a few descriptive fields. The response returns the full organization, including the address you use to scope later requests. To provision an organization on behalf of a customer, use the integrator flow in Managed organizations.

POST/organizations
Field Type Description
type string Organization category, for example association or company.
size string Approximate membership size band.
country string Country code for the organization.
timezone string Default timezone used for election scheduling.
website string Public website URL.
curl "${auth[@]}" -X POST "$B/organizations" \
  -d '{
    "type": "association",
    "size": "500",
    "country": "ES",
    "timezone": "Europe/Madrid",
    "website": "https://example.org"
  }'

Reading an organization

curl "${auth[@]}" "$B/organizations/$ORG"
{ "address": "0x4a3b...", "type": "association", "meta": { "name": "Maple Street HOA" } }
read an organization
var org = await Get($"/organizations/{address}");
var name = org.GetProperty("meta").GetProperty("name").GetString();
org = get(f"/organizations/{address}").json()
name = org["meta"]["name"]

Updating organization info

Update the descriptive metadata (name, type, and other meta fields). The on-chain identity - the address - never changes.

curl "${auth[@]}" -X PUT "$B/organizations/$ORG" \
  -d '{"type":"association","meta":{"name":"Maple Street HOA","city":"Springfield"}}'

The integrator relationship

Your integrator organization is the parent account; each managed organization is an isolated tenant beneath it, with its own address, members, censuses, and elections. Customers never need a Vocdoni account - your integrator key acts as the admin of every org it creates.