id.sifa.org.profile

sifa.id

Schema Diff

+20 -0

From

CID
bafyreihl64qkde7...
Indexed At
2026-09-13 15:38 UTC
View this version

To

CID
bafyreih5arqcpf2...
Indexed At
2026-09-24 14:39 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 2 non-breaking changes.

Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "id.sifa.org.profile:body.companyType" }
  • AddedEdge AddedEdge { src: "id.sifa.org.profile:body", tgt: "id.sifa.org.profile:body.companyType", kind: "prop", name: Some("companyType") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "id.sifa.org.profile:body.companyType" }

Additional Notes

  • Non-breaking: AddedEdge { src: "id.sifa.org.profile:body", tgt: "id.sifa.org.profile:body.companyType", kind: "prop", name: Some("companyType") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "The organization's self-declared profile. Singleton: one org declaration per DID, following the app.bsky.actor.profile pattern.",
6 6
      "key": "literal:self",
7 7
      "record": {
8 8
        "properties": {
9 9
          "addresses": {
10 10
            "description": "Physical locations for the organization (headquarters, offices), owner-edited on the org page. Each entry mirrors community.lexicon.location.address, but every field is optional and country is NOT ISO-gated at the lexicon layer; Sifa applies country handling and length caps at the app layer. Distinct from id.sifa.profile.location, which is a person's own location record.",
11 11
            "items": {
12 12
              "ref": "#orgAddress",
13 13
              "type": "ref"
14 14
            },
15 15
            "maxLength": 20,
16 16
            "type": "array"
17 17
          },
18 18
          "aliases": {
19 19
            "description": "Alternative names and acronyms the organization is known by (\"also known as\"), owner-declared.",
20 20
            "items": {
21 21
              "maxGraphemes": 200,
22 22
              "maxLength": 2000,
23 23
              "type": "string"
24 24
            },
25 25
            "maxLength": 20,
26 26
            "type": "array"
27 27
          },
28 28
          "companySize": {
29 29
            "description": "Declared organization headcount band, owner-edited on the org page. A self-declared bucket, never a calculated count. knownValues is non-exhaustive by AT Protocol convention.",
30 30
            "knownValues": [
31 31
              "1-10",
32 32
              "11-50",
33 33
              "51-200",
34 34
              "201-500",
35 35
              "501-1000",
36 36
              "1001-5000",
37 37
              "5001-10000",
38 38
              "10001+"
39 39
            ],
40 40
            "maxLength": 64,
41 41
            "type": "string"
42 42
          },
43 +
          "companyType": {
44 +
            "description": "Declared organization form/type, owner-edited on the org page. A self-declared bucket, never a registry fact. knownValues is non-exhaustive by AT Protocol convention; AppViews layer registry legalForm and AI-derived type separately.",
45 +
            "knownValues": [
46 +
              "company",
47 +
              "cooperative",
48 +
              "nonprofit",
49 +
              "foundation",
50 +
              "government",
51 +
              "educational",
52 +
              "research_institute",
53 +
              "healthcare_provider",
54 +
              "professional_association",
55 +
              "agency",
56 +
              "religious",
57 +
              "political",
58 +
              "self_employed"
59 +
            ],
60 +
            "maxLength": 64,
61 +
            "type": "string"
62 +
          },
43 63
          "contact": {
44 64
            "description": "Contact email address for the organization. NOT rendered publicly; used for notifications only. Validated as an email address at the app layer.",
45 65
            "type": "string"
46 66
          },
47 67
          "createdAt": {
48 68
            "description": "Client-declared timestamp when this organization profile was originally created.",
49 69
            "format": "datetime",
50 70
            "type": "string"
51 71
          },
52 72
          "description": {
53 73
            "description": "Organization description / about.",
54 74
            "maxGraphemes": 5000,
55 75
            "maxLength": 50000,
56 76
            "type": "string"
57 77
          },
58 78
          "entityRefs": {
59 79
            "description": "Canonical external entity identifiers this account represents: Wikidata Q-ID URIs (http://www.wikidata.org/entity/Q...), ROR URIs, or LEI URIs. Self-declared; downstream validation (registry match) confirms or fails each binding.",
60 80
            "items": {
61 81
              "format": "uri",
62 82
              "type": "string"
63 83
            },
64 84
            "maxLength": 20,
65 85
            "type": "array"
66 86
          },
67 87
          "founded": {
68 88
            "description": "Founding date, owner-declared. A year (YYYY), month (YYYY-MM), or full date (YYYY-MM-DD). Not an ISO 8601 timestamp -- organizations typically remember only the year.",
69 89
            "maxLength": 10,
70 90
            "type": "string"
71 91
          },
72 92
          "industries": {
73 93
            "description": "Industry/domain pairs the organization operates in, owner-declared. Each entry has a required industry and an optional domain refinement. Mirrors the person profile's industries field (same id.sifa.defs#industryDomain shape). Self-declared: registry-sourced industry classifications are layered separately by AppViews.",
74 94
            "items": {
75 95
              "ref": "id.sifa.defs#industryDomain",
76 96
              "type": "ref"
77 97
            },
78 98
            "maxLength": 10,
79 99
            "type": "array"
80 100
          },
81 101
          "labels": {
82 102
            "description": "Self-label values for this organization profile.",
83 103
            "refs": [
84 104
              "com.atproto.label.defs#selfLabels"
85 105
            ],
86 106
            "type": "union"
87 107
          },
88 108
          "links": {
89 109
            "description": "Featured links surfaced on the org page, owner-edited. Each link's url MUST be an http(s) URL.",
90 110
            "items": {
91 111
              "ref": "#orgLink",
92 112
              "type": "ref"
93 113
            },
94 114
            "maxLength": 20,
95 115
            "type": "array"
96 116
          },
97 117
          "logo": {
98 118
            "accept": [
99 119
              "image/png",
100 120
              "image/jpeg"
101 121
            ],
102 122
            "description": "Organization logo image.",
103 123
            "maxSize": 1000000,
104 124
            "type": "blob"
105 125
          },
106 126
          "name": {
107 127
            "description": "Organization display name.",
108 128
            "maxGraphemes": 200,
109 129
            "maxLength": 2000,
110 130
            "minLength": 1,
111 131
            "type": "string"
112 132
          },
113 133
          "personalProfileVisible": {
114 134
            "default": false,
115 135
            "description": "Whether the account holder's personal profile stays publicly visible alongside this organization profile. For sole traders and one-person businesses whose personal domain is also their trade name: the person and the organization are the same account, and both pages render. When false or absent, the account presents solely as an organization and the personal profile is not rendered.",
116 136
            "type": "boolean"
117 137
          },
118 138
          "website": {
119 139
            "description": "Official website URL.",
120 140
            "format": "uri",
121 141
            "type": "string"
122 142
          }
123 143
        },
124 144
        "required": [
125 145
          "name",
126 146
          "createdAt"
127 147
        ],
128 148
        "type": "object"
129 149
      },
130 150
      "type": "record",
131 151
      "x-skos:exactMatch": [
132 152
        "schema:Organization",
133 153
        "org:FormalOrganization"
134 154
      ],
135 155
      "x-skos:note": "ROR is the value anchor."
136 156
    },
137 157
    "orgAddress": {
138 158
      "description": "A single physical location for the organization. Mirrors community.lexicon.location.address, but every field is optional (country is NOT ISO-gated at the lexicon layer); Sifa applies country handling and length caps at the app layer.",
139 159
      "properties": {
140 160
        "country": {
141 161
          "description": "ISO 3166 country code (preferably the 2-letter code). Enforced at the app layer.",
142 162
          "type": "string"
143 163
        },
144 164
        "locality": {
145 165
          "description": "Locality of the region (for example, a city).",
146 166
          "type": "string"
147 167
        },
148 168
        "name": {
149 169
          "description": "Optional label for this location (for example, \"Head office\").",
150 170
          "type": "string"
151 171
        },
152 172
        "postalCode": {
153 173
          "description": "Postal code of the location.",
154 174
          "type": "string"
155 175
        },
156 176
        "region": {
157 177
          "description": "Administrative region of the country (for example, a state or province).",
158 178
          "type": "string"
159 179
        },
160 180
        "street": {
161 181
          "description": "Street address.",
162 182
          "type": "string"
163 183
        }
164 184
      },
165 185
      "type": "object"
166 186
    },
167 187
    "orgLink": {
168 188
      "description": "A featured link surfaced on the org page.",
169 189
      "properties": {
170 190
        "name": {
171 191
          "description": "Display label for the link.",
172 192
          "maxGraphemes": 256,
173 193
          "maxLength": 2560,
174 194
          "minLength": 1,
175 195
          "type": "string"
176 196
        },
177 197
        "url": {
178 198
          "description": "Link target. MUST be an http(s) URL; other schemes are dropped at the app layer.",
179 199
          "format": "uri",
180 200
          "type": "string"
181 201
        }
182 202
      },
183 203
      "required": [
184 204
        "name",
185 205
        "url"
186 206
      ],
187 207
      "type": "object"
188 208
    }
189 209
  },
190 210
  "description": "Self-declared organization profile. Lives in the organization's PDS. Presence of this record marks the account as presenting as an organization; trust is layered separately by AppViews (Sifa's rendering floor, verification labels, registry matches). Creating this record asserts that the account holder is authorized to represent this organization. The assertion carries Terms-of-Service and legal weight but no trust weight on its own. Independently evaluable by any AppView with zero Sifa dependency.",
191 211
  "id": "id.sifa.org.profile",
192 212
  "lexicon": 1
193 213
}

Compare Other Versions

Lexicon Garden

@