CorebanqCorebanq Developer Docs
Personasv1Personal Identity

Delete Persona Link

Deletes the link. ANSWERS 200, NOT 204: the shared helper finishes with apireply.Ok200, so the body is {"status": 200, "message": "OK"}. The 204 this operation used to document was never written by the code.

DELETE
/v1/persona-links/{id}

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Link id.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/persona-links/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{
  "status": 200,
  "message": "OK"
}
{
  "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"
}

PUTUpdate persona

Partial update. TWO THINGS THIS ROUTE CANNOT DO. (1) IT CANNOT DEACTIVATE A PERSONA, AND IT CANNOT CLEAR A FIELD. The update is issued as Updates(struct), and GORM skips every zero-valued member of a struct — so active: false is indistinguishable from active omitted, and "first_name": "" leaves the stored name alone. Only non-zero values are written. date_of_birth and date_of_death are pointers and are copied only when present, which is the same rule stated differently. (2) IT DOES NOT VALIDATE. validateCreatePersonaInput runs on POST only, so this route will happily write a name over the length limit, a future date of birth, or an age under 18 — all of which the create refuses. The 200 body is the struct read before the update with the written columns assigned back into it: GORM points its update at the model it was handed and assigns each column it sets, so the fields the request changed do come back with their new values. It is NOT a fresh read, so anything the database produced on its own — a trigger, a default, a computed column — is not reflected.

DELDelete persona

HARD DELETE. models.BaseModel declares no gorm.DeletedAt, so DB.Delete issues a real DELETE and the row is gone — this is not the logical delete used elsewhere in the platform, and there is no way to recover the persona through the API. Answers 200 through Ok200, so the body is {"status": 200, "message": "OK"} — not 204 and not the deleted record. The RBAC grants written at create time are not cleaned up.