Skip to main content
A provider can answer with something a person has to read: a rejection, or a request for more documents or information on an affiliation it is still analyzing. Rinne reads that answer, translates it into Rinne’s vocabulary, and updates the merchant’s requirements. You get structured reasons and a precise list of what to send, and nothing that is still valid is ever asked again.

1. The provider answers

  • A rejection moves the affiliation to REJECTED at once. provider_status_message carries the provider’s own text, and rejection_reasons stays empty until Rinne’s review.
  • A request for more on an affiliation the provider is still analyzing leaves the status where it is until the review lands. provider_status_message carries what the provider said.

2. Rinne reviews it

Rinne reads the provider’s text and records what it means, aiming to finish the same business day:
  • Which documents or verifications were refused. They become REJECTED for that provider and are never sent to it again, and their requirements read REJECTED until new evidence arrives.
  • Which requirements the provider added for this merchant: documents, an INFORMATION question, or an EVIDENCE_PACKAGE request. Each carries a description written for the merchant’s contact.
  • Which merchant data has to be corrected, or that the refusal is final.
affiliation.requirements-changed fires with the IDs of the requirements that changed. On a rejection, the affiliation also gets rejection_reasons and rejection_reviewed_at:
Affiliation after the review
A review that finds nothing for the merchant to do sets rejection_reviewed_at with an empty rejection_reasons.

Reason codes

Actions

3. Supply what is missing and try again

Supply the new items through the API or the onboarding link. What happens next depends on what the provider answered:
A REJECTED affiliation never goes back to collecting at any provider; it leaves REJECTED only if the provider reverses its refusal. So every correction after a rejection is a new submission. Create a new affiliation for the same provider: it starts from the merchant’s updated requirements, with everything still valid already SATISFIED, such as an approved biometric verification and the documents the provider did not refuse. If something is pending it comes with its own onboarding link; a rejected affiliation has none.
cURL
In the example above, the new affiliation asks only for a new identity document. When it arrives, Rinne submits.
Created a new affiliation before the review of the previous rejection landed? It is created PENDING and held. When the review lands it moves to WAITING_DOCUMENTS if something was reset or added, or is submitted at once.

Example: a provider asks for proof of the business

A typical request on an open CAPPTA affiliation asks how the merchant earns its revenue and for proof that the business operates. After Rinne’s review the merchant has two new requirements, both with origin PROVIDER_REQUEST: an INFORMATION question and an EVIDENCE_PACKAGE, each with a description written for the contact. affiliation.requirements-changed names them, and the affiliation is WAITING_DOCUMENTS. Either path below satisfies them; what one supplies disappears from the other.
With both requirements SATISFIED, Rinne delivers the supplement: the affiliation moves to PENDING, then back to PROCESSING while the provider analyzes it.

Edge cases

When the provider reverses a rejection at Rinne’s request, the same affiliation goes from REJECTED to ACTIVE, and affiliation.status-changed reports it.
After FIX_COMPANY_DATA, correcting a merchant also runs its KYC checks again, as any update of its identification data does. Then create the new affiliation.
Rinne does not block a new affiliation after action NONE, but the provider refuses it again. Treat NONE as the end of onboarding with that provider for this merchant.
The refusal is per provider. The document is never sent to the provider that refused it again, while every other provider keeps using it.