Scheduled Transactions
List upcoming (scheduled) payments for the authenticated customer account.
Shared conventions and base URLs live in Customer API Documentation.
API hosts: Production
https://valora.spotahome.com/(sandbox compatible); Staging / testinghttps://valora-testing.laravel.cloud/(sandbox compatible).
Endpoint (production): GET https://valora.spotahome.com/api/v1/c/transactions/scheduled
Endpoint (sandbox): GET https://valora-testing.laravel.cloud/api/sandbox/v1/c/transactions/scheduled
Authentication
| Requirement | Details |
|---|---|
| Type | Bearer token (long-lived API token, auth:api guard) |
| How to obtain a token | See Long-Lived API Token Authentication |
| Header | Authorization: Bearer {token} |
| Accept | Accept: application/json |
| Token class | Customer only. Non-customer users receive HTTP 403 with message Access denied. This resource is restricted to customers. from CheckCustomerApi middleware. |
| Rate limit | 120 requests per minute per authenticated customer. |
Connection test
GET https://valora.spotahome.com/api/v1/c/transactions/scheduled?test=connection
Authorization: Bearer {token}
Accept: application/json
Response: 200 OK
{
"message": "You are connected!",
"accepted_params": {
"test": "Set to \"connection\" to test API connection",
"booking_id": "string, optional (exact booking reference)",
"status": "string, optional (upcoming|delayed|blocked|missing_iban|missing_details|has_debt|blocked_missing_details|blocked_missing_iban|blocked_account_debtor)",
"currency": "string, optional (e.g., EUR, USD)",
"due_date_from": "date (YYYY-MM-DD), optional",
"due_date_to": "date (YYYY-MM-DD), optional",
"amount_from": "decimal, optional (e.g., 100.50)",
"amount_to": "decimal, optional (e.g., 500.00)",
"search": "string, optional (booking reference, account name or IBAN)",
"page": "integer, optional (page number, default = 1)",
"per_page": "integer, optional (items per page, default = 100, max = 500)"
}
}
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
test |
string | No | Set to connection to perform a connection test. |
booking_id |
string | No | Exact booking reference. |
status |
string | No | Filter by payment status. See Payment statuses. |
currency |
string | No | Currency code (e.g. EUR, USD). |
due_date_from |
date (YYYY-MM-DD) | No | Due date from (inclusive). |
due_date_to |
date (YYYY-MM-DD) | No | Due date to (inclusive). |
amount_from |
number | No | Minimum amount in major units (e.g. 100.50). Stored internally in minor units. |
amount_to |
number | No | Maximum amount in major units. |
search |
string | No | Search in booking_id, account_name, iban. |
page |
integer | No | Page number. Default: 1. |
per_page |
integer | No | Items per page. Default: 100, max: 500. |
Success response
Status: 200 OK
{
"message": "Scheduled transactions retrieved successfully.",
"pagination": {
"total": 5,
"per_page": 100,
"current_page": 1,
"last_page": 1,
"from": 1,
"to": 5
},
"data": [
{
"booking_id": "BK123456",
"amount": 120000,
"currency": "EUR",
"iban": "ES1234567890123456789012",
"due_date": "2025-02-15",
"due_date_erp": "2025-02-15",
"status": "upcoming",
"account_name": "John Doe",
"b2b": false,
"transfer_blocked": false,
"available_bank_account": true,
"same_account": false,
"days_delayed": 0,
"has_debt": false,
"updated_at": "2025-01-15T10:30:00.000000Z"
}
]
}
Scheduled transaction object
| Field | Type | Description |
|---|---|---|
booking_id |
string | Booking reference. |
amount |
integer | Amount in minor units (cents). |
currency |
string | Currency code. |
iban |
string | Destination IBAN. |
due_date |
date | Scheduled due date. |
due_date_erp |
date | Due date as provided by the ERP. |
status |
string | Payment status. See Payment statuses. |
account_name |
string | Account holder name. |
b2b |
boolean | Whether this is a business-to-business payment. |
transfer_blocked |
boolean | Whether the transfer is currently blocked. |
available_bank_account |
boolean | Whether a valid bank account is on file. |
same_account |
boolean | Whether origin and destination are the same account. |
days_delayed |
integer | Number of days past the due date (0 when not delayed). |
has_debt |
boolean | Whether the account has an outstanding debt. |
updated_at |
string (ISO 8601) | Last update timestamp. |
No results response
Status: 404 Not Found
Example response
{
"message": "No scheduled transactions found for the given filters.",
"pagination": {
"total": 0,
"per_page": 100,
"current_page": 1,
"last_page": 1,
"from": null,
"to": null
},
"data": []
}
Response notes
pagination.totalis0when the filters match no scheduled payments.datais always an array.- Consumers can treat
404as "no matching rows" without a schema change.
Payment statuses
| Status | Description |
|---|---|
upcoming |
Scheduled and ready — no issues detected. |
delayed |
Due date has passed but no blocking issue detected. |
blocked |
Stopped by an external service. |
missing_iban |
No valid IBAN on file for this booking. |
missing_details |
One or more required details are missing. |
has_debt |
Account has an outstanding debt; payment may be held. |
blocked_missing_details |
Blocked and missing required details. |
blocked_missing_iban |
Blocked because no valid IBAN is on file. |
blocked_account_debtor |
Blocked because the account has a debt. |
Errors
| Status | Meaning |
|---|---|
404 Not Found |
No scheduled transactions matched the filters. |
{
"message": "No scheduled transactions found for the given filters.",
"data": []
}
Notes
amount_fromandamount_toaccept major units; all amounts in the response are in minor units (cents).- Results are ordered by
due_dateascending (soonest first). - Sensitive employee fields (
account_manager,comment,tenant_email,missing_details, etc.) are not included in the response.