# TriExpert Translations API — developer documentation

<!-- https://traduccionestriexpert.com/developers/ -->

Developers

The **TriExpert Translations API** is a public, read-only HTTP API. It prices a certified translation and it checks whether a certified translation is genuine. No key, no registration, no sign-up.

## What the TriExpert Translations API is for

- **Quoting.** Work out what a certified translation costs before sending anyone to a form.
- **Verifying.** Confirm that a document carrying a TX-XXXX-XXXX code was really issued by us — useful to any agency, employer or university that receives one.
- **Reading the rate card.** Fetch the current per-page price and multipliers so you can reproduce our pricing yourself.

What it deliberately does **not** do is place orders. An order means uploading a document and taking a payment, and that needs a person: use the [request form](https://traduccionestriexpert.com/request/) or write to [support@triexpertservice.com](mailto:support@triexpertservice.com).

---

## OpenAPI specification

The full machine-readable specification, OpenAPI 3.1, is generated from the live routes and the live rates — so it cannot drift from what the API actually does:

```
https://traduccionestriexpert.com/openapi.json
```

Base URL for every endpoint below:

```
https://traduccionestriexpert.com/wp-json/triexpert/v1
```

## GET /quote — estimate a price

A page is 250 words. `processing` is `standard` (8–12 h) or `urgent` (1–2 h). `format` is `digital`, `physical` or `both`.

```
curl 'https://traduccionestriexpert.com/wp-json/triexpert/v1/quote?pages=3&processing=standard&format=digital'
```

The estimate is **not binding**: the firm price is set once we receive the document and count its real pages.

## GET /verify/{code} — check a certified translation

Every certified translation we issue carries a printed code and a QR. The check is public, never expires, and reveals no personal data about the customer.

```
curl https://traduccionestriexpert.com/wp-json/triexpert/v1/verify/TX-4F2A-9C31
```

Read the `status` field: `authentic`, `in_progress`, `cancelled` or `unknown`. An unrecognised code answers **200 with status `unknown`**, not 404 — the question was answered, so it is not a missing route.

## GET /rates — the current rate card

Returns the base per-page price, the rush and dual-format multipliers, and the exact formula, so you can compute a price locally without a round trip.

```
curl https://traduccionestriexpert.com/wp-json/triexpert/v1/rates
```

---

## Errors

Every error is **RFC 9457 problem details**, served as `application/problem+json`. Never an HTML error page. The object always carries a machine-readable `code` to branch on, a human-readable `detail`, and a `resolution` telling you what to do about it:

```
{
  "type": "https://traduccionestriexpert.com/developers/#errors-rest-invalid-param",
  "title": "Un parámetro no vale",
  "status": 400,
  "detail": "Invalid parameter(s): pages",
  "instance": "https://traduccionestriexpert.com/wp-json/triexpert/v1/quote?pages=abc",
  "code": "rest_invalid_param",
  "resolution": "pages is an integer from 1 to 999; processing is standard or urgent; format is digital, physical or both.",
  "documentation": "https://traduccionestriexpert.com/developers/"
}
```

The codes you can branch on:

- `rest_missing_callback_param` — 400. A required parameter is absent.
- `rest_invalid_param` — 400. A parameter is the wrong type or out of range.
- `rest_no_route` — 404. No endpoint matches that URL.
- `tx_not_api` — 404. The path looks like an API call but is not one of ours.
- `tx_method_not_allowed` — 405. The API is read-only; everything answers GET.
- `tx_rate_limited` — 429. Too many requests from your address.
- `tx_internal` — 500. Our fault, not yours.

One thing worth spelling out: **an unrecognised verification code is not an error**. `/verify/{code}` answers `200` with `"status": "unknown"`, because the question was answered — we have not issued that document. A 404 there would mean the endpoint is missing, which is a different problem entirely.

The same shapes are declared in the [OpenAPI spec](https://traduccionestriexpert.com/openapi.json) under `components/schemas/Problem`, so a generated client gets one typed error class instead of four guesses.

## Rate limits

60 requests per 10 minutes, per IP, per endpoint. Over the limit the API answers `429`. There is no daily quota. If you need more headroom, write to us and say what you are building.

## Reading the site itself

Every page is served as Markdown as well as HTML. Ask for it with a header, or add `.md` to the URL:

```
curl -H 'Accept: text/markdown' https://traduccionestriexpert.com/pricing/
curl https://traduccionestriexpert.com/pricing.md
```

- [/llms.txt](https://traduccionestriexpert.com/llms.txt) — the short index for agents, including when this service is and is not the right one.
- [/llms-full.txt](https://traduccionestriexpert.com/llms-full.txt) — every public page in one Markdown file.
- [/wp-sitemap.xml](https://traduccionestriexpert.com/wp-sitemap.xml) — the sitemap.
- [/openapi.json](https://traduccionestriexpert.com/openapi.json) — the API specification.

## Terms of use

The endpoints are free to use. Do not use the verification endpoint to enumerate codes: it is there to check a document you are holding, not to sweep the space. We ask that you identify your client in the User-Agent so we can tell you apart from a scraper if something looks wrong.

---

*Questions, or something missing from this page: [support@triexpertservice.com](mailto:support@triexpertservice.com).*

---

- Index for agents: https://traduccionestriexpert.com/llms.txt
- Public API: https://traduccionestriexpert.com/openapi.json
- Sitemap: https://traduccionestriexpert.com/wp-sitemap.xml
