# Quickstart Guide

Realpad offers a REST-like API that allows third-party integrators to interact with real estate project data. You can fetch pricelist information, submit and verify leads, export data as Excel files, and sync incoming payments from accounting software.

This guide walks you through the basics: how the API is structured, how to authenticate, and how to make your first API call.

***

## API Overview

The API is organized into three areas, each serving a different integration use case:

| Area             | What it does                                                         | Key endpoints                                                                                      |
| ---------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| **Landing Page** | Fetch pricelist data for project websites; submit and verify leads   | `get-projects-info`, `get-project`, `create-lead`, `list-leads`                                    |
| **Data Takeout** | Export data as Excel files (projects, units, customers, deals, etc.) | `list-excel-projects`, `list-excel-products`, `list-excel-customers`, `list-excel-deals`, and more |
| **Payments**     | Sync incoming payments from accounting software                      | `add-incoming-payment`                                                                             |

### What the API can do

* Read project data: units, pricelists, floor plans, availability
* Modify prices and unit availability to a certain extent
* Submit new leads (inquiries) from your website or landing page
* Verify that submitted leads arrived using `list-leads`
* Export wide data sets as Excel files for BI tools or backups
* Push incoming payment records from accounting software

### What the API cannot do

* Create or update deals, customers, or other CRM entities directly
* Manage user accounts or permissions

> If your use case is not yet covered, reach out to <support@realpadsoftware.com>. We are actively expanding API capabilities — see [our roadmap](https://product.realpadsoftware.com/en#new-rest-apis) for what's coming next.

***

## Authentication

### Credentials

Every API request requires two form parameters for authentication:

* `login` — your integration account username
* `password` — your integration account password

These are sent as part of the request body (form-encoded), not as HTTP headers.

### How to get credentials

Your Realpad project administrator (or Realpad support acting on their behalf) sends an invitation email with your credentials. If you're unsure who to contact, reach out to <support@realpadsoftware.com>.

### Credential scoping

* Credentials are scoped to **specific projects** and **specific API areas**
* The convention is **two credential pairs per project**: one for pricelist endpoints, one for lead submission
* A single set of credentials cannot access endpoints outside its assigned area

For details on banning, rate limiting, and error responses, see the [Authentication & Error Handling](/integrations/introduction/authentication-and-error-handling.md) reference.

***

## Making Your First API Call

### Base URL

All API endpoints are available at:

```
https://cms.realpad.eu/ws/v10/{endpoint-name}
```

### Request format

* **HTTP method:** POST
* **Content-Type:** `application/x-www-form-urlencoded`
* Credentials and all parameters are sent as form-encoded body parameters

{% hint style="warning" %}
The Content-Type **must** be `application/x-www-form-urlencoded` (or `multipart/form-data` where applicable). Sending `application/json` will result in a **415** error.
{% endhint %}

{% stepper %}
{% step %}

### Example 1: Get project information

The simplest endpoint to start with is `get-projects-info`. It returns a list of projects your credentials have access to.

```bash
curl -X POST https://cms.realpad.eu/ws/v10/get-projects-info \
  --data "login=your-login&password=your-password"
```

**Expected response** (HTTP 200, JSON):

```json
{
  "developer-id": 123,
  "projects": [
    {
      "project-id": 456,
      "project-name": "Riverside Residences",
      "screens": [ ... ]
    }
  ]
}
```

What to look for:

* `developer-id` — your tenant identifier, present in all subsequent calls
* `projects` — the list of projects your credentials can access
* `project-id` — you'll need this for calls like `get-project`
  {% endstep %}

{% step %}

### Example 2: Submit a lead

Once you know your `project-id`, you can submit a lead using `create-lead`:

```bash
curl -X POST https://cms.realpad.eu/ws/v10/create-lead \
  --data "login=your-login&password=your-password" \
  --data "project-id=456" \
  --data "first-name=Jane" \
  --data "last-name=Smith" \
  --data "email=jane.smith@example.com" \
  --data "phone=%2B420123456789"
```

**Response:**

* **201 Created** — a new lead was created
* **200 OK** — a lead with matching contact details already existed (no duplicate created)

Both responses return lead details. If you include the `Accept: application/json` header, the response will be JSON; otherwise it defaults to XML.
{% endstep %}

{% step %}

### Example 3: Verify your lead arrived

Use the `list-leads` endpoint to confirm that your submitted leads were received:

```bash
curl -X POST https://cms.realpad.eu/ws/v10/list-leads \
  --data "login=your-login&password=your-password"
```

This returns leads created by your integration account within the last 7 days — no additional parameters needed. Use it to verify that `create-lead` calls are working as expected.
{% endstep %}
{% endstepper %}

***

## Common Gotchas

<details>

<summary>Content-Type must be form-encoded</summary>

The most common integration mistake is sending `application/json` as the Content-Type. The API expects `application/x-www-form-urlencoded`. Sending the wrong Content-Type results in a **415 Unsupported Media Type** error.

</details>

<details>

<summary>Banning on failed logins</summary>

The API enforces a ban mechanism after a few failed login attempts.

* The request that **triggers** the ban returns **429 Too Many Requests** with a `Retry-After` header (value in seconds)
* All **subsequent** requests while banned return **401 Unauthorized** — the ban is invisible until it expires

> If you're testing and accidentally trigger a ban, wait for the `Retry-After` duration to expire. There is no manual reset available via the API.

</details>

<details>

<summary>Rate limiting on Data Takeout endpoints</summary>

Excel export endpoints (`list-excel-*`) enforce a **5-minute cooldown** between calls per user and endpoint. Calling more frequently returns **429** with a `Retry-After` header.

</details>

<details>

<summary>Response format varies by endpoint</summary>

Not all endpoints return the same format:

| Endpoint                              | Response format                                                       |
| ------------------------------------- | --------------------------------------------------------------------- |
| `get-projects-info`, `list-leads`     | Always JSON                                                           |
| `create-lead`, `get-customer-details` | JSON if `Accept: application/json` header is sent; XML otherwise      |
| `get-project`                         | XML only                                                              |
| `list-excel-*`                        | Excel files (.xls by default; send the `xlsx` parameter to get .xlsx) |
| `add-incoming-payment`                | Plain text (payment ID)                                               |

</details>

***

## Next Steps

* [Fetching Pricelist Data](/integrations/landing-page/fetching-pricelist-data.md) — `get-projects-info` and `get-project` endpoints
* [Sending Leads](broken://pages/bRoQI20J5TCGzebj0DTi) — `create-lead`, `get-customer-details`, and `list-leads` endpoints
* [Data Takeout](/integrations/data-takeout.md) — Excel export endpoints
* [Payments](/integrations/payments.md) — `add-incoming-payment` endpoint
* [Authentication & Error Handling](/integrations/introduction/authentication-and-error-handling.md) — status codes, banning, rate limiting

**Need help?** Contact <support@realpadsoftware.com>.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev.realpadsoftware.com/integrations/introduction/quickstart-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
