# PartnerEmployeeIngressService

API to take actions on behalf of an employee.

```http
Authorization: Bearer <token>
x-identity-uuid: <employee_uuid>
x-identity-type: EMPLOYEE
```

## ListContributionTypesAvailableForSetup

Provides list of available contribution types for the employee to configure contribution percentages for. I.e. if an employer does not enable Roth, then only Traditional would be available for the employee to contribute to.

```protobuf
service PartnerEmployeeIngressService {
  rpc ListContributionTypesAvailableForSetup(ListContributionTypesAvailableForSetupRequest) returns (ListContributionTypesAvailableForSetupResponse);
}

message ListContributionTypesAvailableForSetupRequest {}

message ListContributionTypesAvailableForSetupResponse {
  repeated ContributionType contribution_types = 1;
}
```

**Data types:** [ContributionType](/core-data-types/employees#contributiontype)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/ListContributionTypesAvailableForSetup`](/openapi/partneremployeeingressservice/listcontributiontypesavailableforsetup)

## GetEmployeeSetupLimits

Provides the limits based on the employee's company's plan configuration and if the employee has any contributions to date.

```protobuf
service PartnerEmployeeIngressService {
  rpc GetEmployeeSetupLimits(GetEmployeeSetupLimitsRequest) returns (GetEmployeeSetupLimitsResponse);
}

message GetEmployeeSetupLimitsRequest {}

message GetEmployeeSetupLimitsResponse {
  Money annual_deferrals_to_date = 1;
  optional Money annual_match_to_date = 2;
  optional Money annual_post_tax_contributions_to_date = 3;
  repeated EmployerMatchTier employer_match_tiers = 4;
}
```

**Data types:** [EmployerMatchTier](/core-data-types/company-and-plan#employermatchtier), [Money](/core-data-types/common#money)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetEmployeeSetupLimits`](/openapi/partneremployeeingressservice/getemployeesetuplimits)

## GetEmployeeSetupEstimates

Provides estimates that can be used to help a user determine how much to contribute. Please make clear to user these are estimates.

```protobuf
service PartnerEmployeeIngressService {
  rpc GetEmployeeSetupEstimates(GetEmployeeSetupEstimatesRequest) returns (GetEmployeeSetupEstimatesResponse);
}

message GetEmployeeSetupEstimatesRequest {
  Money est_annual_income = 1;
  repeated ContributionInfo potential_contributions = 2;
  optional Date as_of_date = 3;
}

message GetEmployeeSetupEstimatesResponse {
  Money est_annual_employer_match = 1;
  Money est_annual_employer_match_remaining = 2;
  Money est_annual_deferral = 3;
  optional Money est_annual_mbdr = 4;

  Money est_retirement = 5;

  Money est_per_paycheck_deferral = 6;
  Money est_per_paycheck_employer_match = 7;
  int32 max_out_month = 8;
  optional Money est_per_paycheck_mbdr = 9;
}
```

**Data types:** [ContributionInfo](/core-data-types/employees#contributioninfo), [Date](/core-data-types/common#date), [Money](/core-data-types/common#money)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetEmployeeSetupEstimates`](/openapi/partneremployeeingressservice/getemployeesetupestimates)

## SetEmployeeContributionRates

Endpoint to set contribution rates when initiated by an employee.

```protobuf
service PartnerEmployeeIngressService {
  rpc SetEmployeeContributionRates(SetEmployeeContributionRatesRequest) returns (SetEmployeeContributionRatesResponse);
}

message SetEmployeeContributionRatesRequest {
  repeated ContributionInfo employee_contributions = 1;
}

message SetEmployeeContributionRatesResponse {
  EmployeeDetails.OnboardingStatus onboarding_status = 1;
}
```

**Data types:** [ContributionInfo](/core-data-types/employees#contributioninfo), [EmployeeDetails](/core-data-types/employees#employeedetails)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/SetEmployeeContributionRates`](/openapi/partneremployeeingressservice/setemployeecontributionrates)

## GetEmployeeContributionRates

Endpoint to get contribution rates for an employee.

```protobuf
service PartnerEmployeeIngressService {
  rpc GetEmployeeContributionRates(GetEmployeeContributionRatesRequest) returns (GetEmployeeContributionRatesResponse);
}

message GetEmployeeContributionRatesRequest {}

message GetEmployeeContributionRatesResponse {
  repeated ContributionInfo employee_contributions = 1;
  bool has_set_custom_rates = 2;
}
```

**Data types:** [ContributionInfo](/core-data-types/employees#contributioninfo)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetEmployeeContributionRates`](/openapi/partneremployeeingressservice/getemployeecontributionrates)

## ListEmployerSelectedInvestmentOptions

List of employer suggested investment options. This corresponds to the investment options the employer selected during their onboarding.

```protobuf
service PartnerEmployeeIngressService {
  rpc ListEmployerSelectedInvestmentOptions(ListEmployerSelectedInvestmentOptionsRequest) returns (ListEmployerSelectedInvestmentOptionsResponse);
}

message ListEmployerSelectedInvestmentOptionsRequest {}

message ListEmployerSelectedInvestmentOptionsResponse {
  repeated AssetMetadata employer_selected_investment_options = 1;
  bool has_bw = 2;
  bool has_trm = 3;
  int32 min_employer_selected_allocation_bps = 4;
}
```

**Data types:** [AssetMetadata](/core-data-types/accounts-and-investments#assetmetadata)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/ListEmployerSelectedInvestmentOptions`](/openapi/partneremployeeingressservice/listemployerselectedinvestmentoptions)

## ListRetirementMortgageInvestmentOptions

List of investment options under the retirement mortgage.

```protobuf
service PartnerEmployeeIngressService {
  rpc ListRetirementMortgageInvestmentOptions(ListRetirementMortgageInvestmentOptionsRequest) returns (ListRetirementMortgageInvestmentOptionsResponse);
}

message ListRetirementMortgageInvestmentOptionsRequest {}

message ListRetirementMortgageInvestmentOptionsResponse {
  repeated AssetMetadata retirement_mortgage_investment_options = 1;
}
```

**Data types:** [AssetMetadata](/core-data-types/accounts-and-investments#assetmetadata)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/ListRetirementMortgageInvestmentOptions`](/openapi/partneremployeeingressservice/listretirementmortgageinvestmentoptions)

## SearchBrokerageWindowInvestmentOptions

Search within brokerage window, i.e. for a specific funds.

```protobuf
service PartnerEmployeeIngressService {
  rpc SearchBrokerageWindowInvestmentOptions(SearchBrokerageWindowInvestmentOptionsRequest) returns (SearchBrokerageWindowInvestmentOptionsResponse);
}

message SearchBrokerageWindowInvestmentOptionsRequest {
  Search search = 1;
}

message SearchBrokerageWindowInvestmentOptionsResponse {
  repeated AssetMetadata brokerage_window_investment_options = 1;
}
```

**Data types:** [AssetMetadata](/core-data-types/accounts-and-investments#assetmetadata), [Search](/core-data-types/common#search)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/SearchBrokerageWindowInvestmentOptions`](/openapi/partneremployeeingressservice/searchbrokeragewindowinvestmentoptions)

## GetAccount

```protobuf
service PartnerEmployeeIngressService {
  rpc GetAccount(GetAccountRequest) returns (GetAccountResponse);
}

message GetAccountRequest {
  string account_id = 1;
}

message GetAccountResponse {
  optional Account account = 1;
}
```

**Data types:** [Account](/core-data-types/accounts-and-investments#account)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetAccount`](/openapi/partneremployeeingressservice/getaccount)

## ListAccounts

List accounts for the employee.

```protobuf
service PartnerEmployeeIngressService {
  rpc ListAccounts(ListAccountsRequest) returns (ListAccountsResponse);
}

message ListAccountsRequest {}

message ListAccountsResponse {
  repeated string account_ids = 1 [deprecated = true];
  repeated Account accounts = 2;
}
```

**Data types:** [Account](/core-data-types/accounts-and-investments#account)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/ListAccounts`](/openapi/partneremployeeingressservice/listaccounts)

## SetAccountInvestmentSelections

Set the investment allocations for an employee. For each selection you must provide if the selection is part of `EMPLOYER_SELECTED` or `BROKERAGE_WINDOW` (if `has_bw` is `true`). If the employer `has_trm` you will need to allow the employee to put a portion of their allocation towards this. This is the only investment selection that does not require an `asset_uuid`.

Errors:

- `MIN_EMPLOYER_SELECTED_UNMET`: if total selections with investment selection type `EMPLOYER_SELECTED` is less than `min_employer_selected_allocation_bps`.
- `ACCOUNT_ALLOCATION_REQUIREMENT_UNMET`: if total allocation across all selections is not equal to 100.
- `MISSING_ASSET_UUID`: If you provide a `BROKERAGE_WINDOW` or `EMPLOYER_SELECTED` investment selection without an `asset_uuid`.
- `EMPTY_SELECTIONS`: tried to make a selection with an empty list.
- `PLAN_ACCOUNT_NOT_FOUND`: account you are trying to update cannot be found.


```protobuf
service PartnerEmployeeIngressService {
  rpc SetAccountInvestmentSelections(SetAccountInvestmentSelectionsRequest) returns (SetAccountInvestmentSelectionsResponse);
}

message SetAccountInvestmentSelectionsRequest {
  optional string account_id = 1;
  repeated AccountInvestmentSelection selections = 2;
}

message SetAccountInvestmentSelectionsResponse {
  EmployeeDetails.OnboardingStatus onboarding_status = 1;
}
```

**Data types:** [AccountInvestmentSelection](/core-data-types/accounts-and-investments#accountinvestmentselection), [EmployeeDetails](/core-data-types/employees#employeedetails)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/SetAccountInvestmentSelections`](/openapi/partneremployeeingressservice/setaccountinvestmentselections)

## SetRetirementMortgageInvestmentSelections

Set the retirement mortgage investment allocations for an employee. These are the allocations for funds within the retirement mortgage bucket that is part of the full account allocation.

Errors:

- `TRM_ALLOCATION_REQUIREMENT_UNMET`: if total allocation across all selections is not equal to 100.


```protobuf
service PartnerEmployeeIngressService {
  rpc SetRetirementMortgageInvestmentSelections(SetRetirementMortgageInvestmentSelectionsRequest) returns (SetRetirementMortgageInvestmentSelectionsResponse);
}

message SetRetirementMortgageInvestmentSelectionsRequest {
  optional string account_id = 1;
  repeated TrmInvestmentSelection selections = 2;
}

message SetRetirementMortgageInvestmentSelectionsResponse {
  EmployeeDetails.OnboardingStatus onboarding_status = 1;
}
```

**Data types:** [EmployeeDetails](/core-data-types/employees#employeedetails), [TrmInvestmentSelection](/core-data-types/accounts-and-investments#trminvestmentselection)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/SetRetirementMortgageInvestmentSelections`](/openapi/partneremployeeingressservice/setretirementmortgageinvestmentselections)

## GetInvestmentSelections

This can be used to fetch employee's currently set investment selections and includes the `AssetMetadata` for each investment.

```protobuf
service PartnerEmployeeIngressService {
  rpc GetInvestmentSelections(GetInvestmentSelectionsRequest) returns (GetInvestmentSelectionsResponse);
}

message GetInvestmentSelectionsRequest {
  optional string account_id = 1;
}

message GetInvestmentSelectionsResponse {
  repeated AccountInvestmentSelections accounts = 1;
}
```

**Data types:** [AccountInvestmentSelections](/core-data-types/accounts-and-investments#accountinvestmentselections)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetInvestmentSelections`](/openapi/partneremployeeingressservice/getinvestmentselections)

## GetEmployeeOnboardingStatus

This contains information of where employee is in onboarding and if agreements are ready to sign. Note nothing is waiting on the employee finishing onboarding but we encourage if there are unsigned documents you prod the user to sign them.

```protobuf
service PartnerEmployeeIngressService {
  rpc GetEmployeeOnboardingStatus(GetEmployeeOnboardingStatusRequest) returns (GetEmployeeOnboardingStatusResponse);
}

message GetEmployeeOnboardingStatusRequest {}

message GetEmployeeOnboardingStatusResponse {
  EmployeeDetails.OnboardingStatus onboarding_status = 1;
}
```

**Data types:** [EmployeeDetails](/core-data-types/employees#employeedetails)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetEmployeeOnboardingStatus`](/openapi/partneremployeeingressservice/getemployeeonboardingstatus)

## GetEmployeeInviteToken

```protobuf
service PartnerEmployeeIngressService {
  rpc GetEmployeeInviteToken(GetEmployeeInviteTokenRequest) returns (GetEmployeeInviteTokenResponse);
}

message GetEmployeeInviteTokenRequest {}

message GetEmployeeInviteTokenResponse {
  string employee_invite_token = 1;
}
```

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetEmployeeInviteToken`](/openapi/partneremployeeingressservice/getemployeeinvitetoken)

## GetEmployeeSummary

> **Note:** This is per account. To get the aggregate across traditional and Roth you will need to do the addition on your side.


```protobuf
service PartnerEmployeeIngressService {
  rpc GetEmployeeSummary(GetEmployeeSummaryRequest) returns (GetEmployeeSummaryResponse);
}

message GetEmployeeSummaryRequest {
  optional Date on_date = 1;
  optional string account_id = 2;
}

message GetEmployeeSummaryResponse {
  message AccountEmployeeSummary {
    string account_id = 1;
    Money account_balance = 2;
    Money deferrals_ytd = 3;
    optional Money mbdr_contributions_ytd = 4;
    Money total_contributions_ytd = 5;
    optional Money employer_match_ytd = 6;
  }
  repeated AccountEmployeeSummary account_summary = 1;
}
```

**Data types:** [Date](/core-data-types/common#date), [Money](/core-data-types/common#money)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetEmployeeSummary`](/openapi/partneremployeeingressservice/getemployeesummary)

## GetAccountHoldingsSummary

> **Note:** This is per account. To get the aggregate across traditional and Roth you will need to do the addition on your side.


```protobuf
service PartnerEmployeeIngressService {
  rpc GetAccountHoldingsSummary(GetAccountHoldingsSummaryRequest) returns (GetAccountHoldingsSummaryResponse);
}

message GetAccountHoldingsSummaryRequest {
  optional Date on_date = 1;
  optional string account_id = 2;
}

message GetAccountHoldingsSummaryResponse {
  message AccountHoldingsSummary {
    message HoldingMetadata {
      AssetMetadata metadata = 1;
      int32 allocation_bps = 2;
      int32 gain_or_loss_bps = 3;
    }
    Money net_asset_value = 2;
    repeated HoldingMetadata holding_metadata = 3;
    optional Date first_contribution_date = 4;
  }
  repeated AccountHoldingsSummary account_holdings_summary = 1;
}
```

**Data types:** [Date](/core-data-types/common#date), [Money](/core-data-types/common#money)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetAccountHoldingsSummary`](/openapi/partneremployeeingressservice/getaccountholdingssummary)

## ListAccountHoldingsPerformance

> **Note:** This is per-account. Because these are percentages, they are not additive. Use `ListAggregateHoldingsPerformance` for the aggregated performance across accounts. If no account id is provided, we will paginate over the union of all accounts.


```protobuf
service PartnerEmployeeIngressService {
  rpc ListAccountHoldingsPerformance(ListAccountHoldingsPerformanceRequest) returns (ListAccountHoldingsPerformanceResponse);
}

message ListAccountHoldingsPerformanceRequest {
  NonDiscreteIntervalRequest interval = 1;
  optional string account_id = 2;
  optional LookbackType lookback = 3;
  optional com.basiccapital.common.external.PaginationRequest pagination = 4;
}

message ListAccountHoldingsPerformanceResponse {
  message AccountDatedHoldingsPerformance {
    repeated DatedHoldingsPerformance holdings_performance = 1;
    string account_id = 2;
  }
  repeated AccountDatedHoldingsPerformance accounts = 1;
  optional string next_page_token = 2;
}
```

**Data types:** [DatedHoldingsPerformance](/core-data-types/accounts-and-investments#datedholdingsperformance), [LookbackType](/core-data-types/common#lookbacktype), [NonDiscreteIntervalRequest](/core-data-types/common#nondiscreteintervalrequest)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/ListAccountHoldingsPerformance`](/openapi/partneremployeeingressservice/listaccountholdingsperformance)

## ListAggregateHoldingsPerformance

> **Note:** This aggregates across all accounts the employee has.


```protobuf
service PartnerEmployeeIngressService {
  rpc ListAggregateHoldingsPerformance(ListAggregateHoldingsPerformanceRequest) returns (ListAggregateHoldingsPerformanceResponse);
}

message ListAggregateHoldingsPerformanceRequest {
  NonDiscreteIntervalRequest interval = 1;
  optional LookbackType lookback = 2;
  optional com.basiccapital.common.external.PaginationRequest pagination = 3;
}

message ListAggregateHoldingsPerformanceResponse {
  repeated DatedHoldingsPerformance holdings_performance = 1;
  optional string next_page_token = 2;
}
```

**Data types:** [DatedHoldingsPerformance](/core-data-types/accounts-and-investments#datedholdingsperformance), [LookbackType](/core-data-types/common#lookbacktype), [NonDiscreteIntervalRequest](/core-data-types/common#nondiscreteintervalrequest)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/ListAggregateHoldingsPerformance`](/openapi/partneremployeeingressservice/listaggregateholdingsperformance)

## GetInvestmentUpdateAvailability

```protobuf
service PartnerEmployeeIngressService {
  rpc GetInvestmentUpdateAvailability(GetInvestmentUpdateAvailabilityRequest) returns (GetInvestmentUpdateAvailabilityResponse);
}

message GetInvestmentUpdateAvailabilityRequest {
  string account_id = 1;
}

message GetInvestmentUpdateAvailabilityResponse {
  bool plan_account_rebalance_enabled = 1;
  bool trm_rebalance_enabled = 2;
  repeated string liquidate_only_asset_uuids = 3;
}
```

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetInvestmentUpdateAvailability`](/openapi/partneremployeeingressservice/getinvestmentupdateavailability)

## RebalanceAccountInvestmentSelection

```protobuf
service PartnerEmployeeIngressService {
  rpc RebalanceAccountInvestmentSelection(RebalanceAccountInvestmentSelectionRequest) returns (RebalanceAccountInvestmentSelectionResponse);
}

message RebalanceAccountInvestmentSelectionRequest {
  string account_id = 1;
  repeated AccountInvestmentSelection selections = 2;
}

message RebalanceAccountInvestmentSelectionResponse {}
```

**Data types:** [AccountInvestmentSelection](/core-data-types/accounts-and-investments#accountinvestmentselection)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/RebalanceAccountInvestmentSelection`](/openapi/partneremployeeingressservice/rebalanceaccountinvestmentselection)

## RebalanceRetirementMortgageInvestmentSelections

```protobuf
service PartnerEmployeeIngressService {
  rpc RebalanceRetirementMortgageInvestmentSelections(RebalanceRetirementMortgageInvestmentSelectionsRequest) returns (RebalanceRetirementMortgageInvestmentSelectionsResponse);
}

message RebalanceRetirementMortgageInvestmentSelectionsRequest {
  string account_id = 1;
  repeated TrmInvestmentSelection selections = 2;
  bool apply_allocations_to_future = 3;
}

message RebalanceRetirementMortgageInvestmentSelectionsResponse {}
```

**Data types:** [TrmInvestmentSelection](/core-data-types/accounts-and-investments#trminvestmentselection)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/RebalanceRetirementMortgageInvestmentSelections`](/openapi/partneremployeeingressservice/rebalanceretirementmortgageinvestmentselections)

## CreateBeneficiaries

```protobuf
service PartnerEmployeeIngressService {
  rpc CreateBeneficiaries(CreateBeneficiariesRequest) returns (CreateBeneficiariesResponse);
}

message CreateBeneficiariesRequest {
  repeated BeneficiaryInfo beneficiary_data = 1;
}

message CreateBeneficiariesResponse {
  repeated Beneficiary beneficiaries = 1;
}
```

**Data types:** [Beneficiary](/core-data-types/beneficiaries#beneficiary), [BeneficiaryInfo](/core-data-types/beneficiaries#beneficiaryinfo)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/CreateBeneficiaries`](/openapi/partneremployeeingressservice/createbeneficiaries)

## GetBeneficiary

Fetch a single beneficiary, including its allocations across accounts.

```protobuf
service PartnerEmployeeIngressService {
  rpc GetBeneficiary(GetBeneficiaryRequest) returns (GetBeneficiaryResponse);
}

message GetBeneficiaryRequest {
  string beneficiary_uuid = 1;
}

message GetBeneficiaryResponse {
  Beneficiary beneficiary = 1;
}
```

**Data types:** [Beneficiary](/core-data-types/beneficiaries#beneficiary)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/GetBeneficiary`](/openapi/partneremployeeingressservice/getbeneficiary)

## UpdateBeneficiaries

Updates one or more existing beneficiaries. Every field except `beneficiary_uuid` is optional; omitted fields are left unchanged. Supplying an empty `allocation_info` array leaves the existing allocations unchanged.

```protobuf
service PartnerEmployeeIngressService {
  rpc UpdateBeneficiaries(UpdateBeneficiariesRequest) returns (UpdateBeneficiariesResponse);
}

message UpdateBeneficiariesRequest {
  repeated UpdateBeneficiaryInfo update_beneficiaries = 1;
}

message UpdateBeneficiariesResponse {
  repeated Beneficiary beneficiaries = 1;
}
```

**Data types:** [Beneficiary](/core-data-types/beneficiaries#beneficiary), [UpdateBeneficiaryInfo](/core-data-types/beneficiaries#updatebeneficiaryinfo)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/UpdateBeneficiaries`](/openapi/partneremployeeingressservice/updatebeneficiaries)

## ListBeneficiaries

Lists the employee's beneficiaries. Scope the result to one account with `account_uuid`; if it is omitted, beneficiaries across every account the employee has are returned.

```protobuf
service PartnerEmployeeIngressService {
  rpc ListBeneficiaries(ListBeneficiariesRequest) returns (ListBeneficiariesResponse);
}

message ListBeneficiariesRequest {
  optional string account_uuid = 1;
}

message ListBeneficiariesResponse {
  repeated Beneficiary beneficiaries = 1;
}
```

**Data types:** [Beneficiary](/core-data-types/beneficiaries#beneficiary)

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/ListBeneficiaries`](/openapi/partneremployeeingressservice/listbeneficiaries)

## DeleteBeneficiary

Removes a beneficiary and its allocations across all accounts.

```protobuf
service PartnerEmployeeIngressService {
  rpc DeleteBeneficiary(DeleteBeneficiaryRequest) returns (DeleteBeneficiaryResponse);
}

message DeleteBeneficiaryRequest {
  string beneficiary_uuid = 1;
}

message DeleteBeneficiaryResponse {}
```

**REST:** [`POST /v1/partner-rpc/com.basiccapital.systems.ingress.partner.PartnerEmployeeIngressService/DeleteBeneficiary`](/openapi/partneremployeeingressservice/deletebeneficiary)