Connect Quickstart
Get up and running with Passage Connect in 5 minutes.
Prerequisites
- A Passage Connect API key
- A backend server (Node.js, Python, or any HTTP client)
Step 1: Create an API key
** Coming soon: Set up your app and generate an API key in the Passage dashboard. **
Today, reach out to the Passage team and get an API key.
Step 2: Create a link
From your backend, generate a link.
curl -X POST https://connect.passage.dev/v1/links \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"integrationId": "tmobile",
"resource": "mobileBillingStatement",
"action": "read",
"webhookUrl": "https://your-server.com/webhook"
}'Step 3: Present to user
Direct the user to the appClipUrl. They will log into their account. When finished, they will be redirected back to your application.
Step 4: Receive the result
There are two ways to get the result data.
Option A: Webhook (recommended)
If you provided a webhookUrl when creating the link, your endpoint receives a signed POST request when the automation completes:
{
"event": "link.complete",
"linkId": "link_abc123",
"status": "complete",
"result": {
"billing": [
{
"periodStart": "01/15/2025",
"periodEnd": "02/14/2025",
"amountDue": 85.00,
"currency": "USD"
}
]
},
"error": null,
"timestamp": 1704067200000
}Verify the signature using the X-Passage-Signature header before trusting the payload. See the Webhook Verification guide.
Option B: Poll the link
Fetch the link status until it reaches complete or failed:
curl https://connect.passage.dev/v1/links/link_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"The result field contains the same data that would be sent via webhook:
{
"id": "link_abc123",
"status": "complete",
"result": {
"billing": [
{
"periodStart": "01/15/2025",
"periodEnd": "02/14/2025",
"amountDue": 85.00,
"currency": "USD"
}
]
}
}Result shapes
The result object shape depends on the operation. Use GET /v1/providers to inspect the JSON Schema for each operation, or see the examples below.
| Operation | Result shape |
|---|---|
mobileBillingStatement:read | { billing: [{ periodStart, periodEnd?, dueDate?, amountDue, currency }] } |
paymentMethod:read | { paymentMethods: [{ order, vendorId, last4, type, isDefault, raw, ... }] } |
paymentMethod:write (dryRun) | { dryRun: true, card: { last4, nickname? } } |
paymentMethod:write (live) | { success: true, card: { last4 } } |
orderHistory:read | { orderCount, orders } |
Next steps
- Authentication — Learn about API key auth
- Links — Understand the link lifecycle
- Webhook Verification — Verify webhook signatures
- List Providers API — Discover available operations and result schemas
- Migration Guide — Migrating from the legacy
@getpassage/react-jsSDK