Hippomundo Enterprise API
Reference

Get a performance horse pedigree

GET /v1/horses/{horse_id}/pedigree/performance

Compatibility policy · Changelog

Returns the canonical subject, a sire/dam tree to great-grandparents and up to four dam families with three offspring generations. Missing parents are null. At most 500 full dam-line horse occurrences are returned; dam_line_truncated is true when horses were omitted. No depth or exclusion query parameters are accepted. Relatives carry current raw sport information, up to five ranked results and aggregate international prize money in integer EUR cents. No breeder or owner is included. The subject.id is the authoritative canonical ID. Hippomundo-Resolved-From reports a superseded requested ID. Each successful response is charged at this operation's current price, which your OpenAPI document (GET /v1/openapi.json) and your portal API reference show. Send Idempotency-Key to make a retry safe. Errors are never charged.

Parameters

FieldTypeDescription
horse_idpath · integer (int64) · required

Public horse ID; superseded IDs are resolved.

Minimum: 1.

X-Hippomundo-Freshnessheader · string

Requests fresher data for this call. live bypasses the freshness cache; the override may only request fresher data and never affects price. Any other value fails validation.

Allowed values: ["cached","live"].

Hippomundo-Versionheader · string

Optional pin to the API version your integration was built against. The only accepted value is v1, which today changes nothing. If a later version of the API changes behaviour in a way that is not backwards compatible, requests that send v1 keep the v1 behaviour. Any other value returns 400 unsupported_version.

Idempotency-Keyheader · string

Optional idempotency key for billable requests. Reuse by the same API key with the same normalized request within 24 hours never creates a second debit. A repeat within that window of a successful request that was charged or used a free allowance is not charged again: it answers with Idempotent-Replayed: true and Hippomundo-Charged-Milli-Credits: 0. Its response is read again, so it may carry current data and a new next_page_token. A success that cost nothing for another reason is not recorded under the key, so a repeat of it is priced like a new request and carries no Idempotent-Replayed. A free page stays free. A free repeat of a request you paid for shortly before is charged once that free period has passed. A repeat of an uncharged failure runs again. Reuse with a different normalized request within 24 hours of a success that was charged or used a free allowance returns an uncharged 409 idempotency_conflict. A key with no such success, or whose 24 hours have passed, takes a different request as a new one. Without the header, each request is independent.

Maximum length: 255.

Response 200 · application/json

The requested pedigree for the canonical horse.

FieldTypeDescription
BodyPerformancePedigree

Genealogy to great-grandparents and up to four dam families, each three offspring generations deep. The cap counts at most 500 full dam-line horse occurrences, including the dams. Tree nodes, sire offspring and compact sister references are outside the cap. Trimming removes deepest generations first, starting with the fourth dam family. The truncation flag reports omitted horses.

Additional properties: false.

Header: Cache-Controlstring · required

Always private, no-store on successful responses: data can change at any time, so no cache may store or reuse them, and the API answers no conditional requests.

Header: Hippomundo-Charged-Milli-Creditsinteger (int64) · required

The milli-credits this request debited from your balance, read from the recorded charge; one credit is 1,000 milli-credits. 0 when the request debited nothing, for example on a free operation, under a free allowance, or on an idempotent replay. Error responses are never charged and do not carry this header.

Minimum: 0.

Header: Hippomundo-Data-Generationstring

Sandbox only. Names the copy of the sandbox data that answered this request. The weekly data refresh replaces that copy and publishes a new value, so a client that keeps sandbox data can key it on this value. HTTP caches still may not store the response (Cache-Control: private, no-store). A next_page_token issued under an earlier value answers 400 page_token_expired. Absent in production, and in the sandbox until its first refresh.

Pattern: "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$".

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Header: Hippomundo-Resolved-Fromstring

Present when the requested horse or rider identifier was superseded and transparently resolved to its canonical identifier. The value is the identifier as requested; the response body carries the canonical identifier, which is authoritative. Clients that ignore this header are unaffected. Resolution is transparent and never an HTTP redirect.

Header: Idempotent-Replayedstring

true when this response answers a repeat, within 24 hours and with the same Idempotency-Key, of an earlier successful request that was charged or used a free allowance. The repeat is not charged again, so Hippomundo-Charged-Milli-Credits is 0. Absent otherwise, including on a repeat of a request that cost nothing for another reason.

Allowed values: ["true"].

Header: X-RateLimit-Limitinteger

Request quota of the applied rate-limit window. The same rate-limit headers appear on successful authenticated responses.

Header: X-RateLimit-Remaininginteger

Requests remaining in the applied rate-limit window.

Related schemas: PerformancePedigree

Example
{
  "dam_line": [
    {
      "horse": {
        "approved_for": [],
        "birth_year": 2006,
        "colour": "bay",
        "id": 900011,
        "name": "SYNTHETIC DAM",
        "performance": {
          "best_results": [
            {
              "awarded_prize_money_eur_cents": 450000,
              "class": {
                "id": 900220,
                "name": "Synthetic Class"
              },
              "competition": {
                "id": 900210,
                "name": "Synthetic Show"
              },
              "date": "2026-06-10",
              "discipline": "jumping",
              "edition": {
                "id": 900211,
                "name": "Synthetic Edition"
              },
              "height_metres": 1.55,
              "international": true,
              "place": 2
            },
            {
              "awarded_prize_money_eur_cents": 100000,
              "class": {
                "id": 900221,
                "name": "Synthetic Lower Class"
              },
              "competition": {
                "id": 900210,
                "name": "Synthetic Show"
              },
              "date": "2026-06-09",
              "discipline": "jumping",
              "edition": {
                "id": 900211,
                "name": "Synthetic Edition"
              },
              "height_metres": 1.45,
              "international": true,
              "place": 1
            },
            {
              "awarded_prize_money_eur_cents": 100000,
              "class": {
                "id": 900222,
                "name": "Synthetic Lowest Class"
              },
              "competition": {
                "id": 900210,
                "name": "Synthetic Show"
              },
              "date": "2026-06-08",
              "discipline": "jumping",
              "edition": {
                "id": 900211,
                "name": "Synthetic Edition"
              },
              "height_metres": 1.4,
              "international": true,
              "place": 1
            }
          ],
          "best_riders": {
            "dressage": null,
            "eventing": null,
            "jumping": {
              "id": 900101,
              "name": "Synthetic Rider",
              "nationality_iso_code": "IE"
            }
          },
          "full_sisters": [],
          "international_prize_money_eur_cents": 650000,
          "jumping_record": {
            "highest_placings": {
              "count": 1,
              "height_metres": 1.55
            },
            "highest_wins": {
              "count": 1,
              "height_metres": 1.45
            },
            "second_highest_placings": {
              "count": 1,
              "height_metres": 1.45
            },
            "second_highest_wins": {
              "count": 1,
              "height_metres": 1.4
            }
          },
          "offspring_summary": {
            "black_type_offspring": 1,
            "offspring": 1,
            "sport_offspring": 1
          }
        },
        "sex": "mare",
        "sire_name": "SYNTHETIC GRANDSIRE",
        "sport": {
          "black_type": true,
          "capitals": false,
          "levels": {
            "idr_level": null,
            "iev_level": null,
            "max_isj_level": 1.55,
            "min_isj_level": 1.4,
            "ndr_level": null,
            "nev_level": null,
            "nsj_level": null
          },
          "rating": 74
        },
        "studbook": {
          "abbreviation": "SYN",
          "id": 900500
        }
      },
      "offspring": [
        {
          "approved_for": [],
          "birth_year": 2014,
          "colour": "bay",
          "id": 900001,
          "is_subject": true,
          "name": "SYNTHETIC NOVA",
          "offspring": [],
          "performance": {
            "best_results": [
              {
                "awarded_prize_money_eur_cents": 450000,
                "class": {
                  "id": 900220,
                  "name": "Synthetic Class"
                },
                "competition": {
                  "id": 900210,
                  "name": "Synthetic Show"
                },
                "date": "2026-06-10",
                "discipline": "jumping",
                "edition": {
                  "id": 900211,
                  "name": "Synthetic Edition"
                },
                "height_metres": 1.55,
                "international": true,
                "place": 2
              }
            ],
            "best_riders": {
              "dressage": null,
              "eventing": null,
              "jumping": {
                "id": 900101,
                "name": "Synthetic Rider",
                "nationality_iso_code": "IE"
              }
            },
            "international_prize_money_eur_cents": 450000,
            "jumping_record": {
              "highest_placings": {
                "count": 1,
                "height_metres": 1.55
              },
              "highest_wins": null,
              "second_highest_placings": null,
              "second_highest_wins": null
            }
          },
          "repeated_dam": false,
          "sex": "mare",
          "sire_name": "SYNTHETIC SIRE",
          "sport": {
            "black_type": true,
            "capitals": false,
            "levels": {
              "idr_level": null,
              "iev_level": null,
              "max_isj_level": 1.55,
              "min_isj_level": 1.4,
              "ndr_level": null,
              "nev_level": null,
              "nsj_level": null
            },
            "rating": 74
          },
          "studbook": {
            "abbreviation": "SYN",
            "id": 900500
          }
        }
      ],
      "position": 1
    }
  ],
  "dam_line_truncated": false,
  "sire_best_offspring": [
    {
      "approved_for": [],
      "birth_year": 2014,
      "colour": "bay",
      "id": 900040,
      "name": "SYNTHETIC SIRE OFFSPRING",
      "performance": {
        "best_results": [
          {
            "awarded_prize_money_eur_cents": 450000,
            "class": {
              "id": 900220,
              "name": "Synthetic Class"
            },
            "competition": {
              "id": 900210,
              "name": "Synthetic Show"
            },
            "date": "2026-06-10",
            "discipline": "jumping",
            "edition": {
              "id": 900211,
              "name": "Synthetic Edition"
            },
            "height_metres": 1.55,
            "international": true,
            "place": 2
          }
        ],
        "best_riders": {
          "dressage": null,
          "eventing": null,
          "jumping": {
            "id": 900101,
            "name": "Synthetic Rider",
            "nationality_iso_code": "IE"
          }
        },
        "international_prize_money_eur_cents": 450000,
        "jumping_record": {
          "highest_placings": {
            "count": 1,
            "height_metres": 1.55
          },
          "highest_wins": null,
          "second_highest_placings": null,
          "second_highest_wins": null
        }
      },
      "sex": "mare",
      "sport": {
        "black_type": true,
        "capitals": false,
        "levels": {
          "idr_level": null,
          "iev_level": null,
          "max_isj_level": 1.55,
          "min_isj_level": 1.4,
          "ndr_level": null,
          "nev_level": null,
          "nsj_level": null
        },
        "rating": 74
      },
      "studbook": {
        "abbreviation": "SYN",
        "id": 900500
      }
    }
  ],
  "subject": {
    "approved_for": [],
    "birth_year": 2014,
    "colour": "bay",
    "id": 900001,
    "name": "SYNTHETIC NOVA",
    "sex": "mare",
    "sport": {
      "black_type": true,
      "capitals": false,
      "levels": {
        "idr_level": null,
        "iev_level": null,
        "max_isj_level": 1.55,
        "min_isj_level": 1.4,
        "ndr_level": null,
        "nev_level": null,
        "nsj_level": null
      },
      "rating": 74
    },
    "studbook": {
      "abbreviation": "SYN",
      "id": 900500
    }
  },
  "tree": {
    "dam": {
      "approved_for": [],
      "birth_year": 2006,
      "colour": "bay",
      "dam": null,
      "id": 900011,
      "name": "SYNTHETIC DAM",
      "sex": "mare",
      "sire": null,
      "sport": {
        "black_type": true,
        "capitals": false,
        "levels": {
          "idr_level": null,
          "iev_level": null,
          "max_isj_level": 1.55,
          "min_isj_level": 1.4,
          "ndr_level": null,
          "nev_level": null,
          "nsj_level": null
        },
        "rating": 74
      },
      "studbook": {
        "abbreviation": "SYN",
        "id": 900500
      }
    },
    "sire": {
      "approved_for": [],
      "birth_year": 2004,
      "colour": "bay",
      "dam": null,
      "id": 900010,
      "name": "SYNTHETIC SIRE",
      "sex": "stallion",
      "sire": null,
      "sport": {
        "black_type": true,
        "capitals": false,
        "levels": {
          "idr_level": null,
          "iev_level": null,
          "max_isj_level": 1.55,
          "min_isj_level": 1.4,
          "ndr_level": null,
          "nev_level": null,
          "nsj_level": null
        },
        "rating": 74
      },
      "studbook": {
        "abbreviation": "SYN",
        "id": 900500
      }
    }
  }
}

Response 400 · application/problem+json

400 — one of the registered codes malformed_request, invalid_page_token, page_token_expired or unsupported_version; branch on the body code. Not retryable without changing the request. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

Page token is malformed or mismatched
{
  "charged": false,
  "code": "invalid_page_token",
  "detail": "The supplied page token is not valid for this query and API key.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000001",
  "request_id": "01J5AR8Q2K0000000000000001",
  "retryable": false,
  "status": 400,
  "title": "Invalid page token",
  "type": "https://enterprise.hippomundo.com/docs/errors/invalid_page_token"
}
Request syntax cannot be parsed
{
  "charged": false,
  "code": "malformed_request",
  "detail": "The request could not be parsed.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000000",
  "request_id": "01J5AR8Q2K0000000000000000",
  "retryable": false,
  "status": 400,
  "title": "Malformed request",
  "type": "https://enterprise.hippomundo.com/docs/errors/malformed_request"
}
Page token past its public expiry
{
  "charged": false,
  "code": "page_token_expired",
  "detail": "The traversal token has expired; restart from page one.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000002",
  "request_id": "01J5AR8Q2K0000000000000002",
  "retryable": false,
  "status": 400,
  "title": "Page token expired",
  "type": "https://enterprise.hippomundo.com/docs/errors/page_token_expired"
}
Hippomundo-Version is not supported
{
  "charged": false,
  "code": "unsupported_version",
  "detail": "The requested API version is not supported.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000003",
  "request_id": "01J5AR8Q2K0000000000000003",
  "retryable": false,
  "status": 400,
  "title": "Unsupported version",
  "type": "https://enterprise.hippomundo.com/docs/errors/unsupported_version"
}

Response 401 · application/problem+json

401 invalid_api_key — the API key is missing, invalid, revoked or otherwise unusable; the states are deliberately indistinguishable. Not retryable without different credentials. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Header: WWW-Authenticatestring · required

Always ApiKey, without credential detail.

Related schemas: Problem

API key missing, invalid, revoked or otherwise unusable
{
  "charged": false,
  "code": "invalid_api_key",
  "detail": "The request was not authenticated.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000004",
  "request_id": "01J5AR8Q2K0000000000000004",
  "retryable": false,
  "status": 401,
  "title": "Invalid API key",
  "type": "https://enterprise.hippomundo.com/docs/errors/invalid_api_key"
}

Response 402 · application/problem+json

402 — one of the registered codes insufficient_credits, account_in_arrears or api_key_credit_cap_reached; branch on the body code because the remediation differs. Top up after insufficient_credits and settle the negative balance after account_in_arrears; neither is retryable until remediated. api_key_credit_cap_reached means the request would take this API key past the credit cap its owner set for each UTC day or UTC calendar month. A request that costs less may still succeed. It is retryable: Retry-After gives the seconds until the next period starts and the full cap is available again, and the owner can also raise or remove the cap in the portal. The body never states balances, caps or pricing internals; the portal and usage API are the authenticated source for financial detail. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Header: Retry-Afterinteger

Seconds to wait before retrying. Required on 429 and on 402 api_key_credit_cap_reached, where it counts to the start of the next UTC day or month; present on 503 when the service knows a meaningful recovery interval.

Minimum: 0.

Related schemas: Problem

Negative balance blocks metered calls
{
  "charged": false,
  "code": "account_in_arrears",
  "detail": "A negative balance blocks metered calls until it is settled.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000006",
  "request_id": "01J5AR8Q2K0000000000000006",
  "retryable": false,
  "status": 402,
  "title": "Account in arrears",
  "type": "https://enterprise.hippomundo.com/docs/errors/account_in_arrears"
}
The request would take the API key past its credit cap for the current period
{
  "charged": false,
  "code": "api_key_credit_cap_reached",
  "detail": "This request would take the API key past the credit cap its owner set for the current period. A request that costs less may still succeed, and the full cap is available again when the next period starts.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000M",
  "request_id": "01J5AR8Q2K000000000000000M",
  "retryable": true,
  "status": 402,
  "title": "API key credit cap reached",
  "type": "https://enterprise.hippomundo.com/docs/errors/api_key_credit_cap_reached"
}
Spendable credits cannot cover the maximum authorized cost
{
  "charged": false,
  "code": "insufficient_credits",
  "detail": "The account does not hold enough spendable credits for this request.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000005",
  "request_id": "01J5AR8Q2K0000000000000005",
  "retryable": false,
  "status": 402,
  "title": "Insufficient credits",
  "type": "https://enterprise.hippomundo.com/docs/errors/insufficient_credits"
}

Response 403 · application/problem+json

403 endpoint_not_entitled — the authenticated Customer lacks a required entitlement for a discoverable public endpoint it has not purchased. Private endpoints never return 403; they return 404 not_found. Not retryable without purchasing the entitlement. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

Public endpoint not purchased
{
  "charged": false,
  "code": "endpoint_not_entitled",
  "detail": "The account is not entitled to this endpoint.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000007",
  "request_id": "01J5AR8Q2K0000000000000007",
  "retryable": false,
  "status": 403,
  "title": "Endpoint not entitled",
  "type": "https://enterprise.hippomundo.com/docs/errors/endpoint_not_entitled"
}

Response 404 · application/problem+json

404 not_found — the route or resource is absent, not public, or a private endpoint is intentionally concealed. Nonexistent, unavailable and unauthorized-private resources are deliberately indistinguishable; the response is never an existence oracle. Not retryable. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

Route or resource absent, unavailable or concealed
{
  "charged": false,
  "code": "not_found",
  "detail": "The requested resource does not exist.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K0000000000000008",
  "request_id": "01J5AR8Q2K0000000000000008",
  "retryable": false,
  "status": 404,
  "title": "Not found",
  "type": "https://enterprise.hippomundo.com/docs/errors/not_found"
}

Response 406 · application/problem+json

406 not_acceptable — the Accept header excludes application/json, the media type of every successful response. Omit the header or send one that admits application/json, for example application/json, application/* or */*. Error responses are always application/problem+json. Not retryable without changing the Accept header. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

Requested response media type unsupported
{
  "charged": false,
  "code": "not_acceptable",
  "detail": "The requested response media type is not supported.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000A",
  "request_id": "01J5AR8Q2K000000000000000A",
  "retryable": false,
  "status": 406,
  "title": "Not acceptable",
  "type": "https://enterprise.hippomundo.com/docs/errors/not_acceptable"
}

Response 409 · application/problem+json

409 idempotency_conflict — the same Customer or key reused an idempotency key for a different normalized request within 24 hours of a success under that key that was charged or used a free allowance. Not retryable with the same key; use a new idempotency key for a new request. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

Idempotency key reused for a different request
{
  "charged": false,
  "code": "idempotency_conflict",
  "detail": "This idempotency key was already used for a different request.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000B",
  "request_id": "01J5AR8Q2K000000000000000B",
  "retryable": false,
  "status": 409,
  "title": "Idempotency conflict",
  "type": "https://enterprise.hippomundo.com/docs/errors/idempotency_conflict"
}

Response 422 · application/problem+json

422 validation_failed — parsed public inputs fail the documented schema or combination rules. errors lists up to 20 field-level items in request-field order, without messages or rejected values; errors_truncated may be true when more exist. Not retryable without correcting the request. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

Parsed public inputs fail the documented rules
{
  "charged": false,
  "code": "validation_failed",
  "detail": "One or more request parameters are invalid.",
  "errors": [
    {
      "code": "invalid_format",
      "field": "date_from",
      "location": "query"
    }
  ],
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000E",
  "request_id": "01J5AR8Q2K000000000000000E",
  "retryable": false,
  "status": 422,
  "title": "Request validation failed",
  "type": "https://enterprise.hippomundo.com/docs/errors/validation_failed"
}

Response 429 · application/problem+json

429 rate_limit_exceeded — the Customer or key rate policy rejected the request. Retryable after waiting at least Retry-After; preserve the same idempotency key for a billable retry. Carries the same rate-limit headers used on successful authenticated responses. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Header: Retry-Afterinteger

Seconds to wait before retrying. Required on 429 and on 402 api_key_credit_cap_reached, where it counts to the start of the next UTC day or month; present on 503 when the service knows a meaningful recovery interval.

Minimum: 0.

Header: X-RateLimit-Limitinteger

Request quota of the applied rate-limit window. The same rate-limit headers appear on successful authenticated responses.

Header: X-RateLimit-Remaininginteger

Requests remaining in the applied rate-limit window.

Related schemas: Problem

Rate policy rejected the request
{
  "charged": false,
  "code": "rate_limit_exceeded",
  "detail": "The rate limit for this API key was exceeded.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000F",
  "request_id": "01J5AR8Q2K000000000000000F",
  "retryable": true,
  "status": 429,
  "title": "Rate limit exceeded",
  "type": "https://enterprise.hippomundo.com/docs/errors/rate_limit_exceeded"
}

Response 500 · application/problem+json

500 internal_error — an unexpected Hippomundo failure with no safer public classification. Retryability is occurrence-specific; honor the body retryable field, use exponential backoff with jitter, preserve the idempotency key and report persistent failures with the request_id. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

Unexpected failure with no safer classification
{
  "charged": false,
  "code": "internal_error",
  "detail": "An unexpected internal error occurred.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000G",
  "request_id": "01J5AR8Q2K000000000000000G",
  "retryable": false,
  "status": 500,
  "title": "Internal error",
  "type": "https://enterprise.hippomundo.com/docs/errors/internal_error"
}

Response 502 · application/problem+json

502 dependency_error — a required managed dependency returned an invalid or failing response. Retryability is occurrence-specific; honor the body retryable field. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

A managed dependency returned an invalid or failing response
{
  "charged": false,
  "code": "dependency_error",
  "detail": "A required internal dependency failed.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000H",
  "request_id": "01J5AR8Q2K000000000000000H",
  "retryable": false,
  "status": 502,
  "title": "Dependency error",
  "type": "https://enterprise.hippomundo.com/docs/errors/dependency_error"
}

Response 503 · application/problem+json

503 service_unavailable — the service or a required ledger or dependency is temporarily unavailable. Retryable; honor Retry-After when present and use exponential backoff with jitter. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Header: Retry-Afterinteger

Seconds to wait before retrying. Required on 429 and on 402 api_key_credit_cap_reached, where it counts to the start of the next UTC day or month; present on 503 when the service knows a meaningful recovery interval.

Minimum: 0.

Related schemas: Problem

Service temporarily unavailable
{
  "charged": false,
  "code": "service_unavailable",
  "detail": "The service is temporarily unavailable.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000J",
  "request_id": "01J5AR8Q2K000000000000000J",
  "retryable": true,
  "status": 503,
  "title": "Service unavailable",
  "type": "https://enterprise.hippomundo.com/docs/errors/service_unavailable"
}

Response 504 · application/problem+json

504 dependency_timeout — a required dependency exceeded its deadline. Retryable with exponential backoff and jitter; preserve the idempotency key so a billable retry cannot double-charge. Uncharged.

FieldTypeDescription
BodyProblem

RFC 9457 problem document used by every managed error response under /v1, regardless of which layer produced it. Content type is always application/problem+json. Clients branch on code, retain an unknown-code fallback, use status only for broad handling and must ignore unknown top-level fields. title and detail are human-readable English, may be clarified without versioning and are never parsed.

Header: Cache-Controlstring · required

Always no-store on error responses.

Header: Hippomundo-Request-IDstring · required

Compact server-generated request identifier carried on every response. On errors it equals the body request_id. Quote it in support requests; it contains no customer identity. An inbound customer-supplied value is never trusted as this identifier.

Related schemas: Problem

A dependency exceeded its deadline
{
  "charged": false,
  "code": "dependency_timeout",
  "detail": "A required internal dependency timed out.",
  "instance": "urn:hippomundo:request:01J5AR8Q2K000000000000000K",
  "request_id": "01J5AR8Q2K000000000000000K",
  "retryable": true,
  "status": 504,
  "title": "Dependency timeout",
  "type": "https://enterprise.hippomundo.com/docs/errors/dependency_timeout"
}

OpenAPI definition

Related schemas: PerformancePedigree

Complete OpenAPI definition
{
  "description": "Returns the canonical subject, a sire/dam tree to great-grandparents and up to four dam families with three offspring generations. Missing parents are null. At most 500 full dam-line horse occurrences are returned; dam_line_truncated is true when horses were omitted. No depth or exclusion query parameters are accepted. Relatives carry current raw sport information, up to five ranked results and aggregate international prize money in integer EUR cents. No breeder or owner is included. The subject.id is the authoritative canonical ID. Hippomundo-Resolved-From reports a superseded requested ID. Each successful response is charged at this operation's current price, which your OpenAPI document (`GET /v1/openapi.json`) and your portal API reference show. Send Idempotency-Key to make a retry safe. Errors are never charged.",
  "operationId": "readPerformancePedigree",
  "parameters": [
    {
      "description": "Public horse ID; superseded IDs are resolved.",
      "in": "path",
      "name": "horse_id",
      "required": true,
      "schema": {
        "format": "int64",
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "$ref": "#/components/parameters/FreshnessOverride"
    },
    {
      "$ref": "#/components/parameters/VersionHeader"
    },
    {
      "$ref": "#/components/parameters/IdempotencyKey"
    }
  ],
  "responses": {
    "200": {
      "content": {
        "application/json": {
          "example": {
            "dam_line": [
              {
                "horse": {
                  "approved_for": [],
                  "birth_year": 2006,
                  "colour": "bay",
                  "id": 900011,
                  "name": "SYNTHETIC DAM",
                  "performance": {
                    "best_results": [
                      {
                        "awarded_prize_money_eur_cents": 450000,
                        "class": {
                          "id": 900220,
                          "name": "Synthetic Class"
                        },
                        "competition": {
                          "id": 900210,
                          "name": "Synthetic Show"
                        },
                        "date": "2026-06-10",
                        "discipline": "jumping",
                        "edition": {
                          "id": 900211,
                          "name": "Synthetic Edition"
                        },
                        "height_metres": 1.55,
                        "international": true,
                        "place": 2
                      },
                      {
                        "awarded_prize_money_eur_cents": 100000,
                        "class": {
                          "id": 900221,
                          "name": "Synthetic Lower Class"
                        },
                        "competition": {
                          "id": 900210,
                          "name": "Synthetic Show"
                        },
                        "date": "2026-06-09",
                        "discipline": "jumping",
                        "edition": {
                          "id": 900211,
                          "name": "Synthetic Edition"
                        },
                        "height_metres": 1.45,
                        "international": true,
                        "place": 1
                      },
                      {
                        "awarded_prize_money_eur_cents": 100000,
                        "class": {
                          "id": 900222,
                          "name": "Synthetic Lowest Class"
                        },
                        "competition": {
                          "id": 900210,
                          "name": "Synthetic Show"
                        },
                        "date": "2026-06-08",
                        "discipline": "jumping",
                        "edition": {
                          "id": 900211,
                          "name": "Synthetic Edition"
                        },
                        "height_metres": 1.4,
                        "international": true,
                        "place": 1
                      }
                    ],
                    "best_riders": {
                      "dressage": null,
                      "eventing": null,
                      "jumping": {
                        "id": 900101,
                        "name": "Synthetic Rider",
                        "nationality_iso_code": "IE"
                      }
                    },
                    "full_sisters": [],
                    "international_prize_money_eur_cents": 650000,
                    "jumping_record": {
                      "highest_placings": {
                        "count": 1,
                        "height_metres": 1.55
                      },
                      "highest_wins": {
                        "count": 1,
                        "height_metres": 1.45
                      },
                      "second_highest_placings": {
                        "count": 1,
                        "height_metres": 1.45
                      },
                      "second_highest_wins": {
                        "count": 1,
                        "height_metres": 1.4
                      }
                    },
                    "offspring_summary": {
                      "black_type_offspring": 1,
                      "offspring": 1,
                      "sport_offspring": 1
                    }
                  },
                  "sex": "mare",
                  "sire_name": "SYNTHETIC GRANDSIRE",
                  "sport": {
                    "black_type": true,
                    "capitals": false,
                    "levels": {
                      "idr_level": null,
                      "iev_level": null,
                      "max_isj_level": 1.55,
                      "min_isj_level": 1.4,
                      "ndr_level": null,
                      "nev_level": null,
                      "nsj_level": null
                    },
                    "rating": 74
                  },
                  "studbook": {
                    "abbreviation": "SYN",
                    "id": 900500
                  }
                },
                "offspring": [
                  {
                    "approved_for": [],
                    "birth_year": 2014,
                    "colour": "bay",
                    "id": 900001,
                    "is_subject": true,
                    "name": "SYNTHETIC NOVA",
                    "offspring": [],
                    "performance": {
                      "best_results": [
                        {
                          "awarded_prize_money_eur_cents": 450000,
                          "class": {
                            "id": 900220,
                            "name": "Synthetic Class"
                          },
                          "competition": {
                            "id": 900210,
                            "name": "Synthetic Show"
                          },
                          "date": "2026-06-10",
                          "discipline": "jumping",
                          "edition": {
                            "id": 900211,
                            "name": "Synthetic Edition"
                          },
                          "height_metres": 1.55,
                          "international": true,
                          "place": 2
                        }
                      ],
                      "best_riders": {
                        "dressage": null,
                        "eventing": null,
                        "jumping": {
                          "id": 900101,
                          "name": "Synthetic Rider",
                          "nationality_iso_code": "IE"
                        }
                      },
                      "international_prize_money_eur_cents": 450000,
                      "jumping_record": {
                        "highest_placings": {
                          "count": 1,
                          "height_metres": 1.55
                        },
                        "highest_wins": null,
                        "second_highest_placings": null,
                        "second_highest_wins": null
                      }
                    },
                    "repeated_dam": false,
                    "sex": "mare",
                    "sire_name": "SYNTHETIC SIRE",
                    "sport": {
                      "black_type": true,
                      "capitals": false,
                      "levels": {
                        "idr_level": null,
                        "iev_level": null,
                        "max_isj_level": 1.55,
                        "min_isj_level": 1.4,
                        "ndr_level": null,
                        "nev_level": null,
                        "nsj_level": null
                      },
                      "rating": 74
                    },
                    "studbook": {
                      "abbreviation": "SYN",
                      "id": 900500
                    }
                  }
                ],
                "position": 1
              }
            ],
            "dam_line_truncated": false,
            "sire_best_offspring": [
              {
                "approved_for": [],
                "birth_year": 2014,
                "colour": "bay",
                "id": 900040,
                "name": "SYNTHETIC SIRE OFFSPRING",
                "performance": {
                  "best_results": [
                    {
                      "awarded_prize_money_eur_cents": 450000,
                      "class": {
                        "id": 900220,
                        "name": "Synthetic Class"
                      },
                      "competition": {
                        "id": 900210,
                        "name": "Synthetic Show"
                      },
                      "date": "2026-06-10",
                      "discipline": "jumping",
                      "edition": {
                        "id": 900211,
                        "name": "Synthetic Edition"
                      },
                      "height_metres": 1.55,
                      "international": true,
                      "place": 2
                    }
                  ],
                  "best_riders": {
                    "dressage": null,
                    "eventing": null,
                    "jumping": {
                      "id": 900101,
                      "name": "Synthetic Rider",
                      "nationality_iso_code": "IE"
                    }
                  },
                  "international_prize_money_eur_cents": 450000,
                  "jumping_record": {
                    "highest_placings": {
                      "count": 1,
                      "height_metres": 1.55
                    },
                    "highest_wins": null,
                    "second_highest_placings": null,
                    "second_highest_wins": null
                  }
                },
                "sex": "mare",
                "sport": {
                  "black_type": true,
                  "capitals": false,
                  "levels": {
                    "idr_level": null,
                    "iev_level": null,
                    "max_isj_level": 1.55,
                    "min_isj_level": 1.4,
                    "ndr_level": null,
                    "nev_level": null,
                    "nsj_level": null
                  },
                  "rating": 74
                },
                "studbook": {
                  "abbreviation": "SYN",
                  "id": 900500
                }
              }
            ],
            "subject": {
              "approved_for": [],
              "birth_year": 2014,
              "colour": "bay",
              "id": 900001,
              "name": "SYNTHETIC NOVA",
              "sex": "mare",
              "sport": {
                "black_type": true,
                "capitals": false,
                "levels": {
                  "idr_level": null,
                  "iev_level": null,
                  "max_isj_level": 1.55,
                  "min_isj_level": 1.4,
                  "ndr_level": null,
                  "nev_level": null,
                  "nsj_level": null
                },
                "rating": 74
              },
              "studbook": {
                "abbreviation": "SYN",
                "id": 900500
              }
            },
            "tree": {
              "dam": {
                "approved_for": [],
                "birth_year": 2006,
                "colour": "bay",
                "dam": null,
                "id": 900011,
                "name": "SYNTHETIC DAM",
                "sex": "mare",
                "sire": null,
                "sport": {
                  "black_type": true,
                  "capitals": false,
                  "levels": {
                    "idr_level": null,
                    "iev_level": null,
                    "max_isj_level": 1.55,
                    "min_isj_level": 1.4,
                    "ndr_level": null,
                    "nev_level": null,
                    "nsj_level": null
                  },
                  "rating": 74
                },
                "studbook": {
                  "abbreviation": "SYN",
                  "id": 900500
                }
              },
              "sire": {
                "approved_for": [],
                "birth_year": 2004,
                "colour": "bay",
                "dam": null,
                "id": 900010,
                "name": "SYNTHETIC SIRE",
                "sex": "stallion",
                "sire": null,
                "sport": {
                  "black_type": true,
                  "capitals": false,
                  "levels": {
                    "idr_level": null,
                    "iev_level": null,
                    "max_isj_level": 1.55,
                    "min_isj_level": 1.4,
                    "ndr_level": null,
                    "nev_level": null,
                    "nsj_level": null
                  },
                  "rating": 74
                },
                "studbook": {
                  "abbreviation": "SYN",
                  "id": 900500
                }
              }
            }
          },
          "schema": {
            "$ref": "#/components/schemas/PerformancePedigree"
          }
        }
      },
      "description": "The requested pedigree for the canonical horse.",
      "headers": {
        "Cache-Control": {
          "$ref": "#/components/headers/CacheControlPrivateNoStore"
        },
        "Hippomundo-Charged-Milli-Credits": {
          "$ref": "#/components/headers/HippomundoChargedMilliCredits"
        },
        "Hippomundo-Data-Generation": {
          "$ref": "#/components/headers/HippomundoDataGeneration"
        },
        "Hippomundo-Request-ID": {
          "$ref": "#/components/headers/HippomundoRequestId"
        },
        "Hippomundo-Resolved-From": {
          "$ref": "#/components/headers/HippomundoResolvedFrom"
        },
        "Idempotent-Replayed": {
          "$ref": "#/components/headers/IdempotentReplayed"
        },
        "X-RateLimit-Limit": {
          "$ref": "#/components/headers/RateLimitLimit"
        },
        "X-RateLimit-Remaining": {
          "$ref": "#/components/headers/RateLimitRemaining"
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/BadRequest"
    },
    "401": {
      "$ref": "#/components/responses/InvalidApiKey"
    },
    "402": {
      "$ref": "#/components/responses/PaymentRequired"
    },
    "403": {
      "$ref": "#/components/responses/EndpointNotEntitled"
    },
    "404": {
      "$ref": "#/components/responses/NotFound"
    },
    "406": {
      "$ref": "#/components/responses/NotAcceptable"
    },
    "409": {
      "$ref": "#/components/responses/IdempotencyConflict"
    },
    "422": {
      "$ref": "#/components/responses/ValidationFailed"
    },
    "429": {
      "$ref": "#/components/responses/RateLimitExceeded"
    },
    "500": {
      "$ref": "#/components/responses/InternalError"
    },
    "502": {
      "$ref": "#/components/responses/DependencyError"
    },
    "503": {
      "$ref": "#/components/responses/ServiceUnavailable"
    },
    "504": {
      "$ref": "#/components/responses/DependencyTimeout"
    }
  },
  "summary": "Get a performance horse pedigree",
  "tags": [
    "pedigree"
  ]
}