---
title: "Get client by external tenant ID"
method: GET
path: "/clients/{externalTenantId}"
tags: ["Clients"]
---

# Get client by external tenant ID

`GET /clients/{externalTenantId}`

## Request

- Base URL: `https://referral-api.debitura.com`
- URL: `https://referral-api.debitura.com/clients/{externalTenantId}`
- Auth: API key in header `XApiKey`

Retrieves detailed information for a specific client using your unique identifier (External Tenant ID).

Path Parameter
- **externalTenantId** - Your unique identifier for this client (the same value used during client creation)

Response Data
The response includes complete client information:
- **ExternalTenantId** - Your unique identifier for this client
- **OnboardingDone** - Whether the client has completed onboarding (signed debt collection agreements)
- **OnboardingLinks** - If onboarding incomplete, contains URL to complete the process
- **Client** - Complete client information
  - Debitura-assigned client ID (Guid)
  - Company name and registration number
  - Country and address details
  - Contact information (email, phone)
- **Users** - List of all users associated with this client
  - User ID, email, first name, last name

Use Cases
- Look up client details using your internal identifier
- Check client onboarding status
- Retrieve Debitura client ID for use with the Customer API (via OAuth token endpoint)
- Get client information before creating cases
- Verify client link is still active

Error Cases
- **404 Not Found** - No active client link exists for this External Tenant ID and your partner account
  - Client was never created
  - Client link was archived
  - External Tenant ID belongs to different referral partner
- **500 Internal Server Error** - Unexpected server error

Important Notes
- Only returns active (non-archived) client links
- External Tenant ID is case-sensitive
- The client must be linked to your referral partner account
- Use the returned client ID with the OAuth token endpoint to generate bearer tokens for Customer API access

## Path parameters

- `externalTenantId` string, required

## Response `200`

Client retrieved successfully

- DebituraWebReferralPartnerApiModelsClientsClientCreatedResponse
  - `externalTenantId` string, nullable
  - `onboardingDone` boolean
  - `onboardingLinks` DebituraWebReferralPartnerApiModelsClientsOnboardingLinksDto
    - `url` string, nullable
  - `client` DebituraWebReferralPartnerApiModelsClientsCreditorDto
    - `id` string, uuid
    - `companyName` string, nullable
    - `officeEmail` string, nullable
    - `country` string, nullable
    - `address` string, nullable
    - `city` string, nullable
    - `zipCode` string, nullable
    - `companyRegistrationNumber` string, nullable
  - `users` DebituraWebReferralPartnerApiModelsClientsUserDto[], nullable
    - `id` integer
    - `email` string, nullable
    - `firstName` string, nullable
    - `lastName` string, nullable
  - `isAttributedClient` boolean
  - `dateLinked` string, date-time
  - `caseStats` DebituraWebReferralPartnerApiModelsClientsClientCaseStats
    - `casesTotal` integer
    - `casesClosed` integer
    - `earningsUsd` number, double
  - `kycStatus` 'NotRequired' | 'Pending' | 'Verified': KYC (Know Your Customer) verification status for a client linked to a referral partner. Captures three distinct states that a simple boolean cannot express. Sent as snake_case string values: "not_required", "pending", "verified".
  - `kycVerification` DebituraWebReferralPartnerApiModelsClientsKycVerificationDto
    - `directorFullName` string, nullable
    - `directorHomeAddress` string, nullable
    - `directorDateOfBirth` string, date
    - `dateCreated` string, date-time
    - `verificationStatus` 'Processing' | 'Completed' | 'null', nullable: Partner/staff-set review status (Processing/Completed) for this submission. Null = not yet reviewed. Note: distinct from the sibling `ClientResponse.KycStatus` field, which describes whether KYC data has been submitted at all.
    - `verificationStatusUpdatedAt` string, date-time, nullable: When VerificationStatus was last set. Null until set.
  - `caseResults` DebituraWebReferralPartnerApiModelsClientsMultiCaseResult: Result of creating multiple cases during client creation. Groups successful and failed case creation attempts.
    - `successfulCases` DebituraWebExternalApiContractsV1CasesInvoiceDto[], nullable: Cases that were created successfully. Each element contains the full case details.
      - `id` string, uuid
      - `dateCreated` string, date-time
      - `dateUpdated` string, date-time, nullable
      - `reference` string, nullable
      - `creditorReference` string, nullable
      - `creditorComments` string, nullable
      - `claimDescription` string, nullable
      - `grossAmount` number, double
      - `remainder` number, double
      - `interestFees` number, double
      - `reminderFees` number, double
      - `collectionFees` number, double
      - `totalAddedFees` number, double
      - `currency` string, nullable
      - `isTestCase` boolean
      - `lifecycle` string, nullable
      - `dueDate` string, date-time
      - `date` string, date-time
      - `dateFinished` string, date-time, nullable
      - `dateCollectionStarted` string, date-time, nullable
      - `closeCode` string, nullable
      - `currentEngagementPhase` string, nullable: The current phase of the case's engagement: "Pre-legal", "Legal", or "Enforcement". A different axis from Lifecycle/CloseCode — an Active case can be in any of the three phases. Null means "no active engagement" (e.g. lead / quoting / pre-contract-signing / unassigned, or a data-consistency gap) — this is a distinct third state, NOT a synonym for Pre-legal. Most cases legitimately read Pre-legal; phase only leaves Pre-legal on legal/enforcement quote flows. Not guaranteed to be monotonic: an admin correction can move phase backwards (e.g. Legal back to Pre-legal). Persists after case closure — reflects the case's last-known engagement phase, not the current Lifecycle. Note: this is a different field from a lead quote's own offered phase (the phase a partner's quote proposes to work the case at, if this case ever went through a quote flow) — this field is the case-level phase of its actual engagement, not a quote's terms.
      - `claimType` string, nullable: The type of claim for this case (e.g. "Unpaid Invoice", "Loan Repayment", "Breach of Contract"). Null if not set.
      - `creditorDivisionId` string, uuid, nullable
      - `debtor` DebituraWebExternalApiContractsV1CasesDebtorDto: V1 Debtor DTO for external partner APIs. The debtor is the party that owes the debt.
        - `type` string, required: Debtor type. Valid values: "Company" or "Private" (case-insensitive)
        - `name` string, required: Debtor name (company name or person's full name)
        - `contactPerson` string, nullable: Contact person at the company (required for companies, not used for persons)
        - `companyRegistrationNumber` string, nullable: Company registration number (VAT number, CVR, org number, etc.)
        - `address` string, nullable: Street address
        - `zipCode` string, nullable: Postal/ZIP code
        - `city` string, nullable: City name
        - `state` string, nullable: State/region/province name
        - `stateAlpha2` string, nullable: US state: two-letter code (e.g., "CA"), ISO 3166-2 format (e.g., "US-CA"), or full name (e.g., "California")
        - `countryAlpha2` string, nullable: Country code (ISO 3166-1 alpha-2 format)
        - `country` string, nullable: Country name
        - `email` string, nullable: Email address for debtor contact
        - `phone` string, nullable: Phone number (include country code)
      - `collectionPartner` DebituraWebExternalApiContractsV1CasesCollectionPartnerDto: V1 Collection Partner DTO for external partner APIs
        - `name` string, nullable
        - `officeEmail` string, nullable
        - `officePhone` string, nullable
        - `publicSite` string, nullable
        - `surveyCadenceMode` 0 | 1: Deprecated: kept as a number and never removed, but not extended. Survey-generation cadence: 0 = Standard (rolling monthly survey), 1 = DecisionPointOnly (no rolling surveys).
      - `creditor` DebituraWebExternalApiContractsV1CasesCreditorDto: Creditor (client) information for external partner APIs. Represents the party that the debtor owes money to.
        - `id` string, uuid: Unique identifier for the creditor
        - `companyName` string, nullable: Company name of the creditor
        - `companyRegistrationNumber` string, nullable: Company registration number (CVR, VAT number, etc.)
        - `officeEmail` string, nullable: Primary office email address
        - `officePhone` string, nullable: Primary office phone number
        - `address` string, nullable: Street address
        - `city` string, nullable: City
        - `zipCode` string, nullable: Postal/ZIP code
        - `state` string, nullable: State or region (if applicable)
        - `country` string, nullable: Country name
        - `division` DebituraWebExternalApiContractsV1CasesCreditorDivisionDto: Creditor division information for external partner APIs. Represents a specific division or department within a creditor organization.
          - `id` string, uuid: Unique identifier for the division
          - `name` string, nullable: Name of the division
      - `bankAccount` DebituraWebExternalApiContractsV1CasesBankAccountDto: Bank account information for partner API. Full details provided as partners need this to: 1. Provide payment instructions to debtors (when debtor pays client directly) 2. Execute payouts to clients (when partner receives payment and pays out remainder)
        - `id` integer: Bank account identifier
        - `label` string, nullable: User-friendly label (e.g., "Main EUR Account")
        - `scheme` string, nullable: Account scheme: IBAN, SWIFT, or LOCAL
        - `currencyCode` string, nullable: Currency code (ISO 4217)
        - `bankCountryCode` string, nullable: Bank country code (ISO Alpha-2)
        - `accountHolderName` string, nullable: Account holder name (beneficiary)
        - `iban` string, nullable: IBAN (for IBAN scheme accounts)
        - `bic` string, nullable: BIC/SWIFT code (for IBAN and SWIFT scheme accounts)
        - `accountNumber` string, nullable: Account number (for SWIFT and LOCAL scheme accounts)
        - `localIdentifier` string, nullable: Local identifier (for LOCAL scheme accounts, e.g., sort code + account number)
        - `localIdentifierType` string, nullable: Type of local identifier (e.g., "Sort Code", "Routing Number")
        - `bankName` string, nullable: Bank name (optional)
        - `bankAddress` string, nullable: Bank address (optional)
        - `bankCity` string, nullable: Bank city (optional)
        - `bankZipCode` string, nullable: Bank zip/postal code (optional)
        - `bankState` string, nullable: Bank state/region (optional)
      - `blendedAgeUpliftPoints` number, double, nullable: MULTI-INVOICE AGE BUCKET PRICING Calculated blended age uplift percentage points (0-20) for multi-invoice cases. Shows the additional fee percentage added due to invoice age. Formula: ((A12-A24)×10 + A24×20) / Total Principal Null for single-invoice cases (age uplift is calculated from due date instead).
      - `preLegalSuccessFee` number, double, nullable: PRE-LEGAL SUCCESS FEE The total pre-legal success fee percentage for this case. Includes base fee + age-based uplift (blended or single-invoice). Null if pricing has not been calculated yet or if case is not in pre-legal phase. Example: 20.5 represents 20.5% success fee.
      - `solutionUrl` string, nullable: When the case is created with allowPendingContracts=true and required contracts are unsigned, this URL points to the signing page. Null when contracts are already signed or not applicable.
      - `signingHandoff` DebituraWebExternalApiContractsV1CasesSigningHandoffDto: Partner-facing handoff metadata for a creditor's pending signing chain. Returned on POST /cases responses (422 with pending-signing errors, or 200 with AllowPendingContracts=true when signings remain). Designed as an envelope so future fields (expiration, suggested email copy, etc.) can be added without polluting the parent DTO.
        - `combinedSigningUrl` string, nullable: Single signing entry URL that walks the creditor through every pending step (SDCA upgrade → PoA → JPA → KYC) on the Creditors app and returns to the partner-supplied returnUrl when done.
      - `exclusivePeriodEndDate` string, date-time, nullable: The date the exclusive collection period ends (or ended). Null if no collection period has been created for this case (e.g. custom-terms cases). Use GET /cases/{id}/exclusive-period for the full chain including extensions.
      - `disputeStatus` string, nullable: Whether the claim is disputed by the debtor. One of: "Yes, the claim is disputed", "No, the claim is not disputed", or "Don't Know". Null when the dispute status has not been set on the case.
      - `validation` DebituraWebExternalApiContractsV1CasesCaseValidationLeanDto: Stable v1 validation summary used by ordinary and list mappings.
        - `needsInfo` boolean
      - `assignedUser` DebituraWebExternalApiContractsV1CasesAssignedUserDto: Represents the creditor team member assigned to a case.
        - `email` string, nullable: The assigned user's email address.
        - `name` string, nullable: The assigned user's full name.
      - `allocationOutstanding` DebituraWebExternalApiContractsV1CasesInvoiceAllocationOutstandingDto: Outstanding amount per bucket on the case: each bucket's total minus the payments allocated to it.
        - `principal` number, double
        - `interest` number, double
        - `reminderFees` number, double
        - `collectionFees` number, double
    - `failedCases` DebituraWebReferralPartnerApiModelsClientsCaseCreationFailure[], nullable: Cases that failed during creation. Each element contains error details and the original case index.
      - `caseIndex` integer: Zero-based index of the failed case in the original Cases array.
      - `creditorReference` string, nullable: Creditor reference from the failed case, if provided. Helps consumers identify which specific case failed.
      - `errorType` string, nullable: Machine-readable error type code for programmatic error handling. Enables API consumers to handle different failure scenarios without parsing error messages. <b>Possible values:</b><list type="bullet"><item><term>NoPartnerAvailable</term><description>No collection partner available for the debtor's jurisdiction. The debtor is in a country/region where Debitura does not yet have collection partner coverage. Consider resubmitting with debtors in supported jurisdictions.</description></item><item><term>ValidationError</term><description>The request failed field-level validation. Check the ValidationErrors property for detailed field-specific errors. Common causes: missing required fields, invalid formats, business rule violations.</description></item><item><term>DuplicateReference</term><description>The provided CreditorReference already exists for this creditor or is duplicated in the current request. CreditorReference must be unique per creditor.</description></item><item><term>IdempotencyViolation</term><description>The client has already been created in a previous API call. Cases are not created on repeated calls to maintain idempotency. This is informational - the original operation already succeeded.</description></item><item><term>UnexpectedError</term><description>An unexpected system error occurred during case creation. This is a catch-all for errors not covered by other types. Contact Debitura support if this error persists.</description></item></list> Null if the error type cannot be determined or is not applicable.
      - `errorMessage` string, nullable: High-level error message explaining why the case creation failed.
      - `validationErrors` object, nullable: Detailed field-level validation errors if the failure was due to validation. Null if the failure was due to other reasons (e.g., no partner match).
      - `signingHandoff` DebituraWebExternalApiContractsV1CasesSigningHandoffDto: Partner-facing handoff metadata for a creditor's pending signing chain. Returned on POST /cases responses (422 with pending-signing errors, or 200 with AllowPendingContracts=true when signings remain). Designed as an envelope so future fields (expiration, suggested email copy, etc.) can be added without polluting the parent DTO.
        - `combinedSigningUrl` string, nullable: Single signing entry URL that walks the creditor through every pending step (SDCA upgrade → PoA → JPA → KYC) on the Creditors app and returns to the partner-supplied returnUrl when done.

## Other responses

- `404`: Client not found or link is archived
- `500`: Internal server error

## Changes

- **2026-10-12** `7b3700202dec`: 3 breaking, 3 warning
  - the response property `kycVerification/verificationStatus` became nullable for the status `200` (media type: text/plain)
  - the response property `kycVerification/verificationStatus` became nullable for the status `200` (media type: application/json)
  - the response property `kycVerification/verificationStatus` became nullable for the status `200` (media type: text/json)
  - added the new `undefined` enum value to the `kycVerification/verificationStatus` response property for the response status `200` (media type: text/plain)
  - …2 more
- **2026-10-01** `739ec0889478`: 3 info
  - response property `caseResults/successfulCases/items/collectionPartner/surveyCadenceMode` deprecated (media type: text/plain)
  - response property `caseResults/successfulCases/items/collectionPartner/surveyCadenceMode` deprecated (media type: application/json)
  - response property `caseResults/successfulCases/items/collectionPartner/surveyCadenceMode` deprecated (media type: text/json)

[Operation history](https://skmtc.dev/debitura/apis/debitura-referral-partner-api/changes/clients/:externalTenantId/get.md)

---

[API](https://skmtc.dev/debitura/apis/debitura-referral-partner-api.md) - [All operations](https://skmtc.dev/debitura/apis/debitura-referral-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/debitura/apis/debitura-referral-partner-api/revisions/cf12c7f270d9?raw)
