Skip to content

API reference

Base URL https://api.datagalactica.com/api/v1. JSON over HTTPS, CORS open. Every record follows the Galactica Entity Standard, carries a Galactica ID (DGC- organisations, DGP- people), a grade on every section and its sources.

Authentication, keys and price

Every data call needs an account key. Create an account with your e-mail and a code: it is approved at once, with Rs 50 of free credit and your first key. Send the key in any of these headers, to the gateway or to the site:

Authorization: Bearer YOUR_KEY            (to https://api.datagalactica.com/api/v1 or https://datagalactica.com/api/v1)
X-API-Key: YOUR_KEY
Ocp-Apim-Subscription-Key: YOUR_KEY

Price: each answered call (HTTP 200) costs Rs 0.16 from the account's prepaid wallet; /batch and /match cost Rs 0.16 per record found or matched. Errors and not-found answers are free, and so are /meta, /enums, /lists, the wallet endpoints and Check. Each billed response carries x-wallet-balance-inr. Top up with Rs 500, 5,000 or 50,000 from your dashboard or with /account/topup. Manage keys and download usage at /account.

AI agents can sign a person up with their e-mail (agent sign-up, auth.md); MCP clients sign in with OAuth (scope api). Unmasked contacts are turned on per account after a request.

Responses

{ "ok": true,  "data": { ... }, "meta": { "api": "v1", "docs": "https://datagalactica.com/api", ... } }
{ "ok": false, "error": { "code": "not_found", "message": "..." }, "meta": { ... } }

Errors and limits

StatusCodeWhen
400invalid_*A parameter is missing or malformed
401api_key_required, invalid_key, key_revoked, account_requiredNo key, a key that is not valid or was revoked, or an OAuth sign-in without an account
402insufficient_balanceThe wallet cannot pay for the call; details carry the balance and the top-up packs
403account_suspendedThe account is suspended
404not_found, no_routeNo such record, list or path (not billed)
429rate_limited, daily_limitOver the per-minute or daily limit; see the retry-after header
5xxserver_errorOur side; retry with backoff

Paging

/search and /find take limit (1 to 50) and offset (0 to 500); clamped values come back in meta, and /find gives a ready next URL. Lists page with page, 100 records each, up to 50 pages.

Grades and matching

The overall grade is about contact details: verified claimed by its owner; gold we hold an e-mail and a phone, both checked (verified or deliverable); silver we hold an e-mail and a phone; bronze less. Section grades (quality.sections) say how well each part is sourced. A record from a lead list may be a different real-world entity whatever its grade: check place and identifiers, and always cite the Galactica ID and the page url.

Verify and match

Verify a company

GET/verify/company

Does this organisation exist, is it the one meant, and is it operating? Send the name as your customer typed it (legal suffixes and punctuation do not matter) with a country, city or website, or send an identifier. You get the best record, a confidence from 0 to 1, a verdict, a check per field and the other candidates.

ParameterInTypeDescription
namequerystringOrganisation name (required unless id)
countryquerystringISO 3166-1 alpha-2
cityquerystringCity
websitequerystringWebsite or domain; agreeing domains weigh a lot
idquerystringInstead of name: CIN, LLPIN, LEI, GB-{n}, CIK-{n}, Q-id or Galactica ID; with a name too, the name is checked against it
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/verify/company?name=Infosys+Ltd&country=IN&website=infosys.com"
{ "ok": true, "data": {
  "verdict": "match", "confidence": 1, "operating": true,
  "match": { "id": "DGC-8SFS42RSWAX9", "name": "Infosys Limited", "legal_name": "INFOSYS LIMITED", "status": "operating",
    "quality": "gold", "country": "IN", "city": "Bangalore", "website": "https://www.infosys.com",
    "identifiers": { "cin": "L85110KA1981PLC013115", "lei": "335800TYLGG93MM7PR89" }, "url": "https://datagalactica.com/company/DGC-8SFS42RSWAX9/infosys-limited" },
  "checks": { "name": { "given": "Infosys Ltd", "found": "INFOSYS LIMITED", "ok": true, "score": 1 },
    "country": { "given": "IN", "found": "IN", "ok": true }, "website": { "given": "infosys.com", "found": "https://www.infosys.com", "ok": true } },
  "candidates": [ { "id": "DGC-...", "name": "Infosys BPM Limited", "confidence": 0.62 }, ... ]
} }
  • verdict: match (confidence 0.8 or more), possible_match (0.55 or more), no_match. A check with ok null means the record has nothing to check against.
  • A not-found answer (404) is free. A bronze match may still be a different organisation with the same name: read quality.

Verify a person in a role

GET/verify/person

Is there a public record of this person, at this employer or in this role? Checks the name against employer (current and past), title, city and country. Public professional records only; a verification never carries contact details.

ParameterInTypeDescription
name requiredquerystringFull name
employerquerystringOrganisation name
titlequerystringJob title
city, countryquerystringPlace; country as ISO 3166-1 alpha-2
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/verify/person?name=Salil+Parekh&employer=Infosys"
{ "ok": true, "data": { "verdict": "match", "confidence": 0.93,
  "match": { "id": "DGP-8J76H1YPDRQQ", "name": "Salil Parekh", "quality": "gold", "current": { "title": "Chief executive officer", "organization": "Infosys" }, ... },
  "checks": { "name": { "ok": true, "score": 1 }, "employer": { "given": "Infosys", "found": "Infosys", "ok": true } }, "candidates": [ ... ] } }

Match CRM rows to records

POST/match

Entity resolution for a list: up to 25 rows a call, each matched to its best record with a verdict and a confidence. Organisations by name with country, city or website; people (type person) by name with employer, title, city or country. Billed per row matched or possibly matched.

ParameterInTypeDescription
records requiredbodyobject[]{name, country, city, website} or {type: "person", name, employer, title, city, country}; 1 to 25
curl -X POST "https://api.datagalactica.com/api/v1/match" \
  -H "Authorization: Bearer YOUR_KEY" -H "content-type: application/json" \
  -d '{"records": [{"name": "Infosys", "country": "IN"}, {"type": "person", "name": "Salil Parekh", "employer": "Infosys"}]}'
{ "ok": true, "data": { "rows": 2, "matched": 2, "results": [
  { "row": 0, "verdict": "match", "confidence": 0.92, "match": { "id": "DGC-8SFS42RSWAX9", "name": "Infosys Limited", ... } },
  { "row": 1, "verdict": "match", "confidence": 0.93, "match": { "id": "DGP-8J76H1YPDRQQ", "name": "Salil Parekh", ... } } ] },
  "meta": { "billed_units": 2 } }

Any identifier to its Galactica ID

GET/resolve

The permanent Galactica ID, name, url and grade for a CIN, LLPIN, LEI, UK company number (GB-{n}), SEC CIK (CIK-{n}), Wikidata Q-id or Galactica ID. Use it to join your data on one key.

ParameterInTypeDescription
id requiredquerystringAny identifier
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/resolve?id=335800TYLGG93MM7PR89"
{ "ok": true, "data": { "galactica_id": "DGC-8SFS42RSWAX9", "type": "organization", "name": "Infosys Limited", "quality": "gold",
  "url": "https://datagalactica.com/company/DGC-8SFS42RSWAX9/infosys-limited", "identifiers": { "cin": "L85110KA1981PLC013115", "lei": "335800TYLGG93MM7PR89", "wikidata": "Q26989" } } }

Many records in one call

POST/batch

Full records for up to 50 identifiers of any kind, people and organisations mixed. Billed per record found; ids that match nothing are free.

ParameterInTypeDescription
ids requiredbodystring[]1 to 50 identifiers
curl -X POST "https://api.datagalactica.com/api/v1/batch" \
  -H "Authorization: Bearer YOUR_KEY" -H "content-type: application/json" \
  -d '{"ids": ["DGC-8SFS42RSWAX9", "L85110KA1981PLC013115", "Q76"]}'
{ "ok": true, "data": { "requested": 3, "found": 3, "results": [ { "id": "DGC-8SFS42RSWAX9", "found": true, "record": { ... } }, ... ] }, "meta": { "billed_units": 3 } }

Checks and diligence

Check a person

GET/person/check

The agent-shaped person check: is there a public record of this person with this employer, title, domain (the employer's website), city or country. Same matcher as /verify/person, returned in the decision envelope: verdict, confidence, grade, cite, conflicts (a bronze match says it may be a different person) and next.

ParameterInTypeDescription
name requiredquerystringFull name
employer, title, domain, city, countryquerystringAt least one helps; domain is the employer website
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/person/check?name=Salil+Parekh&employer=Infosys&title=CEO"
{ "ok": true, "data": { "verdict": "match", "confidence": 0.93, "grade": "gold",
  "cite": { "id": "DGP-8J76H1YPDRQQ", "type": "person", "name": "Salil Parekh", "url": "..." }, "conflicts": [], "next": ["person.diligence", "person.hire_check", "person.contact"],
  "checks": { "name": { "ok": true }, "employer": { "given": "Infosys", "found": "Infosys", "ok": true }, "title": { "ok": true } },
  "current": { "title": "Chief executive officer", "organization_id": "DGC-8SFS42RSWAX9" } } }
  • A check never carries contact details: with several candidates it would hand out every candidate's phone. Fetch contact for the one id you will use.

Same entity or not

GET/identity/check

Do two clues point to the same record? An id alone (CIN, LEI, GB-, CIK-, Q-id, Galactica ID), or type=person with name + employer, domain or city, or type=company with name + country, domain or id. Returns the decision envelope with the identifiers we store and, for organisations, operating. This is not a government KYC.

ParameterInTypeDescription
idquerystringAny identifier
typequeryperson | companyWith name
name, employer, domain, city, countryquerystringClues
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/identity/check?id=L85110KA1981PLC013115"
{ "ok": true, "data": { "verdict": "match", "confidence": 1, "grade": "gold", "cite": { "id": "DGC-8SFS42RSWAX9", ... }, "identifiers": { "cin": "...", "lei": "..." }, "operating": true } }
  • aadhaar, pan, passport, ssn, account_number and similar keys answer 400 unsupported_identifier, unbilled; the value is never read or logged.

An e-mail you already have

POST/email/check

Do we hold this exact address, on which record, and what status did we store? For an address from a CRM, a signature or a website. It never opens a mailbox connection and never guesses addresses.

ParameterInTypeDescription
email requiredbodystringThe address
curl -X POST "https://api.datagalactica.com/api/v1/email/check" \
  -H "Authorization: Bearer YOUR_KEY" -H "content-type: application/json" \
  -d '{"email": "name@company.com"}'
{ "ok": true, "data": { "verdict": "held", "status": "deliverable", "on": "person", "grade": "silver", "cite": { "id": "DGP-...", ... },
  "contact": { "emails": [ ... ], "phones": [ ... ] } } }
{ "ok": true, "data": { "verdict": "not_held" } }      (free)
{ "ok": true, "data": { "verdict": "withheld", "contact": null, "contact_reason": "owner_opted_out" } }
  • not_held is not billed and says nothing about whether the mailbox exists.

Due-diligence summary

GET/company/{id}/diligence, /person/{id}/diligence

One call instead of five: for an organisation, the grade per section, status, legal name and form, incorporation, address, jurisdiction, identifiers, tickers, group, directors and leaders (kept apart), founders, sources and conflicts; for a person, the current role, place, sources and conflicts (family only for public figures). Both end with unknown: what was not checked.

ParameterInTypeDescription
id requiredpathstringA Galactica ID, or any source id: CIN, LLPIN, LEI, GB-{number}, CIK-{cik}, Wikidata Q-id
employer, titlequerystringPerson: checked against the record when given
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/company/DGC-8SFS42RSWAX9/diligence"
{ "ok": true, "data": { "cite": { ... }, "grade": "gold", "status": "operating", "legal_name": "INFOSYS LIMITED", "identifiers": { ... },
  "listing": { "tickers": [ ... ] }, "group": { "parent": null, "subsidiaries": [ ... ] }, "directors": [ ... ], "leaders": [ ... ],
  "conflicts": [], "sources": [ ... ], "unknown": ["beneficial_owners", "sanctions", "gstin_status"] },
  "meta": { "note": "Not a substitute for a law firm, an AML or sanctions screen, or a background check." } }
  • Never describe a company as clean or sanctions-free from this: unknown says those were not checked.

Hiring

GET/company/{id}/hiring, /person/{id}/hire-check

Openings we hold for an organisation (count and recent titles, an honest zero when none) with its workforce role counts; and a person against a role: already there (a current role at that company), current title, skill overlap, and what they say they are looking for (empty, never guessed). Not a background check.

ParameterInTypeDescription
role requiredquerystringhire-check: free text
company, cityquerystringhire-check: name or DGC id; city
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/person/DGP-8J76H1YPDRQQ/hire-check?role=chief+executive&company=Infosys"
{ "ok": true, "data": { "verdict": "match", "already_there": true, "current_title": "Chief executive officer", "skill_overlap": [], "looking_for": [], ... } }

Contacts

Contact for one record

GET/person/{id}/contact, /company/{id}/contact

The full e-mail addresses and phone numbers we hold for one person, or an organisation's own, with the reason you need them. The same contact block also comes on /person/{id}, /company/{id}, search hits, /company/{id}/people and /batch for a signed-in account.

ParameterInTypeDescription
id requiredpathstringA Galactica ID, or any source id: CIN, LLPIN, LEI, GB-{number}, CIK-{cik}, Wikidata Q-id
purpose requiredquerystringrecruiting, sales, vendor_check, support, press or research; stored with the read, not an approval step
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/person/DGP-8J76H1YPDRQQ/contact?purpose=sales"
{ "ok": true, "data": { "id": "DGP-...", "purpose": "sales", "grade": "gold",
  "contact": { "emails": [ { "value": "name@company.com", "status": "deliverable" } ], "phones": [ { "value": "+91...", "status": "unverified" } ] } } }
  • No purpose: 400. Owner opted out: contact null with contact_reason owner_opted_out. Over the hourly limit: 429 contact_budget.

Market and talent

Market size

GET/research/market

Counts and example organisations for a country, a city and/or an ISIC industry, with the talent map of the city. Free: it is an aggregate. null means not computed for that slice, never a guess. No person names, no contacts.

ParameterInTypeDescription
countryquerystringISO 3166-1 alpha-2
cityquerystringCity
industryquerystringISIC section letter
functionquerystringPeople count for a function (worldwide)
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/research/market?country=IN&industry=J"
{ "ok": true, "data": { "place": { "country": "IN" }, "industry": { "code": "J", "name": "Information and communication" }, "organisations": 531252,
  "top_organisations": [ { "id": "DGC-...", "name": "...", "grade": "gold" }, ... ], "people": ..., "talent": null, "as_of": "2026-10-03", "cite": "https://datagalactica.com/companies/country/in/industry/J" } }

Talent map of a city

GET/talent/{city}

Counts of the roles and skills people list in a city. Cells under 5 people are left out so a small group is never singled out. Free.

ParameterInTypeDescription
city requiredpathstringCity name or slug
curl "https://api.datagalactica.com/api/v1/talent/pune"
{ "ok": true, "data": { "city": "Pune", "n": 1012281, "roles": [ { "name": "...", "n": 1234 } ], "skills": [ ... ], "suppressed_below": 5 } }

Watch

Follow records

POST/watch, /changes

Keep up to 500 Galactica IDs on your account's watch list (POST {"ids": [...]} up to 50 a call, {"remove": [...]} to drop), then GET /changes?since=2026-10-03 for the ones updated since. Free. Webhooks are not offered yet: poll /changes.

ParameterInTypeDescription
ids, removebodystring[]Galactica IDs
since requiredquerydate/changes
curl -X POST "https://api.datagalactica.com/api/v1/watch" \
  -H "Authorization: Bearer YOUR_KEY" -H "content-type: application/json" \
  -d '{"ids": ["DGC-8SFS42RSWAX9"]}'
GET /changes?since=2026-10-03  ->  { "since": "2026-10-03", "watched": 1, "changes": [ { "id": "DGC-8SFS42RSWAX9", "updated": "...", "changed": ["record"] } ] }

Free helpers

Typeahead, public card, group

GET/suggest, /{company|person}/{id}/card, /company/{id}/group

/suggest?q=info gives up to 8 names with place and grade (free). /company/{id}/card and /person/{id}/card are a free public preview: id, name, grade, one line, url. /company/{id}/group (billed) gives the parent, ultimate parent and subsidiaries.

ParameterInTypeDescription
qquerystringsuggest: 2+ characters
typequerycompany | personsuggest
curl "https://api.datagalactica.com/api/v1/suggest?q=infos&type=company"
{ "ok": true, "data": { "results": [ { "id": "DGC-8SFS42RSWAX9", "name": "Infosys Limited", "type": "company", "grade": "gold", "place": "Bangalore, India", "url": "..." } ] } }

Lookups

An organisation

GET/company/{id}

The full graded record of a company, non-profit, university or public body: status, founding, location, ISIC industry, size, people (founders, leaders, board), group and listing, timeline, website, registration, identifiers, sources and the grade of every section. /organization/{id} is the same.

ParameterInTypeDescription
id requiredpathstringA Galactica ID, or any source id: CIN, LLPIN, LEI, GB-{number}, CIK-{cik}, Wikidata Q-id
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/company/L85110KA1981PLC013115"
{ "ok": true, "data": {
  "id": "DGC-8SFS42RSWAX9", "type": "organization", "kind": "company",
  "name": "Infosys Limited", "status": "operating", "founded": "1981-07-02",
  "location": { "city": "Bangalore", "region": "Karnataka", "country": "IN" },
  "industry": { "section": "J", "section_name": "Information and communication", "label": "IT service management" },
  "size": { "band": "enterprise", "employees": { "n": 328594, "as_of": "2026" } },
  "people": { "founders": [ { "id": "DGP-V34W8M7CXAPX", "name": "N. R. Narayana Murthy" } ], ... },
  "identifiers": { "cin": "L85110KA1981PLC013115", "lei": "335800TYLGG93MM7PR89", "wikidata": "Q26989" },
  "contacts": { "emails": [ { "masked": "m***@i***.com", "status": "unverified" } ] },
  "quality": { "overall": "gold", "sections": { "registration": "gold", "people": "silver", ... } },
  "sources": [ { "name": "Ministry of Corporate Affairs company master data", "as_of": "2020-12-12" }, ... ],
  "updated": "2026-10-03", "url": "https://datagalactica.com/company/DGC-8SFS42RSWAX9/infosys-limited"
}, "meta": { "api": "v1", ... } }
  • Any source id resolves to the same record; the id in the response is always the Galactica ID.
  • On an account with contact access, the record also carries an unmasked contact object (see Contacts).

A person

GET/person/{id}

A public person record: headline, current role, career, education, skills with assessment scores, achievements, public life for public figures, network, sources and grades. Private and removed profiles answer 404.

ParameterInTypeDescription
id requiredpathstringA DGP- Galactica ID or a Wikidata Q-id
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/person/DGP-929RKAMSQDNK"
{ "ok": true, "data": {
  "id": "DGP-929RKAMSQDNK", "type": "person", "kind": "public_figure", "name": "Barack Obama",
  "headline": "44th President of the United States (2009 to 2017)",
  "public_life": { "born": { "date": "1961-08-04" }, "positions": [ { "title": "President of the United States", "from": 2009, "to": 2017 } ], ... },
  "education": [ { "degree": "Juris Doctor", "institution": { "name": "Harvard Law School" }, "from": 1988, "to": 1991 } ],
  "identifiers": { "wikidata": "Q76" }, "quality": { "overall": "gold" }, "url": "https://datagalactica.com/person/DGP-929RKAMSQDNK/barack-obama"
} }

Who runs an organisation

GET/company/{id}/people

Founders, leaders (with role and years), board members, and a sample of the people on Data Galactica who work there, with their Galactica IDs where they have one.

ParameterInTypeDescription
id requiredpathstringA Galactica ID, or any source id: CIN, LLPIN, LEI, GB-{number}, CIK-{cik}, Wikidata Q-id
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/company/DGC-8SFS42RSWAX9/people"
{ "ok": true, "data": { "organization": { "id": "DGC-8SFS42RSWAX9", "name": "Infosys Limited" },
  "founders": [ { "name": "N. R. Narayana Murthy", "id": "DGP-V34W8M7CXAPX", "url": "..." } ],
  "leaders": [ { "name": "Salil Parekh", "id": "DGP-8J76H1YPDRQQ", "role": "Chief executive officer", "from": 2018, "to": null } ],
  "board": [], "on_datagalactica": { "count": 975, "sample": [ ... ] } } }

Dataset counts

GET/meta

How many organisations and people there are, the number of countries and the build date.

curl "https://api.datagalactica.com/api/v1/meta"
{ "ok": true, "data": { "organizations": 15521908, "persons": 30589389, "countries": 239, "built": "2026-10-03" } }

Ask in plain words (AI)

GET/find

A question in plain English ("engineers in bengaluru who know python", "electric vehicle battery makers in india") is read by a language model into the same filters as /search, matched, and topped up with records close in meaning. understood shows how the question was read.

ParameterInTypeDescription
q requiredquerystringA name or a question, up to 300 characters
typequerycompany | person | allRestrict the answer; default all
limitqueryinteger1 to 50, default 20; out-of-range values are clamped and the applied one is returned in meta
offsetqueryinteger0 to 500
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/find?q=engineers+in+bengaluru+who+know+python"
{ "ok": true, "data": {
  "understood": { "type": "person", "city": "Bangalore", "function": "engineering", "skill": "python" },
  "count": 20, "next": "https://api.datagalactica.com/api/v1/find?q=...&limit=20&offset=20",
  "results": [ { "id": "DGP-...", "name": "...", "type": "person", "quality": "silver", "city": "Bangalore", ... } ],
  "related": [ ... records close in meaning ... ]
} }
  • Needs an API key (a free one is enough), sent to api.datagalactica.com. Without one: 401 key_required.
  • A plain name ("rachit jain") is not sent to the model; it is matched like /search.
  • When the model's reading finds nothing, the words are matched as typed.

Lists

Code lists with counts

GET/enums

Every value the filters accept, with how many records carry it: ISIC industry sections, people functions, seniority, size bands, statuses, kinds, grades and countries.

curl "https://api.datagalactica.com/api/v1/enums"
{ "ok": true, "data": {
  "industry": { "scheme": "ISIC Rev.4", "values": [ { "code": "L", "name": "Real estate", "organisations": 1164737 }, ... ] },
  "function": [ { "code": "engineering", "people": 1319543 }, ... ],
  "grade": [ { "code": "bronze", "means": "we do not yet hold both an e-mail and a phone" }, ... ],
  "country": [ { "code": "IN", "name": "India", "organisations": 6432479, "people": ... }, ... ]
} }

All ranked lists

GET/lists

The 762 ranked lists behind the directory pages: organisations by industry, country, country and industry, and city; people by function, country and city.

ParameterInTypeDescription
kindquerycompany | personOnly organisation or people lists
curl "https://api.datagalactica.com/api/v1/lists?kind=company"
{ "ok": true, "data": { "count": 590, "lists": [ {
  "list": "c/cc/in/sec/J", "title": "Information and communication in India", "total": 531252, "pages": 50,
  "url": "https://datagalactica.com/companies/country/in/industry/J", "api": "https://datagalactica.com/api/v1/lists/c/cc/in/sec/J"
}, ... ] } }

One page of a ranked list

GET/lists/{list}

100 records of a list, records with contact details first (gold, then silver); organisations then by how well known, people in a stable mixed order. Each list exposes its first 5,000 records (50 pages); use /search with filters to reach the rest.

ParameterInTypeDescription
list requiredpathstringA list path from /lists, such as c/sec/J, c/cc/in, c/cc/in/sec/J, c/city/gb/london, p/fn/engineering, p/city/in/delhi
pagequeryinteger1 to the list's pages (at most 50)
curl "https://api.datagalactica.com/api/v1/lists/c/cc/in/sec/J?page=2"
{ "ok": true, "data": {
  "list": "c/cc/in/sec/J", "title": "Information and communication in India", "total": 531252, "page": 2, "pages": 50,
  "next": "https://datagalactica.com/api/v1/lists/c/cc/in/sec/J?page=3",
  "results": [ { "id": "DGC-...", "name": "...", "sub": "...", "grade": "silver", "type": "company", "url": "..." }, ... ]
} }

Owners

Galactica Check: your own records

POST/check/start, /check/verify, /check/act

A person proves an e-mail with a 6-digit code, then sees, claims, hides or asks to remove the records linked to it, or creates a new Galactica ID. Nothing reveals whether an address is held before the code is entered. The /check page runs the same steps.

ParameterInTypeDescription
email requiredbodystringstart and verify
code requiredbodystringverify: the 6 digits we sent
token, id, action requiredbodystringact: the token from verify; claim, hide, remove, or create with a name
curl -X POST "https://api.datagalactica.com/api/v1/check/start" \
  -H "content-type: application/json" \
  -d '{"email": "you@example.com"}'
{ "ok": true, "data": { "sent": true } }
POST /check/verify {"email": "...", "code": "123456"}  ->  { "token": "...", "records": [ ... ], "actions": [ ... ] }
  • Codes last 10 minutes and allow 5 tries; 5 codes an hour per address of the caller and 3 per e-mail.
  • An organisation can be claimed only with an e-mail on its own website domain (not a free-mail domain).

Account and wallet

Wallet, usage and payments

GET/account, /account/usage, /account/payments

The account behind the key: balance, price per call, calls remaining and the top-up packs; the latest calls with what each was billed; the payments. All free.

ParameterInTypeDescription
limitqueryinteger/account/usage: 1 to 500, default 50
curl -H "Authorization: Bearer YOUR_KEY" \
  "https://api.datagalactica.com/api/v1/account"
{ "account": { "email": "you@example.com", ... }, "balance_inr": 48.72, "price_per_call_inr": 0.16, "calls_remaining": 304,
  "top_up": { "endpoint": "POST https://datagalactica.com/api/v1/account/topup", "packs": [ { "amount_inr": 500, "pay_inr": 500, "calls": 3125 }, ... ] } }

Top up (a pay link)

POST/account/topup

Starts a top-up of Rs 500, 5,000 or 50,000 and returns a pay_url: the person opens it and pays by UPI, card, net banking or wallet (Razorpay). Poll status_url until status is paid. Pay links stay open 48 hours. The same is offered as UCP and ACP checkout sessions (/.well-known/ucp, /.well-known/acp.json). Free.

ParameterInTypeDescription
amount requiredbodyinteger500, 5000 or 50000 (rupees of credit; no GST is charged)
curl -X POST "https://api.datagalactica.com/api/v1/account/topup" \
  -H "Authorization: Bearer YOUR_KEY" -H "content-type: application/json" \
  -d '{"amount": 500}'
{ "payment_id": "pay_3f2a...", "status": "pending", "credit_inr": 500, "amount_payable_inr": 500,
  "pay_url": "https://datagalactica.com/pay/...", "status_url": "https://datagalactica.com/api/v1/account/payments/pay_3f2a...", "expires_at": "..." }

Sign-up by an AI agent

POST/agent/identity, /agent/identity/claim

An agent creates or connects a person's account with only their e-mail: we mail a 6-digit code, the agent sends it back and gets an API key (new accounts start with Rs 50 of credit). On datagalactica.com, not under /api/v1. Full protocol: /auth.md.

ParameterInTypeDescription
login_hint requiredbodystringThe person's e-mail
name, company, agent_namebodystringOptional
code requiredbodystringclaim: the 6 digits
curl -X POST "https://datagalactica.com/agent/identity" -H "content-type: application/json" \
  -d '{"login_hint": "person@example.com", "agent_name": "My Assistant"}'
202 { "status": "code_sent", "claim_uri": "https://datagalactica.com/agent/identity/claim", "expires_in": 600 }
POST /agent/identity/claim {"login_hint": "...", "code": "123456"}  ->  201 { "api_key": "...", "token_type": "Bearer", "new_account": true, ... }

Agents (OAuth)

Your records and contributions

GET/me, /me/contributions

For an agent acting for the owner of a Galactica ID (OAuth bearer token): the records bound to the signed-in e-mail, and the edits and notes sent with their review status.

curl -H "Authorization: Bearer ACCESS_TOKEN" "https://datagalactica.com/api/v1/me"
{ "ok": true, "data": { "records": [ { "id": "DGP-...", "name": "...", "claimed": true } ], "contributions": [ ... ] } }

Propose edits, add notes

POST/me/updates, /entities/{id}/notes

Edits to a record you claimed, and notes on any record. Everything is reviewed: contacts scrubbed, id and account numbers rejected, sensitive topics held for a person, the rest checked automatically. Approved edits show at once and survive rebuilds.

ParameterInTypeDescription
id requiredbodystringA record you claimed
changes requiredbodyobjectPeople: headline, about, location, current, career, education, skills, languages, interests, web.social, achievements. Organisations: description, web.website, web.social, products, people.leaders
evidence_urlsbodystring[]Sources for the change
curl -X POST "https://datagalactica.com/api/v1/me/updates" \
  -H "Authorization: Bearer ACCESS_TOKEN" -H "content-type: application/json" \
  -d '{"id": "DGP-...", "changes": {"headline": "Data engineer"}}'
{ "ok": true, "data": { "status": "applied", "review": { "decision": "approve", "risk": "low" } } }
  • Scopes: profile:read, profile:write, notes:write. At most 30 contributions a day.

Contacts

Anyone not signed in sees contacts masked (m***@i***.com, with a status). A signed-in account (every account confirmed its e-mail with a code) gets the full values we hold on /person/{id}, /company/{id}, search and /people/search hits, /company/{id}/people (the first 20 with an id), /batch, /email/check and the contact routes:

"contact": { "emails": [ { "value": "...", "status": "verified" } ], "phones": [ { "value": "...", "status": "unverified" } ] }

When the owner has hidden or removed a record, contact is null with contact_reason: "owner_opted_out". Up to 60 records with contacts an hour per account (then contact_reason: "hourly_limit" on records, or 429 contact_budget on contact routes and search). Every read is logged with the account, the route and the purpose, never the values. Checks, verifications, lists, /find, talent and research never carry a person's contact. There is no route that sends e-mail or SMS: give the address to the person.

OAuth for agents

GET  /.well-known/oauth-authorization-server     RFC 8414
GET  /.well-known/oauth-protected-resource       RFC 9728
POST /oauth/register                             RFC 7591, public clients
GET  /oauth/authorize   response_type=code, PKCE S256, scope=api profile:read profile:write notes:write
POST /oauth/token       grant_type=authorization_code | refresh_token

The person signs in with an e-mail code and sees what the app asks for before allowing it. Scope api bills data calls to the wallet of that e-mail's account (created with the free credit if there is none); the profile and notes scopes act on the owner's own records. Access tokens last an hour; refresh tokens rotate on every use and last 30 days.

MCP

https://api.datagalactica.com/mcp          an API key or OAuth; data tools billed like the API, wallet tools free
https://datagalactica.com/mcp            the same server on the site
https://datagalactica.com/mcp/agent      OAuth only (kept for older clients)
claude mcp add --transport http datagalactica https://api.datagalactica.com/mcp --header "Authorization: Bearer YOUR_KEY"

Tools: search, search_companies, search_people, get_company, get_person, top_companies, talent_map (Rs 0.16 each when they answer), about_dataset, get_wallet, top_up_wallet, get_payment (free), get_contact on accounts with contact access, and with OAuth the owner's whoami, get_my_profile, propose_profile_update, add_note, list_my_contributions. Discovery: server card, API catalog, auth.md, llms.txt.