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

# Tipo 1 Gestion de Relaciones de Confianza

Para implementar TIN en las aplicaciones bancarias, existen elementos comunes de experiencia de usuario (UX) que la mayoría de los bancos utilizarán. Estos elementos incluyen:

* Listas de billeteras confiables (trusted wallets)
* Listas de transferencias
* Actualización de los datos de la billetera del usuario

Una relación de confianza se establece entre la billetera de un usuario y un firmante (signer) de otro usuario. Esta relación es unidireccional y **no aplica para transferencias de tipo REQUEST**.

Cuando existe una relación de confianza, la transferencia se ejecuta automáticamente **sin necesidad de que sea aceptada**.

📌 **Nota:** Quien acepta o crea una relación de confianza es siempre el **usuario receptor**.

```mermaid theme={null}
sequenceDiagram
    autonumber
    participant UO as Usuario Final (Origen)
    participant EO as Entidad Originadora
    participant ACH as ACH Colombia
    participant PF as Motor Prev Fraude ACH
    participant ER as Entidad Receptora
    participant UR as Usuario Final (Receptor)

    UO ->> EO: 1. Ingresa a canal del Banco
    EO ->> UO: 2. Autentica usuario
    UO ->> EO: 3. Selecciona Transferencias Ya
    EO ->> UO: 4. Presenta opción enviar $
    UO ->> EO: 5. Ingresa datos de transferencia y envía

    EO ->> ACH: 6. Envía transferencia
    ACH ->> ACH: 7. Asigna CUS / Valida relación confianza
    ACH ->> EO: 8. Envía #CUS
    ACH ->> PF: 9. Envía trx a evaluar
    PF -->> ACH: 10. Retorna fraude sí/no

    ACH ->> EO: 11. Llamado endpoint debit
    EO ->> EO: 12. Débito core bancario
    EO -->> ACH: 13. Response debit

    ACH ->> EO: 14. Llamado endpoint transfer
    EO -->> ACH: 15. Response transfer

    ACH ->> ER: 16. Llamado endpoint credit
    ER ->> ER: 17. Crédito core bancario
    ER -->> ACH: 18. Response credit

    ACH ->> EO: 19. Llamado endpoint status
    EO -->> ACH: Response status

    ACH ->> ER: 20. Llamado endpoint status
    ER -->> ACH: Response status

    ACH ->> EO: 21. Envía estado final trx
    EO ->> UO: Confirma al usuario
    ER ->> UR: Confirma al usuario


```

## Crear un link de confianza

<Tabs>
  <Tab title="cURL Example">
    ```json theme={null}
    curl -X POST -H "x-api-key: 5b481fc2ae177010e197026ba5b51227c44243cd9a18e41be536566e" -H "Authorization: Bearer asdfwXTdDQFimVQOMdn9bOGHJh8KrqnFi34sugYqgrULRCb" -H "Content-Type: application/json" -d '{
        source: "$sourceWallet",
        target: "targetSigner",
        type: "TRUST"
    }' "https://ach-minka-stg.transferenciasinmediatas.com/v1/link/"
    ```
  </Tab>

  <Tab title="Node Example Code">
    ```json theme={null}
    const link = new TinApi.LinksApi()

    link
      .createLink({
        source: '$573010071856',
        target: 'wck4oHkeP9YUojTH1LRUf8sXRFMbCaxPDT',
        type: CreateLinkRequest.TypeEnum.TRUST,
      })
      .then((response) => console.log(response))
      .catch((error) => console.log(error))
    ```
  </Tab>

  <Tab title="C# Example Code">
    ```json theme={null}
    LinksApi linksApi = new LinksApi();
    CreateLinkRequest createLinkRequest = new CreateLinkRequest();

    createLinkRequest.Source = "$573010071856";
    createLinkRequest.Target = "wck4oHkeP9YUojTH1LRUf8sXRFMbCaxPDT";
    createLinkRequest.Type = CreateLinkRequest.TypeEnum.TRUST;

    LinkItem linkResponse = linksApi.CreateLink(createLinkRequest);
    Console.WriteLine(linkResponse);
    ```
  </Tab>

  <Tab title="Java Example Code">
    ```json theme={null}
    try {
        String source = "$573010071856";
        String target = "wck4oHkeP9YUojTH1LRUf8sXRFMbCaxPDT";
        LinkItem link = sdkApiClient.createLink(source, target,
        io.minka.api.model.CreateLinkRequest.TypeEnum.TRUST);
        System.out.println(link);
    } catch (ExceptionResponseTinApi exceptionResponseTinApi) {
        exceptionResponseTinApi.printStackTrace();
    }
    ```
  </Tab>
</Tabs>

## Eliminar un Link de Confianza

<Tabs>
  <Tab title="cURL Example">
    ```json theme={null}
    curl -X DELETE -H "x-api-key: 5b481fc2ae177010e197026ba5b51227c44243cd9a18e41be536566e" -H "Authorization: Bearer asdfwXTdDQFimVQOMdn9bOGHJh8KrqnFi34sugYqgrULRCb" -H "Content-Type: application/json" "https://ach-minka-stg.transferenciasinmediatas.com/v1/link/da7726e4-c2bd-4bc3-a8f6-cdeb0378164a"
    ```
  </Tab>

  <Tab title="Java Example Code">
    ```json theme={null}
    sdkApiClient.deleteLink("LINK_ID");
    ```
  </Tab>

  <Tab title="C# Example Code">
    ```json theme={null}
    LinkItem linkResponse = linksApi.DeleteLink("LINK_ID");
    ```
  </Tab>

  <Tab title="Node Example Code">
    ```json theme={null}
    link.deleteLink('LINK_ID')
    .then(response => console.log(response))
    .catch(error => console.log(error));
    ```
  </Tab>
</Tabs>

## Listar todos los links de confianza

<Tabs>
  <Tab title="cURL Example">
    ```json theme={null}
    curl -X GET -H "x-api-key: 5b481fc2ae177010e197026ba5b51227c44243cd9a18e41be536566e" -H "Authorization: Bearer asdfwXTdDQFimVQOMdn9bOGHJh8KrqnFi34sugYqgrULRCb" -H "Content-Type: application/json" "https://ach-minka-stg.transferenciasinmediatas.com/v1/link?target=targetSigner&type=TRUST"
    ```
  </Tab>

  <Tab title="Java Example Code">
    ```json theme={null}
    String target = "targetSigner";
    ListLinks links = sdkApiClient.getLinks(null,  target, "TRUST");
    System.out.println(links);
    ```
  </Tab>

  <Tab title="C# Example Code">
    ```json theme={null}
    string target = "targetSigner";
    string API_KEY = "5b481fc2ae177010e197026b39c58cdb000f4c3897e841714e82c84c";
    instance.Configuration.AddApiKey("x-api-key", API_KEY);
    var response = instance.GetLink(null, target, "TRUST");
    Console.WriteLine(response);
    ```
  </Tab>

  <Tab title="Node Example Code">
    ```json theme={null}
    var Tinapi = require('tinapi_');
    var defaultClient = Tinapi.ApiClient.instance;
    // Configure API key authorization: ApiKeyAuth
    var ApiKeyAuth = defaultClient.authentications['ApiKeyAuth'];
    ApiKeyAuth.apiKey = API_KEY;
    // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
    //ApiKeyAuth.apiKeyPrefix = 'Token';

    var apiInstance = new Tinapi.LinksApi();
    var opts = {
        'target': "targetSigner",
        'type': 'TRUST'
    };
    apiInstance.getLink(opts).then(function(data) {
        console.log('API called successfully. Returned data: ' + data);
        console.log(JSON.stringify(data));

    }, function(error) {
        console.error(error);
    });
    ```
  </Tab>
</Tabs>
