---
title: "Credit Transfer Payment Initiation"
description: "Generate pain.001.* SEPA Credit Transfer files via the facade or via direct object construction."
---

# Credit Transfer Payment Initiation

> **At a glance**
>
> - **Use this when:** building a SEPA Credit Transfer (`pain.001.*`) file.
> - **Key types:** `CustomerCreditFacade`, `CustomerCreditTransferFile`, `CustomerCreditTransferInformation`.
> - **Output:** `pain.001.*` XML via `asXML()` / `asDOC()`.

> ⚠️ **Gotcha**
>
> Amounts are integer cents (`1234` = 12.34 EUR). For non-EEA creditors the full address-setter cascade must be filled or omitted entirely. See [Gotchas](../gotchas.md) for the full list.

* [Direct usage of CreditTransfer File](#direct-usage-of-credittransfer-file)
* [Sample usage of CreditTransfer File with Facade Factory](#sample-usage-of-credittransfer-file-with-facade-factory)


## Direct usage of CreditTransfer File
The following example creates a CreditTransfer file, adds a PaymentInformation Object and a single transaction to it.  
The variable names are used to describe what should be contained within them.

```php
    use Digitick\Sepa\DomBuilder\DomBuilderFactory;
    use Digitick\Sepa\GroupHeader;
    use Digitick\Sepa\TransferFile\CustomerCreditTransferFile;
    use Digitick\Sepa\PaymentInformation;
    use Digitick\Sepa\TransferInformation\CustomerCreditTransferInformation;

    $groupHeader = new GroupHeader($messageIdentification, $companyName);

    $sepaFile = new CustomerCreditTransferFile($groupHeader);
    $paymentInfo = new PaymentInformation(
        $paymentInfoId,
        $originAccIban,
        $originAccBic,
        $companyName
    );
    $paymentInfo->setCreditorId($creditorId);
    $paymentInfo->setSequenceType(PaymentInformation::S_ONEOFF);
    $paymentInfo->setOriginName($companyName);

    $transfer = new CustomerCreditTransferInformation(1234, $clientAccIban, $clientName, $endToEndId);
    $transfer->setBic($clientAccBic);
    $transfer->setCreditorReference('CdtrRefInf-Ref');
    $transfer->setCreditorReferenceType('CdtrRefInf-Tp-Issr');
    $transfer->setPurposeCode('SALA');

    $transfer->setCountry('BG');
    $transfer->setPostCode('1000');
    $transfer->setTownName('Nowhere');
    $transfer->setStreetName('Some Street');
    $transfer->setBuildingNumber(12);
    $transfer->setFloorNumber(13);

    //You can add as many transfers as you want to a single PaymentInformation object
    $paymentInfo->addTransfer($transfer);
    //You can add as many PaymentInformation objects as you want to a transfer file
    $sepaFile->addPaymentInformation($paymentInfo);

    // Write to a file:
    $domBuilder = DomBuilderFactory::createDomBuilder($sepaFile, $painFormat); //For e.g. 'pain.001.001.08'
    file_put_contents($filePath, $domBuilder->asXml());
    // ...or retrieve the \DomDocument object, modify it and do something else with it:
    $domBuilder->asDoc();
```


## Sample usage of CreditTransfer File with Facade Factory

```php
use Digitick\Sepa\TransferFile\Factory\TransferFileFacadeFactory;

// Returns a CustomerCreditFacade
$customerCredit = TransferFileFacadeFactory::createCustomerCredit('test123', 'Me');

// Add a PaymentInfo object (PmtInf), it's possible to create multiple such objects in one ISO20022 file
// "firstPayment" is the identifier for the transactions aka the PaymentInfoId (PmtInfId)
// Note that here the initiating party (your company) is the Debtor as opposed to being the Creditor when we initiate a Direct Debit
$customerCredit->addPaymentInfo('firstPayment', array(
    'id'                      => 'firstPayment',
    'debtorName'              => 'My Company',
    'debtorAccountIBAN'       => 'FI1350001540000056',
    'debtorAgentBIC'          => 'PSSTFRPPMON',
    // Add/Set batch booking option as per your requirement, optional
    'batchBooking'            => true, 
));

// Add a Single Transaction to the named PaymentInfo
$customerCredit->addTransfer('firstPayment', array(
    'amount'                  => 500, // `amount` in cents
    'creditorIban'            => 'FI1350001540000056',
    'creditorBic'             => 'OKOYFIHH',
    'creditorName'            => 'Their Company',
    'remittanceInformation'   => 'Purpose of this credit transfer'
));
// Retrieve the resulting XML
$customerCredit->asXML();
```

## Related

- [Direct Debit](direct-debit.md) — sibling flow for `pain.008.*`
- [Choosing facade vs. direct construction](choosing-facade-vs-direct.md)
- [Output and validation](output-and-validation.md)
- [Bank profiles](bank-profiles.md)
- [Reference: PaymentInformation](../reference/classes/payment-information.md)
- [Reference: CustomerCreditTransferInformation](../reference/classes/customer-credit-transfer-information.md)
- [Gotchas](../gotchas.md)

