## Statuses & Errors

### Settlement Statuses

| Status | Description |
|  --- | --- |
| **S100_SCHEDULED** | Settlement scheduled for future execution |
| **S200_RECEIVED** | Settlement received and validated, ready for processing |
| **S300_IN_PROGRESS** | Settlement actively being processed |
| **S400_FIAT_WITHDRAWAL_IN_PROGRESS** | Final fiat currency withdrawal in progress |
| **S500_TERMINATED** | Settlement cancelled or terminated |
| **S600_COMPLETED** | Settlement successfully completed |
| **S700_FAILED** | Settlement failed during processing |


### Payout Statuses

| Status Code | Status Name | Description | Workflow Stage |
|  --- | --- | --- | --- |
| **RCVD** | Received | Payout request has been received by the system | Initial |
| **ACCP** | Accepted | Payout has been accepted and validated | Post-validation |
| **TSFS** | Payout Screening Failed - Sender | Payout screening failed for the sender | Screening/Compliance |
| **TSFR** | Payout Screening Failed - Beneficiary | Payout screening failed for the beneficiary | Screening/Compliance |
| **PNDG** | Pending | Payout is pending processing at destination member | Processing |
| **PRCD** | Processed | Payout successfully processed and completed | Final Success |
| **RJCT** | Rejected | Payout was rejected | Terminal Failure |
| **CNCL** | Cancelled | Payout was cancelled | Cancellation |
| **EXRE** | Expired | Payout has expired | Expiration |
| **FAIL** | Failed | Payout failed due to technical/system errors | Technical Failure |
| **RVSD** | Reversed | Payout has been reversed | Reversal |


### Common Payout Workflows

| Workflow Type | Status Progression | Description |
|  --- | --- | --- |
| **Happy Path** | `RCVD → ACCP → PNDG → PRCD` | Successful payout from initiation to completion |
| **Sender Screening Failure** | `RCVD → TSFS` | Sender fails AML/KYC screening |
| **Beneficiary Screening Failure** | `RCVD → TSFR` | Beneficiary fails AML/KYC screening |
| **Business Rejection** | `RCVD → ACCP → PNDG → RJCT` | Rejected due to invalid details or business rules |
| **Rate Expiration** | `RCVD → ACCP → EXRE` | Exchange rate expired before processing |
| **User Cancellation** | `RCVD → ACCP → PNDG → CNCL` | User cancels the payout |
| **Post-Processing Reversal** | `RCVD → ACCP → PNDG → PRCD → RVSD` | Completed payout is later reversed |
| **Technical Failure** | `RCVD → ACCP → PNDG → FAIL` | System or technical error during processing |


### Almond Error Codes

| Error Code | HTTP Status | Error Message | Category |
|  --- | --- | --- | --- |
| **ALMOND-0000** | 500 | Server Error | System |
| **ALMOND-0001** | 400 | Bad Request | Validation |
| **ALMOND-0002** | 400 | Invalid 'filedName' field. | Validation |
| **ALMOND-0003** | 401 | Unauthorized | Authentication |
| **ALMOND-0004** | 403 | Forbidden | Authorization |
| **ALMOND-0005** | 503 | Encountered an error at the destination member API. | Integration |
| **ALMOND-0006** | 503 | Encountered an error at the provider API. | Integration |
| **ALMOND-0007** | 503 | Unable to establish a connection with the target Member or any other third-party API. | Integration |
| **ALMOND-0008** | 503 | Destination Member does not support specified 'payoutAmtCcy'. | Currency |
| **ALMOND-0009** | 503 | This payment corridor is unavailable temporarily. | Corridor |
| **ALMOND-0010** | 400 | Beneficiary account does not exist. | Beneficiary |
| **ALMOND-0011** | 400 | Beneficiary is unable to accept funds. | Beneficiary |
| **ALMOND-0012** | 410 | Exchange rate has expired. Please initiate a new payout. | Exchange Rate |
| **ALMOND-0013** | 451 | Got screening hit. | Compliance |
| **ALMOND-0014** | 400 | The payout is rejected. | Transaction |
| **ALMOND-0015** | 400 | Destination Member could not resolve the beneficiary account. | Beneficiary |
| **ALMOND-0016** | 400 | Destination Member could not resolve the sender or beneficiary name. | Validation |
| **ALMOND-0017** | 400 | Destination member did not process the request successfully. | Integration |
| **ALMOND-0018** | 429 | Too many requests sent. | Rate Limiting |
| **ALMOND-0019** | 400 | Invalid payout method provided. | Validation |
| **ALMOND-0020** | 400 | Operation Not Supported | Operation |
| **ALMOND-0021** | 400 | Exchange rate request rejected. | Exchange Rate |
| **ALMOND-0022** | 400 | Invalid Member id is provided in request. | Validation |
| **ALMOND-0023** | 400 | Source Member does not support specified 'sendingAmtCcy'. | Currency |
| **ALMOND-0024** | 503 | Prefund account has insufficient balance. | Balance |
| **ALMOND-0025** | 400 | Fees not found. | Fees |
| **ALMOND-0026** | 400 | Already FLAT fee configured. | Fees |
| **ALMOND-0027** | 400 | Already SLAB fee configured. | Fees |
| **ALMOND-0028** | 400 | Mandatory field missing. | Validation |
| **ALMOND-0029** | 400 | Invalid field. | Validation |
| **ALMOND-0030** | 400 | RateId provided in request is expired, please fetch fresh exchange rate. | Exchange Rate |
| **ALMOND-0031** | 400 | Invalid rateId is provided in request. | Exchange Rate |
| **ALMOND-0032** | 400 | Invalid transapayoutction amt provided in request. | Validation |
| **ALMOND-0033** | 400 | Only one amt should be provided in request param | Validation |
| **ALMOND-0034** | 500 | Destination Member system error. | Integration |
| **ALMOND-0035** | 500 | Destination Member unknown system error. | Integration |
| **ALMOND-0036** | 400 | Invalid PIX Key provided. | Validation |
| **ALMOND-0036** | 400 | Member Id already exists. | Validation |
| **ALMOND-0037** | 400 | Invalid purpose provided. | Validation |


**Error Response Example**:


```json
{
  "code": "ALMOND-0031",
  "message": "Invalid rateId is provided in request.",
  "detail": "Invalid rateId is provided in request."
}
```