Endpoint reference
Secret keys are server-side only. Browser embeds use the public slug and call the slug-based embed endpoint.
POST /api/partner/v1/eligibility
Authorization: Bearer hp_partner_...
Content-Type: multipart/form-data
file=<GEDCOM .ged file>
Alternative JSON:
{
"gedcom_base64": "...",
"root_person_id": "@I1@"
}200 OK
{
"tree_match": "strong" | "potential" | "none" | "indeterminate",
"additional_questions_required": true,
"paths": [
{
"country_iso": "IE",
"country_name": "Ireland",
"route_keys": ["ireland-fbr", "ireland-passport"],
"tree_match": "potential",
"additional_questions_required": true,
"match": {
"relationship": "Grandfather",
"ahnentafel": 4,
"country_of_birth": "Ireland",
"birth_place_raw": "Galway, Ireland",
"resolved_iso": "IE",
"birth_year": 1930
}
}
],
"lead_token": "{{opaque_lead_token}}",
"handoff_url": "https://heritagepassport.co/start?handoff={{signed_single_use_token}}"
}Rate limits default to 60 requests per minute per active partner key. Error codes use normal HTTP statuses: 400 validation, 401 invalid key, 429 rate limit, 500/503 server failure. `paths` contains one card-ready entry per country with a strong or potential match; it is empty when no path can be shown. These values describe the tree screen, not legal eligibility; the handoff continues into the standard country assessment.
GET /api/partner/v1/report
Authorization: Bearer hp_partner_...
200 OK
{
"eligibility_calls": 120,
"leads_captured": 18,
"handoffs_consumed": 14,
"conversions": 3,
"revenue_share_to_date": { "amount": 267, "currency": "usd" }
}