atanet APIatanet.org ↗
Search ATA's translator directory, retrieve member profiles, verify certifications, and pull news and events via 6 structured endpoints.
What is the atanet API?
The atanet.org API exposes 6 endpoints covering the American Translators Association member directory, certification verification, and organizational content. Use search_members to query thousands of professional translators by language pair, specialization, or certification status, then pull full contact details and bios with get_member_profile. Two additional endpoints deliver upcoming ATA events and recent news articles.
curl -X GET 'https://api.parse.bot/scraper/e51c0a07-700d-4bc1-bb67-e5620fcf7780/search_members?page=0&limit=5&to_lang=Spanish&from_lang=English&member_type=Translator&certified_only=False&specialization=Medicine+-+Health+care' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace atanet-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""ATA Directory & Resources API — bounded, re-runnable walkthrough."""
from parse_apis.ata_directory_resources_api import ATA, MemberType, MemberNotFound
client = ATA()
# Search for Spanish translators in the directory
for member in client.members.search(from_lang="English", to_lang="Spanish", member_type=MemberType.TRANSLATOR, limit=3):
print(member.name, member.city, member.country)
# Drill into one member's full profile
member = client.members.search(from_lang="English", to_lang="Spanish", limit=1).first()
if member:
profile = client.memberprofiles.get(slug=member.permalink.rstrip("/").split("/")[-1])
print(profile.name, profile.email, profile.language_pairs)
# Verify a certification number
result = client.members.verify(cert_number="446534")
print(result.valid, result.message)
# List upcoming events
for event in client.events.list(limit=3):
print(event.title, event.start_date)
# Typed error handling
try:
client.memberprofiles.get(slug="nonexistent-profile-xyz")
except MemberNotFound as exc:
print(f"Profile not found: {exc.slug}")
# Get directory filter options
filters = client.directoryfilterses.get()
print(filters.member_type, filters.source_languages)
print("exercised: members.search / memberprofiles.get / members.verify / events.list / directoryfilterses.get")
Full-text and faceted search over the ATA member directory. Filters by language pair, member type, specialization, and certification status. Returns paginated results ordered by relevance. Each hit carries contact details, language pairs, and specialization tags. Paginates via a 0-based page counter.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-based). |
| limit | integer | Number of results per page. |
| query | string | Keyword or name search term. |
| to_lang | string | Target language filter (e.g. 'Spanish', 'English', 'French'). Use with from_lang to filter by language pair. |
| from_lang | string | Source language filter (e.g. 'English', 'Spanish', 'French'). Use with to_lang to filter by language pair. |
| member_type | string | Filter by member type. |
| certified_only | boolean | Only return ATA-certified members for the specified language pair. Requires from_lang and to_lang. |
| specialization | string | Area of specialization filter (e.g. 'Medicine - Health care', 'Law - Contracts'). Values available from get_directory_filters. |
{
"type": "object",
"fields": {
"page": "integer current page (0-based)",
"items": "array of member objects with name, city, country, lang_pairs, permalink, member_type, specializations, etc.",
"pages": "integer total pages",
"total": "integer total matching members"
},
"sample": {
"data": {
"page": 0,
"items": [
{
"city": "",
"name": "Jane Doe",
"country": "United States",
"permalink": "https://www.atanet.org/member-directory/rebecca-bran/",
"member_type": [
"Translator"
],
"public_email": "[email protected]",
"lang_pairs_legible": "English to Spanish, Spanish to English",
"certification_number": ""
}
],
"pages": 200,
"total": 1605
},
"status": "success"
}
}About the atanet API
Member Directory Search and Profiles
The search_members endpoint accepts keyword queries alongside faceted filters for from_lang, to_lang, member_type, specialization, and a certified_only boolean that restricts results to ATA-certified members for a given language pair. Results paginate via page (0-based) and limit parameters, and each item in the items array carries name, city, country, lang_pairs, permalink, member_type, and specializations. The permalink field supplies the slug you pass to get_member_profile to retrieve a full record including email, phone, website, location, description, service_types, and language_pairs.
Certification Verification
verify_certification_number accepts a single cert_number string and returns a valid boolean. When the number matches a directory record, the full member object is included in the response. When no match is found, a message string explains the result. This makes it straightforward to build a lightweight credential-check flow without a manual directory search.
Directory Filters, News, and Events
get_directory_filters returns facet counts for all filterable dimensions — member_type, lang_pairs.from, lang_pairs.to, and directory-specialization — which is useful for populating dropdowns or understanding directory composition before issuing a search_members call. get_news_articles returns the 10 most recent ATA news posts with id, date, title, content, excerpt, link, and categories. get_events returns upcoming events ordered by start date, each with id, title, description, start_date, end_date, url, categories, and organizer.
The atanet API is a managed, monitored endpoint for atanet.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when atanet.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official atanet.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a translator-finder widget that filters ATA members by language pair and specialization using search_members
- Verify a freelance translator's ATA certification number before engaging them for a contract
- Populate a language-pair dropdown from get_directory_filters counts before showing search results
- Display a translator's full contact info, bio, and service types by chaining search_members with get_member_profile
- Aggregate ATA news articles into a translation industry content feed using get_news_articles
- Show upcoming ATA conferences and chapter events in a professional development calendar via get_events
- Audit a vendor list of translators by batch-checking each certification number against verify_certification_number
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.