Wallet & Withdrawal

GET /wallet

Mendapatkan informasi wallet pengguna

Headers
Authorization: Bearer {token}
Response
{
    "success": true,
    "data": {
        "balance": 1000000.00,
        "transactions": [
            {
                "id": 1,
                "type": "credit",
                "amount": 500000.00,
                "description": "Pembayaran booking #TRX-001",
                "status": "success",
                "created_at": "2024-05-03T10:00:00.000000Z",
                "booking": {
                    "id": 1,
                    "transaction_code": "TRX-001",
                    "service_type": "jahit",
                    "category": "baju"
                }
            }
        ]
    },
    "message": "Wallet information retrieved successfully"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized access"
    },
    "message": "Error."
}
GET /bank-accounts

Mendapatkan daftar akun bank pengguna

Headers
Authorization: Bearer {token}
Response
{
    "success": true,
    "data": [
        {
            "id": 1,
            "bank_name": "BCA",
            "account_number": "1234567890",
            "account_holder_name": "John Doe",
            "status": "active",
            "verified_at": "2024-05-03T10:00:00.000000Z",
            "created_at": "2024-05-03T10:00:00.000000Z",
            "updated_at": "2024-05-03T10:00:00.000000Z"
        },
        {
            "id": 2,
            "bank_name": "Mandiri",
            "account_number": "0987654321",
            "account_holder_name": "John Doe",
            "status": "pending",
            "verified_at": null,
            "created_at": "2024-05-03T11:00:00.000000Z",
            "updated_at": "2024-05-03T11:00:00.000000Z"
        }
    ],
    "message": "Bank accounts retrieved successfully"
}
Status Akun Bank
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized access"
    },
    "message": "Error."
}
POST /bank-accounts

Mendaftarkan akun bank baru

Headers
Authorization: Bearer {token}
Content-Type: application/json
Request Body
{
    "bank_name": "BCA",
    "account_number": "1234567890",
    "account_holder_name": "John Doe"
}
Validasi
Response
{
    "success": true,
    "data": {
        "id": 1,
        "bank_name": "BCA",
        "account_number": "1234567890",
        "account_holder_name": "John Doe",
        "status": "pending",
        "created_at": "2024-05-03T10:00:00.000000Z"
    },
    "message": "Bank account registered successfully"
}
Error Response
{
    "success": false,
    "data": {
        "bank_name": ["The bank name field is required."],
        "account_number": ["The account number field is required."],
        "account_holder_name": ["The account holder name field is required."]
    },
    "message": "Validation Error."
}
POST /withdrawals

Meminta penarikan dana

Headers
Authorization: Bearer {token}
Content-Type: application/json
Request Body
{
    "bank_account_id": 1,
    "amount": 500000
}
Validasi
Response
{
    "success": true,
    "data": {
        "id": 1,
        "wallet_id": 1,
        "bank_account_id": 1,
        "amount": 500000.00,
        "status": "pending",
        "created_at": "2024-05-03T10:00:00.000000Z",
        "updated_at": "2024-05-03T10:00:00.000000Z"
    },
    "message": "Withdrawal request submitted successfully"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Insufficient balance."
    },
    "message": "Insufficient balance."
}
{
    "success": false,
    "data": {
        "error": "Invalid bank account."
    },
    "message": "Invalid bank account."
}
GET /withdrawals

Mendapatkan riwayat penarikan dana

Headers
Authorization: Bearer {token}
Response
{
    "success": true,
    "data": [
        {
            "id": 1,
            "wallet_id": 1,
            "bank_account_id": 1,
            "amount": 500000.00,
            "status": "completed",
            "rejection_reason": null,
            "proof_of_payment": "proof_1.jpg",
            "processed_at": "2024-05-03T11:00:00.000000Z",
            "created_at": "2024-05-03T10:00:00.000000Z",
            "updated_at": "2024-05-03T11:00:00.000000Z",
            "bank_account": {
                "id": 1,
                "bank_name": "BCA",
                "account_number": "1234567890",
                "account_holder_name": "John Doe",
                "status": "active"
            }
        },
        {
            "id": 2,
            "wallet_id": 1,
            "bank_account_id": 1,
            "amount": 300000.00,
            "status": "pending",
            "rejection_reason": null,
            "proof_of_payment": null,
            "processed_at": null,
            "created_at": "2024-05-04T10:00:00.000000Z",
            "updated_at": "2024-05-04T10:00:00.000000Z",
            "bank_account": {
                "id": 1,
                "bank_name": "BCA",
                "account_number": "1234567890",
                "account_holder_name": "John Doe",
                "status": "active"
            }
        }
    ],
    "message": "Withdrawal history retrieved successfully"
}
Status Penarikan

Admin Endpoints

GET /admin/withdrawals/pending

Mendapatkan daftar permintaan penarikan yang pending

Headers
Authorization: Bearer {token}
Response
{
    "success": true,
    "data": [
        {
            "id": 1,
            "wallet_id": 1,
            "bank_account_id": 1,
            "amount": 500000.00,
            "status": "pending",
            "rejection_reason": null,
            "proof_of_payment": null,
            "processed_at": null,
            "created_at": "2024-05-03T10:00:00.000000Z",
            "updated_at": "2024-05-03T10:00:00.000000Z",
            "wallet": {
                "id": 1,
                "user_id": 2,
                "balance": 1000000.00,
                "user": {
                    "id": 2,
                    "name": "John Doe",
                    "email": "john@example.com",
                    "role": "penjahit"
                }
            },
            "bank_account": {
                "id": 1,
                "bank_name": "BCA",
                "account_number": "1234567890",
                "account_holder_name": "John Doe",
                "status": "active"
            }
        }
    ],
    "message": "Pending withdrawals retrieved successfully"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Unauthorized access"
    },
    "message": "Error."
}
POST /admin/withdrawals/{withdrawal}/process

Memproses permintaan penarikan

Headers
Authorization: Bearer {token}
Content-Type: multipart/form-data
Path Parameters
Request Body
{
    "status": "processing", // atau "rejected"
    "rejection_reason": "", // wajib diisi jika status = "rejected"
    "proof_of_payment": [file] // wajib diupload jika status = "processing"
}
Validasi
Response
{
    "success": true,
    "data": {
        "id": 1,
        "wallet_id": 1,
        "bank_account_id": 1,
        "amount": 500000.00,
        "status": "processing",
        "rejection_reason": null,
        "proof_of_payment": "proofs/withdrawal_1_proof.jpg",
        "processed_at": "2024-05-03T10:30:00.000000Z",
        "created_at": "2024-05-03T10:00:00.000000Z",
        "updated_at": "2024-05-03T10:30:00.000000Z"
    },
    "message": "Withdrawal processed successfully"
}
Error Response
{
    "success": false,
    "data": {
        "status": ["The status field is required."],
        "rejection_reason": ["The rejection reason field is required when status is rejected."],
        "proof_of_payment": ["The proof of payment field is required when status is processing."]
    },
    "message": "Validation Error."
}
POST /admin/withdrawals/{withdrawal}/complete

Menyelesaikan proses penarikan

Headers
Authorization: Bearer {token}
Content-Type: application/json
Path Parameters
Response
{
    "success": true,
    "data": {
        "id": 1,
        "wallet_id": 1,
        "bank_account_id": 1,
        "amount": 500000.00,
        "status": "completed",
        "rejection_reason": null,
        "proof_of_payment": "proofs/withdrawal_1_proof.jpg",
        "processed_at": "2024-05-03T10:30:00.000000Z",
        "created_at": "2024-05-03T10:00:00.000000Z",
        "updated_at": "2024-05-03T11:00:00.000000Z"
    },
    "message": "Withdrawal completed successfully"
}
Error Response
{
    "success": false,
    "data": {
        "error": "Invalid status."
    },
    "message": "Invalid status."
}
POST /admin/bank-accounts/{bankAccount}/verify

Memverifikasi akun bank

Headers
Authorization: Bearer {token}
Content-Type: application/json
Path Parameters
Request Body
{
    "status": "active", // atau "rejected"
    "rejection_reason": null // wajib diisi jika status = "rejected"
}
Validasi
Response
{
    "success": true,
    "data": {
        "id": 1,
        "user_id": 2,
        "bank_name": "BCA",
        "account_number": "1234567890",
        "account_holder_name": "John Doe",
        "status": "active",
        "rejection_reason": null,
        "verified_at": "2024-05-03T10:00:00.000000Z",
        "created_at": "2024-05-02T10:00:00.000000Z",
        "updated_at": "2024-05-03T10:00:00.000000Z"
    },
    "message": "Bank account verification completed"
}
Error Response
{
    "success": false,
    "data": {
        "status": ["The status field must be one of: active, rejected."],
        "rejection_reason": ["The rejection reason field is required when status is rejected."]
    },
    "message": "Validation Error."
}