id.sifa.getProfileView

sifa.id

Schema Diff

+122 -6

From

CID
bafyreihycrrvkzt...
Indexed At
2026-09-25 08:17 UTC
View this version

To

CID
bafyreihtlq4pqoi...
Indexed At
2026-09-30 21:17 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

4 breaking changes, 50 non-breaking changes.

Breaking Changes (4)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#projectEventView", src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.uri", kind: "prop", name: Some("uri") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#positionVerification", src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.methods", kind: "prop", name: Some("methods") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#positionVerification", src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.status", kind: "prop", name: Some("status") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#positionVerification", src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.verifiedAt", kind: "prop", name: Some("verifiedAt") }
Non-Breaking Changes (50)
  • AddedVertex AddedVertex { vertex_id: "id.sifa.defs#employmentStatus" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.defs#relatedIdentifier" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.defs#verificationMethod" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#courseView.educationRkey" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#educationView.eqfLevel" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.expiresAt" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.methods" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.methods:items" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.status" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.uri" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.verifiedAt" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#positionView.verification" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.country" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.locality" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.mode" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.name" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.role" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.startsAt" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.uri" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.url" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectView.events" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectView.events:items" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#projectView.role" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#publicationView.relatedIdentifiers" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.getProfileView#publicationView.relatedIdentifiers:items" }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#courseView", tgt: "id.sifa.getProfileView#courseView.educationRkey", kind: "prop", name: Some("educationRkey") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#educationView", tgt: "id.sifa.getProfileView#educationView.eqfLevel", kind: "prop", name: Some("eqfLevel") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.expiresAt", kind: "prop", name: Some("expiresAt") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.uri", kind: "prop", name: Some("uri") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#positionVerification.methods", tgt: "id.sifa.getProfileView#positionVerification.methods:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#positionVerification.methods:items", tgt: "id.sifa.defs#verificationMethod", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#positionVerification.status", tgt: "id.sifa.defs#employmentStatus", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#positionView", tgt: "id.sifa.getProfileView#positionView.verification", kind: "prop", name: Some("verification") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#positionView.verification", tgt: "id.sifa.getProfileView#positionVerification", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.country", kind: "prop", name: Some("country") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.locality", kind: "prop", name: Some("locality") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.mode", kind: "prop", name: Some("mode") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.name", kind: "prop", name: Some("name") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.role", kind: "prop", name: Some("role") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.startsAt", kind: "prop", name: Some("startsAt") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.url", kind: "prop", name: Some("url") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectView", tgt: "id.sifa.getProfileView#projectView.events", kind: "prop", name: Some("events") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectView", tgt: "id.sifa.getProfileView#projectView.role", kind: "prop", name: Some("role") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectView.events", tgt: "id.sifa.getProfileView#projectView.events:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#projectView.events:items", tgt: "id.sifa.getProfileView#projectEventView", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#publicationView", tgt: "id.sifa.getProfileView#publicationView.relatedIdentifiers", kind: "prop", name: Some("relatedIdentifiers") }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#publicationView.relatedIdentifiers", tgt: "id.sifa.getProfileView#publicationView.relatedIdentifiers:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "id.sifa.getProfileView#publicationView.relatedIdentifiers:items", tgt: "id.sifa.defs#relatedIdentifier", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "id.sifa.defs#employmentStatus" }
  • AddedVertex { vertex_id: "id.sifa.defs#relatedIdentifier" }
  • AddedVertex { vertex_id: "id.sifa.defs#verificationMethod" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#courseView.educationRkey" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#educationView.eqfLevel" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.expiresAt" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.methods" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.methods:items" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.status" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.uri" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionVerification.verifiedAt" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#positionView.verification" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.country" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.locality" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.mode" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.name" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.role" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.startsAt" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.uri" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectEventView.url" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectView.events" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectView.events:items" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#projectView.role" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#publicationView.relatedIdentifiers" }
  • AddedVertex { vertex_id: "id.sifa.getProfileView#publicationView.relatedIdentifiers:items" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#positionVerification", src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.methods", kind: "prop", name: Some("methods") }
  • Breaking: RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#positionVerification", src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.status", kind: "prop", name: Some("status") }
  • Breaking: RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#positionVerification", src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.verifiedAt", kind: "prop", name: Some("verifiedAt") }
  • Breaking: RequiredEdgeAdded { vertex_id: "id.sifa.getProfileView#projectEventView", src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.uri", kind: "prop", name: Some("uri") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#courseView", tgt: "id.sifa.getProfileView#courseView.educationRkey", kind: "prop", name: Some("educationRkey") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#educationView", tgt: "id.sifa.getProfileView#educationView.eqfLevel", kind: "prop", name: Some("eqfLevel") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.expiresAt", kind: "prop", name: Some("expiresAt") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#positionVerification", tgt: "id.sifa.getProfileView#positionVerification.uri", kind: "prop", name: Some("uri") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#positionVerification.methods", tgt: "id.sifa.getProfileView#positionVerification.methods:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#positionVerification.methods:items", tgt: "id.sifa.defs#verificationMethod", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#positionVerification.status", tgt: "id.sifa.defs#employmentStatus", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#positionView", tgt: "id.sifa.getProfileView#positionView.verification", kind: "prop", name: Some("verification") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#positionView.verification", tgt: "id.sifa.getProfileView#positionVerification", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.country", kind: "prop", name: Some("country") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.locality", kind: "prop", name: Some("locality") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.mode", kind: "prop", name: Some("mode") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.name", kind: "prop", name: Some("name") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.role", kind: "prop", name: Some("role") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.startsAt", kind: "prop", name: Some("startsAt") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectEventView", tgt: "id.sifa.getProfileView#projectEventView.url", kind: "prop", name: Some("url") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectView", tgt: "id.sifa.getProfileView#projectView.events", kind: "prop", name: Some("events") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectView", tgt: "id.sifa.getProfileView#projectView.role", kind: "prop", name: Some("role") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectView.events", tgt: "id.sifa.getProfileView#projectView.events:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#projectView.events:items", tgt: "id.sifa.getProfileView#projectEventView", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#publicationView", tgt: "id.sifa.getProfileView#publicationView.relatedIdentifiers", kind: "prop", name: Some("relatedIdentifiers") }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#publicationView.relatedIdentifiers", tgt: "id.sifa.getProfileView#publicationView.relatedIdentifiers:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "id.sifa.getProfileView#publicationView.relatedIdentifiers:items", tgt: "id.sifa.defs#relatedIdentifier", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "activeAppView": {
5 5
      "description": "An AT Protocol app the account has recently created records in.",
6 6
      "properties": {
7 7
        "category": {
8 8
          "description": "App category.",
9 9
          "type": "string"
10 10
        },
11 11
        "id": {
12 12
          "description": "App identifier.",
13 13
          "type": "string"
14 14
        },
15 15
        "latestRecordAt": {
16 16
          "description": "Timestamp of the latest record.",
17 17
          "format": "datetime",
18 18
          "type": "string"
19 19
        },
20 20
        "name": {
21 21
          "description": "App display name.",
22 22
          "type": "string"
23 23
        },
24 24
        "recentCount": {
25 25
          "description": "Recent record count.",
26 26
          "type": "integer"
27 27
        }
28 28
      },
29 29
      "required": [
30 30
        "id",
31 31
        "name"
32 32
      ],
33 33
      "type": "object"
34 34
    },
35 35
    "atfundLink": {
36 36
      "description": "A contribution or funding link.",
37 37
      "properties": {
38 38
        "label": {
39 39
          "description": "Optional display label.",
40 40
          "type": "string"
41 41
        },
42 42
        "url": {
43 43
          "description": "Contribution URL.",
44 44
          "format": "uri",
45 45
          "type": "string"
46 46
        }
47 47
      },
48 48
      "required": [
49 49
        "url"
50 50
      ],
51 51
      "type": "object"
52 52
    },
53 53
    "certificationView": {
54 54
      "description": "A certification or license.",
55 55
      "properties": {
56 56
        "agentRef": {
57 57
          "description": "Canonical issuing-authority reference (name plus optional did/entityRef). Mirrors the flat authority/entityRef fields during the migration; the two always agree.",
58 58
          "ref": "id.sifa.defs#agentRef",
59 59
          "type": "ref"
60 60
        },
61 61
        "credentialUrl": {
62 62
          "description": "URL of the credential.",
63 63
          "format": "uri",
64 64
          "type": "string"
65 65
        },
66 66
        "currentCompanyName": {
67 67
          "description": "Current canonical name of the linked entity, when it resolves. The web shows it as a \"Now {name}\" hint when it differs from the saved snapshot name (#516).",
68 68
          "type": "string"
69 69
        },
70 70
        "entityRef": {
71 71
          "description": "Pointer URI to the resolved issuer entity.",
72 72
          "format": "uri",
73 73
          "type": "string"
74 74
        },
75 75
        "expiryDate": {
76 76
          "description": "Expiry date. Partial date.",
77 77
          "type": "string"
78 78
        },
79 79
        "issueDate": {
80 80
          "description": "Issue date. Partial date.",
81 81
          "type": "string"
82 82
        },
83 83
        "issuingOrg": {
84 84
          "description": "Issuing organization.",
85 85
          "type": "string"
86 86
        },
87 87
        "name": {
88 88
          "description": "Certification name.",
89 89
          "type": "string"
90 90
        },
91 91
        "rkey": {
92 92
          "description": "Record key of the certification record.",
93 93
          "type": "string"
94 94
        }
95 95
      },
96 96
      "required": [
97 97
        "rkey",
98 98
        "name"
99 99
      ],
100 100
      "type": "object"
101 101
    },
102 102
    "coSpeakerView": {
103 103
      "description": "A co-speaker on a presentation delivery.",
104 104
      "properties": {
105 105
        "avatar": {
106 106
          "description": "Avatar URL, when linked.",
107 107
          "format": "uri",
108 108
          "type": "string"
109 109
        },
110 110
        "did": {
111 111
          "description": "DID of the co-speaker, when linked to a Sifa profile.",
112 112
          "format": "did",
113 113
          "type": "string"
114 114
        },
115 115
        "displayName": {
116 116
          "description": "Display name, when linked.",
117 117
          "type": "string"
118 118
        },
119 119
        "handle": {
120 120
          "description": "Handle, when linked.",
121 121
          "format": "handle",
122 122
          "type": "string"
123 123
        },
124 124
        "name": {
125 125
          "description": "Free-text co-speaker name, when not linked.",
126 126
          "type": "string"
127 127
        }
128 128
      },
129 129
      "type": "object"
130 130
    },
131 131
    "contributorView": {
132 132
      "description": "A linked publication contributor.",
133 133
      "properties": {
134 134
        "did": {
135 135
          "description": "Sifa/AT Protocol DID, when linked.",
136 136
          "format": "did",
137 137
          "type": "string"
138 138
        },
139 139
        "handle": {
140 140
          "description": "Handle, when linked.",
141 141
          "format": "handle",
142 142
          "type": "string"
143 143
        },
144 144
        "name": {
145 145
          "description": "Contributor name.",
146 146
          "type": "string"
147 147
        },
148 148
        "orcidId": {
149 149
          "description": "ORCID identifier.",
150 150
          "type": "string"
151 151
        }
152 152
      },
153 153
      "required": [
154 154
        "name"
155 155
      ],
156 156
      "type": "object"
157 157
    },
158 158
    "courseView": {
159 159
      "description": "A course entry.",
160 160
      "properties": {
161 161
        "agentRef": {
162 162
          "description": "Canonical institution reference (name plus optional did/entityRef). Mirrors the flat institution/entityRef fields during the migration; the two always agree.",
163 163
          "ref": "id.sifa.defs#agentRef",
164 164
          "type": "ref"
165 165
        },
166 166
        "completedAt": {
167 167
          "description": "Completion date of a taken course (YYYY-MM or YYYY-MM-DD).",
168 168
          "type": "string"
169 169
        },
170 170
        "credentialRkey": {
171 171
          "description": "Record key of a linked certification, when present.",
172 172
          "type": "string"
173 173
        },
174 174
        "currentCompanyName": {
175 175
          "description": "Current canonical name of the linked entity, when it resolves. The web shows it as a \"Now {name}\" hint when it differs from the saved snapshot name (#516).",
176 176
          "type": "string"
177 177
        },
178 +
        "educationRkey": {
179 +
          "description": "Record key of the linked education record the course was part of, when present.",
180 +
          "type": "string"
181 +
        },
178 182
        "endedAt": {
179 183
          "description": "When the user last taught the course; absent if ongoing.",
180 184
          "type": "string"
181 185
        },
182 186
        "entityRef": {
183 187
          "description": "Pointer URI to the resolved institution entity.",
184 188
          "format": "uri",
185 189
          "type": "string"
186 190
        },
187 191
        "institution": {
188 192
          "description": "Institution name.",
189 193
          "type": "string"
190 194
        },
191 195
        "name": {
192 196
          "description": "Course name.",
193 197
          "type": "string"
194 198
        },
195 199
        "number": {
196 200
          "description": "Course number or code.",
197 201
          "type": "string"
198 202
        },
199 203
        "positionRkey": {
200 -
          "description": "Record key of the linked position a taught course belongs to, when present.",
204 +
          "description": "Record key of the linked position the course was part of, when present.",
201 205
          "type": "string"
202 206
        },
203 207
        "rkey": {
204 208
          "description": "Record key of the course record.",
205 209
          "type": "string"
206 210
        },
207 211
        "role": {
208 212
          "description": "The user's role in the course (id.sifa.defs#courseRole). Absent means taken.",
209 213
          "type": "string"
210 214
        },
211 215
        "startedAt": {
212 216
          "description": "When the user started teaching the course (YYYY, YYYY-MM or YYYY-MM-DD).",
213 217
          "type": "string"
214 218
        }
215 219
      },
216 220
      "required": [
217 221
        "rkey",
218 222
        "name"
219 223
      ],
220 224
      "type": "object"
221 225
    },
222 226
    "durationView": {
223 227
      "description": "A duration range in minutes.",
224 228
      "properties": {
225 229
        "maxMinutes": {
226 230
          "description": "Maximum duration in minutes.",
227 231
          "type": "integer"
228 232
        },
229 233
        "minMinutes": {
230 234
          "description": "Minimum duration in minutes.",
231 235
          "type": "integer"
232 236
        }
233 237
      },
234 238
      "required": [
235 239
        "minMinutes"
236 240
      ],
237 241
      "type": "object"
238 242
    },
239 243
    "educationView": {
240 244
      "description": "An education-history entry.",
241 245
      "properties": {
242 246
        "activities": {
243 247
          "description": "Activities and societies.",
244 248
          "type": "string"
245 249
        },
246 250
        "agentRef": {
247 251
          "description": "Canonical institution reference (name plus optional did/entityRef). Mirrors the flat institution/institutionDid/entityRef fields during the migration; the two always agree.",
248 252
          "ref": "id.sifa.defs#agentRef",
249 253
          "type": "ref"
250 254
        },
251 255
        "currentCompanyName": {
252 256
          "description": "Current canonical name of the linked entity, when it resolves. The web shows it as a \"Now {name}\" hint when it differs from the saved snapshot name (#516).",
253 257
          "type": "string"
254 258
        },
255 259
        "degree": {
256 260
          "description": "Degree earned.",
257 261
          "type": "string"
258 262
        },
259 263
        "description": {
260 264
          "description": "Additional description.",
261 265
          "type": "string"
262 266
        },
263 267
        "endedAt": {
264 268
          "description": "End date. Partial date.",
265 269
          "type": "string"
266 270
        },
267 271
        "entityRef": {
268 272
          "description": "Pointer URI to the resolved institution entity.",
269 273
          "format": "uri",
270 274
          "type": "string"
271 275
        },
276 +
        "eqfLevel": {
277 +
          "description": "European Qualifications Framework level of the degree (1 to 8, 8 is doctoral), when set.",
278 +
          "maximum": 8,
279 +
          "minimum": 1,
280 +
          "type": "integer"
281 +
        },
272 282
        "fieldOfStudy": {
273 283
          "description": "Field of study.",
274 284
          "type": "string"
275 285
        },
276 286
        "institution": {
277 287
          "description": "Institution name.",
278 288
          "type": "string"
279 289
        },
280 290
        "institutionDid": {
281 291
          "description": "DID of the institution, when known.",
282 292
          "format": "did",
283 293
          "type": "string"
284 294
        },
285 295
        "primary": {
286 296
          "description": "Whether this is the user's primary education entry.",
287 297
          "type": "boolean"
288 298
        },
289 299
        "rkey": {
290 300
          "description": "Record key of the education record.",
291 301
          "type": "string"
292 302
        },
293 303
        "startedAt": {
294 304
          "description": "Start date. Partial date.",
295 305
          "type": "string"
296 306
        }
297 307
      },
298 308
      "required": [
299 309
        "rkey"
300 310
      ],
301 311
      "type": "object"
302 312
    },
303 313
    "externalAccountView": {
304 314
      "description": "A linked external account with verification state.",
305 315
      "properties": {
306 316
        "feedUrl": {
307 317
          "description": "Feed URL (RSS/Atom), when applicable.",
308 318
          "format": "uri",
309 319
          "type": "string"
310 320
        },
311 321
        "label": {
312 322
          "description": "Optional custom label.",
313 323
          "type": "string"
314 324
        },
315 325
        "platform": {
316 326
          "description": "Platform type.",
317 327
          "ref": "id.sifa.defs#externalPlatform",
318 328
          "type": "ref"
319 329
        },
320 330
        "primary": {
321 331
          "description": "Whether this is the primary external account.",
322 332
          "type": "boolean"
323 333
        },
324 334
        "rkey": {
325 335
          "description": "Record key of the external account record.",
326 336
          "type": "string"
327 337
        },
328 338
        "url": {
329 339
          "description": "Account URL.",
330 340
          "format": "uri",
331 341
          "type": "string"
332 342
        },
333 343
        "verifiable": {
334 344
          "description": "Whether the account can be verified.",
335 345
          "type": "boolean"
336 346
        },
337 347
        "verified": {
338 348
          "description": "Whether the account is verified.",
339 349
          "type": "boolean"
340 350
        },
341 351
        "verifiedVia": {
342 352
          "description": "Verification method, when verified.",
343 353
          "type": "string"
344 354
        }
345 355
      },
346 356
      "required": [
347 357
        "rkey",
348 358
        "url"
349 359
      ],
350 360
      "type": "object"
351 361
    },
352 362
    "honorView": {
353 363
      "description": "An honor or award.",
354 364
      "properties": {
355 365
        "agentRef": {
356 366
          "description": "Canonical issuer reference (name plus optional did/entityRef). Mirrors the flat issuer/entityRef fields during the migration; the two always agree.",
357 367
          "ref": "id.sifa.defs#agentRef",
358 368
          "type": "ref"
359 369
        },
360 370
        "currentCompanyName": {
361 371
          "description": "Current canonical name of the linked entity, when it resolves. The web shows it as a \"Now {name}\" hint when it differs from the saved snapshot name (#516).",
362 372
          "type": "string"
363 373
        },
364 374
        "date": {
365 375
          "description": "Date received. Partial date.",
366 376
          "type": "string"
367 377
        },
368 378
        "description": {
369 379
          "description": "Description.",
370 380
          "type": "string"
371 381
        },
372 382
        "entityRef": {
373 383
          "description": "Pointer URI to the resolved issuer entity.",
374 384
          "format": "uri",
375 385
          "type": "string"
376 386
        },
377 387
        "issuer": {
378 388
          "description": "Issuing organization.",
379 389
          "type": "string"
380 390
        },
381 391
        "rkey": {
382 392
          "description": "Record key of the honor record.",
383 393
          "type": "string"
384 394
        },
385 395
        "title": {
386 396
          "description": "Honor or award title.",
387 397
          "type": "string"
388 398
        }
389 399
      },
390 400
      "required": [
391 401
        "rkey",
392 402
        "title"
393 403
      ],
394 404
      "type": "object"
395 405
    },
396 406
    "involvementLinkView": {
397 407
      "description": "A proof link on an involvement.",
398 408
      "properties": {
399 409
        "kind": {
400 410
          "description": "What the link points to (e.g. pull-request, talk, article).",
401 411
          "type": "string"
402 412
        },
403 413
        "label": {
404 414
          "description": "Optional human-readable label.",
405 415
          "type": "string"
406 416
        },
407 417
        "url": {
408 418
          "description": "Artifact URL.",
409 419
          "format": "uri",
410 420
          "type": "string"
411 421
        },
412 422
        "verified": {
413 423
          "description": "True if the link host matches a verified external account.",
414 424
          "type": "boolean"
415 425
        },
416 426
        "verifiedPlatform": {
417 427
          "description": "Platform token of the verified host, when verified.",
418 428
          "type": "string"
419 429
        }
420 430
      },
421 431
      "required": [
422 432
        "url"
423 433
      ],
424 434
      "type": "object"
425 435
    },
426 436
    "involvementView": {
427 437
      "description": "A community, open-source, charity, or civic involvement.",
428 438
      "properties": {
429 439
        "agentRef": {
430 440
          "description": "Canonical upstream reference (name plus optional did/entityRef). Mirrors the flat upstream/upstreamDid/entityRef fields during the migration; the two always agree.",
431 441
          "ref": "id.sifa.defs#agentRef",
432 442
          "type": "ref"
433 443
        },
434 444
        "currentCompanyName": {
435 445
          "description": "Current canonical name of the linked entity, when it resolves. The web shows it as a \"Now {name}\" hint when it differs from the saved snapshot name (#516).",
436 446
          "type": "string"
437 447
        },
438 448
        "description": {
439 449
          "description": "Description.",
440 450
          "type": "string"
441 451
        },
442 452
        "endedAt": {
443 453
          "description": "End date. Partial date.",
444 454
          "type": "string"
445 455
        },
446 456
        "kind": {
447 457
          "description": "The nature of the involvement.",
448 458
          "ref": "id.sifa.defs#involvementKind",
449 459
          "type": "ref"
450 460
        },
451 461
        "legacy": {
452 462
          "description": "True if mapped from a legacy volunteering record.",
453 463
          "type": "boolean"
454 464
        },
455 465
        "links": {
456 466
          "description": "Public artifact links proving the work.",
457 467
          "items": {
458 468
            "ref": "#involvementLinkView",
459 469
            "type": "ref"
460 470
          },
461 471
          "type": "array"
462 472
        },
463 473
        "primary": {
464 474
          "description": "Whether this is the user's primary current involvement.",
465 475
          "type": "boolean"
466 476
        },
467 477
        "rkey": {
468 478
          "description": "Record key of the involvement (or legacy volunteering) record.",
469 479
          "type": "string"
470 480
        },
471 481
        "role": {
472 482
          "description": "Role in the involvement.",
473 483
          "type": "string"
474 484
        },
475 485
        "startedAt": {
476 486
          "description": "Start date. Partial date.",
477 487
          "type": "string"
478 488
        },
479 489
        "upstream": {
480 490
          "description": "Name of the community, org, or person the involvement is with.",
481 491
          "type": "string"
482 492
        },
483 493
        "upstreamDid": {
484 494
          "description": "DID of the upstream, when known.",
485 495
          "format": "did",
486 496
          "type": "string"
487 497
        },
488 498
        "upstreamUrl": {
489 499
          "description": "URL of the upstream, when provided.",
490 500
          "format": "uri",
491 501
          "type": "string"
492 502
        }
493 503
      },
494 504
      "required": [
495 505
        "rkey",
496 506
        "kind",
497 507
        "links",
498 508
        "legacy"
499 509
      ],
500 510
      "type": "object"
501 511
    },
502 512
    "languageView": {
503 513
      "description": "A language with proficiency.",
504 514
      "properties": {
505 515
        "language": {
506 516
          "description": "Language name or BCP-47 tag.",
507 517
          "type": "string"
508 518
        },
509 519
        "proficiency": {
510 520
          "description": "Proficiency level.",
511 521
          "ref": "id.sifa.defs#proficiency",
512 522
          "type": "ref"
513 523
        },
514 524
        "rkey": {
515 525
          "description": "Record key of the language record.",
516 526
          "type": "string"
517 527
        }
518 528
      },
519 529
      "required": [
520 530
        "rkey",
521 531
        "language"
522 532
      ],
523 533
      "type": "object"
524 534
    },
525 535
    "locationView": {
526 536
      "description": "A professional location on the profile.",
527 537
      "properties": {
528 538
        "countryCode": {
529 539
          "description": "ISO 3166-1 alpha-2 country code.",
530 540
          "type": "string"
531 541
        },
532 542
        "isPrimary": {
533 543
          "description": "Whether this is the primary location.",
534 544
          "type": "boolean"
535 545
        },
536 546
        "label": {
537 547
          "description": "Optional custom label.",
538 548
          "type": "string"
539 549
        },
540 550
        "location": {
541 551
          "description": "Assembled human-readable location string.",
542 552
          "type": "string"
543 553
        },
544 554
        "locationCountry": {
545 555
          "description": "Country name.",
546 556
          "type": "string"
547 557
        },
548 558
        "locationLocality": {
549 559
          "description": "City or locality.",
550 560
          "type": "string"
551 561
        },
552 562
        "locationRegion": {
553 563
          "description": "Region, state, or province.",
554 564
          "type": "string"
555 565
        },
556 566
        "rkey": {
557 567
          "description": "Record key of the location record.",
558 568
          "type": "string"
559 569
        },
560 570
        "type": {
561 571
          "description": "The role this location plays.",
562 572
          "ref": "id.sifa.defs#locationType",
563 573
          "type": "ref"
564 574
        }
565 575
      },
566 576
      "required": [
567 577
        "rkey"
568 578
      ],
569 579
      "type": "object"
570 580
    },
571 581
    "main": {
572 582
      "description": "Get the aggregated public profile view for an actor.",
573 583
      "errors": [
574 584
        {
575 585
          "description": "No profile exists for the given actor, or the actor could not be resolved.",
576 586
          "name": "ProfileNotFound"
577 587
        }
578 588
      ],
579 589
      "output": {
580 590
        "encoding": "application/json",
581 591
        "schema": {
582 592
          "ref": "#profileView",
583 593
          "type": "ref"
584 594
        }
585 595
      },
586 596
      "parameters": {
587 597
        "properties": {
588 598
          "actor": {
589 599
            "description": "The handle or DID of the profile to fetch.",
590 600
            "format": "at-identifier",
591 601
            "type": "string"
592 602
          }
593 603
        },
594 604
        "required": [
595 605
          "actor"
596 606
        ],
597 607
        "type": "params"
598 608
      },
599 609
      "type": "query"
600 610
    },
601 611
    "pdsProviderView": {
602 612
      "description": "A PDS provider descriptor.",
603 613
      "properties": {
604 614
        "host": {
605 615
          "description": "PDS hostname.",
606 616
          "type": "string"
607 617
        },
608 618
        "name": {
609 619
          "description": "Human-readable provider name.",
610 620
          "type": "string"
611 621
        }
612 622
      },
613 623
      "required": [
614 624
        "name"
615 625
      ],
616 626
      "type": "object"
617 627
    },
628 +
    "positionVerification": {
629 +
      "description": "Summary of the id.sifa.verification.employment record Sifa issued for a position.",
630 +
      "properties": {
631 +
        "expiresAt": {
632 +
          "description": "Present only while the verification rests on email alone.",
633 +
          "format": "datetime",
634 +
          "type": "string"
635 +
        },
636 +
        "methods": {
637 +
          "description": "Every method that currently backs the verification.",
638 +
          "items": {
639 +
            "ref": "id.sifa.defs#verificationMethod",
640 +
            "type": "ref"
641 +
          },
642 +
          "type": "array"
643 +
        },
644 +
        "status": {
645 +
          "ref": "id.sifa.defs#employmentStatus",
646 +
          "type": "ref"
647 +
        },
648 +
        "uri": {
649 +
          "description": "AT-URI of the issued id.sifa.verification.employment record in Sifa's issuer repository.",
650 +
          "format": "at-uri",
651 +
          "type": "string"
652 +
        },
653 +
        "verifiedAt": {
654 +
          "format": "datetime",
655 +
          "type": "string"
656 +
        }
657 +
      },
658 +
      "required": [
659 +
        "methods",
660 +
        "status",
661 +
        "verifiedAt"
662 +
      ],
663 +
      "type": "object"
664 +
    },
618 665
    "positionView": {
619 666
      "description": "A work-history entry.",
620 667
      "properties": {
621 668
        "agentRef": {
622 -
          "description": "Canonical company reference (name plus optional did/entityRef). Mirrors the flat company/companyDid/entityRef fields during the migration; the two always agree.",
669 +
          "description": "Canonical organization reference (name plus optional did/entityRef). Mirrors the flat company/companyDid/entityRef fields during the migration; the two always agree.",
623 670
          "ref": "id.sifa.defs#agentRef",
624 671
          "type": "ref"
625 672
        },
626 673
        "company": {
627 -
          "description": "Company or organization name.",
674 +
          "description": "Organization name.",
628 675
          "type": "string"
629 676
        },
630 677
        "companyDid": {
631 -
          "description": "DID of the company, when known.",
678 +
          "description": "DID of the organization, when known.",
632 679
          "format": "did",
633 680
          "type": "string"
634 681
        },
635 682
        "countryCode": {
636 683
          "description": "ISO 3166-1 alpha-2 country code.",
637 684
          "type": "string"
638 685
        },
639 686
        "currentCompanyName": {
640 687
          "description": "Current canonical name of the linked entity, when it resolves. The web shows it as a \"Now {name}\" hint when it differs from the saved snapshot name (#516).",
641 688
          "type": "string"
642 689
        },
643 690
        "description": {
644 691
          "description": "Role description.",
645 692
          "type": "string"
646 693
        },
647 694
        "employmentType": {
648 695
          "description": "Employment arrangement.",
649 696
          "ref": "id.sifa.defs#employmentType",
650 697
          "type": "ref"
651 698
        },
652 699
        "endedAt": {
653 700
          "description": "End date. Partial date, absent if current.",
654 701
          "type": "string"
655 702
        },
656 703
        "entityName": {
657 -
          "description": "Resolved canonical company name.",
704 +
          "description": "Resolved canonical organization name.",
658 705
          "type": "string"
659 706
        },
660 707
        "entityRef": {
661 -
          "description": "Pointer URI to the resolved company entity.",
708 +
          "description": "Pointer URI to the resolved organization entity.",
662 709
          "format": "uri",
663 710
          "type": "string"
664 711
        },
665 712
        "location": {
666 713
          "description": "Assembled human-readable location string.",
667 714
          "type": "string"
668 715
        },
669 716
        "locationCountry": {
670 717
          "description": "Country name.",
671 718
          "type": "string"
672 719
        },
673 720
        "locationLocality": {
674 721
          "description": "City or locality.",
675 722
          "type": "string"
676 723
        },
677 724
        "locationRegion": {
678 725
          "description": "Region, state, or province.",
679 726
          "type": "string"
680 727
        },
681 728
        "onBehalfOf": {
682 729
          "description": "Party this role is held on behalf of, when the person represents someone else — most often a fund whose board seat this is. A disclosure, not a role type. Absent for independent roles.",
683 730
          "type": "string"
684 731
        },
685 732
        "onBehalfOfDid": {
686 733
          "description": "DID of the represented party, when known. May be an organization or a person.",
687 734
          "format": "did",
688 735
          "type": "string"
689 736
        },
690 737
        "onBehalfOfEntityName": {
691 738
          "description": "Resolved canonical name for the represented party. Present only when the reference resolves; clients render onBehalfOf otherwise, never the raw URI.",
692 739
          "type": "string"
693 740
        },
694 741
        "onBehalfOfEntityRef": {
695 742
          "description": "Pointer URI to the resolved entity for the represented party.",
696 743
          "format": "uri",
697 744
          "type": "string"
698 745
        },
699 746
        "primary": {
700 747
          "description": "Whether this is the user's primary current position.",
701 748
          "type": "boolean"
702 749
        },
703 750
        "rkey": {
704 751
          "description": "Record key of the position record.",
705 752
          "type": "string"
706 753
        },
707 754
        "skillRkeys": {
708 755
          "description": "Record keys of skills linked to this position.",
709 756
          "items": {
710 757
            "type": "string"
711 758
          },
712 759
          "type": "array"
713 760
        },
714 761
        "startedAt": {
715 762
          "description": "Start date. Partial date (YYYY, YYYY-MM, or YYYY-MM-DD).",
716 763
          "type": "string"
717 764
        },
718 765
        "title": {
719 766
          "description": "Job title or role.",
720 767
          "type": "string"
721 768
        },
769 +
        "verification": {
770 +
          "description": "Sifa's verification of this position, when one is issued. Absent when the position is not verified; absence is not a negative signal.",
771 +
          "ref": "#positionVerification",
772 +
          "type": "ref"
773 +
        },
722 774
        "workplaceType": {
723 775
          "description": "Workplace arrangement.",
724 776
          "ref": "id.sifa.defs#workplaceType",
725 777
          "type": "ref"
726 778
        }
727 779
      },
728 780
      "required": [
729 781
        "rkey",
730 782
        "title"
731 783
      ],
732 784
      "type": "object"
733 785
    },
734 786
    "presentationDeliveryView": {
735 787
      "description": "A single delivery of a presentation at an occasion.",
736 788
      "properties": {
737 789
        "coSpeakers": {
738 790
          "description": "Co-speakers on this delivery.",
739 791
          "items": {
740 792
            "ref": "#coSpeakerView",
741 793
            "type": "ref"
742 794
          },
743 795
          "type": "array"
744 796
        },
745 797
        "date": {
746 798
          "description": "Delivery date. Partial date.",
747 799
          "type": "string"
748 800
        },
749 801
        "eventName": {
750 802
          "description": "Name of the event or occasion.",
751 803
          "type": "string"
752 804
        },
753 805
        "eventUri": {
754 806
          "description": "AT-URI of a linked event record.",
755 807
          "format": "at-uri",
756 808
          "type": "string"
757 809
        },
758 810
        "links": {
759 811
          "description": "Related links for this delivery.",
760 812
          "items": {
761 813
            "ref": "id.sifa.defs#presentationLink",
762 814
            "type": "ref"
763 815
          },
764 816
          "type": "array"
765 817
        },
766 818
        "location": {
767 819
          "description": "Event location.",
768 820
          "type": "string"
769 821
        },
770 822
        "mode": {
771 823
          "description": "Delivery mode (e.g. in-person, remote, hybrid).",
772 824
          "type": "string"
773 825
        },
774 826
        "presentationRkey": {
775 827
          "description": "Record key of the parent presentation, when grouped.",
776 828
          "type": "string"
777 829
        },
778 830
        "rkey": {
779 831
          "description": "Record key of the delivery record.",
780 832
          "type": "string"
781 833
        },
782 834
        "role": {
783 835
          "description": "The user's role in the delivery.",
784 836
          "ref": "id.sifa.defs#presentationRole",
785 837
          "type": "ref"
786 838
        },
787 839
        "status": {
788 840
          "description": "Delivery status.",
789 841
          "type": "string"
790 842
        },
791 843
        "title": {
792 844
          "description": "Delivery title (may differ from the presentation title).",
793 845
          "type": "string"
794 846
        }
795 847
      },
796 848
      "required": [
797 849
        "rkey"
798 850
      ],
799 851
      "type": "object"
800 852
    },
801 853
    "presentationView": {
802 854
      "description": "A talk or session (content), with its deliveries grouped underneath.",
803 855
      "properties": {
804 856
        "deliveries": {
805 857
          "description": "Deliveries of this presentation.",
806 858
          "items": {
807 859
            "ref": "#presentationDeliveryView",
808 860
            "type": "ref"
809 861
          },
810 862
          "type": "array"
811 863
        },
812 864
        "description": {
813 865
          "description": "Presentation description.",
814 866
          "type": "string"
815 867
        },
816 868
        "duration": {
817 869
          "description": "Duration range in minutes.",
818 870
          "ref": "#durationView",
819 871
          "type": "ref"
820 872
        },
821 873
        "intendedAudiences": {
822 874
          "description": "Intended audiences.",
823 875
          "items": {
824 876
            "type": "string"
825 877
          },
826 878
          "type": "array"
827 879
        },
828 880
        "links": {
829 881
          "description": "Related links (slides, recording, etc.).",
830 882
          "items": {
831 883
            "ref": "id.sifa.defs#presentationLink",
832 884
            "type": "ref"
833 885
          },
834 886
          "type": "array"
835 887
        },
836 888
        "primary": {
837 889
          "description": "Whether this is the user's primary talk.",
838 890
          "type": "boolean"
839 891
        },
840 892
        "rkey": {
841 893
          "description": "Record key of the presentation record.",
842 894
          "type": "string"
843 895
        },
844 896
        "title": {
845 897
          "description": "Presentation title.",
846 898
          "type": "string"
847 899
        },
848 900
        "writeupUri": {
849 901
          "description": "AT-URI of a linked write-up record.",
850 902
          "format": "at-uri",
851 903
          "type": "string"
852 904
        }
853 905
      },
854 906
      "required": [
855 907
        "rkey",
856 908
        "title",
857 909
        "deliveries"
858 910
      ],
859 911
      "type": "object"
860 912
    },
861 913
    "profileView": {
862 914
      "description": "The aggregated public professional profile view.",
863 915
      "properties": {
864 916
        "about": {
865 917
          "description": "Longer professional summary or bio.",
866 918
          "maxGraphemes": 5000,
867 919
          "maxLength": 50000,
868 920
          "type": "string"
869 921
        },
870 922
        "activeApps": {
871 923
          "description": "AT Protocol apps this account has recently created records in.",
872 924
          "items": {
873 925
            "ref": "#activeAppView",
874 926
            "type": "ref"
875 927
          },
876 928
          "type": "array"
877 929
        },
878 930
        "atfundContribute": {
879 931
          "description": "Optional contribution/funding link.",
880 932
          "ref": "#atfundLink",
881 933
          "type": "ref"
882 934
        },
883 935
        "atprotoFollowersCount": {
884 936
          "description": "Number of app.bsky.graph followers.",
885 937
          "type": "integer"
886 938
        },
887 939
        "availableFromUtc": {
888 940
          "description": "Start of an availability window, as a UTC offset, if set.",
889 941
          "type": "integer"
890 942
        },
891 943
        "availableToUtc": {
892 944
          "description": "End of an availability window, as a UTC offset, if set.",
893 945
          "type": "integer"
894 946
        },
895 947
        "avatar": {
896 948
          "description": "URL of the profile avatar image.",
897 949
          "format": "uri",
898 950
          "type": "string"
899 951
        },
900 952
        "blueskyVerified": {
901 953
          "description": "Whether the account holds a Bluesky verification.",
902 954
          "type": "boolean"
903 955
        },
904 956
        "blueskyVerifiedAt": {
905 957
          "description": "When the Bluesky verification was issued.",
906 958
          "format": "datetime",
907 959
          "type": "string"
908 960
        },
909 961
        "certifications": {
910 962
          "description": "Certifications and licenses.",
911 963
          "items": {
912 964
            "ref": "#certificationView",
913 965
            "type": "ref"
914 966
          },
915 967
          "type": "array"
916 968
        },
917 969
        "claimed": {
918 970
          "description": "Whether the profile has been claimed by its owner on Sifa.",
919 971
          "type": "boolean"
920 972
        },
921 973
        "connectionsCount": {
922 974
          "description": "Number of confirmed professional connections.",
923 975
          "type": "integer"
924 976
        },
925 977
        "countryCode": {
926 978
          "description": "ISO 3166-1 alpha-2 country code for the primary location.",
927 979
          "type": "string"
928 980
        },
929 981
        "courses": {
930 982
          "description": "Courses, optionally linked to a credential.",
931 983
          "items": {
932 984
            "ref": "#courseView",
933 985
            "type": "ref"
934 986
          },
935 987
          "type": "array"
936 988
        },
937 989
        "createdAt": {
938 990
          "description": "When the profile record was created.",
939 991
          "format": "datetime",
940 992
          "type": "string"
941 993
        },
942 994
        "did": {
943 995
          "description": "The account DID. Stable identifier for the profile.",
944 996
          "format": "did",
945 997
          "type": "string"
946 998
        },
947 999
        "displayName": {
948 1000
          "description": "Display name shown on the profile.",
949 1001
          "maxGraphemes": 128,
950 1002
          "maxLength": 1280,
951 1003
          "type": "string"
952 1004
        },
953 1005
        "education": {
954 1006
          "description": "Education history entries.",
955 1007
          "items": {
956 1008
            "ref": "#educationView",
957 1009
            "type": "ref"
958 1010
          },
959 1011
          "type": "array"
960 1012
        },
961 1013
        "externalAccounts": {
962 1014
          "description": "Linked external accounts, with verification state.",
963 1015
          "items": {
964 1016
            "ref": "#externalAccountView",
965 1017
            "type": "ref"
966 1018
          },
967 1019
          "type": "array"
968 1020
        },
969 1021
        "familyName": {
970 1022
          "description": "Family (last) name, when provided.",
971 1023
          "maxGraphemes": 128,
972 1024
          "maxLength": 1280,
973 1025
          "type": "string"
974 1026
        },
975 1027
        "followersCount": {
976 1028
          "description": "Number of Sifa graph followers.",
977 1029
          "type": "integer"
978 1030
        },
979 1031
        "followingCount": {
980 1032
          "description": "Number of accounts this profile follows on the Sifa graph.",
981 1033
          "type": "integer"
982 1034
        },
983 1035
        "givenName": {
984 1036
          "description": "Given (first) name, when provided.",
985 1037
          "maxGraphemes": 128,
986 1038
          "maxLength": 1280,
987 1039
          "type": "string"
988 1040
        },
989 1041
        "handle": {
990 1042
          "description": "The current handle for the account.",
991 1043
          "format": "handle",
992 1044
          "type": "string"
993 1045
        },
994 1046
        "headline": {
995 1047
          "description": "Short professional headline.",
996 1048
          "maxGraphemes": 300,
997 1049
          "maxLength": 3000,
998 1050
          "type": "string"
999 1051
        },
1000 1052
        "honors": {
1001 1053
          "description": "Honors and awards.",
1002 1054
          "items": {
1003 1055
            "ref": "#honorView",
1004 1056
            "type": "ref"
1005 1057
          },
1006 1058
          "type": "array"
1007 1059
        },
1008 1060
        "industries": {
1009 1061
          "description": "Industry/domain pairs the user works in.",
1010 1062
          "items": {
1011 1063
            "ref": "id.sifa.defs#industryDomain",
1012 1064
            "type": "ref"
1013 1065
          },
1014 1066
          "type": "array"
1015 1067
        },
1016 1068
        "involvement": {
1017 1069
          "description": "Community, open-source, charity, and civic involvement.",
1018 1070
          "items": {
1019 1071
            "ref": "#involvementView",
1020 1072
            "type": "ref"
1021 1073
          },
1022 1074
          "type": "array"
1023 1075
        },
1024 1076
        "langs": {
1025 1077
          "description": "BCP-47 language tags the user has indicated.",
1026 1078
          "items": {
1027 1079
            "type": "string"
1028 1080
          },
1029 1081
          "type": "array"
1030 1082
        },
1031 1083
        "languages": {
1032 1084
          "description": "Spoken/written languages with proficiency.",
1033 1085
          "items": {
1034 1086
            "ref": "#languageView",
1035 1087
            "type": "ref"
1036 1088
          },
1037 1089
          "type": "array"
1038 1090
        },
1039 1091
        "location": {
1040 1092
          "description": "Assembled human-readable primary location string.",
1041 1093
          "type": "string"
1042 1094
        },
1043 1095
        "locationCountry": {
1044 1096
          "description": "Primary location country name.",
1045 1097
          "type": "string"
1046 1098
        },
1047 1099
        "locationLocality": {
1048 1100
          "description": "Primary location city or locality.",
1049 1101
          "type": "string"
1050 1102
        },
1051 1103
        "locationRegion": {
1052 1104
          "description": "Primary location region, state, or province.",
1053 1105
          "type": "string"
1054 1106
        },
1055 1107
        "locations": {
1056 1108
          "description": "All professional locations on the profile.",
1057 1109
          "items": {
1058 1110
            "ref": "#locationView",
1059 1111
            "type": "ref"
1060 1112
          },
1061 1113
          "type": "array"
1062 1114
        },
1063 1115
        "metInPersonCount": {
1064 1116
          "description": "Number of confirmed in-person meetings.",
1065 1117
          "type": "integer"
1066 1118
        },
1067 1119
        "openTo": {
1068 1120
          "description": "The kinds of opportunities the user is open to.",
1069 1121
          "items": {
1070 1122
            "ref": "id.sifa.defs#openToWorkStatus",
1071 1123
            "type": "ref"
1072 1124
          },
1073 1125
          "type": "array"
1074 1126
        },
1075 1127
        "pdsProvider": {
1076 1128
          "description": "The account PDS provider.",
1077 1129
          "ref": "#pdsProviderView",
1078 1130
          "type": "ref"
1079 1131
        },
1080 1132
        "positions": {
1081 1133
          "description": "Work history entries.",
1082 1134
          "items": {
1083 1135
            "ref": "#positionView",
1084 1136
            "type": "ref"
1085 1137
          },
1086 1138
          "type": "array"
1087 1139
        },
1088 1140
        "preferredWorkplace": {
1089 1141
          "description": "Preferred workplace arrangements.",
1090 1142
          "items": {
1091 1143
            "ref": "id.sifa.defs#workplaceType",
1092 1144
            "type": "ref"
1093 1145
          },
1094 1146
          "type": "array"
1095 1147
        },
1096 1148
        "presentationDeliveries": {
1097 1149
          "description": "Standalone deliveries that reference no owned presentation.",
1098 1150
          "items": {
1099 1151
            "ref": "#presentationDeliveryView",
1100 1152
            "type": "ref"
1101 1153
          },
1102 1154
          "type": "array"
1103 1155
        },
1104 1156
        "presentations": {
1105 1157
          "description": "Talks and sessions (content), each with its deliveries grouped underneath.",
1106 1158
          "items": {
1107 1159
            "ref": "#presentationView",
1108 1160
            "type": "ref"
1109 1161
          },
1110 1162
          "type": "array"
1111 1163
        },
1112 1164
        "projects": {
1113 1165
          "description": "Personal or professional projects.",
1114 1166
          "items": {
1115 1167
            "ref": "#projectView",
1116 1168
            "type": "ref"
1117 1169
          },
1118 1170
          "type": "array"
1119 1171
        },
1120 1172
        "pronouns": {
1121 1173
          "description": "Self-described pronouns.",
1122 1174
          "maxGraphemes": 64,
1123 1175
          "maxLength": 640,
1124 1176
          "type": "string"
1125 1177
        },
1126 1178
        "publications": {
1127 1179
          "description": "Publications, merged from Sifa records and linked ORCID works.",
1128 1180
          "items": {
1129 1181
            "ref": "#publicationView",
1130 1182
            "type": "ref"
1131 1183
          },
1132 1184
          "type": "array"
1133 1185
        },
1134 1186
        "skills": {
1135 1187
          "description": "Skills, optionally linked to positions.",
1136 1188
          "items": {
1137 1189
            "ref": "#skillView",
1138 1190
            "type": "ref"
1139 1191
          },
1140 1192
          "type": "array"
1141 1193
        },
1142 1194
        "volunteering": {
1143 1195
          "description": "Legacy volunteering entries. New entries are surfaced under involvement.",
1144 1196
          "items": {
1145 1197
            "ref": "#volunteeringView",
1146 1198
            "type": "ref"
1147 1199
          },
1148 1200
          "type": "array"
1149 1201
        },
1150 1202
        "website": {
1151 1203
          "description": "Primary personal or professional website.",
1152 1204
          "format": "uri",
1153 1205
          "type": "string"
1154 1206
        }
1155 1207
      },
1156 1208
      "required": [
1157 1209
        "did",
1158 1210
        "handle"
1159 1211
      ],
1160 1212
      "type": "object"
1161 1213
    },
1214 +
    "projectEventView": {
1215 +
      "properties": {
1216 +
        "country": {
1217 +
          "description": "ISO 3166-1 alpha-2 country code, from the event's first address.",
1218 +
          "type": "string"
1219 +
        },
1220 +
        "locality": {
1221 +
          "description": "City, from the event's first address.",
1222 +
          "type": "string"
1223 +
        },
1224 +
        "mode": {
1225 +
          "description": "Event mode token, from the event record.",
1226 +
          "type": "string"
1227 +
        },
1228 +
        "name": {
1229 +
          "description": "Event name, from the event record.",
1230 +
          "type": "string"
1231 +
        },
1232 +
        "role": {
1233 +
          "description": "The user's role at this occurrence, if it differs from the project's role.",
1234 +
          "type": "string"
1235 +
        },
1236 +
        "startsAt": {
1237 +
          "description": "Event start, from the event record.",
1238 +
          "format": "datetime",
1239 +
          "type": "string"
1240 +
        },
1241 +
        "uri": {
1242 +
          "description": "AT-URI of the linked community.lexicon.calendar.event.",
1243 +
          "format": "at-uri",
1244 +
          "type": "string"
1245 +
        },
1246 +
        "url": {
1247 +
          "description": "Event website, from the event's first uri.",
1248 +
          "format": "uri",
1249 +
          "type": "string"
1250 +
        }
1251 +
      },
1252 +
      "required": [
1253 +
        "uri"
1254 +
      ],
1255 +
      "type": "object"
1256 +
    },
1162 1257
    "projectView": {
1163 1258
      "description": "A project entry.",
1164 1259
      "properties": {
1165 1260
        "description": {
1166 1261
          "description": "Project description.",
1167 1262
          "type": "string"
1168 1263
        },
1169 1264
        "endDate": {
1170 1265
          "description": "End date. Partial date.",
1171 1266
          "type": "string"
1172 1267
        },
1268 +
        "events": {
1269 +
          "description": "Events this project organized or hosted (from the record's events field), with display fields resolved from the referenced event records.",
1270 +
          "items": {
1271 +
            "ref": "#projectEventView",
1272 +
            "type": "ref"
1273 +
          },
1274 +
          "maxLength": 200,
1275 +
          "type": "array"
1276 +
        },
1173 1277
        "name": {
1174 1278
          "description": "Project name.",
1175 1279
          "type": "string"
1176 1280
        },
1177 1281
        "primary": {
1178 1282
          "description": "Whether this is the user's primary ongoing project.",
1179 1283
          "type": "boolean"
1180 1284
        },
1181 1285
        "rkey": {
1182 1286
          "description": "Record key of the project record.",
1183 1287
          "type": "string"
1184 1288
        },
1289 +
        "role": {
1290 +
          "description": "The user's own role on the project.",
1291 +
          "type": "string"
1292 +
        },
1185 1293
        "startDate": {
1186 1294
          "description": "Start date. Partial date.",
1187 1295
          "type": "string"
1188 1296
        },
1189 1297
        "url": {
1190 1298
          "description": "Project URL.",
1191 1299
          "format": "uri",
1192 1300
          "type": "string"
1193 1301
        }
1194 1302
      },
1195 1303
      "required": [
1196 1304
        "rkey",
1197 1305
        "name"
1198 1306
      ],
1199 1307
      "type": "object"
1200 1308
    },
1201 1309
    "publicationView": {
1202 1310
      "description": "A publication, merged from Sifa and linked ORCID works.",
1203 1311
      "properties": {
1204 1312
        "contributors": {
1205 1313
          "description": "Linked contributors (co-authors).",
1206 1314
          "items": {
1207 1315
            "ref": "#contributorView",
1208 1316
            "type": "ref"
1209 1317
          },
1210 1318
          "type": "array"
1211 1319
        },
1212 1320
        "date": {
1213 1321
          "description": "Publication date. Partial date.",
1214 1322
          "type": "string"
1215 1323
        },
1216 1324
        "description": {
1217 1325
          "description": "Description or abstract.",
1218 1326
          "type": "string"
1219 1327
        },
1220 1328
        "doi": {
1221 1329
          "description": "Digital Object Identifier.",
1222 1330
          "type": "string"
1223 1331
        },
1224 1332
        "image": {
1225 1333
          "description": "Cover or preview image URL.",
1226 1334
          "format": "uri",
1227 1335
          "type": "string"
1228 1336
        },
1229 1337
        "orcidCorroborated": {
1230 1338
          "description": "Whether an ORCID work corroborates a Sifa record.",
1231 1339
          "type": "boolean"
1232 1340
        },
1233 1341
        "primary": {
1234 1342
          "description": "Whether this is the user's primary publication.",
1235 1343
          "type": "boolean"
1236 1344
        },
1237 1345
        "publicationName": {
1238 1346
          "description": "Name of the source publication venue, when present.",
1239 1347
          "type": "string"
1240 1348
        },
1241 1349
        "publicationUri": {
1242 1350
          "description": "AT-URI of the source publication record, when present.",
1243 1351
          "format": "at-uri",
1244 1352
          "type": "string"
1245 1353
        },
1246 1354
        "publicationUrl": {
1247 1355
          "description": "Canonical publication URL, when present.",
1248 1356
          "format": "uri",
1249 1357
          "type": "string"
1250 1358
        },
1251 1359
        "publisher": {
1252 1360
          "description": "Publisher or journal.",
1253 1361
          "type": "string"
1254 1362
        },
1363 +
        "relatedIdentifiers": {
1364 +
          "description": "Other versions or forms of this work: the relations declared on the record plus, for a DOI, those registered with DataCite or Crossref. Clients can fold a preprint under its published version.",
1365 +
          "items": {
1366 +
            "ref": "id.sifa.defs#relatedIdentifier",
1367 +
            "type": "ref"
1368 +
          },
1369 +
          "type": "array"
1370 +
        },
1255 1371
        "rkey": {
1256 1372
          "description": "Record key, or a synthetic key for ORCID-only works.",
1257 1373
          "type": "string"
1258 1374
        },
1259 1375
        "subtitle": {
1260 1376
          "description": "Subtitle.",
1261 1377
          "type": "string"
1262 1378
        },
1263 1379
        "title": {
1264 1380
          "description": "Publication title.",
1265 1381
          "type": "string"
1266 1382
        },
1267 1383
        "type": {
1268 1384
          "description": "Publication type token.",
1269 1385
          "type": "string"
1270 1386
        },
1271 1387
        "typeLabel": {
1272 1388
          "description": "Human-readable publication type.",
1273 1389
          "type": "string"
1274 1390
        },
1275 1391
        "url": {
1276 1392
          "description": "Publication URL.",
1277 1393
          "format": "uri",
1278 1394
          "type": "string"
1279 1395
        },
1280 1396
        "verified": {
1281 1397
          "description": "Whether the publication is verified (e.g. via ORCID).",
1282 1398
          "type": "boolean"
1283 1399
        },
1284 1400
        "verifiedVia": {
1285 1401
          "description": "Verification source, when verified.",
1286 1402
          "type": "string"
1287 1403
        }
1288 1404
      },
1289 1405
      "required": [
1290 1406
        "rkey",
1291 1407
        "title",
1292 1408
        "verified"
1293 1409
      ],
1294 1410
      "type": "object"
1295 1411
    },
1296 1412
    "skillView": {
1297 1413
      "description": "A skill entry.",
1298 1414
      "properties": {
1299 1415
        "category": {
1300 1416
          "description": "Broad category.",
1301 1417
          "ref": "id.sifa.defs#skillCategory",
1302 1418
          "type": "ref"
1303 1419
        },
1304 1420
        "name": {
1305 1421
          "description": "Skill name.",
1306 1422
          "type": "string"
1307 1423
        },
1308 1424
        "positionRkeys": {
1309 1425
          "description": "Record keys of positions this skill is linked to.",
1310 1426
          "items": {
1311 1427
            "type": "string"
1312 1428
          },
1313 1429
          "type": "array"
1314 1430
        },
1315 1431
        "rkey": {
1316 1432
          "description": "Record key of the skill record.",
1317 1433
          "type": "string"
1318 1434
        }
1319 1435
      },
1320 1436
      "required": [
1321 1437
        "rkey",
1322 1438
        "name"
1323 1439
      ],
1324 1440
      "type": "object"
1325 1441
    },
1326 1442
    "volunteeringView": {
1327 1443
      "description": "A legacy volunteering entry.",
1328 1444
      "properties": {
1329 1445
        "agentRef": {
1330 1446
          "description": "Canonical organization reference (name plus optional did/entityRef). Mirrors the flat organization/entityRef fields during the migration; the two always agree.",
1331 1447
          "ref": "id.sifa.defs#agentRef",
1332 1448
          "type": "ref"
1333 1449
        },
1334 1450
        "cause": {
1335 1451
          "description": "Cause supported.",
1336 1452
          "type": "string"
1337 1453
        },
1338 1454
        "currentCompanyName": {
1339 1455
          "description": "Current canonical name of the linked entity, when it resolves. The web shows it as a \"Now {name}\" hint when it differs from the saved snapshot name (#516).",
1340 1456
          "type": "string"
1341 1457
        },
1342 1458
        "description": {
1343 1459
          "description": "Description.",
1344 1460
          "type": "string"
1345 1461
        },
1346 1462
        "endDate": {
1347 1463
          "description": "End date. Partial date.",
1348 1464
          "type": "string"
1349 1465
        },
1350 1466
        "entityRef": {
1351 1467
          "description": "Pointer URI to the resolved organization entity.",
1352 1468
          "format": "uri",
1353 1469
          "type": "string"
1354 1470
        },
1355 1471
        "organization": {
1356 1472
          "description": "Organization name.",
1357 1473
          "type": "string"
1358 1474
        },
1359 1475
        "rkey": {
1360 1476
          "description": "Record key of the volunteering record.",
1361 1477
          "type": "string"
1362 1478
        },
1363 1479
        "role": {
1364 1480
          "description": "Role held.",
1365 1481
          "type": "string"
1366 1482
        },
1367 1483
        "startDate": {
1368 1484
          "description": "Start date. Partial date.",
1369 1485
          "type": "string"
1370 1486
        }
1371 1487
      },
1372 1488
      "required": [
1373 1489
        "rkey",
1374 1490
        "organization"
1375 1491
      ],
1376 1492
      "type": "object"
1377 1493
    }
1378 1494
  },
1379 1495
  "description": "Get the aggregated public professional profile for an actor, as computed by a Sifa AppView. This view joins a user's id.sifa.* records across all sections (positions, education, skills, endorsements received, and more) plus AppView-computed aggregates (follower/connection counts, active apps, verification state). Raw records remain readable directly from the user's PDS; this method exposes the enriched, joined view that only exists in the AppView. Public projection: viewer-specific and internal fields are not included.",
1380 1496
  "id": "id.sifa.getProfileView",
1381 1497
  "lexicon": 1
1382 1498
}

Compare Other Versions

Lexicon Garden

@