# EFT Payments (/docs/direct-debit/eft-payments)

EFT Payments (EFT Credits) enable merchants to send outbound payments to bank accounts.

## Overview [#overview]

The EFT Credit service handles financial transactions, including:

- Salary disbursements
- Account payments
- Refunds
- Supplier payments

## Service Types [#service-types]

| Service Type | Description | Settlement |
|---|---|---|
| `SAMEDAY` | Same-day value (SDV) | Same day |
| `ONEDAY` | One business day | Next business day |
| `TWODAY` | Two business days | Two business days |

## Service Limitations [#service-limitations]

- **Maximum transaction**: R5,000,000 (5 million ZAR)
- Transactions ≥ R5m will be returned with "exceeds industry imposed limits"
- High-value transactions should use real-time line processing

## Supported Account Types [#supported-account-types]

- Current accounts
- Savings accounts
- Transmission accounts

## Create EFT Payment [#create-eft-payment]

### Endpoint [#endpoint]

```text
POST https://api.revio.co.za/v2/payment/eft
```

### Request (Same-day) [#request-same-day]

```bash
curl -X POST https://dev.api.revio.co.za/v2/payment/eft \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentDate": "2024-01-15T08:00:00.000Z",
    "profileCode": "TEST1",
    "abbreviatedName": "TESTMERCH1",
    "contractReference": "PAY001",
    "amountCents": 50000,
    "serviceType": "SAMEDAY",
    "debtor": {
      "accountNumber": "12345678",
      "branchCode": "051001",
      "accountType": "CURRENT",
      "bank": "STANDARDBANK",
      "firstName": "TEST MERCHANT 1",
      "identification": {
        "phoneNumber": "+27-615333440",
        "emailAddress": "merchant@test.com"
      }
    },
    "creditor": {
      "accountNumber": "010553922",
      "accountType": "CURRENT",
      "branchCode": "632005",
      "name": "John Smith",
      "idNumber": "0001010000006",
      "phoneNumber": "+27-123456789"
    }
  }'
```

### Request Fields [#request-fields]

| Field | Type | Required | Description |
|---|---|---|---|
| `paymentDate` | string | Yes | Date to process payment (ISO 8601) |
| `profileCode` | string | Yes | Your merchant profile code |
| `abbreviatedName` | string | Yes | Your PASA-registered name |
| `contractReference` | string | Yes | Payment reference |
| `amountCents` | integer | Yes | Payment amount in cents |
| `serviceType` | string | Yes | `SAMEDAY`, `ONEDAY`, or `TWODAY` |
| `debtor` | object | Yes | Source account (your account) |
| `creditor` | object | Yes | Destination account (recipient) |

### Debtor Object (Source Account) [#debtor-object-source-account]

| Field | Type | Required | Description |
|---|---|---|---|
| `accountNumber` | string | Yes | Your bank account number |
| `branchCode` | string | Yes | Your bank branch code |
| `accountType` | string | Yes | Account type |
| `bank` | string | Yes | Your bank name |
| `firstName` | string | Yes | Your merchant name |
| `identification.phoneNumber` | string | Yes | Your contact number |
| `identification.emailAddress` | string | Yes | Your email address |

### Creditor Object (Destination Account) [#creditor-object-destination-account]

| Field | Type | Required | Description |
|---|---|---|---|
| `accountNumber` | string | Yes | Recipient account number |
| `accountType` | string | Yes | Account type |
| `branchCode` | string | Yes | Recipient branch code |
| `name` | string | Yes | Recipient name |
| `idNumber` | string | Yes | Recipient ID number |
| `phoneNumber` | string | Yes | Recipient phone number |

### Response [#response]

```json
{
  "id": "pay-123-456-789",
  "status": "PENDING",
  "paymentDate": "2024-01-15T08:00:00.000Z",
  "amountCents": 50000,
  "serviceType": "SAMEDAY",
  "contractReference": "PAY001"
}
```

## Payment Examples [#payment-examples]

### One-day Payment [#one-day-payment]

```bash
curl -X POST https://dev.api.revio.co.za/v2/payment/eft \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentDate": "2024-01-15T08:00:00.000Z",
    "profileCode": "TEST1",
    "abbreviatedName": "TESTMERCH1",
    "contractReference": "PAY002",
    "amountCents": 100000,
    "serviceType": "ONEDAY",
    "debtor": {
      "accountNumber": "12345678",
      "branchCode": "051001",
      "accountType": "CURRENT",
      "bank": "STANDARDBANK",
      "firstName": "TEST MERCHANT 1",
      "identification": {
        "phoneNumber": "+27-615333440",
        "emailAddress": "merchant@test.com"
      }
    },
    "creditor": {
      "accountNumber": "987654321",
      "accountType": "SAVINGS",
      "branchCode": "250655",
      "name": "Jane Doe",
      "idNumber": "8501015800089",
      "phoneNumber": "+27-987654321"
    }
  }'
```

### Two-day Payment [#two-day-payment]

```json
{
  "serviceType": "TWODAY",
  ...
}
```

## Get Payment Status [#get-payment-status]

### Endpoint [#endpoint-1]

```text
GET https://api.revio.co.za/v2/payment/eft/{paymentId}/status
```

### Request [#request]

```bash
curl -X GET https://dev.api.revio.co.za/v2/payment/eft/pay-123-456-789/status \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

### Response [#response-1]

```json
{
  "id": "pay-123-456-789",
  "status": "COMPLETED"
}
```

### Payment Statuses [#payment-statuses]

| Status | Description |
|---|---|
| `PENDING` | Payment submitted, awaiting processing |
| `PROCESSING` | Payment being processed by bank |
| `COMPLETED` | Payment successful |
| `FAILED` | Payment failed |
| `CANCELLED` | Payment cancelled |

## Cut-off Times [#cut-off-times]

| Service Type | Weekday Cut-off | Weekend Cut-off |
|---|---|---|
| Same-day (SSVS) | 08:00 - 16:20 | 08:00 - 09:45 |
| Two-day | 08:00 - 14:30 (2 days before) | 08:00 - 09:00 |

<Callout type="info">
Important: Submit payments before cut-off times to ensure same-day processing. Payments submitted after cut-off will automatically be processed in the next available processing day
</Callout>

## Error Handling [#error-handling]

### Common Errors [#common-errors]

| Error | Cause | Resolution |
|---|---|---|
| `400 Bad Request` | Invalid request data | Verify all required fields |
| `exceeds industry imposed limits` | Amount ≥ R5m | Use real-time line for large transactions |
| `Invalid account` | Invalid creditor details | Verify account number and branch code |

### Failed Payments [#failed-payments]

If a payment fails, check:

1. Creditor account details are correct
2. Your account has sufficient funds
3. Payment was submitted before the cut-off

## Best Practices [#best-practices]

1. **Verify recipient details**: Confirm account numbers before processing
2. **Use appropriate service type**: Choose based on urgency and cost
3. **Submit early**: Process payments well before cut-off times
4. **Track payments**: Monitor status and handle failures promptly
5. **Keep records**: Store payment IDs and references for reconciliation

## Bulk Payments [#bulk-payments]

For processing multiple payments, submit separate requests for each. Consider implementing:

- Batching logic in your application
- Rate limiting to avoid overwhelming the API
- Error handling for partial batch failures

Contact Precium support for high-volume payment requirements.
