Passage by 1Password Magic Links API

Magic link creation for passwordless login and identifier verification.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/passage-1password-magic-links-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

passage-1password-magic-links-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Passage by 1Password Management Devices Magic Links API
  description: Server-side REST Management API for Passage by 1Password, the passwordless / passkey authentication platform. Operations are scoped to a Passage application (app_id) and authenticated with a Bearer API key generated in the Passage Console (Settings -> API Keys). Covers user lifecycle (list, create, get, update, delete, activate, deactivate), WebAuthn device management, refresh-token revocation, and magic link creation. NOTE - 1Password has announced that the Passage product is being retired on 2026-01-16; this specification documents the API as published as of 2026-06-20.
  termsOfService: https://passage.1password.com
  contact:
    name: Passage by 1Password Support
    url: https://docs.passage.id/home
  version: '1.0'
servers:
- url: https://api.passage.id/v1
  description: Passage Management API
security:
- bearerAuth: []
tags:
- name: Magic Links
  description: Magic link creation for passwordless login and identifier verification.
paths:
  /apps/{app_id}/magic-links:
    post:
      operationId: createMagicLink
      tags:
      - Magic Links
      summary: Create a magic link
      description: Creates a magic link for login or identifier verification. Supply email or phone; set send=true (with channel) to have Passage deliver it, otherwise the embedded link is returned for your own delivery. If the user does not exist they are created first.
      parameters:
      - $ref: '#/components/parameters/AppID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMagicLinkRequest'
      responses:
        '201':
          description: The created magic link.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MagicLinkResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    MagicLinkResponse:
      type: object
      properties:
        magic_link:
          $ref: '#/components/schemas/MagicLink'
    Error:
      type: object
      properties:
        code:
          type: string
        error:
          type: string
        message:
          type: string
    MagicLink:
      type: object
      properties:
        id:
          type: string
        app_id:
          type: string
        user_id:
          type: string
        identifier:
          type: string
        type:
          type: string
          enum:
          - login
          - verify_identifier
        redirect_url:
          type: string
        ttl:
          type: integer
        url:
          type: string
        secret:
          type: string
        activated:
          type: boolean
    CreateMagicLinkRequest:
      type: object
      properties:
        email:
          type: string
          format: email
        phone:
          type: string
        user_id:
          type: string
          description: Target an existing user by ID instead of an identifier.
        channel:
          type: string
          enum:
          - email
          - phone
          description: Delivery channel. Required if send is true.
        send:
          type: boolean
          description: Whether Passage should deliver the magic link.
        language:
          type: string
          description: Language of the email or SMS to send.
        magic_link_path:
          type: string
          description: Relative URL the magic link points to.
        redirect_url:
          type: string
        ttl:
          type: integer
          description: Time to live, in minutes.
        type:
          type: string
          enum:
          - login
          - verify_identifier
          description: Defaults to login.
  responses:
    BadRequest:
      description: The request was malformed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: The API key is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    AppID:
      name: app_id
      in: path
      required: true
      description: The Passage application ID.
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Passage Management API key, sent as: Authorization: Bearer <PASSAGE_API_KEY>'