docs: add docstrings with Tink API links to all demo step handlers
All checks were successful
Build and Deploy / deploy (push) Successful in 1m15s

This commit is contained in:
Henrik Jess Nielsen
2026-05-23 01:40:43 +02:00
parent 89b6f261ed
commit 3851b6c478

View File

@@ -130,6 +130,11 @@ async def debug_session(request: Request):
@router.get("/demo/step/1", response_class=HTMLResponse)
async def step1(request: Request):
"""
Step 1: Client Credentials authentication.
Fetches an app-level token with scope 'user:create,authorization:grant'.
Docs: https://docs.tink.com/api#connectivity/oauth/create-an-oauth-token
"""
sess = _session(request)
client = _client(log_cb=_logger(sess))
s = get_settings()
@@ -169,6 +174,10 @@ async def step1(request: Request):
@router.get("/demo/step/2", response_class=HTMLResponse)
async def step2_get(request: Request):
"""
Step 2 (GET): Render user creation form.
Shows existing user if already created in this session.
"""
sess = _session(request)
s = get_settings()
app_token = _load_token(sess, "app_token")
@@ -196,6 +205,12 @@ async def step2_get(request: Request):
async def step2_post(request: Request,
customer_name: str = Form(default=""),
market: str = Form(default="DK")):
"""
Step 2 (POST): Create a Tink user tied to a customer reference.
external_user_id is built from the customer name + random hex suffix to ensure uniqueness.
Tink returns a user_id (UUID) that is stored in session for subsequent calls.
Docs: https://docs.tink.com/api#user/create-user
"""
sess = _session(request)
s = get_settings()
app_token = _load_token(sess, "app_token")
@@ -259,6 +274,13 @@ CONSOLE_CALLBACK = "https://console.tink.com/callback"
@router.get("/demo/step/3", response_class=HTMLResponse)
async def step3_get(request: Request):
"""
Step 3: Bank connection via Tink Link.
Calls authorization-grant/delegate to get a one-time code, then builds the
Tink Link URL that redirects the user to select and log into their bank.
After successful bank login, Tink redirects back to /callback with an auth code.
Docs: https://docs.tink.com/resources/tink-link/tink-link-web-permanent-users
"""
sess = _session(request)
s = get_settings()
client = _client(log_cb=_logger(sess))
@@ -452,6 +474,11 @@ async def tink_callback(request: Request, code: Optional[str] = None,
@router.get("/demo/step/4", response_class=HTMLResponse)
async def step4(request: Request):
"""
Step 4: List accounts (v2 endpoint).
Requires a user_token from the callback. Falls back to mock data if demo_mode is set.
Docs: https://docs.tink.com/api#account-service-v2/account/list-accounts
"""
sess = _session(request)
s = get_settings()
user_token = _load_token(sess, "user_token")
@@ -501,6 +528,11 @@ async def step4(request: Request):
@router.get("/demo/step/5", response_class=HTMLResponse)
async def step5(request: Request, account_id: Optional[str] = None):
"""
Step 5: List transactions (v2 endpoint), optionally filtered by account_id.
Uses cursor-based pagination via nextPageToken.
Docs: https://docs.tink.com/api#transaction-service-v2/transaction/list-transactions
"""
sess = _session(request)
s = get_settings()
user_token = _load_token(sess, "user_token")
@@ -549,6 +581,12 @@ async def step5(request: Request, account_id: Optional[str] = None):
@router.get("/demo/step/6", response_class=HTMLResponse)
async def step6(request: Request):
"""
Step 6: Webhooks — list existing and register a new endpoint.
Demonstrates real-time event delivery (account updates, new transactions).
Webhook receiver is at /webhooks/tink — logs payloads to api_log.
Docs: https://docs.tink.com/api#webhook/create-webhook-endpoint
"""
sess = _session(request)
s = get_settings()
is_demo = sess.get("demo_mode") or s.demo_mode