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

# Transfer

> This API endpoint enables you to create new transfers. By submitting a POST request with the necessary transfer details, you can initiate the transfer process. To ensure idempotency and prevent duplicate transfers, we guarantee that one transfer with the given transactionKey is stored.


## Workflow and API Interactions

1. **Trade Execution or investment**: A trade is executed on your platform, a third-party marketplace or crowdinvestment platform. Your system captures the trade details, including the sender (seller), recipient (buyer), quantity of tokens, and price.
2. **Submit Transfer Request**: Your system sends a POST request to [/omni-omni/v1/transfers](ownership-transfers) to initiate the ownership transfer on ecrop's register.
3. **Proof of Action (PoA) and Transfer Authorization**: Both the sender (seller) and recipient (buyer) must provide PoA for the transfer. The authorization process is done either via [OmniPersona](/omni-persona/purpose-and-value) notifications or direct API calls with [PoA](poa-mechanism) headers. The latter has to be sent to this endpoint via [PATCH](patch-transfer).
4. Transfer Finalization and Client Notification: After successful PoA from both parties, ecrop finalizes the transfer, updates the token ownership on the register, and sends a notification to the provided `clientWebhook` URL (if supplied).

## KYC/AML Requirements

Before submitting a transfer request for a secondary market trade, ensure that both the sender (seller) and the recipient (buyer) are KYC/AML approved by ecrop. This is essential for regulatory compliance and helps prevent illicit activities on the platform.

* **Existing KYC/AML**: If both parties are already registered and KYC/AML approved in the ecrop system (e.g., through previous investments or through your own KYC/AML integration with ecrop), you can proceed with the transfer request.
* **New Parties**: If either the sender or recipient is a new party, you must first onboard them and complete the KYC/AML process as described in [Party Management](party-management).


## OpenAPI

````yaml POST /omni-omni/v1/transfers
openapi: 3.0.1
info:
  contact:
    email: developers@ecrop.com
    name: ecrop OmniOmni API Support
    url: https://ecrop.de/contact/
  description: >
    # Preparation Guide

    Welcome to the comprehensive API Documentation. This document provides a
    detailed list of available APIs and methods. Before beginning your
    integration, it’s recommended to review the following essential documents:


    - **API Service Guide (Essential, Pro):** Designed for non-technical users,
    this guide helps in selecting the best API package based on business needs.
    Review it
    [here](https://youki.atlassian.net/wiki/spaces/mar/pages/534183949/API+Service+Guide).


    - **Integration Handbook:** Targeted at developers, this handbook includes
    crucial details such as endpoint URLs, authentication methods,
    request/response formats, and error handling. It is essential for successful
    integration. Access the handbooks here:

      - [🌳 Pro Package Integration Handbook]

      - [🌱 Essential Package Integration Handbook]

    Familiarizing yourself with these documents will ensure a smoother
    integration process.
  license:
    name: ecrop OmniOmni
    url: https://developers.ecrop.de/api-license/
  termsOfService: https://developers.ecrop.de/terms-of-use/
  title: OmniOmni API Catalogue
  version: 1.0.0
  x-logo:
    backgroundColor: '#DDDDDD'
    url: >-
      https://static.wixstatic.com/media/fd3e8b_a57864adb1084dea94c9fab462a8f52c~mv2.png/v1/crop/x_0,y_131,w_1253,h_295/fill/w_233,h_55,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/fd3e8b_a57864adb1084dea94c9fab462a8f52c~mv2.png
servers:
  - description: Default
    url: https://backend.sandbox.ecrop.de/ecrop-command
security:
  - Bearer Authentication: []
tags:
  - name: Auth
    description: Endpoints for OmniOmni security
  - name: Offers
    description: >
      Opportunities establishment to transfer securities between parties,
      including User interactions expressing interest in an offer
  - name: Assets
    description: >-
      Financial or non-financial instruments that can be transferred between two
      parties
  - name: Investments
    description: Asset displacement among 2 parties under offer conditions
  - name: Transfers
    description: Asset displacement among 2 parties
  - name: Documents
    description: Any document that is generated for any user action
  - name: Parties
    description: >
      A representative of individuals or any registered company, organization,
      etc...
paths:
  /omni-omni/v1/transfers:
    post:
      tags:
        - Transfers
      summary: 🌱 Initiate a new transfer
      description: >
        This API endpoint enables you to create new transfers. By submitting a
        POST request with the necessary transfer details, you can initiate the
        transfer process. To ensure idempotency and prevent duplicate transfers,
        we guarantee that one transfer with the given transactionKey is stored.
      operationId: createTransfer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OmniOmniTransferDto'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmniOmniTransferDto'
          description: Transfer saved successfully
        '409':
          description: Inconsistent state
components:
  schemas:
    OmniOmniTransferDto:
      type: object
      properties:
        amount:
          type: number
        assetName:
          type: string
        bankType:
          type: string
          enum:
            - PRIVATE_BANK
            - CROSS_BORDER
            - STATE_BANK
        clientWebhook:
          type: string
        currency:
          type: string
        errorMessage:
          type: string
          readOnly: true
        idInClient:
          type: string
          pattern: '[\w-]+'
        paymentType:
          type: string
          enum:
            - CASH
            - CRYPTO_CURRENCY
            - CHECKS
            - DIGITAL_WALLETS
            - CREDIT_DEBIT_CARD
            - LETTER_OF_CREDIT
            - WIRED_TRANSFER
            - ELECTRONIC_FUNC_TRANSFER
        quantity:
          type: number
        recipientPartyEmail:
          type: string
        recipientPayoutIdentifier:
          type: string
        senderPartyEmail:
          type: string
        senderPayoutIdentifier:
          type: string
        state:
          type: string
          enum:
            - WAITING_FOR_SIGNATURES
            - PROCESSING
            - FAILED
            - DONE
          readOnly: true
        transferDateTime:
          type: string
          format: date-time
        transferDocument:
          $ref: '#/components/schemas/OmniOmniFileDto'
        webhookResult:
          type: string
          readOnly: true
      required:
        - idInClient
    OmniOmniFileDto:
      type: object
      properties:
        content:
          type: string
          writeOnly: true
        description:
          type: string
        fileExtension:
          type: string
          writeOnly: true
        fileType:
          type: string
          enum:
            - PICTURE
            - DOCUMENT
            - VIDEO
            - TEMPLATE
        id:
          type: integer
          format: int64
          readOnly: true
        title:
          type: string
        url:
          type: string
          readOnly: true
      required:
        - description
        - fileExtension
        - fileType
        - title
  securitySchemes:
    Bearer Authentication:
      bearerFormat: JWT
      scheme: bearer
      type: http

````