---
title: "Submit your OWN birthday or work anniversary (employee self-submission)"
method: POST
path: "/v1/person-facts/self"
tags: ["person-facts"]
---

# Submit your OWN birthday or work anniversary (employee self-submission)

`POST /v1/person-facts/self`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/person-facts/self`
- Auth: HTTP bearer

The employee self-submission collection mode: the target of a solicit_fact notify. A member submits their OWN fact (source=self, the highest-trust source): month+day for a birthday (recurring_date, NO year) or an ISO date for a work anniversary. The subject is ALWAYS the caller's own actor (resolved from the verified JWT email), so a member can never write another person's fact. Tenant-scoped; PII-safe (no raw value logged; audit stores a hash); honors the fact's allowed_sources allowlist when set.

## Headers

- `X-Tenant-Id` string, nullable

## Request body

- SubmitOwnFactRequest: Submit the CALLER's own fact (employee self-submission). NO ``entity_id``: the subject is always the caller's own actor (resolved server-side from the verified JWT email), so a member can never target another person.
  - `domain_key` string, required: The canonical fact key, e.g. person.birthday / person.work_anniversary.
  - `month` integer, nullable: Birthday month (1–12); no year is collected.
  - `day` integer, nullable: Birthday day (1–31).
  - `on` string, date, nullable: Work-anniversary date (ISO). Only month/day recur.
  - `effective_tz` string, nullable: IANA tz for this subject (optional).

## Response `200`

Successful Response

- PersonFactSummary: A resolved person fact (PII-safe: month/day or date, status, tz; never a birth year).
  - `entity_id` string, uuid, required
  - `definition_id` string, uuid, required
  - `status_code` string, required
  - `recurring_month` integer, nullable, required
  - `recurring_day` integer, nullable, required
  - `date_value` string, date, nullable, required
  - `effective_tz` string, nullable, required
  - `fact_revision` integer, required

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)
- `409`: Conflict
- `422`: Validation error

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
