Sylphx Identity

First success · tutorial

Create one principal. Read it back.

The first useful result is a customer principal admitted in the signed project, then retrieved through the same Binding. This site does not accept tokens, does not host a login, and is not a product admin console.

Job and developer

Independent developer or product team: bind one Sylphx project/environment to Identity, create one customer principal, and read that principal through the public contract.

Prerequisites

  • A current Platform Project Binding for product identity. Discovery is Binding api_base. Dest peel is https://api.identity.sylphx.com; {name}.api.sylphx.com is never a product API. Do not compile sibling hostnames.
  • A matching Identity delegation for the same binding, including identity.principal.customer.create and identity.principal.get. Binding maximum 900s; delegation maximum 300s.
  • The Product Contract at api/proto/sylphx/identity/v1/identity.proto and generated product-contract.bundle.json. Clients are generated from that contract. There is no handwritten public client in this repository.

Minimum HTTP path

Set the peel from Binding api_base, then call published operations. Environment names below are shell wiring, not a second protocol.

export IDENTITY_API_URL="$BINDING_API_BASE"

curl -sS "$IDENTITY_API_URL/v1/principals/customers" \
  -H "Authorization: Bearer <sylphx-delegation+jwt>" \
  -H "Sylphx-Project-Binding: <sylphx-project-binding+jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotency_key": "first-success-customer-1",
    "email": "builder@example.com",
    "display_name": "First success"
  }'

curl -sS "$IDENTITY_API_URL/v1/principals:get" \
  -H "Authorization: Bearer <sylphx-delegation+jwt>" \
  -H "Sylphx-Project-Binding: <sylphx-project-binding+jwt>" \
  -H "Content-Type: application/json" \
  -d '{"principal_id": "<returned-principal-id>"}'

No x-project-id. No product key. Do not paste tokens into this site.

Expected result and readback

Create returns the admitted principal identity. Get through the same Binding returns that project's principal. A copied identity cannot disclose another project. Exact replay of the same idempotency key and payload returns the same principal.

Typed failure, recovery, cleanup

  • Missing, stale, revoked, forged, or mismatched Binding/delegation: zero domain writes.
  • Divergent replay of a live idempotency key: conflict before a second principal.
  • Workload used as a customer (MFA, email verification, recovery): fail closed.
  • Stable error envelope carries a public code without secrets.
  • Cleanup is principal revoke on the current head — not a form on this host.

Production-shaped next step

Keep using generated operations from the Product Contract: mint a Plan-bound delegation, verify email, and consume JWKS. Do not treat /healthz on either host as first success. Customer login screens belong to the consuming product.