Skip to main content

Locations API

Public, no-auth API that aggregates jobs by country and city across all Flowxtra tenants. Powers the SEO country/city landing pages on the 17 branded career domains (bewerben.link, aplikuj.link, appliquer.net, …).

All endpoints share the same visibility rules as the central jobs feed: status = Live, status_by_admin = approved, posted within the last 35 days, and excluding arison / creativity test domains.

Base URL​

EnvironmentURL
Productionhttps://app.flowxtra.com
Localhttp://localhost:8000

Endpoints​

MethodEndpointDescription
GET/api/locations/countriesList countries with active job counts
GET/api/locations/citiesList cities (with counts) for a country
GET/api/locations/jobsPaginated jobs filtered by location

List Countries​

Returns every country that has at least one active job, with the total count. Optionally scoped to a single career domain.

GET /api/locations/countries?career_domain=bewerben.link

Query Parameters​

ParameterTypeRequiredDescription
career_domainstringNoFilter to tenants whose domains.career_domain matches one of the 17 branded domains

Response​

{
"success": true,
"message": "200",
"data": [
{
"name": "Germany",
"iso2": "DE",
"country_id": 83,
"job_count": 42
},
{
"name": "Switzerland",
"iso2": "CH",
"country_id": 216,
"job_count": 8
}
]
}

List Cities​

Returns every city in the given country that has at least one active job, sorted by job count descending.

GET /api/locations/cities?country=DE&career_domain=bewerben.link&limit=200

Query Parameters​

ParameterTypeRequiredDescription
countrystringYesISO 3166-1 alpha-2 code (e.g. DE) or full country name (e.g. Germany)
career_domainstringNoFilter to one branded career domain
limitintegerNoMaximum cities to return (default: 200)

Response​

{
"success": true,
"message": "200",
"data": [
{
"name": "Berlin",
"slug": "berlin",
"state": "Berlin",
"job_count": 12
},
{
"name": "München",
"slug": "munchen",
"state": "Bayern",
"job_count": 8
}
]
}

List Jobs by Location​

Returns paginated central jobs filtered by country and/or city. Same payload shape as /api/central/jobs so the same JobCard component can render the result.

GET /api/locations/jobs?country=DE&city=Berlin&career_domain=bewerben.link&page=1&per_page=12

Query Parameters​

ParameterTypeRequiredDescription
countrystringNoISO2 code or full country name
citystringNoExact city name as stored in central_jobs.city_company.name
career_domainstringNoOne of the 17 branded domains
pageintegerNoPage number (default: 1)
per_pageintegerNoResults per page (default: 12)
search-keystringNoFree-text search on job title
key-categoryintegerNoAMS category ID
workplacestringNoOn-site, Remote, or Hybrid
employment_typestringNoe.g. Full-time, Part-time

Response​

{
"success": true,
"message": "200",
"data": {
"current_page": 1,
"data": [
{
"id": 110,
"has_id": "Nx5p",
"title": "Customer Service Associate",
"workplace": "Remote",
"currency": "USD",
"date_share": "2026-04-02T08:27:00.000000Z",
"min_salary": 50,
"max_salary": 60,
"rate_salary": "hour",
"name_company": "Keemail",
"city_company": "Berlin",
"state_company": "Berlin",
"country_company": "Germany",
"logo_company": "https://...",
"skills": ["Customer Service", "Communication"],
"employment_types": ["Full-time"],
"urlJobApplay": "https://flowxtra.com/apply/Nx5p"
}
],
"first_page_url": "...",
"last_page": 4,
"per_page": 12,
"total": 42
}
}

Career Domain → Country Targeting​

Each branded career domain targets specific markets. The frontend uses a static map (lib/domain-countries.ts) and only renders countries from the relevant list per domain.

DomainLanguageTargets (ISO2)
apply-link.net, apply-jobs.netEnglishGB, IE, US, CA, AU, NZ
bewerben.linkGermanDE, AT, CH
appliquer.netFrenchFR, BE, CH, LU, MC
postular.linkSpanishES, MX, AR, CO, CL, PE, VE, EC, UY
solliciteren.linkDutchNL, BE
candidarsi.linkItalianIT, CH, SM
prihlasit.linkCzech / SlovakCZ, SK
aplikuj.linkPolishPL
candidatar.linkPortuguesePT, BR, AO, MZ
jelentkezz.linkHungarianHU
ansok.linkSwedishSE
ansog.linkDanishDK, NO
hakea.linkFinnishFI
aitisi.linkGreekGR, CY
kandidatstvai.linkBulgarianBG
prijavi.linkSouth SlavicHR, SI, RS, BA, ME, MK

SEO Landing Page URLs​

The Locations API powers landing pages with localized URL slugs per domain:

DomainCountry PageCity Page
apply-link.net/locations/germany/locations/germany/berlin
bewerben.link/orte/deutschland/orte/deutschland/berlin
aplikuj.link/lokalizacje/polska/lokalizacje/polska/warszawa
appliquer.net/lieux/france/lieux/france/paris
postular.link/lugares/españa/lugares/españa/madrid

Each city page includes:

  • Localized H1, title, and meta description in the domain's language
  • Wikipedia city summary in the local language (24h cache)
  • JobPosting JSON-LD per job (eligible for Google Jobs Rich Results)
  • BreadcrumbList, ItemList, and Place structured data
  • hreflang alternates linking the same city across all sibling domains
  • Self-canonical URL (always page 1)