Skip to main content
Use Linguapop through Corsair: one client, typed API calls. Create the key in Linguapop under Integrations (an organization admin clicks + Add, names the integration, then copies its API key). Archived integrations are rejected, and refreshing a key invalidates the old one at once. Things to know before you send:
  • Linguapop needs a paid plan for invitations. You can create an account and preview tests for free, but an active subscription with billing details is required to administer placement tests. Linguapop bills only completed tests.
  • The key travels in the request body. Linguapop reads an apiKey field from the JSON body of invitations.create, not a header. Corsair adds it for you; it is not an input, and passing apiKey yourself is rejected. Errors thrown by this plugin never carry the key.
  • Languages. languages.list returns { name, code } pairs. Pass the code (for example ita, and ger for German) as languageCode. More languages are planned, so the plugin does not restrict code to today’s five.
  • No key is sent to languages.list. A live check showed Linguapop answers it without one, so the plugin does not put the key on a GET. Corsair still needs a saved key to run the call.
  • Invitations are not undone. invitations.create is not documented as idempotent and has no cancel call, so it is never retried after a 5xx or a timeout. Check Linguapop before repeating a call that failed that way. externalIdentifier is your own ID for the candidate; it is not a duplicate guard.
  • The returned url is the candidate’s access link. It holds the invitation token, so treat it as a secret. Set sendEmail: false to hand it to the candidate yourself.
  • Results. Linguapop reports a finished test by POSTing to the callbackUrl you give. That call is unsigned and this plugin does not receive it, and the API has no call to fetch results.
  • Unverified. The author had no paid account, so the live suite in api.test.ts has not run against invitations.create: the exact response shape follows the docs’ example and is untested against the real API. Only languages.list and the rejection of an unrecognised key were checked live.
  • Webhooks. None are handled.
What you get:
  • 2 typed API operations

Setup

1

Install

2

Add the plugin

corsair.ts
With multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.
3

Choose authentication

4

Connect a tenant

Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.

Example API calls

List the languages Linguapop can test
Create a placement test invitation and return the link without emailing it
See the full list on the API page.

What’s next

API reference

Every linguapop.api.* operation with input and output types.

Connect / OAuth

createLink, Hub delivery, and tenant connect flows.

Use with agents

Expose this plugin’s operations as MCP tools.