---
title: "HD Compatibility"
method: POST
path: "/human-design/compatibility"
tags: ["Human Design"]
---

# HD Compatibility

`POST /human-design/compatibility`

Calculate Human Design connection chart (compatibility) between two people: electromagnetic connections, compromise, dominance, and companionship channels.

## Request body

- TwoChart — Pair of natal charts for relationship calculations: synastry, composite, davison.
  - `chart1` ChartInput, required — Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC. city is a display label only: nothing here geocodes it, so it never stands in for coordinates.
    - `date` string, required
    - `time` string, required
    - `timezoneOffset` number, nullable — Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC.
    - `latitude` number, required
    - `longitude` number, required
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `ayanamsa` 'fagan-bradley' | 'lahiri' | 'de-luce' | 'raman' | 'krishnamurti' | 'kp' | 'yukteshwar' | 'jn-bhasin' | 'true-citra' | 'djwhal-khul' — Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.
    - `cosmogram` boolean
  - `chart2` ChartInput, required — Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC. city is a display label only: nothing here geocodes it, so it never stands in for coordinates.
    - `date` string, required
    - `time` string, required
    - `timezoneOffset` number, nullable — Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC.
    - `latitude` number, required
    - `longitude` number, required
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `ayanamsa` 'fagan-bradley' | 'lahiri' | 'de-luce' | 'raman' | 'krishnamurti' | 'kp' | 'yukteshwar' | 'jn-bhasin' | 'true-citra' | 'djwhal-khul' — Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.
    - `cosmogram` boolean

## Response `200`

Successful calculation

- object
  - `ok` boolean
  - `data` object
    - `chart1` object, nullable
      - `input` object, nullable
        - `name` string, nullable
        - `date` string, nullable
        - `time` string, nullable
        - `timezoneOffset` number, nullable
        - `latitude` number, nullable
        - `longitude` number, nullable
        - `houseSystem` string, nullable
        - `city` string, nullable
        - `cosmogram` boolean, nullable
      - `type` string, nullable
      - `strategy` string, nullable
      - `notSelfTheme` string, nullable
      - `authority` string, nullable
      - `profile` object, nullable
        - `profile` string, nullable
        - `personalityLine` number, nullable
        - `designLine` number, nullable
        - `geometry` string, nullable
      - `definition` string, nullable
      - `cross` object, nullable
        - `name` string, nullable
        - `type` string, nullable
        - `gates` number[], nullable
      - `activations` object[], nullable
        - `planet` string, nullable
        - `planetId` number, nullable
        - `gate` number, nullable
        - `line` number, nullable
        - `color` number, nullable
        - `tone` number, nullable
        - `base` number, nullable
        - `longitude` number, nullable
        - `isPersonality` boolean, nullable
      - `personalityActivations` object[], nullable
        - `planet` string, nullable
        - `planetId` number, nullable
        - `gate` number, nullable
        - `line` number, nullable
        - `color` number, nullable
        - `tone` number, nullable
        - `base` number, nullable
        - `longitude` number, nullable
        - `isPersonality` boolean, nullable
      - `designActivations` object[], nullable
        - `planet` string, nullable
        - `planetId` number, nullable
        - `gate` number, nullable
        - `line` number, nullable
        - `color` number, nullable
        - `tone` number, nullable
        - `base` number, nullable
        - `longitude` number, nullable
        - `isPersonality` boolean, nullable
      - `centers` object[], nullable
        - `name` string, nullable
        - `defined` boolean, nullable
        - `open` boolean, nullable
        - `gates` number[], nullable
        - `activeGates` number[], nullable
      - `channels` object[], nullable
        - `gate1` number, nullable
        - `gate2` number, nullable
        - `centerA` string, nullable
        - `centerB` string, nullable
        - `activatedBy` string[], nullable
      - `designJd` number, nullable
      - `personalityJd` number, nullable
    - `chart2` object, nullable
      - `input` object, nullable
        - `name` string, nullable
        - `date` string, nullable
        - `time` string, nullable
        - `timezoneOffset` number, nullable
        - `latitude` number, nullable
        - `longitude` number, nullable
        - `houseSystem` string, nullable
        - `city` string, nullable
        - `cosmogram` boolean, nullable
      - `type` string, nullable
      - `strategy` string, nullable
      - `notSelfTheme` string, nullable
      - `authority` string, nullable
      - `profile` object, nullable
        - `profile` string, nullable
        - `personalityLine` number, nullable
        - `designLine` number, nullable
        - `geometry` string, nullable
      - `definition` string, nullable
      - `cross` object, nullable
        - `name` string, nullable
        - `type` string, nullable
        - `gates` number[], nullable
      - `activations` object[], nullable
        - `planet` string, nullable
        - `planetId` number, nullable
        - `gate` number, nullable
        - `line` number, nullable
        - `color` number, nullable
        - `tone` number, nullable
        - `base` number, nullable
        - `longitude` number, nullable
        - `isPersonality` boolean, nullable
      - `personalityActivations` object[], nullable
        - `planet` string, nullable
        - `planetId` number, nullable
        - `gate` number, nullable
        - `line` number, nullable
        - `color` number, nullable
        - `tone` number, nullable
        - `base` number, nullable
        - `longitude` number, nullable
        - `isPersonality` boolean, nullable
      - `designActivations` object[], nullable
        - `planet` string, nullable
        - `planetId` number, nullable
        - `gate` number, nullable
        - `line` number, nullable
        - `color` number, nullable
        - `tone` number, nullable
        - `base` number, nullable
        - `longitude` number, nullable
        - `isPersonality` boolean, nullable
      - `centers` object[], nullable
        - `name` string, nullable
        - `defined` boolean, nullable
        - `open` boolean, nullable
        - `gates` number[], nullable
        - `activeGates` unknown[], nullable
          - unknown
      - `channels` object[], nullable
        - `gate1` number, nullable
        - `gate2` number, nullable
        - `centerA` string, nullable
        - `centerB` string, nullable
        - `activatedBy` string[], nullable
      - `designJd` number, nullable
      - `personalityJd` number, nullable
    - `connections` object[], nullable
      - `type` string, nullable
      - `gate1` number, nullable
      - `gate2` number, nullable
      - `centerA` string, nullable
      - `centerB` string, nullable
      - `person1Gates` unknown[], nullable
        - unknown
      - `person2Gates` number[], nullable
    - `electromagnetic` object[], nullable
      - `type` string, nullable
      - `gate1` number, nullable
      - `gate2` number, nullable
      - `centerA` string, nullable
      - `centerB` string, nullable
      - `person1Gates` number[], nullable
      - `person2Gates` number[], nullable
    - `compromise` unknown[], nullable
      - unknown
    - `dominance` object[], nullable
      - `type` string, nullable
      - `gate1` number, nullable
      - `gate2` number, nullable
      - `centerA` string, nullable
      - `centerB` string, nullable
      - `person1Gates` unknown[], nullable
        - unknown
      - `person2Gates` number[], nullable
    - `companionship` object[], nullable
      - `type` string, nullable
      - `gate1` number, nullable
      - `gate2` number, nullable
      - `centerA` string, nullable
      - `centerB` string, nullable
      - `person1Gates` number[], nullable
      - `person2Gates` number[], nullable
    - `combinedDefinedCenters` string[], nullable
    - `combinedDefinition` string, nullable
    - `attractionScore` number, nullable

## Other responses

- `400` — Validation error
- `401` — Missing or invalid API key

## Changes

- **2026-08-24** `8ab5a768b521` — 7 breaking, 51 info
  - the response property `data/companionship/items/` became nullable for the status `200`
  - the response property `data/dominance/items/` became nullable for the status `200`
  - the response property `data/electromagnetic/items/` became nullable for the status `200`
  - the `data/companionship/items/` response's property type/format changed from ``/`` to `object`/`` for status `200`
  - …54 more
- **2026-08-18** `dd3764875e7a` — 2 info
  - added the new optional request property `chart1/ayanamsa`
  - added the new optional request property `chart2/ayanamsa`
- **2026-08-15** `e637d1a9911b` — 4 warning
  - the `chart1/timezoneOffset` request property's max was set to `14.00`
  - the `chart2/timezoneOffset` request property's max was set to `14.00`
  - the `chart1/timezoneOffset` request property's min was set to `-14.00`
  - the `chart2/timezoneOffset` request property's min was set to `-14.00`
- **2026-08-11** `b0533bcc12c0` — 8 breaking, 8 warning, 4 info
  - the request property `chart1/latitude` became not nullable
  - the request property `chart1/longitude` became not nullable
  - the request property `chart2/latitude` became not nullable
  - the request property `chart2/longitude` became not nullable
  - …16 more

[Change history](https://skmtc.dev/astroway/apis/astroway-calculation-api/changes/human-design/compatibility/post.md)

---

[API](https://skmtc.dev/astroway/apis/astroway-calculation-api.md) · [All operations](https://skmtc.dev/astroway/apis/astroway-calculation-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/astroway/astroway-calculation-api/revisions/8ab5a768b521/schema)
