Referral Partners: 409 conflict path - what your customer sees and what your platform does
When your POST /clients call returns a 409 ClientExistsNeedsLinking response, your customer already has a Debitura account and must approve linking it to your platform. This article walks through what they see at each step, what your platform receives, and how the cases in your original payload are now carried through automatically.
What it is
The 409 path is one of three responses you can get from POST /clients on the Referral Partner API. The three 409 response types are:
ClientExistsNeedsLinking- an existing Debitura account matched the customer you are creating, and the customer must approve linking it to your platform. This is the scenario covered in this article (it includes both the standard approval flow and the multi-entity Choice page).ClientAlreadyLinkedToAnotherPartner- the matched client is already linked to a different referral partner. Only one referral partner link per client is supported.InvalidClientType- the matched Debitura account belongs to a collection partner or another non-creditor entity type, so it cannot be linked as a referral partner client.
The ClientExistsNeedsLinking path triggers whenever the customer you are creating already exists in Debitura - either because they signed up directly at some point, or because another channel registered them. Instead of failing the request outright, the API creates a link approval request, emails the customer an approval URL, and asks them to confirm before any link is established between your platform and their account.
For the happy-path flow (where the customer is brand new to Debitura and walks through onboarding from scratch), see Referral Partners: What your client sees during onboarding. The 409 path branches off when the customer already has an account. The other two response types are covered briefly in Other 409 scenarios below.
Why it matters
Before the recent carry-through changes, two things made the 409 path painful for partners and confusing for customers:
Cases submitted alongside the client payload were silently dropped on the 409 path. The customer would approve the link, end up linked to your platform, and then have to re-submit the cases later.
After approval, the customer landed on an "Access Granted" dead-end page even if they still needed to sign the SDCA, the Power of Attorney, or other contracts.
Both are fixed. Cases from your original payload now carry through automatically and land in "Pending Contract Signing" until the customer signs. The customer is also redirected straight into the signing flow after approval, then back to your platform. The result is a smoother first-touch experience for the customer and fewer follow-up tickets for your support team.
How it works
There are two variants of the 409 path. The standard variant covers most cases. The multi-entity variant only triggers when the customer's contact email matches an existing user exactly.
Standard variant: link approval (most common)
When POST /clients returns a 409 with Type: ClientExistsNeedsLinking, the response includes an approval URL pointing to the link request page in the Debitura app. Your platform's job is to deliver that URL to the customer (by redirect, in-app prompt, or your own email). What happens next:
Customer opens the approval page. They see your partner name, what access is being requested, and "Approve" or "Decline" buttons.
Customer approves or declines. On approval, the link is created with
IsAttributedClient = false(you earn fees only on cases submitted via your bearer token, not on cases the customer creates directly in Debitura). On decline, no link is created and your platform cannot submit cases on their behalf.Cases from your original payload are created automatically. If the customer has not yet signed the SDCA or PoA, those cases land in "Pending Contract Signing" and advance once signing completes. There is no
case.failedevent on this path - your platform should detect outstanding signing via the case lifecycle field.Customer is redirected into the signing flow. They are walked through any outstanding signing requirements (SDCA, PoA, JPA, and KYC where applicable) in a single chained redirect, then sent back to your platform.
Multi-entity variant: the Choice page (exact email match)
When the conflicting user matches the contact email exactly (rather than just by email domain), the 409 response carries an OnboardingUrl pointing to a Choice page in the Creditor App instead of the standard approval page. This is most common when the same person is acting as an accountant or operator across several legal entities.
On the Choice page, the customer picks one of two options:
Connect an existing entity they already belong to. The page only lists tenants the user is eligible to link.
Create a new entity. This provisions a new creditor account under the same user.
In both options, the cases supplied in your original POST /clients payload are stored and replayed against the chosen or newly created entity. No data is lost between the two calls.
The approval window
The approval URL expires after a configurable per-partner window. The default is 7 days; the maximum is 30 days. Chaser is currently configured for 30 days. To change your partner's value, email [email protected].
Expiry runs hourly as a background job, so a client.link_expired webhook can arrive up to one hour after the configured TTL technically passes. If a customer's link request expires unanswered, your platform can re-run the same POST /clients call with the same external tenant ID and payload to generate a fresh approval URL. See Referral Partners: When your customer's link request expires for the recovery script.
What to expect
Webhooks you will see
From the moment the 409 fires through to a final outcome, you receive a sequence of webhooks:
client.link_requestedfires immediately when the 409 triggers a link approval request, notifying you that the approval URL has been sent.client.linkedfires when the customer approves the link.client.link_declinedfires if the customer declines.client.link_expiredfires if the customer takes no action before the configured window elapses.case.createdfires once for each case carried through from your original payload, after the customer approves.
For the full event glossary, see Referral Partners: Webhook events (business meaning glossary).
Attribution and fees
Because the customer pre-existed in Debitura, the link is non-attributed (IsAttributedClient = false). You earn referral fees only on cases submitted through your integration using your bearer token. Cases the customer creates directly in the Debitura web app do not generate fees. For the full attribution rules, see Referral Partners: API and integration overview.
If the customer clicks the link twice
Concurrent approve or decline calls are processed atomically. Only one succeeds; the other receives a 409 Conflict and an error indicating the link has already been used. This means no duplicate cases are created, even if the customer (or you on their behalf) clicks Approve twice in quick succession or has two browser tabs open.
Known limitation: UK customers and KYC
Today, the only collection partner that requires KYC verification is Oriel Collections (UK). If a 409 link request is approved for a customer who would route to Oriel and has no KYC record on file, the cases that carry through bypass KYC because the carry-through path does not enforce it. The gap self-heals on the next case your platform submits for the same customer through your API integration, which goes through the bearer-token path that does enforce KYC. So a UK customer may briefly have cases that look like nothing is happening until the next submission triggers the KYC requirement. For how to support a customer in this situation, see Referral Partners: How to support your customers using Debitura.
Other 409 scenarios
The walkthrough above covers ClientExistsNeedsLinking. The other two 409 response types resolve differently and are not covered in detail here.
Already linked to another referral partner
When the 409 response carries Type: ClientAlreadyLinkedToAnotherPartner, the matched client is already linked to a different referral partner. Only one referral partner link per client is supported today. What to tell the customer: contact [email protected] to discuss options.
Matched entity is not a creditor
When the 409 response carries Type: InvalidClientType, the email or company details matched an existing Debitura account that belongs to a collection partner or another non-creditor entity - not a creditor. The user cannot be linked as a referral partner client in this state. What to tell the customer: they should create a separate Debitura creditor account, or contact [email protected] if this conflict is unexpected.
Related articles
Referral Partners: What your client sees during onboarding - the happy-path counterpart to this article.
Referral Partners: Customer signup / activation issues - the troubleshooting article for the 409 path and other signup problems.
Referral Partners: Webhook events (business meaning glossary) - the full event reference for
client.link_requested,client.link_expired, and the rest.Referral Partners: When your customer's link request expires - the recovery script for the new expiry webhook.
Developer Docs: Developers: For the API request and response shapes, including the full ClientExistsNeedsLinking 409 payload and the SigningHandoff envelope, see Developer Docs: Referral Partner API.
