Skip to content
API96Astro API

API reference / Utilities

Utilities

Languages, place search, time-zone resolution and quick sign finders.

7 endpoints. Every endpoint is POST with a JSON body and your key in the Authorization header. Request schemas and examples come from the OpenAPI document; each example response was captured from the live engine and its data fields are a guide to the shape, not a contract.

Find Ascendant

POSTAvailable

https://api.96astro.com/v1/utilities/find-ascendant

Rising sign, degree, nakshatra and pada with its KP sign, star and sub lords for a date, time and place, plus the planets' sidereal positions at that moment.

Credits
1 credit
Input
Birth details
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

ayanamshastringOptional

Default: lahiri

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • ayanamsha · string
  • ascendant · object
  • kp · object
  • planets · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "ayanamsha": "lahiri",
    "ascendant": {
      "sign": "Capricorn",
      "sign_number": 10,
      "sign_lord": "Saturn",
      "element": "Earth",
      "modality": "Cardinal",
      "degree": 23.8935,
      "degree_dms": "23° 53' 36\"",
      "longitude": 293.8935,
      "nakshatra": "Dhanishta",
      "nakshatra_lord": "Mars",
      "pada": 1
    },
    "kp": {
      "sign_lord": "SAT",
      "star_lord": "MAR",
      "sub_lord": "MAR"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Find Moon Sign

POSTAvailable

https://api.96astro.com/v1/utilities/find-moon-sign

Sidereal Moon sign (and nakshatra) for a date, time and place.

Credits
1 credit
Input
Birth details
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

ayanamshastringOptional

Default: lahiri

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • ayanamsha · string
  • moon_sign · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "ayanamsha": "lahiri",
    "moon_sign": {
      "sign": "Virgo",
      "sign_number": 6,
      "sign_lord": "Mercury",
      "element": "Earth",
      "modality": "Mutable",
      "degree": 27.8766,
      "degree_dms": "27° 52' 35\"",
      "longitude": 177.8766,
      "nakshatra": "Chitra",
      "nakshatra_lord": "Mars",
      "pada": 2
    }
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Find Sun Sign

POSTAvailable

https://api.96astro.com/v1/utilities/find-sun-sign

The sidereal (Vedic) Sun sign with degree and nakshatra, and the tropical (Western) Sun sign, for a date; time and place refine it.

Credits
1 credit
Input
Date
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
datetimestringRequired

Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00

Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 1990-10-18T14:30:00

timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

ayanamshastringOptional

Default: lahiri

languagestringOptional

Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language.

Default: en

Allowed value: en

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • ayanamsha · string
  • vedic · object
  • western · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "ayanamsha": "lahiri",
    "vedic": {
      "sign": "Libra",
      "sign_number": 7,
      "sign_lord": "Venus",
      "element": "Air",
      "modality": "Cardinal",
      "degree": 0.9951,
      "degree_dms": "0° 59' 42\"",
      "longitude": 180.9951,
      "nakshatra": "Chitra",
      "nakshatra_lord": "Mars",
      "pada": 3
    },
    "western": {
      "sign": "Libra",
      "sign_lord": "Venus",
      "element": "Air",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Supported Languages

POSTAvailable

https://api.96astro.com/v1/utilities/languages

Lists the language codes responses can be localised into, with English and native names and whether each is written right to left.

Credits
1 credit
Input
No input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
codestring | nullOptional

Only this locale code, e.g. 'hi'.

Default: null

Limits: at most 8 characters

Example: hi

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Options (24)
ValueMeaning
enEnglish
hiHindi
mrMarathi
neNepali
bnBengali
taTamil
teTelugu
knKannada
mlMalayalam
guGujarati
paPunjabi
orOdia
siSinhala
frFrench
esSpanish
ptPortuguese
deGerman
itItalian
nlDutch
plPolish
trTurkish
ruRussian
koKorean
jaJapanese

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • default · string
  • languages · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "default": "en",
    "languages": [
      {
        "code": "hi",
        "name": "Hindi",
        "native_name": "हिन्दी",
        "right_to_left": false
      }
    ]
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

POSTAvailable

https://api.96astro.com/v1/utilities/geo-search

Searches the built-in city list by name and returns coordinates, IANA zone and the UTC offset in force on a given date/time.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
datestring | nullOptional

Resolve the UTC offset for this date (DST-aware).

Default: null

Limits: format date

Example: 1990-10-18

timestring | nullOptional

Local time, HH:MM; with `date`, resolves one instant.

Default: null

Limits: format local-time, pattern ^\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 14:30

limitintegerOptional

Default: 10

Limits: minimum 1, maximum 50

namestringRequired

City name or part of it.

Limits: 2 to 100 characters

Example: Delhi

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • query · string
  • places · array of object
  • catalogue · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "query": "Delhi",
    "places": [
      {
        "city": "Delhi",
        "state": "Delhi",
        "country": "India",
        "latitude": 28.6139,
        "longitude": 77.209,
        "timezone": "Asia/Kolkata",
        "utc_offset": "+05:30",
        "utc_offset_on": "1990-10-18",
        "standard_utc_offset": "+05:30",
        "dst": false,
        "instant": {
          "status": "ok",
          "utc_offset": "+05:30",
          "abbreviation": "IST",
          "utc": "1990-10-18T09:00:00Z",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Place Search (City + Country)

POSTAvailable

https://api.96astro.com/v1/utilities/geo-search-advanced

Place search narrowed by city and country, with DST-aware offset.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
datestring | nullOptional

Resolve the UTC offset for this date (DST-aware).

Default: null

Limits: format date

Example: 1990-07-01

timestring | nullOptional

Local time, HH:MM; with `date`, resolves one instant.

Default: null

Limits: format local-time, pattern ^\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 12:00

limitintegerOptional

Default: 10

Limits: minimum 1, maximum 50

citystringOptional

Default: ""

Limits: at most 100 characters

Example: London

countrystringOptional

Default: ""

Limits: at most 100 characters

Example: United Kingdom

statestringOptional

Default: ""

Limits: at most 100 characters

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • query · object
  • places · array of object
  • catalogue · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "query": {
      "city": "London",
      "country": "United Kingdom",
      "state": ""
    },
    "places": [
      {
        "city": "London",
        "state": "England",
        "country": "United Kingdom",
        "latitude": 51.5074,
        "longitude": -0.1278,
        "timezone": "Europe/London",
        "utc_offset": "+01:00",
        "utc_offset_on": "1990-07-01",
        "standard_utc_offset": "+00:00",
        "dst": true,
        "instant": {
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Resolve Birth Instant

POSTAvailable

https://api.96astro.com/v1/utilities/resolve-instant

Turns an IANA zone plus local date and time into one UTC instant, or reports that the local time was ambiguous (both candidates returned) or nonexistent across a DST change.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
timezonestringRequired

IANA time zone, e.g. Europe/London

Example: Europe/London

datestringRequired

Limits: format date

Example: 1990-10-28

timestring | nullOptional

Local time, HH:MM. Without it only the day's offset is given.

Default: null

Limits: format local-time, pattern ^\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$

Example: 01:30

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • timezone · string
  • local_date · string
  • local_time · string
  • status · string
  • utc_offset · null
  • abbreviation · null
  • utc · null
  • candidates · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "timezone": "Europe/London",
    "local_date": "1990-10-28",
    "local_time": "01:30",
    "status": "ambiguous",
    "utc_offset": null,
    "abbreviation": null,
    "utc": null,
    "candidates": [
      {
        "utc_offset": "+01:00",
        "abbreviation": "BST",
        "utc": "1990-10-28T00:30:00Z"
      },
      {
        "utc_offset": "+00:00",
        "abbreviation": "GMT",
        "utc": "1990-10-28T01:30:00Z"
      }
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.