> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rinne.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Reissue a merchant's onboarding link

> Requires the merchant.affiliation.edit permission.

Issues a new Rinne onboarding link for an affiliation that is waiting for documents and returns
it. The previous link stops working at once: a person on it sees that the link was replaced. Use
it when the link was lost, leaked or forwarded to the wrong person, or when it expired before the
company finished; the affiliation, its requirements and whatever was already sent are kept.
`onboarding_url` and `onboarding_url_expires_at` on the affiliation change to the new link.

The link lasts `expires_in_days` (30 when omitted) and never past the date the attempt is
cancelled for want of documents. Only the person registered as the company's contact opens
it, by typing their CPF.

`409 CONFLICT_ERROR` when the affiliation is not `WAITING_DOCUMENTS` (an attempt never
submitted and past its deadline is cancelled as `EXPIRED` first, and answers `409` too), or
when its link is the provider's own, which Rinne cannot reissue.




## OpenAPI

````yaml /api-spec.yaml post /v1/merchants/{merchantId}/affiliations/{id}/onboarding-link
openapi: 3.1.0
info:
  title: Rinne API
  version: 1.0.0
  description: >
    **Rinne API** is a robust payment platform that offers integration with
    multiple payment providers.


    ## Authentication


    The API uses API Key authentication via the `x-api-key` header. Each company
    has a unique key to access resources.


    ## Response Format


    All responses follow a consistent format:

    - **Success**: Returns the requested data directly

    - **Error**: Returns an `error` object with detailed information


    ## Pagination


    Endpoints that return lists support pagination through parameters:

    - `page`: Page number (default: 1)

    - `limit`: Items per page (default: 20, maximum: 100)


    ## Supported Providers


    The API supports multiple payment providers:

    - **Rinne**: Internal provider

    - **Celcoin**: PIX integration and other financial services


    ## Raw Card Data (PCI Endpoints)


    Card credential fields (`card_data.number`, `card_data.cvv`,
    `card_data.network_token`,

    `card_data.cryptogram`, and the 3DS `card.number`) must always be sent
    encrypted —

    values start with the `ev:` prefix. Plaintext values are rejected with

    `400 VALIDATION_ERROR` on every host.


    There are two ways to send encrypted values:

    - **rinne-js**: card forms and wallet buttons (Apple Pay / Google Pay)
    encrypt
      credentials client-side before they leave the browser.
    - **PCI API host**: server-to-server integrations that handle raw card data
    must call
      `https://pci.api.rinne.com.br/core` (sandbox: `https://pci.api-sandbox.rinne.com.br/core`)
      instead of the regular host. This endpoint encrypts `number` and `cvv` in transit
      before the request reaches the API; all other fields pass through unchanged.

    The PCI host serves only transaction creation and 3DS session creation (both
    the

    self and merchant variants); use the regular host for everything else.
  contact:
    name: Rinne API Support
    email: suporte@rinne.com.br
servers:
  - url: https://api-sandbox.rinne.com.br/core
    description: Sandbox
  - url: https://api.rinne.com.br/core
    description: Production
security: []
tags:
  - name: System
    description: System and API health endpoints
  - name: Tap-on-Phone
    description: Access-token minting for the Tap-on-Phone SDK (called from your backend)
  - name: Authentication
    description: User authentication and authorization endpoints
  - name: Management
    description: >-
      Merchant management endpoints - create, list, get specific, overview,
      update
  - name: Transactions
    description: Transaction operations for merchants - create, list, overview, refunds
  - name: Affiliations
    description: Affiliation management for merchants
  - name: Biometric Verifications
    description: Biometric verifications of your merchants' contacts
  - name: Onboarding Requirements
    description: What your merchants must prove to a provider, and how far along they are
  - name: Onboarding Documents
    description: Documents uploaded for your merchants
  - name: KYC
    description: KYC check history of your merchants
  - name: Banking
    description: Banking operations for merchants - balance, cashout, statements
  - name: Bank Accounts
    description: Bank account management for merchants
  - name: Pix Keys
    description: PIX key management for merchants
  - name: Company Transactions
    description: Direct transaction management and query endpoints for companies
  - name: Companies
    description: Company management
  - name: Company Affiliations
    description: Payment provider affiliation management
  - name: Company Biometric Verifications
    description: Biometric verifications of the company contact
  - name: Company Onboarding Requirements
    description: What the company must prove to a provider, and how far along it is
  - name: Company Onboarding Documents
    description: Documents the company uploads for its onboarding
  - name: Company Banking
    description: Company banking endpoints (balance, etc.)
  - name: Company Pix
    description: Company PIX key management
  - name: Company Ledger
    description: Company ledger entry query endpoints
  - name: Company Disputes
    description: Company dispute query endpoints
  - name: Company Receivables
    description: Contract effects on the company's own receivables
  - name: Ledger
    description: Ledger entry query endpoints (company and merchants)
  - name: Disputes
    description: Dispute query endpoints for an organization's merchants
  - name: Cards
    description: Stored card management (self and merchant)
  - name: API Keys
    description: API key management - create, list, revoke (hashed, show-once)
  - name: Webhooks
    description: Endpoints for receiving webhooks from external providers
  - name: Pricing
    description: Fee and cost policy management for transaction pricing
  - name: Users
    description: User management endpoints
  - name: Roles
    description: Role management endpoints
  - name: Permissions
    description: Permission management endpoints
paths:
  /v1/merchants/{merchantId}/affiliations/{id}/onboarding-link:
    post:
      tags:
        - Affiliations
      summary: Reissue a merchant's onboarding link
      description: >
        Requires the merchant.affiliation.edit permission.


        Issues a new Rinne onboarding link for an affiliation that is waiting
        for documents and returns

        it. The previous link stops working at once: a person on it sees that
        the link was replaced. Use

        it when the link was lost, leaked or forwarded to the wrong person, or
        when it expired before the

        company finished; the affiliation, its requirements and whatever was
        already sent are kept.

        `onboarding_url` and `onboarding_url_expires_at` on the affiliation
        change to the new link.


        The link lasts `expires_in_days` (30 when omitted) and never past the
        date the attempt is

        cancelled for want of documents. Only the person registered as the
        company's contact opens

        it, by typing their CPF.


        `409 CONFLICT_ERROR` when the affiliation is not `WAITING_DOCUMENTS` (an
        attempt never

        submitted and past its deadline is cancelled as `EXPIRED` first, and
        answers `409` too), or

        when its link is the provider's own, which Rinne cannot reissue.
      parameters:
        - in: path
          name: merchantId
          required: true
          schema:
            type: string
          description: The merchant ID
          example: a3dbd0c2-9f79-4f86-8caa-47779b3f2793
        - in: path
          name: id
          required: true
          schema:
            type: string
          description: The affiliation ID
          example: a3dbd0c2-9f79-4f86-8caa-47779b3f2794
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReissueOnboardingLinkRequest'
      responses:
        '200':
          description: The new link
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OnboardingLinkResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticationErrorResponse'
        '403':
          description: >
            Insufficient permissions, or company onboarding is not available to
            the caller yet

            (`message`: "Company onboarding is not available yet")
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthorizationErrorResponse'
        '404':
          description: >-
            Merchant not found in the organization, or affiliation not found for
            that merchant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundErrorResponse'
        '409':
          description: >-
            The affiliation is not waiting for documents, or its link is the
            provider's
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictErrorResponse'
              example:
                error:
                  code: CONFLICT_ERROR
                  message: >-
                    Affiliation is PROCESSING_DOCUMENTS, not waiting for
                    documents
                  status: 409
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    ReissueOnboardingLinkRequest:
      type: object
      properties:
        expires_in_days:
          type: integer
          minimum: 1
          maximum: 30
          description: >
            How long the new link lasts, in days; 30 when omitted. Never past
            the date the attempt is

            cancelled for want of documents.
          example: 7
    OnboardingLinkResponse:
      type: object
      properties:
        onboarding_url:
          type: string
          format: uri
          description: >-
            The new link. Send it to the company's contact; the previous one no
            longer opens.
          example: https://cadastro.rinne.com.br/a/3q2-7wEXAMPLEtoken
        onboarding_url_expires_at:
          type: string
          format: date-time
          description: When the new link stops working
          example: '2026-11-12T12:00:00.000Z'
      required:
        - onboarding_url
        - onboarding_url_expires_at
    ValidationErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: VALIDATION_ERROR
            message:
              type: string
              example: Validation error
            status:
              type: integer
              example: 400
            details:
              type: object
              properties:
                issues:
                  type: array
                  items:
                    type: object
                    properties:
                      field:
                        type: string
                        example: email
                      type:
                        type: string
                        example: REQUIRED
                      message:
                        type: string
                        example: Field 'email' is required
                      value:
                        anyOf:
                          - type: string
                          - type: number
                          - type: boolean
                        example: invalid_value
                      constraints:
                        type: object
                        example:
                          min: 18
                          max: 120
            path:
              type: string
              example: /companies
            timestamp:
              type: string
              format: date-time
              example: '2023-12-01T10:00:00.000Z'
            requestId:
              type: string
              example: req_123456789
    AuthenticationErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: AUTHENTICATION_ERROR
            message:
              type: string
              example: Authentication required to access this resource
            status:
              type: integer
              example: 401
            details:
              type: object
              properties:
                reason:
                  type: string
                  example: Invalid API key
            path:
              type: string
              example: /companies/me
            timestamp:
              type: string
              format: date-time
              example: '2023-12-01T10:00:00.000Z'
            requestId:
              type: string
              example: req_123456789
    AuthorizationErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: AUTHORIZATION_ERROR
            message:
              type: string
              example: You need 'admin' permissions to access this resource
            status:
              type: integer
              example: 403
            path:
              type: string
              example: /companies
            timestamp:
              type: string
              format: date-time
              example: '2023-12-01T10:00:00.000Z'
            requestId:
              type: string
              example: req_123456789
    NotFoundErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: RESOURCE_NOT_FOUND
            message:
              type: string
              example: Company with ID '123' not found
            status:
              type: integer
              example: 404
            path:
              type: string
              example: /companies/me
            timestamp:
              type: string
              format: date-time
              example: '2023-12-01T10:00:00.000Z'
            requestId:
              type: string
              example: req_123456789
    ConflictErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: CONFLICT_ERROR
            message:
              type: string
              example: >-
                A Resource with this origin_bank_account_id + request_id already
                exists
            status:
              type: integer
              example: 409
            details:
              type: object
              properties:
                field:
                  description: >-
                    The field(s) involved in the conflict. May also name a state
                    check rather than a constraint column.
                  type: string
                  example: origin_bank_account_id + request_id
                value:
                  type: string
                  example: '12345678'
            path:
              type: string
              example: /companies/bank-accounts
            timestamp:
              type: string
              format: date-time
              example: '2023-12-01T10:00:00.000Z'
            requestId:
              type: string
              example: req_123456789
    InternalServerErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: INTERNAL_SERVER_ERROR
            message:
              type: string
              example: An unexpected error occurred
            status:
              type: integer
              example: 500
            path:
              type: string
              example: /companies
            timestamp:
              type: string
              format: date-time
              example: '2023-12-01T10:00:00.000Z'
            requestId:
              type: string
              example: req_123456789
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: Company API key for authentication

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.