Get Persona Link
Authorization
bearerAuth In: header
Path Parameters
Link id.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/persona-links/497f6eca-6276-4993-bfeb-53cbbbba6f08"{
"rec_idx": "fa292dda-ae2a-45ee-b97b-e8ab8329b907",
"rec_type_x": "5037db46-337a-4e82-97d6-129819a818a7",
"rec_idy": "f9543843-55a0-4858-ae41-eb146ddf8536",
"rec_type_y": "4f9a126c-2c2a-4b25-91ed-5614db497338",
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"created_at": "2019-08-24T14:15:22Z",
"created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
"modified_at": "2019-08-24T14:15:22Z",
"modified_by": "e8d4374d-93a1-4e98-a6c6-fdcf00c5059f",
"active": true,
"metadata": {}
}{
"status": 400,
"message": "Invalid input",
"code": "common.invalid_input",
"class": "validation"
}{
"status": 401,
"message": "Unauthorized",
"code": "common.unauthorized",
"class": "business"
}{
"status": 403,
"message": "No access to the record",
"code": "common.rbac_no_rec_access",
"class": "business"
}{
"status": 404,
"message": "Record not found",
"code": "common.record_not_found",
"class": "business"
}{
"status": 429,
"message": "Rate limit exceeded",
"code": "rate_limits_m.exceeded",
"class": "temporary",
"retryable": true
}{
"status": 500,
"message": "Internal server error",
"code": "common.server_error",
"class": "business"
}{
"overall_status": "unhealthy",
"message": "Service is shutting down",
"timestamp": "2026-08-27T15:04:05Z"
}Creates a persona and grants the caller create/read/update on it in the same transaction. THE ADDRESS FIELDS ARE ACCEPTED AND SILENTLY DROPPED. CreatePersonaInput embeds ActualAddress and RegAddress, but the record it is copied into, models.Persona, is PersonaData + BaseModel and has no address fields at all — so actual_street, reg_city and the rest are decoded, ignored by commonutil.Populate, and never stored. The 201 body will not contain them either. Store an address through the record type that owns one. invite is decoded — the Invite member has no json tag, but encoding/json matches an object key to a field name case-insensitively — and then nothing reads it. This is the ONLY route that validates a persona. The two PUT routes run no validator at all, so a name or date of birth the create refuses can still be written by an update.
Returns a BARE ARRAY of every persona the caller may read — not the shared list envelope. There is no total, no keys, and NO PAGINATION OR FILTERING AT ALL: no query parameter is read, so limit, offset, sort and search.<field> are ignored and the whole permitted set comes back in one response. Use GET /v2/personas when you need any of that. Inactive personas are included: the query applies no active filter. Scoping: a caller with read-all gets every row; otherwise the handler collects the record ids granted to the caller or to any of their roles and filters on those.