Documentation index: [llms.txt](https://istruzionemessina.it/docs/llms.txt). Markdown versions available by appending `.md`.

# Istruzione Messina public API

The API returns a date-based angel-number calculation as JSON. It is free and requires no account or API key. Contract details are in the [OpenAPI document](https://istruzionemessina.it/docs/openapi.json).

## Date-based angel number

`POST https://istruzionemessina.it/api/public/v1/angel-number.php`

Send `Content-Type: application/json` with one field, `date`, in `YYYY-MM-DD` format. The synthetic fixture `1990-06-15` is suitable for documentation or a dry run. Dates must be valid and from 1900 through the current UTC date. The response contains `version: "1"`, `method: "digit-root-date-v1"`, an integer `number` from 1 through 9, and a source URL. This is a digit-root result, not a personalized reading. Unknown body fields and URL query parameters are rejected.

```sh
curl -A 'OpenAI File Downloader, XaiImageApiFetch/1.0' \
  -H 'Content-Type: application/json' \
  --data '{"date":"1990-06-15"}' \
  https://istruzionemessina.it/api/public/v1/angel-number.php
```

## Request and response rules

- Use HTTPS and send only the fields needed for the calculation. The JSON body is limited to 2,048 bytes; compressed request bodies are not accepted.
- Dates must be real calendar dates. Successful responses have `version: "1"`; error responses contain an `error` object with a stable `code` and displayable `message`.
- URLs over 1,024 characters are rejected. The OpenAPI document describes the response schema.
- This is a free public tool with no availability or throughput guarantee. A method identifier and API version are part of the result; availability and returned content can change.

## Rate limits and errors

This site has its own limiter. Per verified client connection group (one IPv4 address or one IPv6 `/64`), the limit is a burst of 10 requests, refilling at one request every 2 seconds. The service limit is a burst of 20, refilling at 10 requests per second. The service allows at most 8 in-flight requests and remembers up to 2,048 client entries. Its file-backed limiter is shared by PHP workers; client entries expire and concurrency leases expire after 5 seconds. IPv6 clients are grouped by `/64`. These limits are not throughput entitlements.

| Status | Meaning |
| --- | --- |
| 400 | Invalid JSON, date, or unsupported parameter |
| 405 | Wrong method; check `Allow` |
| 408 | Request body timed out |
| 413 | Body exceeds 2,048 bytes |
| 414 | URL exceeds 1,024 characters |
| 415 | Unsupported content type or content encoding |
| 429 | Client or origin rate limit reached |
| 503 | Service busy or client connection could not be verified |
| 500 | Unexpected server error |

`429` and `503` may include `Retry-After`. Honor it, use a bounded retry with backoff, and do not rotate networks, proxies, or accounts to evade a limit. Do not retry validation errors automatically.

## Privacy

Send no names, email addresses, account identifiers, or extra fields. POST date bodies are processed transiently and are not logged by the endpoint. Avoid putting a real birth date in a URL, shell history, logs, tickets, analytics, or examples. For a personal date, use a local CLI with JSON from standard input where available. Rate limiting uses a trusted socket/proxy-derived client address, not a caller-controlled forwarding header.

The endpoint performs the existing date calculation; it does not call AI services or access an application database, account, purchase, premium reading, or PDF. Do not repeat a personal date in an assistant response unless necessary.
