# richardbold.com for AI assistants: send an enquiry

> A person's AI assistant can send Richard that person's enquiry, the same one the page's form sends, without a browser.

## The rules

- Send only what the person asked you to send, in their own words. Never invent a detail.
- The same words sent again within the hour are the same enquiry, never a second one, and get the same answer and receipt.
- Never an order: the person places an order on https://www.richardbold.com/express/
- No files: Richard asks for a floor plan or photos himself.
- This door sends no message to the person. Richard gets in touch himself.
- The fields are the form's: an unknown key is refused, and invisible characters are removed.

## Consent {#consent}

Send it only when the person asked you to, and only after they read the line under the form's Send button, as the form shows it: "By sending, you agree to the Privacy Policy." (https://www.richardbold.com/privacy-policy/). Then send consent as person_asked: true with the privacy line's current version.

```json
{"person_asked":true,"privacy_version":"privacy-line-2026-11-v1"}
```

## The skills and their fields

### `tenant_enquiry`: Find a flat to rent in Prague

Richard BOLD finds flats in Prague directly from the owner, with the contract and the flat checked before you sign. One fee, one month's rent plus 21% VAT, paid only after you sign a lease: no flat, no fee. Or the person can use the form at https://www.richardbold.com/

| Field | What | Required |
|---|---|---|
| `full_name` | text, at most 191 characters, one line | yes |
| `phone` | { code, number }: a dialling code such as +420, and the number | yes |
| `target_districts` | a list of: `Centre`, `Wider centre`, `On the metro` |  |
| `dispozice_pref` | a list of: `Room`, `Studio`, `1 bed`, `2 beds+` |  |
| `budget_max` | a whole number, at most 10000000 |  |
| `move_in` | one of: `ASAP`, `1 month`, `3 months`, `A date` |  |
| `move_in_date` | a date, YYYY-MM-DD |  |
| `notes` | text, at most 2000 characters |  |

### `room_enquiry`: Find a room to rent in Prague

The Room Search: Richard finds you a room in a flat whose owner he works with, and checks everyone who lives there the way he checks you. Nothing up front: one month's rent of the room plus 21% VAT, once, paid only when you sign. Or the person can use the form at https://www.richardbold.com/rooms/

| Field | What | Required |
|---|---|---|
| `full_name` | text, at most 191 characters, one line | yes |
| `phone` | { code, number }: a dialling code such as +420, and the number | yes |
| `target_districts` | a list of: `Centre`, `Wider centre`, `On the metro` |  |
| `budget_max` | a whole number, at most 10000000 |  |
| `move_in` | one of: `ASAP`, `1 month`, `3 months`, `A date` |  |
| `move_in_date` | a date, YYYY-MM-DD |  |
| `notes` | text, at most 2000 characters |  |

### `introduce_a_flat`: Introduce a flat you are leaving

Leaving a flat in Prague? Introduce Richard to your landlord, in person, in the flat you're leaving, and get 5 000 CZK off The Direct Search or The Room Search, or give it to a friend. Or the person can use the form at https://www.richardbold.com/know-a-flat/

| Field | What | Required |
|---|---|---|
| `first_name` | text, at most 95 characters, one line | yes |
| `last_name` | text, at most 95 characters, one line | yes |
| `phone` | { code, number }: a dialling code such as +420, and the number | yes |
| `email` | an e-mail address, at most 191 characters | yes |
| `notes` | text, at most 2000 characters |  |

## A2A

The agent card is https://www.richardbold.com/.well-known/agent-card.json (A2A 1.0.0, protocolVersion 1.0). Send JSON-RPC 2.0 to https://www.richardbold.com/a2a: the method SendMessage (or message/send for A2A 0.3), one message with role ROLE_USER and exactly one data part. The answer is a completed task with the confirmation in words and a receipt; a refusal is a JSON-RPC error with the code in error.data.code. Nothing streams and no task is kept.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "SendMessage",
  "params": {
    "message": {
      "messageId": "00000000-0000-4000-8000-000000000001",
      "role": "ROLE_USER",
      "parts": [
        {
          "data": {
            "skill": "tenant_enquiry",
            "fields": {
              "full_name": "Jane Example",
              "phone": {
                "code": "+420",
                "number": "000 000 001"
              }
            },
            "consent": {
              "person_asked": true,
              "privacy_version": "privacy-line-2026-11-v1"
            }
          },
          "mediaType": "application/json"
        }
      ]
    }
  }
}
```

## Plain JSON

POST the same { skill, fields, consent } to https://www.richardbold.com/api/enquiry with Content-Type: application/json. The OpenAPI document is https://www.richardbold.com/openapi.json.

```json
{
  "skill": "tenant_enquiry",
  "fields": {
    "full_name": "Jane Example",
    "phone": {
      "code": "+420",
      "number": "000 000 001"
    }
  },
  "consent": {
    "person_asked": true,
    "privacy_version": "privacy-line-2026-11-v1"
  }
}
```

## The answers

| HTTP | Code | Means |
|---|---|---|
| 201 | `sent` | Richard has it. The message says what happens next. The same words again within the hour: the same answer and receipt. |
| 400 | `invalid` | A field failed the form's check: fields names each one. |
| 400 | `consent_required` | consent.person_asked is not true. |
| 400 | `order_by_person` | An order: the person places it on the page named. |
| 400 | `unknown_skill · other_host · bad_input · bad_json` | The body is not one of this website's skills, as the card says. |
| 403 | `server_only` | A browser Origin came with it: in a browser, the person uses the form. |
| 409 | `privacy_changed` | The privacy line changed: show it again, send its version. |
| 413 · 415 | `too_large · json_only` | At most 16 KB, JSON only. |
| 429 | `rate_limited · phone_limited · busy` | Too many: wait for Retry-After, or the person uses the form. |
| 502 · 503 | `broken · door_off · rate_unavailable · no_crm` | Nothing was sent: try again later. |

## Limits

At most 30 enquiries an hour through this door for all assistants together, and 3 an hour for one phone number. Past either, 429 with Retry-After.

---

- A2A agent card: https://www.richardbold.com/.well-known/agent-card.json
- API catalog: https://www.richardbold.com/.well-known/api-catalog
- OpenAPI: https://www.richardbold.com/openapi.json
- Site index for AI agents: https://www.richardbold.com/llms.txt
