app.certified.actor.organization
Schema Diff
+32 -4
Compatibility Analysis
Backward Compatible
Backward compatible. 19 non-breaking changes.
Non-Breaking Changes (19)
- AddedVertex AddedVertex { vertex_id: "app.certified.actor.organization:body.additionalLocations" }
- AddedVertex AddedVertex { vertex_id: "app.certified.actor.organization:body.additionalLocations:items" }
- AddedVertex AddedVertex { vertex_id: "app.certified.actor.organization:body.legalName" }
- AddedVertex AddedVertex { vertex_id: "app.certified.actor.organization:body.logo" }
- AddedVertex AddedVertex { vertex_id: "app.certified.actor.organization:body.logo:variant0" }
- AddedVertex AddedVertex { vertex_id: "app.certified.actor.organization:body.logo:variant1" }
- AddedVertex AddedVertex { vertex_id: "app.certified.actor.organization:body.publicEmail" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.defs#smallImage" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.defs#uri" }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.additionalLocations", kind: "prop", name: Some("additionalLocations") }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.legalName", kind: "prop", name: Some("legalName") }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.logo", kind: "prop", name: Some("logo") }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.publicEmail", kind: "prop", name: Some("publicEmail") }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body.additionalLocations", tgt: "app.certified.actor.organization:body.additionalLocations:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body.additionalLocations:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body.logo", tgt: "app.certified.actor.organization:body.logo:variant0", kind: "variant", name: Some("org.hypercerts.defs#uri") }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body.logo", tgt: "app.certified.actor.organization:body.logo:variant1", kind: "variant", name: Some("org.hypercerts.defs#smallImage") }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body.logo:variant0", tgt: "org.hypercerts.defs#uri", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.certified.actor.organization:body.logo:variant1", tgt: "org.hypercerts.defs#smallImage", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.certified.actor.organization:body.additionalLocations" }AddedVertex { vertex_id: "app.certified.actor.organization:body.additionalLocations:items" }AddedVertex { vertex_id: "app.certified.actor.organization:body.legalName" }AddedVertex { vertex_id: "app.certified.actor.organization:body.logo" }AddedVertex { vertex_id: "app.certified.actor.organization:body.logo:variant0" }AddedVertex { vertex_id: "app.certified.actor.organization:body.logo:variant1" }AddedVertex { vertex_id: "app.certified.actor.organization:body.publicEmail" }AddedVertex { vertex_id: "org.hypercerts.defs#smallImage" }AddedVertex { vertex_id: "org.hypercerts.defs#uri" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.additionalLocations", kind: "prop", name: Some("additionalLocations") }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.legalName", kind: "prop", name: Some("legalName") }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.logo", kind: "prop", name: Some("logo") }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body", tgt: "app.certified.actor.organization:body.publicEmail", kind: "prop", name: Some("publicEmail") }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body.additionalLocations", tgt: "app.certified.actor.organization:body.additionalLocations:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body.additionalLocations:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body.logo", tgt: "app.certified.actor.organization:body.logo:variant0", kind: "variant", name: Some("org.hypercerts.defs#uri") }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body.logo", tgt: "app.certified.actor.organization:body.logo:variant1", kind: "variant", name: Some("org.hypercerts.defs#smallImage") }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body.logo:variant0", tgt: "org.hypercerts.defs#uri", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.certified.actor.organization:body.logo:variant1", tgt: "org.hypercerts.defs#smallImage", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"description": "Extended metadata for an organization actor. Complements the base actor profile with organization-specific fields like legal structure and reference links.",
5
+
"description": "Extended metadata for an organization actor. Complements the base actor profile (app.certified.actor.profile), which holds the display name, description, website, avatar, and banner, with organization-specific fields such as legal name, full logo, public contact email, legal structure, reference links, and locations.",
6
6
"key": "literal:self",
7
7
"record": {
8
8
"properties": {
9
+
"additionalLocations": {
10
+
"description": "Strong references to further locations where the organization operates, such as branches, outlets, or field offices. Excludes the primary location, which is in location; do not repeat it here. Each referenced record must conform with the lexicon app.certified.location. As with location, update a reference whenever its record is edited.",
11
+
"items": {
12
+
"ref": "com.atproto.repo.strongRef",
13
+
"type": "ref"
14
+
},
15
+
"maxLength": 1000,
16
+
"type": "array"
17
+
},
9
18
"createdAt": {
10
19
"description": "Client-declared timestamp when this record was originally created.",
11
20
"format": "datetime",
12
21
"type": "string"
13
22
},
14
23
"foundedDate": {
15
24
"description": "When the organization was established. Stored as datetime per ATProto conventions (no date-only format exists). Clients should use midnight UTC (e.g., '2005-01-01T00:00:00.000Z'); consumers should treat only the date portion as canonical.",
16
25
"format": "datetime",
17
26
"type": "string"
18
27
},
28
+
"legalName": {
29
+
"description": "The organization's registered legal name. The public-facing name belongs in app.certified.actor.profile displayName.",
30
+
"maxGraphemes": 256,
31
+
"maxLength": 2560,
32
+
"type": "string"
33
+
},
19
34
"location": {
20
-
"description": "A strong reference to the location where the organization is based. The record referenced must conform with the lexicon app.certified.location.",
35
+
"description": "A strong reference to the organization's primary location: where it is based, and where it is shown when a map displays one point per organization. The referenced record must conform with the lexicon app.certified.location. Because a strong reference pins a specific version (CID) of that record, update this reference whenever the location record is edited. Further locations go in additionalLocations.",
21
36
"ref": "com.atproto.repo.strongRef",
22
37
"type": "ref"
23
38
},
39
+
"logo": {
40
+
"description": "The organization's full logo: a wordmark, or a combination mark pairing the symbol with the name. Used where the logo appears without the name beside it, such as partner listings or badge displays. Prefer a horizontal image with a transparent background (PNG or WebP). The square symbol alone (brandmark) belongs in app.certified.actor.profile avatar, which is cropped to a square or circle.",
41
+
"refs": [
42
+
"org.hypercerts.defs#uri",
43
+
"org.hypercerts.defs#smallImage"
44
+
],
45
+
"type": "union"
46
+
},
24
47
"longDescription": {
25
48
"description": "Long-form description of the organization, such as its mission, history, or detailed project narrative. An inline string for plain text or markdown, a Leaflet linear document record embedded directly, or a strong reference to an existing document record.",
26
49
"refs": [
27
50
"org.hypercerts.defs#descriptionString",
28
51
"pub.leaflet.pages.linearDocument",
29
52
"com.atproto.repo.strongRef"
30
53
],
31
54
"type": "union"
32
55
},
33
56
"organizationType": {
34
57
"description": "Legal or operational structures of the organization (e.g. 'nonprofit', 'ngo', 'government', 'social-enterprise', 'cooperative').",
35
58
"items": {
36
59
"maxGraphemes": 100,
37
60
"maxLength": 128,
38
61
"type": "string"
39
62
},
40
63
"maxLength": 10,
41
64
"type": "array"
42
65
},
66
+
"publicEmail": {
67
+
"description": "A contact email address the organization wants shown publicly (e.g. 'hello@example.org'). Records are public, so never put a personal or internal address here.",
68
+
"maxLength": 254,
69
+
"type": "string"
70
+
},
43
71
"signatures": {
44
72
"description": "Optional cryptographic signatures attesting to this record's content.",
45
73
"ref": "app.certified.signature.defs#list",
46
74
"type": "ref"
47
75
},
48
76
"urls": {
49
-
"description": "Additional reference URLs (social media profiles, contact pages, donation links, etc.) with a display label for each URL.",
77
+
"description": "Additional reference URLs, each with a display label: social media profiles, contact pages, donation links, and similar. The organization's main website belongs in app.certified.actor.profile website, not here.",
50
78
"items": {
51
79
"ref": "#urlItem",
52
80
"type": "ref"
53
81
},
54
82
"type": "array"
55
83
},
56
84
"visibility": {
57
85
"description": "Controls whether the organization or project is publicly discoverable on platforms that honor this setting.",
58
86
"knownValues": [
59
87
"public",
60
88
"unlisted"
61
89
],
62
90
"type": "string"
63
91
}
64
92
},
65
93
"required": [
66
94
"createdAt"
67
95
],
68
96
"type": "object"
69
97
},
70
98
"type": "record"
71
99
},
72
100
"urlItem": {
73
101
"description": "A labeled URL reference.",
74
102
"properties": {
75
103
"label": {
76
-
"description": "Optional human-readable label for this URL (e.g. 'Support page', 'Donation page').",
104
+
"description": "Optional human-readable label for this URL (e.g. 'Donation page').",
77
105
"maxGraphemes": 64,
78
106
"maxLength": 640,
79
107
"type": "string"
80
108
},
81
109
"url": {
82
110
"description": "The URL.",
83
111
"format": "uri",
84
112
"maxGraphemes": 2048,
85
113
"maxLength": 10000,
86
114
"type": "string"
87
115
}
88
116
},
89
117
"required": [
90
118
"url"
91
119
],
92
120
"type": "object"
93
121
}
94
122
},
95
123
"id": "app.certified.actor.organization",
96
124
"lexicon": 1
97
125
}