Partner onboarding
How an approved organization is provisioned for the Partner API: what to send e-Próspera, how origins and keys work, what to test before production, and how to report problems.
Partner Keys are issued by the e-Próspera team, not from the portal. This page covers the operational side of an integration. The API contract is in Partner Keys and the applicant-facing iframe is in Embedded agreement and identity verification.
Who can be a partner
A Partner Integration belongs to exactly one legal entity registered in e-Próspera. The entity must exist and must not be dissolved. Each legal entity can hold one integration, and the integration is the ownership boundary: applications, uploads, keys, approved origins, and idempotency records all belong to it. Two companies never share an integration.
Request an integration through the e-Próspera Help Center chat. Staging and production are separate environments with separate integrations and keys.
What to send e-Próspera
| Item | Details |
|---|---|
| Legal entity | The name or RPN of the entity that will own the integration |
| Label | A short name for the integration, for example Acme Relocation |
| Approved redirect origins | One to ten HTTPS origins. Every redirectUrl you send on application creation, update, and hosted checkout must match one of them exactly |
| Approved embed origins | Zero to ten HTTPS origins that may frame the e-Próspera embed. Required only for the embedded flow. This list is separate from redirect origins |
| Scopes per key | The subset of scopes each key needs |
| Key label | Who or what will hold the key, for example Acme — backend — production |
| Environment | staging or production |
Origin format
An origin is scheme, host, and optional port only.
https://apply.partner.example
https://apply.partner.example:8443An origin is rejected when it contains a path, query string, fragment, credentials, or a
wildcard. Production origins must use HTTPS. Staging additionally accepts loopback HTTP
origins (http://127.0.0.1:<port>, http://[::1]:<port>, http://localhost:<port>) for
local development.
Environments
| Environment | API base URL | Embed origin |
|---|---|---|
| Production | https://portal.eprospera.com | https://embed.eprospera.com |
| Staging | https://stg.portal.eprospera.com | https://staging-embed.eprospera.com |
Key lifecycle
- The raw
pk-...value is shown once at issuance. e-Próspera stores only its SHA-256 hash. If the value is lost, the key is revoked and a new one is issued. - Keys expire 90 days after issuance. Plan rotation in your operations calendar.
- Issuing a replacement key shortens every older active key on the integration to a maximum seven-day overlap. Deploy the new key within that window.
- Scopes are fixed at issuance. To change scopes, request a new key with the new scope set; the change becomes part of the audited rotation.
- Any key can be revoked immediately. Revoked keys return
401on every request. - An integration can be suspended, which makes every key return
401until it is reactivated, or revoked, which is permanent. Existing applications keep their history. - Authentication is also refused while the owning legal entity is dissolved.
Several engineers or systems
Issue one key per holder rather than sharing a key. Each key has its own label, last-used timestamp, and audit trail, and revoking one holder does not interrupt the others. Keep staging and production keys in separate secret stores.
Security responsibilities
- Send the key only from your backend. Never ship it to a browser or a mobile app.
- Treat
nextSteps.agreementUrlandembedUrlas short-lived bearer secrets. Deliver them only to the intended applicant and keep them out of logs, analytics, and support tickets. - In the embedded flow, the PKCE verifier stays in the applicant's browser. Never send it to your backend, put it in a URL, or record it.
- Authorize your own signed-in user before creating or reading an application on their behalf, and verify in your system that the application belongs to that user.
- Applicant data you send is personal data. Minimize what you retain.
What e-Próspera records
Every Partner API call is audited with the method, path, response status, key, and integration, without the raw credential. Denied scopes, throttling, and inactive-key attempts are recorded too. The e-Próspera team can see every application created under an integration, the audit log, and each key's last-used timestamp. Partners do not have a self-service view of this data today; ask through the Help Center when you need an export.
Before a production key is issued
Complete this checklist in staging with your staging key. Use applicant email addresses you control. See Testing in staging for staging-specific behavior such as the reusable voucher and automatic approval.
Happy path
- Create a Draft with an
Idempotency-Key; confirmapplicantPortalAccess.claimLinkSentistruefor a fresh applicant email. - Repeat the identical request; confirm
Idempotency-Replayed: trueand the sameid. - Reuse the key with a changed body; confirm
409. - Upload a proof-of-address document; confirm the response carries an opaque
idand no URL. - PATCH the full application with
expectedVersionand the upload ID; confirmversionincrements. - Repeat the PATCH with the old version; confirm
409withcurrentVersion. - Pay with the staging voucher or hosted checkout using a new
Idempotency-Key; confirm the application stays inDraft. - Complete either the hosted agreement path or the embedded flow with a real browser.
- Hosted path only: call
/submitoncenextSteps.submitReadyistrue. - Poll
GET /partner/residency_applications/{id}untilstatusIdleavesPending Review. - After approval, read
/documentsand wait for the signed agreement file. Check its download separately from agreement acceptance; follow the document integration checklist.
Failure cases
- A
redirectUrlon an unapproved origin returns400. - A key without the required scope returns
403. - Another integration's application returns
404on read, update, download, pay, and submit. - An expired or revoked key returns
401. - Embedded flow: an unpaid or incomplete application returns
409on session creation, a frame loaded from an unapproved origin is denied, and messages from the wrong origin or window are ignored by your listener. - No response body or
postMessageevent exposed a signature, identity document, Veriff URL, or decision detail.
Reporting a problem
Send the approximate timestamp in UTC, the HTTP status, the endpoint path, and the application
or session ID. Do not include the Partner Key, the PKCE verifier, an embedUrl or
agreementUrl, applicant personal data, signatures, or identity documents.
Limits
- Restricted-country applicants: the Partner API cannot currently attach the reference letters and exemption that e-Próspera requires for applicants born in, or citizens of, restricted jurisdictions. Onboard those applicants through the portal instead. Ask the Help Center for the current list.
- There are no outbound webhooks. Poll application status; see Conventions.
- Partner Keys are not supported by the
eprosperaCLI. Use direct HTTP.
Partner Keys
Partner Keys let an approved organization create and manage natural-person residency applications over REST. Each `pk-...` key belongs to one Partner Integration and can access only that integration's applications.
Embedded agreement and identity verification
Host the Agreement of Coexistence and Veriff identity verification inside your own page with a PKCE-bound e-Próspera iframe. Origins, activation, events, expiry, errors, and troubleshooting.