Skip to Content
Passage ConnectQuickstart

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.

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.

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.

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.

OperationResult 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

Last updated on