diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f01c76b2..00268df2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: lint: timeout-minutes: 10 name: lint - runs-on: ${{ github.repository == 'stainless-sdks/finch-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -37,7 +37,7 @@ jobs: build: timeout-minutes: 5 name: build - runs-on: ${{ github.repository == 'stainless-sdks/finch-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') permissions: contents: read @@ -88,7 +88,7 @@ jobs: test: timeout-minutes: 10 name: test - runs-on: ${{ github.repository == 'stainless-sdks/finch-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 diff --git a/.release-please-manifest.json b/.release-please-manifest.json index cf43a83c..04976058 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "10.3.0" + ".": "10.4.0" } diff --git a/.stats.yml b/.stats.yml index 0fc8637f..d8dd80b1 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 48 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch/finch-166cc05754d8591beda094f4ee6f438f55d5f65d490ab364ea130c5100134375.yml -openapi_spec_hash: 4582a35bbe9fb5404d1e4f804c877fa8 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch/finch-bdcc610cd7d5dcb5d3d7598a33957dd673cb81f14ca5d8dc9d41fced4230f114.yml +openapi_spec_hash: 16dce00b8187a592fab5c88efc7bf7fc config_hash: 9ae56f40cec7304896138bfad5caf748 diff --git a/CHANGELOG.md b/CHANGELOG.md index c0805e0f..effefffa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 10.4.0 (2026-07-17) + +Full Changelog: [v10.3.0...v10.4.0](https://github.com/Finch-API/finch-api-node/compare/v10.3.0...v10.4.0) + +### Features + +* **api:** api update ([5fb5c12](https://github.com/Finch-API/finch-api-node/commit/5fb5c125557d63d4c5e1fc8a113ab6a0c4819f10)) +* **stlc:** configurable CI runner and private-production-repo support in workflow templates ([7bd08c2](https://github.com/Finch-API/finch-api-node/commit/7bd08c22033cf8a0aeda29bbf068012b62165544)) + ## 10.3.0 (2026-07-15) Full Changelog: [v10.2.0...v10.3.0](https://github.com/Finch-API/finch-api-node/compare/v10.2.0...v10.3.0) diff --git a/package.json b/package.json index 6501c5fb..c966a618 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tryfinch/finch-api", - "version": "10.3.0", + "version": "10.4.0", "description": "The official TypeScript library for the Finch API", "author": "Finch ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index b2a4f0ee..abee43c4 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -1,7 +1,7 @@ { "dxt_version": "0.2", "name": "@tryfinch/finch-api-mcp", - "version": "10.3.0", + "version": "10.4.0", "description": "The official MCP Server for the Finch API", "author": { "name": "Finch", diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index acd9d253..e5885435 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@tryfinch/finch-api-mcp", - "version": "10.3.0", + "version": "10.4.0", "description": "The official MCP Server for the Finch API", "author": "Finch ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts index b0f657de..431f45c8 100644 --- a/packages/mcp-server/src/local-docs-search.ts +++ b/packages/mcp-server/src/local-docs-search.ts @@ -521,9 +521,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'options?: { include?: string[]; };', ], response: - "{ body: { id: string; dob: string; ethnicity: string; first_name: string; gender: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name: string; middle_name: string; phone_numbers: object[]; preferred_name: string; residence: location; emails?: object[]; encrypted_ssn?: string; ssn?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }", + "{ body: { id: string; dob: string; ethnicity: string; first_name: string; gender: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name: string; marital_status: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name: string; phone_numbers: object[]; preferred_name: string; residence: location; emails?: object[]; encrypted_ssn?: string; ssn?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }", markdown: - "## retrieve_many\n\n`client.hris.individuals.retrieveMany(requests: { individual_id: string; }[], entity_ids?: string[], options?: { include?: string[]; }): { body: individual; code: number; individual_id: string; }`\n\n**post** `/employer/individual`\n\nRead individual data, excluding income and employment data\n\n### Parameters\n\n- `requests: { individual_id: string; }[]`\n The array of batch requests. Maximum 10000 items per request.\n\n- `entity_ids?: string[]`\n The entity IDs to specify which entities' data to access. Provide exactly one entity ID per request; a maximum of one is accepted.\n\n- `options?: { include?: string[]; }`\n - `include?: string[]`\n\n### Returns\n\n- `{ body: { id: string; dob: string; ethnicity: string; first_name: string; gender: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name: string; middle_name: string; phone_numbers: object[]; preferred_name: string; residence: location; emails?: object[]; encrypted_ssn?: string; ssn?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }`\n\n - `body: { id: string; dob: string; ethnicity: string; first_name: string; gender: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name: string; middle_name: string; phone_numbers: { data: string; type: 'work' | 'personal'; }[]; preferred_name: string; residence: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; emails?: { data: string; type: 'work' | 'personal'; }[]; encrypted_ssn?: string; ssn?: string; } | { code: number; message: string; name: string; finch_code?: string; }`\n - `code: number`\n - `individual_id: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\n// Automatically fetches more pages as needed.\nfor await (const individualResponse of client.hris.individuals.retrieveMany({ requests: [{ individual_id: 'individual_id' }] })) {\n console.log(individualResponse);\n}\n```", + "## retrieve_many\n\n`client.hris.individuals.retrieveMany(requests: { individual_id: string; }[], entity_ids?: string[], options?: { include?: string[]; }): { body: individual; code: number; individual_id: string; }`\n\n**post** `/employer/individual`\n\nRead individual data, excluding income and employment data\n\n### Parameters\n\n- `requests: { individual_id: string; }[]`\n The array of batch requests. Maximum 10000 items per request.\n\n- `entity_ids?: string[]`\n The entity IDs to specify which entities' data to access. Provide exactly one entity ID per request; a maximum of one is accepted.\n\n- `options?: { include?: string[]; }`\n - `include?: string[]`\n\n### Returns\n\n- `{ body: { id: string; dob: string; ethnicity: string; first_name: string; gender: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name: string; marital_status: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name: string; phone_numbers: object[]; preferred_name: string; residence: location; emails?: object[]; encrypted_ssn?: string; ssn?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }`\n\n - `body: { id: string; dob: string; ethnicity: string; first_name: string; gender: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name: string; marital_status: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name: string; phone_numbers: { data: string; type: 'work' | 'personal'; }[]; preferred_name: string; residence: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; emails?: { data: string; type: 'work' | 'personal'; }[]; encrypted_ssn?: string; ssn?: string; } | { code: number; message: string; name: string; finch_code?: string; }`\n - `code: number`\n - `individual_id: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\n// Automatically fetches more pages as needed.\nfor await (const individualResponse of client.hris.individuals.retrieveMany({ requests: [{ individual_id: 'individual_id' }] })) {\n console.log(individualResponse);\n}\n```", perLanguage: { typescript: { method: 'client.hris.individuals.retrieveMany', @@ -571,9 +571,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ qualified: 'client.hris.employments.retrieveMany', params: ['requests: { individual_id: string; }[];', 'entity_ids?: string[];'], response: - "{ body: { id: string; class_code: string; department: object; employment: object; employment_status: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date: string; first_name: string; flsa_status: 'exempt' | 'non_exempt' | 'unknown'; is_active: boolean; last_name: string; latest_rehire_date: string; location: location; manager: object; middle_name: string; start_date: string; title: string; custom_fields?: object[]; income?: income; income_history?: income[]; source_id?: string; work_id?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }", + "{ body: { id: string; class_code: string; department: object; employment: object; employment_status: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date: string; first_name: string; flsa_status: 'exempt' | 'non_exempt' | 'unknown'; highly_compensated_employee: boolean; is_active: boolean; key_employee: boolean; last_name: string; latest_rehire_date: string; location: location; manager: object; middle_name: string; start_date: string; title: string; union_code: string; union_local: string; custom_fields?: object[]; income?: income; income_history?: income[]; source_id?: string; work_id?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }", markdown: - "## retrieve_many\n\n`client.hris.employments.retrieveMany(requests: { individual_id: string; }[], entity_ids?: string[]): { body: employment_data; code: number; individual_id: string; }`\n\n**post** `/employer/employment`\n\nRead individual employment and income data\n\n### Parameters\n\n- `requests: { individual_id: string; }[]`\n The array of batch requests. Maximum 10000 items per request.\n\n- `entity_ids?: string[]`\n The entity IDs to specify which entities' data to access. Provide exactly one entity ID per request; a maximum of one is accepted.\n\n### Returns\n\n- `{ body: { id: string; class_code: string; department: object; employment: object; employment_status: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date: string; first_name: string; flsa_status: 'exempt' | 'non_exempt' | 'unknown'; is_active: boolean; last_name: string; latest_rehire_date: string; location: location; manager: object; middle_name: string; start_date: string; title: string; custom_fields?: object[]; income?: income; income_history?: income[]; source_id?: string; work_id?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }`\n\n - `body: { id: string; class_code: string; department: { name: string; }; employment: { subtype: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type: 'employee' | 'contractor'; }; employment_status: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date: string; first_name: string; flsa_status: 'exempt' | 'non_exempt' | 'unknown'; is_active: boolean; last_name: string; latest_rehire_date: string; location: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager: { id: string; }; middle_name: string; start_date: string; title: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; source_id?: string; work_id?: string; } | { code: number; message: string; name: string; finch_code?: string; }`\n - `code: number`\n - `individual_id: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\n// Automatically fetches more pages as needed.\nfor await (const employmentDataResponse of client.hris.employments.retrieveMany({ requests: [{ individual_id: 'individual_id' }] })) {\n console.log(employmentDataResponse);\n}\n```", + "## retrieve_many\n\n`client.hris.employments.retrieveMany(requests: { individual_id: string; }[], entity_ids?: string[]): { body: employment_data; code: number; individual_id: string; }`\n\n**post** `/employer/employment`\n\nRead individual employment and income data\n\n### Parameters\n\n- `requests: { individual_id: string; }[]`\n The array of batch requests. Maximum 10000 items per request.\n\n- `entity_ids?: string[]`\n The entity IDs to specify which entities' data to access. Provide exactly one entity ID per request; a maximum of one is accepted.\n\n### Returns\n\n- `{ body: { id: string; class_code: string; department: object; employment: object; employment_status: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date: string; first_name: string; flsa_status: 'exempt' | 'non_exempt' | 'unknown'; highly_compensated_employee: boolean; is_active: boolean; key_employee: boolean; last_name: string; latest_rehire_date: string; location: location; manager: object; middle_name: string; start_date: string; title: string; union_code: string; union_local: string; custom_fields?: object[]; income?: income; income_history?: income[]; source_id?: string; work_id?: string; } | { code: number; message: string; name: string; finch_code?: string; }; code: number; individual_id: string; }`\n\n - `body: { id: string; class_code: string; department: { name: string; }; employment: { subtype: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type: 'employee' | 'contractor'; }; employment_status: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date: string; first_name: string; flsa_status: 'exempt' | 'non_exempt' | 'unknown'; highly_compensated_employee: boolean; is_active: boolean; key_employee: boolean; last_name: string; latest_rehire_date: string; location: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager: { id: string; }; middle_name: string; start_date: string; title: string; union_code: string; union_local: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; source_id?: string; work_id?: string; } | { code: number; message: string; name: string; finch_code?: string; }`\n - `code: number`\n - `individual_id: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\n// Automatically fetches more pages as needed.\nfor await (const employmentDataResponse of client.hris.employments.retrieveMany({ requests: [{ individual_id: 'individual_id' }] })) {\n console.log(employmentDataResponse);\n}\n```", perLanguage: { typescript: { method: 'client.hris.employments.retrieveMany', @@ -2020,11 +2020,11 @@ const EMBEDDED_METHODS: MethodEntry[] = [ stainlessPath: '(resource) sandbox.directory > (method) create', qualified: 'client.sandbox.directory.create', params: [ - "body?: { class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; encrypted_ssn?: string; end_date?: string; ethnicity?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; source_id?: string; ssn?: string; start_date?: string; title?: string; }[];", + "body?: { class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; encrypted_ssn?: string; end_date?: string; ethnicity?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; highly_compensated_employee?: boolean; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; key_employee?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; source_id?: string; ssn?: string; start_date?: string; title?: string; union_code?: string; union_local?: string; }[];", ], response: 'object[]', markdown: - "## create\n\n`client.sandbox.directory.create(body?: { class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; encrypted_ssn?: string; end_date?: string; ethnicity?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; income?: object; income_history?: object[]; is_active?: boolean; last_name?: string; latest_rehire_date?: string; location?: object; manager?: { id?: string; }; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: object; source_id?: string; ssn?: string; start_date?: string; title?: string; }[]): object[]`\n\n**post** `/sandbox/directory`\n\nAdd new individuals to a sandbox company\n\n### Parameters\n\n- `body?: { class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; encrypted_ssn?: string; end_date?: string; ethnicity?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; source_id?: string; ssn?: string; start_date?: string; title?: string; }[]`\n Array of individuals to create. Takes all combined fields from `/individual` and `/employment` endpoints. All fields are optional.\n\n### Returns\n\n- `object[]`\n The individuals which were created\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\nconst directories = await client.sandbox.directory.create();\n\nconsole.log(directories);\n```", + "## create\n\n`client.sandbox.directory.create(body?: { class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; encrypted_ssn?: string; end_date?: string; ethnicity?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; highly_compensated_employee?: boolean; income?: object; income_history?: object[]; is_active?: boolean; key_employee?: boolean; last_name?: string; latest_rehire_date?: string; location?: object; manager?: { id?: string; }; marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: object; source_id?: string; ssn?: string; start_date?: string; title?: string; union_code?: string; union_local?: string; }[]): object[]`\n\n**post** `/sandbox/directory`\n\nAdd new individuals to a sandbox company\n\n### Parameters\n\n- `body?: { class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; encrypted_ssn?: string; end_date?: string; ethnicity?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; highly_compensated_employee?: boolean; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; key_employee?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; source_id?: string; ssn?: string; start_date?: string; title?: string; union_code?: string; union_local?: string; }[]`\n Array of individuals to create. Takes all combined fields from `/individual` and `/employment` endpoints. All fields are optional.\n\n### Returns\n\n- `object[]`\n The individuals which were created\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\nconst directories = await client.sandbox.directory.create();\n\nconsole.log(directories);\n```", perLanguage: { typescript: { method: 'client.sandbox.directory.create', @@ -2079,6 +2079,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'first_name?: string;', "gender?: 'female' | 'male' | 'other' | 'decline_to_specify';", 'last_name?: string;', + "marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown';", 'middle_name?: string;', "phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[];", 'preferred_name?: string;', @@ -2086,9 +2087,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'ssn?: string;', ], response: - "{ id?: string; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; encrypted_ssn?: string; ethnicity?: string; first_name?: string; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name?: string; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; ssn?: string; }", + "{ id?: string; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; encrypted_ssn?: string; ethnicity?: string; first_name?: string; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name?: string; marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; ssn?: string; }", markdown: - "## update\n\n`client.sandbox.individual.update(individual_id: string, dob?: string, emails?: { data?: string; type?: 'work' | 'personal'; }[], encrypted_ssn?: string, ethnicity?: string, first_name?: string, gender?: 'female' | 'male' | 'other' | 'decline_to_specify', last_name?: string, middle_name?: string, phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[], preferred_name?: string, residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }, ssn?: string): { id?: string; dob?: string; emails?: object[]; encrypted_ssn?: string; ethnicity?: string; first_name?: string; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name?: string; middle_name?: string; phone_numbers?: object[]; preferred_name?: string; residence?: location; ssn?: string; }`\n\n**put** `/sandbox/individual/{individual_id}`\n\nUpdate sandbox individual\n\n### Parameters\n\n- `individual_id: string`\n\n- `dob?: string`\n\n- `emails?: { data?: string; type?: 'work' | 'personal'; }[]`\n\n- `encrypted_ssn?: string`\n Social Security Number of the individual in **encrypted** format. This field is only available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set in the body.\n\n- `ethnicity?: string`\n The EEOC-defined ethnicity of the individual.\n\n- `first_name?: string`\n The legal first name of the individual.\n\n- `gender?: 'female' | 'male' | 'other' | 'decline_to_specify'`\n The gender of the individual.\n\n- `last_name?: string`\n The legal last name of the individual.\n\n- `middle_name?: string`\n The legal middle name of the individual.\n\n- `phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]`\n\n- `preferred_name?: string`\n The preferred name of the individual.\n\n- `residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `city: string`\n City, district, suburb, town, or village.\n - `country: string`\n The 2-letter ISO 3166 country code.\n - `line1: string`\n Street address or PO box.\n - `line2: string`\n Apartment, suite, unit, or building.\n - `postal_code: string`\n The postal code or zip code.\n - `state: string`\n The state code.\n - `name?: string`\n - `source_id?: string`\n\n- `ssn?: string`\n Social Security Number of the individual. This field is only available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set in the body. [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).\n\n### Returns\n\n- `{ id?: string; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; encrypted_ssn?: string; ethnicity?: string; first_name?: string; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name?: string; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; ssn?: string; }`\n\n - `id?: string`\n - `dob?: string`\n - `emails?: { data?: string; type?: 'work' | 'personal'; }[]`\n - `encrypted_ssn?: string`\n - `ethnicity?: string`\n - `first_name?: string`\n - `gender?: 'female' | 'male' | 'other' | 'decline_to_specify'`\n - `last_name?: string`\n - `middle_name?: string`\n - `phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]`\n - `preferred_name?: string`\n - `residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `ssn?: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\nconst individual = await client.sandbox.individual.update('individual_id');\n\nconsole.log(individual);\n```", + "## update\n\n`client.sandbox.individual.update(individual_id: string, dob?: string, emails?: { data?: string; type?: 'work' | 'personal'; }[], encrypted_ssn?: string, ethnicity?: string, first_name?: string, gender?: 'female' | 'male' | 'other' | 'decline_to_specify', last_name?: string, marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown', middle_name?: string, phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[], preferred_name?: string, residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }, ssn?: string): { id?: string; dob?: string; emails?: object[]; encrypted_ssn?: string; ethnicity?: string; first_name?: string; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name?: string; marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name?: string; phone_numbers?: object[]; preferred_name?: string; residence?: location; ssn?: string; }`\n\n**put** `/sandbox/individual/{individual_id}`\n\nUpdate sandbox individual\n\n### Parameters\n\n- `individual_id: string`\n\n- `dob?: string`\n\n- `emails?: { data?: string; type?: 'work' | 'personal'; }[]`\n\n- `encrypted_ssn?: string`\n Social Security Number of the individual in **encrypted** format. This field is only available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set in the body.\n\n- `ethnicity?: string`\n The EEOC-defined ethnicity of the individual.\n\n- `first_name?: string`\n The legal first name of the individual.\n\n- `gender?: 'female' | 'male' | 'other' | 'decline_to_specify'`\n The gender of the individual.\n\n- `last_name?: string`\n The legal last name of the individual.\n\n- `marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'`\n The employee's marital status, used for beneficiary designation and spousal consent workflows.\n\n- `middle_name?: string`\n The legal middle name of the individual.\n\n- `phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]`\n\n- `preferred_name?: string`\n The preferred name of the individual.\n\n- `residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `city: string`\n City, district, suburb, town, or village.\n - `country: string`\n The 2-letter ISO 3166 country code.\n - `line1: string`\n Street address or PO box.\n - `line2: string`\n Apartment, suite, unit, or building.\n - `postal_code: string`\n The postal code or zip code.\n - `state: string`\n The state code.\n - `name?: string`\n - `source_id?: string`\n\n- `ssn?: string`\n Social Security Number of the individual. This field is only available with the `ssn` scope enabled and the `options: { include: ['ssn'] }` param set in the body. [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).\n\n### Returns\n\n- `{ id?: string; dob?: string; emails?: { data?: string; type?: 'work' | 'personal'; }[]; encrypted_ssn?: string; ethnicity?: string; first_name?: string; gender?: 'female' | 'male' | 'other' | 'decline_to_specify'; last_name?: string; marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'; middle_name?: string; phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]; preferred_name?: string; residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; ssn?: string; }`\n\n - `id?: string`\n - `dob?: string`\n - `emails?: { data?: string; type?: 'work' | 'personal'; }[]`\n - `encrypted_ssn?: string`\n - `ethnicity?: string`\n - `first_name?: string`\n - `gender?: 'female' | 'male' | 'other' | 'decline_to_specify'`\n - `last_name?: string`\n - `marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown'`\n - `middle_name?: string`\n - `phone_numbers?: { data?: string; type?: 'work' | 'personal'; }[]`\n - `preferred_name?: string`\n - `residence?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `ssn?: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\nconst individual = await client.sandbox.individual.update('individual_id');\n\nconsole.log(individual);\n```", perLanguage: { typescript: { method: 'client.sandbox.individual.update', @@ -2144,9 +2145,11 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'end_date?: string;', 'first_name?: string;', "flsa_status?: 'exempt' | 'non_exempt' | 'unknown';", + 'highly_compensated_employee?: boolean;', 'income?: { amount: number; currency: string; effective_date: string; unit: string; };', 'income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[];', 'is_active?: boolean;', + 'key_employee?: boolean;', 'last_name?: string;', 'latest_rehire_date?: string;', 'location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; };', @@ -2155,11 +2158,13 @@ const EMBEDDED_METHODS: MethodEntry[] = [ 'source_id?: string;', 'start_date?: string;', 'title?: string;', + 'union_code?: string;', + 'union_local?: string;', ], response: - "{ id?: string; class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; middle_name?: string; source_id?: string; start_date?: string; title?: string; }", + "{ id?: string; class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; highly_compensated_employee?: boolean; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; key_employee?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; middle_name?: string; source_id?: string; start_date?: string; title?: string; union_code?: string; union_local?: string; }", markdown: - "## update\n\n`client.sandbox.employment.update(individual_id: string, class_code?: string, custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[], department?: { name?: string; }, employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }, employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated', end_date?: string, first_name?: string, flsa_status?: 'exempt' | 'non_exempt' | 'unknown', income?: { amount: number; currency: string; effective_date: string; unit: string; }, income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[], is_active?: boolean, last_name?: string, latest_rehire_date?: string, location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }, manager?: { id?: string; }, middle_name?: string, source_id?: string, start_date?: string, title?: string): { id?: string; class_code?: string; custom_fields?: object[]; department?: object; employment?: object; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; income?: income; income_history?: income[]; is_active?: boolean; last_name?: string; latest_rehire_date?: string; location?: location; manager?: object; middle_name?: string; source_id?: string; start_date?: string; title?: string; }`\n\n**put** `/sandbox/employment/{individual_id}`\n\nUpdate sandbox employment\n\n### Parameters\n\n- `individual_id: string`\n\n- `class_code?: string`\n Worker's compensation classification code for this employee\n\n- `custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]`\n Custom fields for the individual. These are fields which are defined by the employer in the system. Custom fields are not currently supported for assisted connections.\n\n- `department?: { name?: string; }`\n The department object.\n - `name?: string`\n The name of the department associated with the individual.\n\n- `employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }`\n The employment object.\n - `subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'`\n The secondary employment type of the individual. Options: `full_time`, `part_time`, `intern`, `temp`, `seasonal` and `individual_contractor`.\n - `type?: 'employee' | 'contractor'`\n The main employment type of the individual.\n\n- `employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'`\n The detailed employment status of the individual.\n\n- `end_date?: string`\n\n- `first_name?: string`\n The legal first name of the individual.\n\n- `flsa_status?: 'exempt' | 'non_exempt' | 'unknown'`\n The FLSA status of the individual. Available options: `exempt`, `non_exempt`, `unknown`.\n\n- `income?: { amount: number; currency: string; effective_date: string; unit: string; }`\n The employee's income as reported by the provider. This may not always be annualized income, but may be in units of bi-weekly, semi-monthly, daily, etc, depending on what information the provider returns.\n - `amount: number`\n The income amount in cents.\n - `currency: string`\n The currency code.\n - `effective_date: string`\n The date the income amount went into effect.\n - `unit: string`\n The income unit of payment. Options: `yearly`, `quarterly`, `monthly`, `semi_monthly`, `bi_weekly`, `weekly`, `daily`, `hourly`, and `fixed`.\n\n- `income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]`\n The array of income history.\n\n- `is_active?: boolean`\n `true` if the individual an an active employee or contractor at the company.\n\n- `last_name?: string`\n The legal last name of the individual.\n\n- `latest_rehire_date?: string`\n\n- `location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `city: string`\n City, district, suburb, town, or village.\n - `country: string`\n The 2-letter ISO 3166 country code.\n - `line1: string`\n Street address or PO box.\n - `line2: string`\n Apartment, suite, unit, or building.\n - `postal_code: string`\n The postal code or zip code.\n - `state: string`\n The state code.\n - `name?: string`\n - `source_id?: string`\n\n- `manager?: { id?: string; }`\n The manager object representing the manager of the individual within the org.\n - `id?: string`\n A stable Finch `id` (UUID v4) for an individual in the company.\n\n- `middle_name?: string`\n The legal middle name of the individual.\n\n- `source_id?: string`\n The source system's unique employment identifier for this individual\n\n- `start_date?: string`\n\n- `title?: string`\n The current title of the individual.\n\n### Returns\n\n- `{ id?: string; class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; middle_name?: string; source_id?: string; start_date?: string; title?: string; }`\n\n - `id?: string`\n - `class_code?: string`\n - `custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]`\n - `department?: { name?: string; }`\n - `employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }`\n - `employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'`\n - `end_date?: string`\n - `first_name?: string`\n - `flsa_status?: 'exempt' | 'non_exempt' | 'unknown'`\n - `income?: { amount: number; currency: string; effective_date: string; unit: string; }`\n - `income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]`\n - `is_active?: boolean`\n - `last_name?: string`\n - `latest_rehire_date?: string`\n - `location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `manager?: { id?: string; }`\n - `middle_name?: string`\n - `source_id?: string`\n - `start_date?: string`\n - `title?: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\nconst employment = await client.sandbox.employment.update('individual_id');\n\nconsole.log(employment);\n```", + "## update\n\n`client.sandbox.employment.update(individual_id: string, class_code?: string, custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[], department?: { name?: string; }, employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }, employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated', end_date?: string, first_name?: string, flsa_status?: 'exempt' | 'non_exempt' | 'unknown', highly_compensated_employee?: boolean, income?: { amount: number; currency: string; effective_date: string; unit: string; }, income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[], is_active?: boolean, key_employee?: boolean, last_name?: string, latest_rehire_date?: string, location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }, manager?: { id?: string; }, middle_name?: string, source_id?: string, start_date?: string, title?: string, union_code?: string, union_local?: string): { id?: string; class_code?: string; custom_fields?: object[]; department?: object; employment?: object; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; highly_compensated_employee?: boolean; income?: income; income_history?: income[]; is_active?: boolean; key_employee?: boolean; last_name?: string; latest_rehire_date?: string; location?: location; manager?: object; middle_name?: string; source_id?: string; start_date?: string; title?: string; union_code?: string; union_local?: string; }`\n\n**put** `/sandbox/employment/{individual_id}`\n\nUpdate sandbox employment\n\n### Parameters\n\n- `individual_id: string`\n\n- `class_code?: string`\n Worker's compensation classification code for this employee\n\n- `custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]`\n Custom fields for the individual. These are fields which are defined by the employer in the system. Custom fields are not currently supported for assisted connections.\n\n- `department?: { name?: string; }`\n The department object.\n - `name?: string`\n The name of the department associated with the individual.\n\n- `employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }`\n The employment object.\n - `subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'`\n The secondary employment type of the individual. Options: `full_time`, `part_time`, `intern`, `temp`, `seasonal` and `individual_contractor`.\n - `type?: 'employee' | 'contractor'`\n The main employment type of the individual.\n\n- `employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'`\n The detailed employment status of the individual.\n\n- `end_date?: string`\n\n- `first_name?: string`\n The legal first name of the individual.\n\n- `flsa_status?: 'exempt' | 'non_exempt' | 'unknown'`\n The FLSA status of the individual. Available options: `exempt`, `non_exempt`, `unknown`.\n\n- `highly_compensated_employee?: boolean`\n IRS flag indicating whether the employee is classified as a Highly Compensated Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only.\n\n- `income?: { amount: number; currency: string; effective_date: string; unit: string; }`\n The employee's income as reported by the provider. This may not always be annualized income, but may be in units of bi-weekly, semi-monthly, daily, etc, depending on what information the provider returns.\n - `amount: number`\n The income amount in cents.\n - `currency: string`\n The currency code.\n - `effective_date: string`\n The date the income amount went into effect.\n - `unit: string`\n The income unit of payment. Options: `yearly`, `quarterly`, `monthly`, `semi_monthly`, `bi_weekly`, `weekly`, `daily`, `hourly`, and `fixed`.\n\n- `income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]`\n The array of income history.\n\n- `is_active?: boolean`\n `true` if the individual an an active employee or contractor at the company.\n\n- `key_employee?: boolean`\n IRS flag indicating whether the employee is classified as a Key Employee for top-heavy testing purposes. US-only.\n\n- `last_name?: string`\n The legal last name of the individual.\n\n- `latest_rehire_date?: string`\n\n- `location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `city: string`\n City, district, suburb, town, or village.\n - `country: string`\n The 2-letter ISO 3166 country code.\n - `line1: string`\n Street address or PO box.\n - `line2: string`\n Apartment, suite, unit, or building.\n - `postal_code: string`\n The postal code or zip code.\n - `state: string`\n The state code.\n - `name?: string`\n - `source_id?: string`\n\n- `manager?: { id?: string; }`\n The manager object representing the manager of the individual within the org.\n - `id?: string`\n A stable Finch `id` (UUID v4) for an individual in the company.\n\n- `middle_name?: string`\n The legal middle name of the individual.\n\n- `source_id?: string`\n The source system's unique employment identifier for this individual\n\n- `start_date?: string`\n\n- `title?: string`\n The current title of the individual.\n\n- `union_code?: string`\n The code identifying the union the employee is a member of, as configured in the payroll system.\n\n- `union_local?: string`\n The local chapter or local number within the employee's union.\n\n### Returns\n\n- `{ id?: string; class_code?: string; custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]; department?: { name?: string; }; employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }; employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'; end_date?: string; first_name?: string; flsa_status?: 'exempt' | 'non_exempt' | 'unknown'; highly_compensated_employee?: boolean; income?: { amount: number; currency: string; effective_date: string; unit: string; }; income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]; is_active?: boolean; key_employee?: boolean; last_name?: string; latest_rehire_date?: string; location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }; manager?: { id?: string; }; middle_name?: string; source_id?: string; start_date?: string; title?: string; union_code?: string; union_local?: string; }`\n\n - `id?: string`\n - `class_code?: string`\n - `custom_fields?: { name?: string; value?: string | object[] | object | number | boolean; }[]`\n - `department?: { name?: string; }`\n - `employment?: { subtype?: 'full_time' | 'intern' | 'part_time' | 'temp' | 'seasonal' | 'individual_contractor'; type?: 'employee' | 'contractor'; }`\n - `employment_status?: 'active' | 'deceased' | 'leave' | 'onboarding' | 'prehire' | 'retired' | 'terminated'`\n - `end_date?: string`\n - `first_name?: string`\n - `flsa_status?: 'exempt' | 'non_exempt' | 'unknown'`\n - `highly_compensated_employee?: boolean`\n - `income?: { amount: number; currency: string; effective_date: string; unit: string; }`\n - `income_history?: { amount: number; currency: string; effective_date: string; unit: string; }[]`\n - `is_active?: boolean`\n - `key_employee?: boolean`\n - `last_name?: string`\n - `latest_rehire_date?: string`\n - `location?: { city: string; country: string; line1: string; line2: string; postal_code: string; state: string; name?: string; source_id?: string; }`\n - `manager?: { id?: string; }`\n - `middle_name?: string`\n - `source_id?: string`\n - `start_date?: string`\n - `title?: string`\n - `union_code?: string`\n - `union_local?: string`\n\n### Example\n\n```typescript\nimport Finch from '@tryfinch/finch-api';\n\nconst client = new Finch();\n\nconst employment = await client.sandbox.employment.update('individual_id');\n\nconsole.log(employment);\n```", perLanguage: { typescript: { method: 'client.sandbox.employment.update', diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 658e4f07..7071a2d1 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -29,7 +29,7 @@ export const newMcpServer = async ({ new McpServer( { name: 'tryfinch_finch_api_api', - version: '10.3.0', + version: '10.4.0', }, { instructions: await getInstructions({ stainlessApiKey, customInstructionsPath }), diff --git a/src/resources/hris/employments.ts b/src/resources/hris/employments.ts index 918965aa..e2ce5c08 100644 --- a/src/resources/hris/employments.ts +++ b/src/resources/hris/employments.ts @@ -86,11 +86,23 @@ export namespace EmploymentData { */ flsa_status: 'exempt' | 'non_exempt' | 'unknown' | null; + /** + * IRS flag indicating whether the employee is classified as a Highly Compensated + * Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only. + */ + highly_compensated_employee: boolean | null; + /** * `true` if the individual an an active employee or contractor at the company. */ is_active: boolean | null; + /** + * IRS flag indicating whether the employee is classified as a Key Employee for + * top-heavy testing purposes. US-only. + */ + key_employee: boolean | null; + /** * The legal last name of the individual. */ @@ -117,6 +129,17 @@ export namespace EmploymentData { */ title: string | null; + /** + * The code identifying the union the employee is a member of, as configured in the + * payroll system. + */ + union_code: string | null; + + /** + * The local chapter or local number within the employee's union. + */ + union_local: string | null; + /** * Custom fields for the individual. These are fields which are defined by the * employer in the system. Custom fields are not currently supported for assisted diff --git a/src/resources/hris/individuals.ts b/src/resources/hris/individuals.ts index 18915986..e952adda 100644 --- a/src/resources/hris/individuals.ts +++ b/src/resources/hris/individuals.ts @@ -76,6 +76,12 @@ export namespace Individual { */ last_name: string | null; + /** + * The employee's marital status, used for beneficiary designation and spousal + * consent workflows. + */ + marital_status: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown' | null; + /** * The legal middle name of the individual. */ diff --git a/src/resources/sandbox/directory.ts b/src/resources/sandbox/directory.ts index e2a52417..a04b5aa9 100644 --- a/src/resources/sandbox/directory.ts +++ b/src/resources/sandbox/directory.ts @@ -120,6 +120,12 @@ export namespace DirectoryCreateParams { */ gender?: 'female' | 'male' | 'other' | 'decline_to_specify' | null; + /** + * IRS flag indicating whether the employee is classified as a Highly Compensated + * Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only. + */ + highly_compensated_employee?: boolean | null; + /** * The employee's income as reported by the provider. This may not always be * annualized income, but may be in units of bi-weekly, semi-monthly, daily, etc, @@ -137,6 +143,12 @@ export namespace DirectoryCreateParams { */ is_active?: boolean | null; + /** + * IRS flag indicating whether the employee is classified as a Key Employee for + * top-heavy testing purposes. US-only. + */ + key_employee?: boolean | null; + /** * The legal last name of the individual. */ @@ -151,6 +163,12 @@ export namespace DirectoryCreateParams { */ manager?: Body.Manager | null; + /** + * The employee's marital status, used for beneficiary designation and spousal + * consent workflows. + */ + marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown' | null; + /** * The legal middle name of the individual. */ @@ -184,6 +202,17 @@ export namespace DirectoryCreateParams { * The current title of the individual. */ title?: string | null; + + /** + * The code identifying the union the employee is a member of, as configured in the + * payroll system. + */ + union_code?: string | null; + + /** + * The local chapter or local number within the employee's union. + */ + union_local?: string | null; } export namespace Body { diff --git a/src/resources/sandbox/employment.ts b/src/resources/sandbox/employment.ts index b7d99c98..38d45789 100644 --- a/src/resources/sandbox/employment.ts +++ b/src/resources/sandbox/employment.ts @@ -85,6 +85,12 @@ export interface EmploymentUpdateResponse { */ flsa_status?: 'exempt' | 'non_exempt' | 'unknown' | null; + /** + * IRS flag indicating whether the employee is classified as a Highly Compensated + * Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only. + */ + highly_compensated_employee?: boolean | null; + /** * The employee's income as reported by the provider. This may not always be * annualized income, but may be in units of bi-weekly, semi-monthly, daily, etc, @@ -102,6 +108,12 @@ export interface EmploymentUpdateResponse { */ is_active?: boolean | null; + /** + * IRS flag indicating whether the employee is classified as a Key Employee for + * top-heavy testing purposes. US-only. + */ + key_employee?: boolean | null; + /** * The legal last name of the individual. */ @@ -132,6 +144,17 @@ export interface EmploymentUpdateResponse { * The current title of the individual. */ title?: string | null; + + /** + * The code identifying the union the employee is a member of, as configured in the + * payroll system. + */ + union_code?: string | null; + + /** + * The local chapter or local number within the employee's union. + */ + union_local?: string | null; } export namespace EmploymentUpdateResponse { @@ -227,6 +250,12 @@ export interface EmploymentUpdateParams { */ flsa_status?: 'exempt' | 'non_exempt' | 'unknown' | null; + /** + * IRS flag indicating whether the employee is classified as a Highly Compensated + * Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only. + */ + highly_compensated_employee?: boolean | null; + /** * The employee's income as reported by the provider. This may not always be * annualized income, but may be in units of bi-weekly, semi-monthly, daily, etc, @@ -244,6 +273,12 @@ export interface EmploymentUpdateParams { */ is_active?: boolean | null; + /** + * IRS flag indicating whether the employee is classified as a Key Employee for + * top-heavy testing purposes. US-only. + */ + key_employee?: boolean | null; + /** * The legal last name of the individual. */ @@ -274,6 +309,17 @@ export interface EmploymentUpdateParams { * The current title of the individual. */ title?: string | null; + + /** + * The code identifying the union the employee is a member of, as configured in the + * payroll system. + */ + union_code?: string | null; + + /** + * The local chapter or local number within the employee's union. + */ + union_local?: string | null; } export namespace EmploymentUpdateParams { diff --git a/src/resources/sandbox/individual.ts b/src/resources/sandbox/individual.ts index 6db0f550..4106469a 100644 --- a/src/resources/sandbox/individual.ts +++ b/src/resources/sandbox/individual.ts @@ -76,6 +76,12 @@ export interface IndividualUpdateResponse { */ last_name?: string | null; + /** + * The employee's marital status, used for beneficiary designation and spousal + * consent workflows. + */ + marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown' | null; + /** * The legal middle name of the individual. */ @@ -154,6 +160,12 @@ export interface IndividualUpdateParams { */ last_name?: string | null; + /** + * The employee's marital status, used for beneficiary designation and spousal + * consent workflows. + */ + marital_status?: 'single' | 'married' | 'divorced' | 'widowed' | 'domestic_partner' | 'unknown' | null; + /** * The legal middle name of the individual. */ diff --git a/src/version.ts b/src/version.ts index dc89f2d9..f5be3b93 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '10.3.0'; // x-release-please-version +export const VERSION = '10.4.0'; // x-release-please-version diff --git a/tests/api-resources/sandbox/directory.test.ts b/tests/api-resources/sandbox/directory.test.ts index d828c575..1a262a16 100644 --- a/tests/api-resources/sandbox/directory.test.ts +++ b/tests/api-resources/sandbox/directory.test.ts @@ -41,6 +41,7 @@ describe('resource directory', () => { first_name: 'first_name', flsa_status: 'exempt', gender: 'female', + highly_compensated_employee: true, income: { amount: 0, currency: 'currency', @@ -56,6 +57,7 @@ describe('resource directory', () => { }, ], is_active: true, + key_employee: true, last_name: 'last_name', latest_rehire_date: 'latest_rehire_date', location: { @@ -69,6 +71,7 @@ describe('resource directory', () => { source_id: 'source_id', }, manager: { id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }, + marital_status: 'single', middle_name: 'middle_name', phone_numbers: [{ data: 'data', type: 'work' }], preferred_name: 'preferred_name', @@ -86,6 +89,8 @@ describe('resource directory', () => { ssn: 'ssn', start_date: 'start_date', title: 'title', + union_code: 'union_code', + union_local: 'union_local', }, ], }, diff --git a/tests/api-resources/sandbox/employment.test.ts b/tests/api-resources/sandbox/employment.test.ts index 9523fee2..3d68a8c7 100644 --- a/tests/api-resources/sandbox/employment.test.ts +++ b/tests/api-resources/sandbox/employment.test.ts @@ -35,6 +35,7 @@ describe('resource employment', () => { end_date: 'end_date', first_name: 'first_name', flsa_status: 'exempt', + highly_compensated_employee: true, income: { amount: 0, currency: 'currency', @@ -50,6 +51,7 @@ describe('resource employment', () => { }, ], is_active: true, + key_employee: true, last_name: 'last_name', latest_rehire_date: 'latest_rehire_date', location: { @@ -67,6 +69,8 @@ describe('resource employment', () => { source_id: 'source_id', start_date: '3/4/2020', title: 'title', + union_code: 'union_code', + union_local: 'union_local', }, { path: '/_stainless_unknown_path' }, ), diff --git a/tests/api-resources/sandbox/individual.test.ts b/tests/api-resources/sandbox/individual.test.ts index 2f3a18e0..06406c4a 100644 --- a/tests/api-resources/sandbox/individual.test.ts +++ b/tests/api-resources/sandbox/individual.test.ts @@ -34,6 +34,7 @@ describe('resource individual', () => { first_name: 'first_name', gender: 'female', last_name: 'last_name', + marital_status: 'single', middle_name: 'middle_name', phone_numbers: [{ data: 'data', type: 'work' }], preferred_name: 'preferred_name',