Marketplace API key
Your service → XY
- Identifies one organization and environment.
- Scopes REST and MCP operations.
- Created in Organization settings and shown once.
- Never supplied as workflow input or browser memory.
The AI native company for Healthcare
Credentials and MFA
A Marketplace API key authenticates your integration to XY. A runtime credential authenticates an XY browser workflow to a third-party portal. They have separate scopes, lifecycles, and exposure rules.
Two credential types
Marketplace API key
Runtime credential
Create
# Build this body from a protected secret source; do not paste it into shell history.
curl --fail-with-body --request POST \
--header "Authorization: Bearer ${XY_API_KEY}" \
--header "Content-Type: application/json" \
"${XY_API_BASE}/credentials" \
--data @credential.json
# credential.json
{
"domain": "portal.example.com",
"site_name": "Example operations portal",
"username": "workflow-user",
"password": "read-from-your-secret-manager",
"login_url": "https://portal.example.com/login",
"totp": "optional-base32-seed",
"pin": "optional-static-pin",
"phone_number": "+12025550123",
"notes": "optional private vault notes"
}Use credentials:write for create, rotate, and revoke, andcredentials:read for safe metadata. Keep write access out of ordinary Planner and analytics keys.
Bind
curl --fail-with-body --request POST \
--header "Authorization: Bearer ${XY_API_KEY}" \
--header "Idempotency-Key: portal-flow-v1" \
--header "Content-Type: application/json" \
"${XY_API_BASE}/planner/builds" \
--data '{
"request": "Sign in and collect the open records.",
"context": {
"portal_url": "https://portal.example.com/open-records",
"credential_id": "cred_REPLACE"
}
}'Planner verifies that the reference is active and belongs to the key's organization.
The canonical vault domain is derived by XY. A conflicting caller-supplied domain is rejected.
The runtime loads the credential only for the bound browser authoring or execution session.
Runtime memory
| Vault field | Ephemeral browser memory | Behavior |
|---|---|---|
| Username | credentials_username | Used for the portal identity field. |
| Password | credentials_password | Write-only secret resolved for the session. |
| TOTP seed | credentials_otp_code | Only the current generated code enters memory; long sessions refresh it. The seed never does. |
| Static PIN | credentials_pin | Available only when the portal has a separate static factor. |
| Phone number | credentials_phone_number | E.164 routing metadata for supported MFA activities; not an SMS provider. |
MFA and human gates
Rotate and revoke
curl --fail-with-body --request POST \
--header "Authorization: Bearer ${XY_API_KEY}" \
--header "Content-Type: application/json" \
"${XY_API_BASE}/credentials/cred_REPLACE/rotations" \
--data @replacement.json
# The public ID stays the same, so promoted workflows use the replacement next run.
curl --fail-with-body --request DELETE \
--header "Authorization: Bearer ${XY_API_KEY}" \
"${XY_API_BASE}/credentials/cred_REPLACE"