id.sifa.org.profile
Schema Diff
+20 -0
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
}