{"openapi":"3.1.0","info":{"title":"OpenMoney API","version":"0.1.0","description":"OpenMoney API, Phase 0.\n\n**Errors** are RFC 9457 `application/problem+json` documents (`type`, `title`, `status`, `detail`, `instance`, plus `errors[]` for validation, `requestId`, `traceId`). Problem types live under `https://openmoney.ai/problems/<slug>`.\n\n**Idempotency.** Every POST, PATCH, PUT, and DELETE requires an `Idempotency-Key` header (UUID). The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`; a concurrent duplicate returns 409 `idempotency-in-progress`. Exempt: `POST /v1/auth/passkey/register/options`, `POST /v1/auth/passkey/register/verify`, `POST /v1/auth/passkey/login/options`, `POST /v1/auth/passkey/login/verify` (challenges are single-use by construction) and `GET /v1/auth/magic-link/consume` (GET).\n\n**Rate limits.** 120 requests/minute per IP for anonymous traffic, 600/minute per session, each API key's own limit, and 10/minute per IP on every `/v1/auth/*` route. Exceeding returns 429 with `Retry-After`.\n\n**Auth.** Browser sessions use the `__Host-om_session` cookie (HttpOnly, SameSite=Lax, Secure outside local, 30-day sliding). Agents and relying parties send `Authorization: Bearer om_test_…` / `om_live_…`.\n\n**Money** is always an integer in minor units with a currency; percentages are basis points. Statistics travel only as `EvidenceValue` objects with source, sample size, and as-of date.","contact":{"name":"OpenMoney","url":"https://openmoney.ai"}},"components":{"securitySchemes":{"sessionCookie":{"type":"apiKey","in":"cookie","name":"__Host-om_session"},"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"om_<env>_<random>"}},"schemas":{"ProblemInput":{"type":"object","properties":{"type":{"type":"string","description":"Problem type URI under https://openmoney.ai/problems/"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"instance":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"type":"string"}},"required":["path","message"]}},"requestId":{"type":"string"},"traceId":{"type":"string"}},"required":["type","title","status"],"additionalProperties":{}},"UserInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"roles":{"type":"array","items":{"type":"string","enum":["earner","relying_party_admin","agent_principal","curator","admin"]}},"emailVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"locale":{"type":"string"},"timezone":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","email","handle","displayName","roles","emailVerifiedAt","locale","timezone","createdAt"]},"OrgInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["relying_party","agent_operator","employer","internal"]},"verificationStatus":{"type":"string"},"website":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","slug","kind","verificationStatus","website","createdAt"]},"OrgMembershipInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["relying_party","agent_operator","employer","internal"]},"verificationStatus":{"type":"string"},"website":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["id","name","slug","kind","verificationStatus","website","createdAt","role"]},"SessionInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"deviceLabel":{"anyOf":[{"type":"string"},{"type":"null"}]},"userAgent":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastSeenAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"current":{"type":"boolean"}},"required":["id","deviceLabel","userAgent","lastSeenAt","createdAt","expiresAt","current"]},"PasskeyInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}]},"deviceType":{"type":"string","enum":["singleDevice","multiDevice"]},"backedUp":{"type":"boolean"},"transports":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","nickname","deviceType","backedUp","transports","createdAt","lastUsedAt"]},"ConsentEventInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"scope":{"type":"string"},"action":{"type":"string"},"subjectType":{"anyOf":[{"type":"string"},{"type":"null"}]},"subjectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"detail":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","scope","action","subjectType","subjectId","detail","createdAt"]},"ApiKeyInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"tier":{"type":"string"},"rateLimitPerMinute":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","orgId","name","prefix","scopes","tier","rateLimitPerMinute","lastUsedAt","expiresAt","revokedAt","createdBy","createdAt"]},"ProviderStatusInput":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"mode":{"type":"string","enum":["live","sandbox","unconfigured"]},"requires":{"type":"array","items":{"type":"string"}},"unlocks":{"type":"array","items":{"type":"string"}},"howTo":{"type":"string"}},"required":["id","label","mode","requires","unlocks","howTo"]},"HealthInput":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded","unavailable"]},"version":{"type":"string"},"env":{"type":"string"},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"checks":{"type":"object","properties":{"postgres":{"type":"string","enum":["ok","degraded","unconfigured"]},"redis":{"type":"string","enum":["ok","degraded","unconfigured"]},"storage":{"type":"string","enum":["ok","degraded","unconfigured"]},"email":{"type":"string","enum":["ok","degraded","unconfigured"]}},"required":["postgres","redis","storage","email"]}},"required":["status","version","env","checkedAt","checks"]},"JobsLogRowInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"queue":{"type":"string"},"jobName":{"type":"string"},"jobId":{"type":"string"},"status":{"type":"string"},"attempt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"result":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"traceId":{"anyOf":[{"type":"string"},{"type":"null"}]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"durationMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","queue","jobName","jobId","status","attempt","payload","result","error","traceId","startedAt","finishedAt","durationMs","createdAt"]},"SourcePublicInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"canonicalUrl":{"type":"string","format":"uri"},"publisher":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"reachability":{"type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","url","canonicalUrl","publisher","title","type","retrievedAt","publishedAt","reachability","httpStatus","lastCheckedAt"]},"AuditRowInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"actorUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"actorApiKeyId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"actorType":{"type":"string"},"orgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"action":{"type":"string"},"subjectType":{"anyOf":[{"type":"string"},{"type":"null"}]},"subjectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"before":{"anyOf":[{},{"type":"null"}]},"after":{"anyOf":[{},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","actorUserId","actorApiKeyId","actorType","orgId","action","subjectType","subjectId","before","after","reason","createdAt"]},"FeatureFlagInput":{"type":"object","properties":{"key":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100},"audience":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}},"orgIds":{"type":"array","items":{"type":"string"}}}},"updatedBy":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["key","description","enabled","rolloutPercent","audience","updatedBy","updatedAt"]},"ProviderSummaryInput":{"type":"object","properties":{"id":{"type":"string"},"brandName":{"type":"string"},"legalName":{"type":"string"},"domain":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"hqCountry":{"anyOf":[{"type":"string"},{"type":"null"}]},"entityVerificationStatus":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"paymentVerificationStatus":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"primaryOpportunityId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The opportunity whose scorecard is shown here — see GET /v1/providers/{id}/scorecard."},"composite":{"anyOf":[{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["score","partial"]},{"type":"null"}],"description":"Composite score of the primary opportunity; null when the provider has no published opportunity yet."},"status":{"type":"string","const":"published"},"publishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","brandName","legalName","domain","categories","hqCountry","entityVerificationStatus","paymentVerificationStatus","primaryOpportunityId","composite","status","publishedAt","updatedAt"]},"ProvidersListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProviderSummaryInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"]},"OpportunitySummaryInput":{"type":"object","properties":{"id":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."},"workMode":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."},"composite":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["score","partial"]},"payEvidenceSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt"]},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"]}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"]},{"type":"null"}]},"feesSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt"]},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"]}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"]},{"type":"null"}]},"payoutSpeedSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt"]},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"]}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"]},{"type":"null"}]},"freshness":{"type":"string","enum":["fresh","stale"]},"lastVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","providerId","providerBrandName","title","kind","workMode","composite","payEvidenceSummary","feesSummary","payoutSpeedSummary","freshness","lastVerifiedAt","countries"]},"OpportunitiesListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OpportunitySummaryInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"]},"OpportunityHistoryEntryInput":{"type":"object","properties":{"version":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Record version at this point in the history; null for a recompute-only event with no accompanying content edit."},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"compositeScore":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"diff":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable summary of what changed, when known."}},"required":["version","computedAt","compositeScore","diff"]},"ScorecardInput":{"type":"object","properties":{"pay":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"One scorecard dimension."},"fees":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"One scorecard dimension."},"payout":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"One scorecard dimension."},"stability":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"One scorecard dimension."},"transparency":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"One scorecard dimension."},"scamRisk":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"One scorecard dimension."},"composite":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Weighted composite 0–100, or null when no dimension has evidence."},"partial":{"type":"boolean","description":"True when at least one dimension was excluded for insufficient evidence."},"weights":{"type":"object","properties":{"pay":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"fees":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"payout":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"stability":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"transparency":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"scamRisk":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."}},"required":["pay","fees","payout","stability","transparency","scamRisk"],"description":"Composite weights per dimension in basis points; they sum to 10000."},"methodologyVersion":{"type":"string","minLength":1,"description":"Version of the scoring methodology that produced this composite, e.g. \"scoring@1.0.0\"."}},"required":["score","partial","weights","methodologyVersion"],"description":"The weighted composite and how it was computed."},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["pay","fees","payout","stability","transparency","scamRisk","composite","computedAt"]},"RegistryMethodologyInput":{"type":"object","properties":{"version":{"type":"string"},"changelog":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string"},"date":{"type":"string"},"summary":{"type":"string"}},"required":["version","date","summary"]}},"dimensions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["pay","fees","payout","stability","transparency","scamRisk"]},"label":{"type":"string"},"weightBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"summary":{"type":"string"},"formula":{"type":"string"}},"required":["key","label","weightBps","summary","formula"]}}},"required":["version","changelog","dimensions"]},"IncomeSourceSummaryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"providerLabel":{"type":"string"},"connectionType":{"type":"string","enum":["csv","pdf","screenshot","email","argyle","pinwheel","manual"]},"status":{"type":"string","enum":["connected","needs_reauth","disconnected","error"]},"lastSyncAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"eventCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","providerId","providerLabel","connectionType","status","lastSyncAt","eventCount","createdAt"]},"IncomeSourcesListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/IncomeSourceSummaryInput"}}},"required":["items"]},"CreateIncomeSourceBodyInput":{"type":"object","properties":{"providerId":{"type":"string","minLength":1,"maxLength":200},"providerLabel":{"type":"string","minLength":1,"maxLength":200},"connectionType":{"type":"string","enum":["csv","pdf","screenshot","manual"],"description":"Sources created directly by the caller; email/argyle/pinwheel sources are created by their own connect/callback/webhook routes."}},"required":["providerLabel","connectionType"]},"CsvColumnMappingInput":{"type":"object","properties":{"occurredAtHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"periodStartHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"periodEndHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"currencyHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"currencyLiteral":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]},"grossAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"tipsAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"platformFeesAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"otherFeesAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"reimbursementsAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"hoursActiveHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"hoursOnlineHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"tasksHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"milesHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"amountsAreMajorUnits":{"type":"boolean"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["occurredAtHeader","periodStartHeader","periodEndHeader","currencyHeader","currencyLiteral","grossAmountHeader","tipsAmountHeader","platformFeesAmountHeader","otherFeesAmountHeader","reimbursementsAmountHeader","hoursActiveHeader","hoursOnlineHeader","tasksHeader","milesHeader","amountsAreMajorUnits","notes"]},"PassportImportResultInput":{"type":"object","properties":{"imported":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needsConfirmation":{"type":"boolean"},"skippedDuplicates":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"documentId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"mapping":{"anyOf":[{"$ref":"#/components/schemas/CsvColumnMappingInput"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"promptVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"editedImageAnalysis":{"anyOf":[{"type":"object","properties":{"method":{"type":"string"},"score":{"type":"number"},"likelyEdited":{"type":"boolean"},"maxToMeanRatio":{"type":"number"}},"required":["method","score","likelyEdited","maxToMeanRatio"]},{"type":"null"}],"description":"Screenshot imports only: the real error-level-analysis result."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["imported","needsConfirmation","skippedDuplicates","format","documentId","mapping","model","promptVersion","editedImageAnalysis","warnings"]},"CsvImportConfirmBodyInput":{"type":"object","properties":{"documentId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mapping":{"$ref":"#/components/schemas/CsvColumnMappingInput"},"model":{"type":"string","minLength":1},"promptVersion":{"type":"string","minLength":1}},"required":["documentId","mapping","model","promptVersion"]},"EarningsEventSummaryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"rawRef":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Id of the source document, when one exists — cheap to include on every row; the signed URL itself (rawRefUrl) is detail-only."},"dedupeHash":{"type":"string","description":"The idempotent-import fingerprint (provider + period + amount). Shared by rows the importer treats as the same statement line — the Ledger UI uses this to flag likely duplicates."},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"grossAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tipsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"platformFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"otherFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reimbursementsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hoursActive":{"anyOf":[{"type":"number"},{"type":"null"}]},"hoursOnline":{"anyOf":[{"type":"number"},{"type":"null"}]},"tasks":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"miles":{"anyOf":[{"type":"number"},{"type":"null"}]},"extractionModel":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionPromptVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionConfidence":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"confirmedByUser":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","incomeSourceId","providerId","rawRef","dedupeHash","occurredAt","periodStart","periodEnd","currency","grossAmountMinor","tipsAmountMinor","platformFeesAmountMinor","otherFeesAmountMinor","reimbursementsAmountMinor","hoursActive","hoursOnline","tasks","miles","extractionModel","extractionPromptVersion","extractionConfidence","confirmedByUser","createdAt","updatedAt"]},"EarningsEventDetailInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"rawRef":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Id of the source document, when one exists — cheap to include on every row; the signed URL itself (rawRefUrl) is detail-only."},"dedupeHash":{"type":"string","description":"The idempotent-import fingerprint (provider + period + amount). Shared by rows the importer treats as the same statement line — the Ledger UI uses this to flag likely duplicates."},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"grossAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tipsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"platformFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"otherFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reimbursementsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hoursActive":{"anyOf":[{"type":"number"},{"type":"null"}]},"hoursOnline":{"anyOf":[{"type":"number"},{"type":"null"}]},"tasks":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"miles":{"anyOf":[{"type":"number"},{"type":"null"}]},"extractionModel":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionPromptVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionConfidence":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"confirmedByUser":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"rawRefUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Signed, time-limited URL to the source document. Null when there is no stored document, or object storage is unconfigured."}},"required":["id","incomeSourceId","providerId","rawRef","dedupeHash","occurredAt","periodStart","periodEnd","currency","grossAmountMinor","tipsAmountMinor","platformFeesAmountMinor","otherFeesAmountMinor","reimbursementsAmountMinor","hoursActive","hoursOnline","tasks","miles","extractionModel","extractionPromptVersion","extractionConfidence","confirmedByUser","createdAt","updatedAt","rawRefUrl"]},"EarningsEventsListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EarningsEventSummaryInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"]},"PatchEarningsEventBodyInput":{"type":"object","properties":{"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"grossAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tipsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"platformFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"otherFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reimbursementsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hoursActive":{"anyOf":[{"type":"number"},{"type":"null"}]},"hoursOnline":{"anyOf":[{"type":"number"},{"type":"null"}]},"tasks":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"miles":{"anyOf":[{"type":"number"},{"type":"null"}]},"confirm":{"type":"boolean"}}},"PassportDistributionInput":{"type":"object","properties":{"p25":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"p50":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"p90":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["p25","p50","p90","n"]},"PassportTaxSetAsideInput":{"type":"object","properties":{"selfEmploymentTaxAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"mileageDeductionAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"label":{"type":"string","description":"Always includes \"estimate\" and \"not tax advice\" — never presented as a filing."},"rateSource":{"type":"object","properties":{"selfEmploymentTaxRateBps":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"mileageRateCentsPerMile":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mileageRateCitation":{"type":"string"}},"required":["selfEmploymentTaxRateBps","mileageRateCentsPerMile","mileageRateCitation"]}},"required":["selfEmploymentTaxAmountMinor","mileageDeductionAmountMinor","label","rateSource"]},"PassportAnalyticsInput":{"type":"object","properties":{"window":{"type":"string","enum":["7d","30d","90d","12m"]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"netHourly":{"$ref":"#/components/schemas/PassportDistributionInput"},"grossHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"feeRateBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"tipShareBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"volatilityIndexBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"consistency":{"anyOf":[{"type":"string","enum":["steady","variable","erratic"]},{"type":"null"}]},"weeksObserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taxSetAside":{"$ref":"#/components/schemas/PassportTaxSetAsideInput"},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total earnings_events in the window (the Evidence-component denominator); dimension-specific counts are nested in netHourly.n."},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"methodologyVersion":{"type":"string"}},"required":["window","currency","netHourly","grossHourlyP50AmountMinor","feeRateBps","tipShareBps","volatilityIndexBps","consistency","weeksObserved","taxSetAside","n","periodStart","periodEnd","asOf","methodologyVersion"]},"PassportAnalyticsByPlatformItemInput":{"type":"object","properties":{"window":{"type":"string","enum":["7d","30d","90d","12m"]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"netHourly":{"$ref":"#/components/schemas/PassportDistributionInput"},"grossHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"feeRateBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"tipShareBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"volatilityIndexBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"consistency":{"anyOf":[{"type":"string","enum":["steady","variable","erratic"]},{"type":"null"}]},"weeksObserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taxSetAside":{"$ref":"#/components/schemas/PassportTaxSetAsideInput"},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total earnings_events in the window (the Evidence-component denominator); dimension-specific counts are nested in netHourly.n."},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"methodologyVersion":{"type":"string"},"providerId":{"type":"string"},"providerLabel":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["window","currency","netHourly","grossHourlyP50AmountMinor","feeRateBps","tipShareBps","volatilityIndexBps","consistency","weeksObserved","taxSetAside","n","periodStart","periodEnd","asOf","methodologyVersion","providerId","providerLabel"]},"PassportAnalyticsByPlatformInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PassportAnalyticsByPlatformItemInput"}}},"required":["items"]},"PassportCounterfactualInput":{"type":"object","properties":{"actualNetHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"registryMedianNetHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"registryOpportunityId":{"type":"string"},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"registryN":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"label":{"type":"string","const":"estimate, not a promise"}},"required":["actualNetHourlyP50AmountMinor","registryMedianNetHourlyP50AmountMinor","currency","registryOpportunityId","n","registryN","label"]},"PassportRefreshResultInput":{"type":"object","properties":{"userId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"windowsComputed":{"type":"array","items":{"type":"string","enum":["7d","30d","90d","12m"]}},"providersComputed":{"type":"array","items":{"type":"string"}},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["userId","windowsComputed","providersComputed","computedAt"]},"PassportExportCreatedInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["pending","ready","failed","expired"]},"jobId":{"type":"string"}},"required":["id","status","jobId"]},"PassportExportInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["pending","ready","failed","expired"]},"requestedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"downloadUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","status","requestedAt","completedAt","expiresAt","downloadUrl","error"]},"PassportDeleteBodyInput":{"type":"object","properties":{"confirmationPhrase":{"type":"string","minLength":1,"maxLength":320,"description":"Must equal the caller's account email, checked server-side."}},"required":["confirmationPhrase"]},"PassportDeleteAcceptedInput":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"]},"PassportDeleteConfirmBodyInput":{"type":"object","properties":{"token":{"type":"string","minLength":1}},"required":["token"]},"PassportDeleteConfirmResultInput":{"type":"object","properties":{"status":{"type":"string","enum":["deleted","invalid","expired"]}},"required":["status"]},"PassportAggregateConsentBodyInput":{"type":"object","properties":{"optIn":{"type":"boolean"}},"required":["optIn"]},"JwkInput":{"type":"object","properties":{"kty":{"type":"string"}},"required":["kty"],"additionalProperties":{}},"CreateProofBodyInput":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]}},"required":["type"]},"HolderKeyBodyInput":{"type":"object","properties":{"publicJwk":{"$ref":"#/components/schemas/JwkInput"}},"required":["publicJwk"]},"IssueProofResponseInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"vct":{"type":"string"},"sdJwt":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","type","vct","sdJwt","expiresAt"]},"ProofSummaryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"status":{"type":"string","enum":["issued","revoked","suspended","expired"]},"vct":{"type":"string"},"issuedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","type","status","vct","issuedAt","expiresAt"]},"ProofsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProofSummaryInput"}}},"required":["items"]},"ProofDetailInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"status":{"type":"string","enum":["issued","revoked","suspended","expired"]},"vct":{"type":"string"},"issuedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"sdJwt":{"type":"string","description":"Full, all-disclosures compact SD-JWT VC. Only the owner can fetch this — used client-side to build a selective presentation via presentProof."},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"revokedReason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","type","status","vct","issuedAt","expiresAt","sdJwt","revokedAt","revokedReason"]},"RevokeProofBodyInput":{"type":"object","properties":{"reason":{"type":"string","maxLength":500}}},"RevokeProofResponseInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","const":"revoked"},"revokedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","status","revokedAt"]},"CreateShareBodyInput":{"type":"object","properties":{"audience":{"type":"string","minLength":1,"maxLength":2000},"expiresInSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":2592000},"disclosedClaimPaths":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1}}},"required":["expiresInSeconds","disclosedClaimPaths"]},"CreateShareResponseInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","expiresAt"]},"PublicShareViewInput":{"type":"object","properties":{"proofType":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"audience":{"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"revoked":{"type":"boolean"}},"required":["proofType","audience","expiresAt","revoked"]},"VerificationLogEntryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"result":{"type":"string"},"disclosedClaimPaths":{"type":"array","items":{"type":"string"}},"audience":{"anyOf":[{"type":"string"},{"type":"null"}]},"relyingPartyOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","result","disclosedClaimPaths","audience","relyingPartyOrgId","createdAt"]},"VerificationLogResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VerificationLogEntryInput"}}},"required":["items"]},"VerifyProofBodyInput":{"type":"object","properties":{"presentation":{"type":"string","minLength":1},"audience":{"type":"string","minLength":1,"maxLength":2000},"nonce":{"type":"string","minLength":1}},"required":["presentation","audience","nonce"]},"VerifyProofResponseInput":{"type":"object","properties":{"valid":{"type":"boolean"},"claims":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"vct":{"type":"string"},"issuer":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}},"error":{"type":"string"}},"required":["valid","claims","vct","issuer","warnings"]},"VerifyNonceBodyInput":{"type":"object","properties":{"audience":{"type":"string","minLength":1,"maxLength":2000}},"required":["audience"]},"VerifyNonceResponseInput":{"type":"object","properties":{"nonce":{"type":"string"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["nonce","expiresAt"]},"CreateProofRequestBodyInput":{"type":"object","properties":{"policyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expiresInSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":2592000}},"required":["expiresInSeconds"]},"CreateProofRequestResponseInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"}},"required":["id","url"]},"ProofRequestStatusInput":{"type":"object","properties":{"status":{"type":"string","enum":["pending","fulfilled","expired"]},"fulfilledShareId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]}},"required":["status","fulfilledShareId"]},"CreateProofPolicyBodyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"requirements":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"]}}},"required":["name","requirements"]},"ProofPolicyInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"requirements":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"]}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","orgId","name","requirements","createdAt","updatedAt"]},"ProofPoliciesListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProofPolicyInput"}}},"required":["items"]},"CreateWebhookBodyInput":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]}}},"required":["url","events"]},"WebhookEndpointInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]}},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","orgId","url","events","enabled","createdAt"]},"CreateWebhookResponseInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]}},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"signingSecret":{"type":"string","description":"Shown once, at creation — store it now. Used to verify this endpoint's HMAC-SHA256 delivery signature header."}},"required":["id","orgId","url","events","enabled","createdAt","signingSecret"]},"WebhooksListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpointInput"}}},"required":["items"]},"WebhookDeliveryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"endpointId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"event":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]},"status":{"type":"string","enum":["pending","delivered","failed"]},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastAttemptAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","endpointId","event","status","attempts","lastAttemptAt","lastError","createdAt"]},"WebhookDeliveriesListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDeliveryInput"}}},"required":["items"]},"OrgProofVerificationEventInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"proofId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"result":{"type":"string"},"disclosedClaimPaths":{"type":"array","items":{"type":"string"}},"audience":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","proofId","result","disclosedClaimPaths","audience","createdAt"]},"OrgProofVerificationsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OrgProofVerificationEventInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]},"DidDocumentInput":{"type":"object","properties":{"@context":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"verificationMethod":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"assertionMethod":{"type":"array","items":{"type":"string"}}},"required":["@context","id","verificationMethod","assertionMethod"],"additionalProperties":{}},"JwksInput":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/JwkInput"}}},"required":["keys"]},"ProfileInput":{"type":"object","properties":{"userId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationCountry":{"anyOf":[{"type":"string"},{"type":"null"}]},"locationRegion":{"anyOf":[{"type":"string"},{"type":"null"}]},"locationCity":{"anyOf":[{"type":"string"},{"type":"null"}]},"workModes":{"type":"array","items":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."}},"hoursPerWeek":{"anyOf":[{"type":"integer","minimum":0,"maximum":168},{"type":"null"}]},"timeWindows":{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":6,"description":"0=Sunday..6=Saturday"},"startMinute":{"type":"integer","minimum":0,"maximum":1439},"endMinute":{"type":"integer","minimum":1,"maximum":1440}},"required":["day","startMinute","endMinute"]}},"hasVehicle":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"equipment":{"type":"array","items":{"type":"string"}},"credentialsHeld":{"type":"array","items":{"type":"string"}},"backgroundCheckWilling":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"minAcceptableNetHourlyAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"minAcceptableNetHourlyCurrency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"payoutSpeedNeeded":{"type":"string","enum":["same_day","weekly","monthly","any"]},"capitalAvailableAmountMinor":{"type":"integer","minimum":0,"maximum":9007199254740991},"capitalAvailableCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"riskTolerance":{"type":"string","enum":["conservative","moderate","aggressive"]},"jurisdictions":{"type":"array","items":{"type":"string"}},"createdAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"null when no profile row exists yet — PRD-documented defaults are shown instead, never a 404."},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["userId","locationCountry","locationRegion","locationCity","workModes","hoursPerWeek","timeWindows","hasVehicle","equipment","credentialsHeld","backgroundCheckWilling","minAcceptableNetHourlyAmountMinor","minAcceptableNetHourlyCurrency","payoutSpeedNeeded","capitalAvailableAmountMinor","capitalAvailableCurrency","riskTolerance","jurisdictions","createdAt","updatedAt"]},"PatchProfileBodyInput":{"type":"object","properties":{"locationCountry":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}]},"locationRegion":{"anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]},"locationCity":{"anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]},"workModes":{"maxItems":3,"type":"array","items":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."}},"hoursPerWeek":{"anyOf":[{"type":"integer","minimum":0,"maximum":168},{"type":"null"}]},"timeWindows":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":6,"description":"0=Sunday..6=Saturday"},"startMinute":{"type":"integer","minimum":0,"maximum":1439},"endMinute":{"type":"integer","minimum":1,"maximum":1440}},"required":["day","startMinute","endMinute"]}},"hasVehicle":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"equipment":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"credentialsHeld":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"backgroundCheckWilling":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"minAcceptableNetHourlyAmountMinor":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"minAcceptableNetHourlyCurrency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"payoutSpeedNeeded":{"type":"string","enum":["same_day","weekly","monthly","any"]},"capitalAvailableAmountMinor":{"type":"integer","minimum":0,"maximum":9007199254740991},"capitalAvailableCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"riskTolerance":{"type":"string","enum":["conservative","moderate","aggressive"]},"jurisdictions":{"maxItems":50,"type":"array","items":{"type":"string","minLength":2,"maxLength":2}}}},"ProfileSkillInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string"},"source":{"type":"string","enum":["typed","passport_inferred"]},"confirmed":{"type":"boolean"},"evidenceIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","label","source","confirmed","evidenceIds","createdAt"]},"ProfileSkillsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSkillInput"}}},"required":["items"]},"CreateSkillBodyInput":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":120}},"required":["label"]},"InferSkillsResponseInput":{"type":"object","properties":{"inserted":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSkillInput"}}},"required":["inserted"]},"ProfileInterestInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"tag":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","tag","createdAt"]},"ProfileInterestsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProfileInterestInput"}}},"required":["items"]},"CreateInterestBodyInput":{"type":"object","properties":{"tag":{"type":"string","minLength":1,"maxLength":80}},"required":["tag"]},"MatchedOnInput":{"type":"object","properties":{"label":{"type":"string"},"profileField":{"type":"string"},"opportunityField":{"type":"string"}},"required":["label","profileField","opportunityField"]},"ExcludedBecauseInput":{"type":"object","properties":{"code":{"type":"string"},"reason":{"type":"string"},"evidenceUrl":{"type":"string","format":"uri"}},"required":["code","reason"]},"ExpectedValueBreakdownInput":{"type":"object","properties":{"probabilityOfAccess":{"anyOf":[{"type":"number"},{"type":"null"}]},"netHourlyMedianMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"netHourlyCurrency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"netHourlySourceType":{"anyOf":[{"type":"string","enum":["passport_aggregate","platform_disclosure","third_party_dataset","survey","regulatory_filing"],"description":"Where a pay figure comes from."},{"type":"null"}]},"hoursApplied":{"anyOf":[{"type":"number"},{"type":"null"}]},"onboardingCostMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"expectedFeesMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"expectedValueMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["probabilityOfAccess","netHourlyMedianMinor","netHourlyCurrency","netHourlySourceType","hoursApplied","onboardingCostMinor","expectedFeesMinor","expectedValueMinor"]},"DiscoverItemInput":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."},"workMode":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."},"payEvidenceSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt"]},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"]}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"]},{"type":"null"}]},"expectedValue":{"$ref":"#/components/schemas/ExpectedValueBreakdownInput"},"similarityScore":{"anyOf":[{"type":"number"},{"type":"null"}]},"verdict":{"type":"string","enum":["worth_it","consider","dont"]},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"matchedOn":{"type":"array","items":{"$ref":"#/components/schemas/MatchedOnInput"}},"excludedBecause":{"type":"array","items":{"$ref":"#/components/schemas/ExcludedBecauseInput"}},"evidenceIds":{"type":"array","items":{"type":"string"}},"freshness":{"type":"string","enum":["fresh","stale"]},"lastVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"passesHardFilters":{"type":"boolean"},"countries":{"type":"array","items":{"type":"string"}}},"required":["opportunityId","providerId","providerBrandName","title","kind","workMode","payEvidenceSummary","expectedValue","similarityScore","verdict","confidence","matchedOn","excludedBecause","evidenceIds","freshness","lastVerifiedAt","passesHardFilters","countries"]},"DiscoverListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverItemInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"]},"DiscoverItemDetailInput":{"type":"object","properties":{"match":{"$ref":"#/components/schemas/DiscoverItemInput"},"opportunity":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Registry id, e.g. \"freelancer-com:projects\"."},"providerId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of the Provider offering this opportunity."},"kind":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."},"title":{"type":"string","minLength":1,"maxLength":200,"description":"Short name, sentence case."},"description":{"type":"string","minLength":1,"maxLength":5000,"description":"What the work is, in plain words."},"workMode":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."},"geo":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries where the opportunity is offered. Empty means worldwide or unknown; see eligibility."},"regions":{"type":"array","items":{"type":"string","minLength":1},"description":"States, provinces, or regions, when limited."},"cities":{"type":"array","items":{"type":"string","minLength":1},"description":"Cities or metros, when limited."}},"required":["countries","regions","cities"],"description":"Geographic availability."},"eligibility":{"type":"object","properties":{"minAge":{"anyOf":[{"type":"integer","minimum":0,"maximum":120},{"type":"null"}],"description":"Minimum age; null when not stated."},"vehicle":{"anyOf":[{"type":"string","enum":["none","bicycle","scooter","car","van","truck","any"]},{"type":"null"}],"description":"Vehicle required; null when not stated."},"equipment":{"type":"array","items":{"type":"string","minLength":1},"description":"Equipment the earner must supply, e.g. \"smartphone\", \"insulated bag\"."},"credentials":{"type":"array","items":{"type":"string","minLength":1},"description":"Licenses, certifications, or degrees required."},"backgroundCheck":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a background check is required; null when not stated."},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries of residence accepted, when they differ from geo.countries."}},"required":["minAge","vehicle","equipment","credentials","backgroundCheck","countries"],"description":"Who can do this work."},"payEvidence":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string","enum":["net_hourly","gross_hourly","per_task","per_project"],"description":"What the pay figures measure."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"p25":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"25th percentile in minor units; null when not reported."},"p50":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Median in minor units; null when not reported."},"p90":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"90th percentile in minor units; null when not reported."},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Sample size; null when the source does not state one."},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"First day of the period the figures cover."},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Last day of the period the figures cover."},"sourceType":{"type":"string","enum":["passport_aggregate","platform_disclosure","third_party_dataset","survey","regulatory_filing"],"description":"Where a pay figure comes from."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["metric","currency","p25","p50","p90","n","periodStart","periodEnd","sourceType","sourceId"],"description":"A pay distribution from one source: money in minor units, never a prediction."},"description":"Pay distributions with sources. Empty until evidence exists; never estimated."},"feeSchedule":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Fee name as the provider states it."},"type":{"type":"string","enum":["percent","fixed","per_application","subscription","withdrawal","instant_pay"],"description":"Fee category."},"value":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Fee amount: basis points when unit is basis_points, minor units of `currency` when unit is minor_units."},"unit":{"type":"string","enum":["basis_points","minor_units"],"description":"How `value` is expressed: basis points of the base, or minor units of `currency`."},"currency":{"description":"Required when unit is minor_units.","type":"string","pattern":"^[A-Z]{3}$"},"minimum":{"description":"Floor applied to a percent fee (\"10% or $5, whichever is greater\").","type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"]},"appliesTo":{"type":"string","minLength":1,"description":"What the fee applies to, e.g. \"fixed-price project earnings\", \"each withdrawal via PayPal\"."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["name","type","value","unit","appliesTo","sourceId"],"description":"One published fee. Value is an integer; the unit says whether it is basis points or minor units."},"description":"Published fees, each with a source."},"payoutTerms":{"anyOf":[{"type":"object","properties":{"frequency":{"type":"string","enum":["instant","daily","weekly","biweekly","monthly","on_request","per_milestone","unknown"],"description":"How often payouts happen."},"minimumPayout":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Minimum balance before a payout is allowed; null when none or unknown."},"delayDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Days between earning and availability for withdrawal; null when not stated."},"methods":{"type":"array","items":{"type":"string","minLength":1},"description":"Payout methods, e.g. \"PayPal\", \"bank transfer\", \"Payoneer\"."},"instantPayFee":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Fee for an instant or express payout; null when none or unknown."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["frequency","minimumPayout","delayDays","methods","instantPayFee","sourceId"],"description":"How and when earners get paid."},{"type":"null"}],"description":"Payout terms; null when not yet documented."},"onboardingCost":{"anyOf":[{"type":"object","properties":{"unpaidHours":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Unpaid hours spent on onboarding, tests, or training; null when not stated."},"upfrontFees":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Fees due before earning anything; null when none or unknown."},"equipmentCost":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Typical cost of required equipment; null when none or unknown."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["unpaidHours","upfrontFees","equipmentCost","sourceId"],"description":"What it costs to start."},{"type":"null"}],"description":"Onboarding cost; null when not yet documented."},"stability":{"type":"object","properties":{"taskAvailabilitySignal":{"type":"string","enum":["high","medium","low","unknown"],"description":"Whether there is usually work available."},"observedDeactivationRate":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}],"description":"Share of earners deactivated per year, in basis points; null when unknown."},"reportedUnpaidWorkIncidents":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Count of reported unpaid-work incidents in the period; null when unknown."},"sourceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources for the stability figures."}},"required":["taskAvailabilitySignal","observedDeactivationRate","reportedUnpaidWorkIncidents","sourceIds"],"description":"How dependable the work and the account are."},"riskFlags":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["UPFRONT_FEE","TASK_SCAM_PATTERN","CRYPTO_ONLY_PAYOUT","OFF_PLATFORM_ONLY_MESSAGING","CHECK_DEPOSIT_SCHEME","EQUIPMENT_PURCHASE_REQUIRED","DOMAIN_AGE_UNDER_90D","DOMAIN_MISMATCH","UNSUBSTANTIATED_EARNINGS_CLAIM","MLM_STRUCTURE","GHOST_POSTING","BRAND_IMPERSONATION","UNPAID_WORK_REPORTS","NO_APPEALS_PROCESS"],"description":"Scam-signature rule code."},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"description":"How serious the signal is."},"evidence":{"type":"object","properties":{"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"quote":{"description":"Verbatim excerpt from the source that triggered the flag.","type":"string","maxLength":2000},"observedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When the evidence was observed."}},"required":["sourceId","observedAt"],"description":"The evidence a flag rests on. A flag cannot exist without it."},"detectedBy":{"type":"string","enum":["rule","curator","report"],"description":"Who or what raised the flag."},"ruleVersion":{"type":"string","minLength":1,"description":"Version of the rule set or curator guideline that raised the flag, e.g. \"scam-rules@1.0.0\"."}},"required":["code","severity","evidence","detectedBy","ruleVersion"],"description":"A scam or reliability signal with the evidence behind it."},"description":"Scam and reliability signals, each with evidence."},"agentPostable":{"type":"boolean","description":"Whether AI agents may post or apply on behalf of a principal."},"postedBy":{"type":"object","properties":{"type":{"type":"string","enum":["provider","agent","employer"],"description":"Who posted the opportunity."},"agentId":{"description":"Agent id when posted by an agent.","type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"principalProofId":{"description":"Proof id of the agent's human principal when posted by an agent.","type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["type"],"description":"Who posted this and, for agents, whose Proof backs them."},"lastVerifiedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When a curator last confirmed the record against its sources."},"scorecard":{"anyOf":[{"type":"object","properties":{"pay":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"Pay: median net hourly vs. local minimum wage and category median."},"fees":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"Fees: total extraction rate including unpaid onboarding."},"payout":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"Payout: frequency, delay, minimum, reliability incidents."},"stability":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"Stability: task availability, deactivation rate, unpaid-work incidents, appeals."},"transparency":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"Transparency: published terms, fees, deactivation policy, pay disclosures."},"scamRisk":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"description":"Scam risk (inverted: 100 = no signals): risk flags, verification, domain age, complaints."},"composite":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Weighted composite 0–100, or null when no dimension has evidence."},"partial":{"type":"boolean","description":"True when at least one dimension was excluded for insufficient evidence."},"weights":{"type":"object","properties":{"pay":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"fees":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"payout":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"stability":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"transparency":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"scamRisk":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."}},"required":["pay","fees","payout","stability","transparency","scamRisk"],"description":"Composite weights per dimension in basis points; they sum to 10000."},"methodologyVersion":{"type":"string","minLength":1,"description":"Version of the scoring methodology that produced this composite, e.g. \"scoring@1.0.0\"."}},"required":["score","partial","weights","methodologyVersion"],"description":"The weighted composite and how it was computed."},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When the scorecard was computed."}},"required":["pay","fees","payout","stability","transparency","scamRisk","composite","computedAt"],"description":"Six-dimension scorecard with confidence per dimension and a weighted composite."},{"type":"null"}],"description":"Scorecard; null before the first computation."},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Source id, referenced by sourceId / sourceIds / evidenceIds elsewhere in the record."},"url":{"type":"string","format":"uri","description":"Exact URL of the page or dataset."},"publisher":{"type":"string","minLength":1,"description":"Who published it (organisation name)."},"title":{"description":"Page or document title.","type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"],"description":"Kind of source: platform_disclosure, regulatory_filing, third_party_dataset, survey, passport_aggregate, user_report, internal_measurement."},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When we fetched it (ISO 8601 date-time)."},"checksum":{"description":"SHA-256 hex of the retrieved body, when known.","type":"string","pattern":"^[a-f0-9]{64}$"},"reachability":{"default":"unchecked","description":"Last link-check result: unchecked, ok, redirected, unreachable, changed.","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"lastCheckedAt":{"description":"When the link was last checked.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"publishedAt":{"description":"Publication or period date stated by the source itself.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"description":"Curator notes, typically the verbatim sentences the figures were read from.","type":"string"}},"required":["id","url","publisher","type","retrievedAt"],"description":"A cited source: the exact URL, who published it, when we retrieved it, and its last known reachability."},"description":"Every source cited by this record."},"version":{"type":"string","const":"1.0.0","description":"Open Opportunity Schema version."}},"required":["id","providerId","kind","title","description","workMode","geo","eligibility","payEvidence","feeSchedule","payoutTerms","onboardingCost","stability","riskFlags","agentPostable","postedBy","lastVerifiedAt","scorecard","sources","version"]},"provider":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Registry id, e.g. \"freelancer-com\"."},"legalName":{"type":"string","minLength":1,"description":"Registered legal name of the operating entity."},"brandName":{"type":"string","minLength":1,"description":"Name earners know the platform by."},"domain":{"type":"string","minLength":1,"description":"Canonical registrable domain, e.g. \"freelancer.com\"."},"otherDomains":{"type":"array","items":{"type":"string","minLength":1},"description":"Other domains the provider operates (regional sites, help centers)."},"hq":{"type":"object","properties":{"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},{"type":"null"}],"description":"Headquarters country; null when unknown."},"region":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"State, province, or city of the headquarters; null when unknown."}},"required":["country","region"],"description":"Where the provider is headquartered."},"jurisdictions":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries whose law governs earner terms."},"categories":{"minItems":1,"type":"array","items":{"type":"string","enum":["rideshare","delivery","local_shifts","home_services","care","freelance","ai_training","microtask","research","selling","leasing","tutoring","creator","agent_bounty","open_source","other"],"description":"Registry category."},"description":"Registry categories."},"entityVerification":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"method":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"How the legal entity was checked, e.g. \"company register lookup\", \"WHOIS + terms page\"."},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date-time with timezone."},{"type":"null"}],"description":"When the check was performed; null if never."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources supporting the verification status."}},"required":["status","method","verifiedAt","evidenceIds"],"description":"Whether the operating legal entity is real and matches the brand."},"paymentVerification":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"method":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"How payment was verified, e.g. \"observed payout to a Passport holder\", \"payment processor disclosure\"."},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date-time with timezone."},{"type":"null"}],"description":"When payment was last verified; null if never."}},"required":["status","method","verifiedAt"],"description":"Whether the provider has been observed actually paying earners."},"termsUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published terms of service for earners; null if none found."},"payoutPolicyUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published payout or fees policy; null if none found."},"deactivationPolicyUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published deactivation or account-termination policy; null if none found."},"appealsProcess":{"type":"object","properties":{"exists":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a published appeals process exists; null when unknown."},"humanReview":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a human reviews appeals; null when unknown."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources supporting the answers."}},"required":["exists","humanReview","evidenceIds"],"description":"Deactivation appeals: whether earners can appeal and whether a human reviews it."},"fairworkScores":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"year":{"type":"integer","minimum":2018,"maximum":2100,"description":"Rating year."},"score":{"type":"integer","minimum":0,"maximum":10,"description":"Fairwork score out of 10."},"url":{"type":"string","format":"uri","description":"Fairwork ratings page for that country and year."}},"required":["country","year","score","url"],"description":"A Fairwork (fair.work) country rating."},"description":"Fairwork ratings by country and year."},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Source id, referenced by sourceId / sourceIds / evidenceIds elsewhere in the record."},"url":{"type":"string","format":"uri","description":"Exact URL of the page or dataset."},"publisher":{"type":"string","minLength":1,"description":"Who published it (organisation name)."},"title":{"description":"Page or document title.","type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"],"description":"Kind of source: platform_disclosure, regulatory_filing, third_party_dataset, survey, passport_aggregate, user_report, internal_measurement."},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When we fetched it (ISO 8601 date-time)."},"checksum":{"description":"SHA-256 hex of the retrieved body, when known.","type":"string","pattern":"^[a-f0-9]{64}$"},"reachability":{"default":"unchecked","description":"Last link-check result: unchecked, ok, redirected, unreachable, changed.","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"lastCheckedAt":{"description":"When the link was last checked.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"publishedAt":{"description":"Publication or period date stated by the source itself.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"description":"Curator notes, typically the verbatim sentences the figures were read from.","type":"string"}},"required":["id","url","publisher","type","retrievedAt"],"description":"A cited source: the exact URL, who published it, when we retrieved it, and its last known reachability."},"description":"Every source cited by this record."},"version":{"type":"string","const":"1.0.0","description":"Open Opportunity Schema version."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When this record was last edited."}},"required":["id","legalName","brandName","domain","otherDomains","hq","jurisdictions","categories","entityVerification","paymentVerification","termsUrl","payoutPolicyUrl","deactivationPolicyUrl","appealsProcess","fairworkScores","sources","version","updatedAt"]},"saved":{"type":"boolean"}},"required":["match","opportunity","provider","saved"]},"DiscoverSimilarResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverItemInput"}}},"required":["items"]},"HideOpportunityBodyInput":{"type":"object","properties":{"reason":{"type":"string","maxLength":500}}},"WatchInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string","enum":["opportunity","provider","search"]},"opportunityId":{"anyOf":[{"type":"string"},{"type":"null"}]},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"searchQuery":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"channels":{"type":"array","items":{"type":"string","enum":["web_push","email"]}},"digest":{"type":"string","enum":["immediate","daily_digest","weekly_digest"]},"lastResultIds":{"type":"array","items":{"type":"string"}},"pausedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","subjectType","opportunityId","providerId","searchQuery","channels","digest","lastResultIds","pausedAt","createdAt"]},"WatchesListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WatchInput"}}},"required":["items"]},"CreateWatchBodyInput":{"type":"object","properties":{"subjectType":{"type":"string","enum":["opportunity","provider","search"]},"opportunityId":{"type":"string","minLength":1,"maxLength":200},"providerId":{"type":"string","minLength":1,"maxLength":200},"searchQuery":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"channels":{"default":["email"],"minItems":1,"type":"array","items":{"type":"string","enum":["web_push","email"]}},"digest":{"default":"immediate","type":"string","enum":["immediate","daily_digest","weekly_digest"]}},"required":["subjectType"]},"PatchWatchBodyInput":{"type":"object","properties":{"channels":{"minItems":1,"type":"array","items":{"type":"string","enum":["web_push","email"]}},"digest":{"type":"string","enum":["immediate","daily_digest","weekly_digest"]},"paused":{"type":"boolean"}}},"WatchEventInput":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"change"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"type":"string"},"changeType":{"type":"string","enum":["fee_change","payout_term_change","new_risk_flag","verification_lapse","pay_evidence_update","went_stale"]},"field":{"type":"string"},"beforeValue":{"anyOf":[{},{"type":"null"}]},"afterValue":{"anyOf":[{},{"type":"null"}]},"detectedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["kind","id","opportunityId","changeType","field","beforeValue","afterValue","detectedAt"]},{"type":"object","properties":{"kind":{"type":"string","const":"new_match"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"anyOf":[{"type":"string"},{"type":"null"}]},"detectedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["kind","id","opportunityId","detectedAt","payload"]}]},"WatchEventsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WatchEventInput"}}},"required":["items"]},"PushSubscriptionBodyInput":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri"},"keys":{"type":"object","properties":{"p256dh":{"type":"string","minLength":1},"auth":{"type":"string","minLength":1}},"required":["p256dh","auth"]}},"required":["endpoint","keys"]},"DeletePushSubscriptionBodyInput":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri"}},"required":["endpoint"]},"DraftApplicationBodyInput":{"type":"object","properties":{"opportunityId":{"type":"string","minLength":1,"maxLength":200},"includeFactKeys":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":120}}},"required":["opportunityId"]},"ApplicationDraftInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"type":"string"},"content":{"type":"string"},"includedFacts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"evidenceId":{"type":"string"}},"required":["label","value","evidenceId"]}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","opportunityId","content","includedFacts","createdAt"]},"ApplicationDraftsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ApplicationDraftInput"}}},"required":["items"]},"CreateOutcomeBodyInput":{"type":"object","properties":{"status":{"type":"string","enum":["applied","accepted","rejected","paid","scammed"]},"draftId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"note":{"type":"string","maxLength":2000},"sharedToRegistry":{"default":false,"type":"boolean"}},"required":["status"]},"ApplicationOutcomeInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"type":"string"},"draftId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"status":{"type":"string","enum":["applied","accepted","rejected","paid","scammed"]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"sharedToRegistry":{"type":"boolean"},"reportedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","opportunityId","draftId","status","note","sharedToRegistry","reportedAt"]},"LedgerEntryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyTitle":{"type":"string"},"role":{"type":"string","enum":["poster","earner"],"description":"Whether the caller is this bounty's poster (directly, or via an org they belong to) or its accepted earner."},"kind":{"type":"string","enum":["fund","release","refund","fee"]},"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"stripePaymentIntentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeTransferId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeRefundId":{"anyOf":[{"type":"string"},{"type":"null"}]},"x402TxReference":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyStripeAccountId":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyAddress":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","bountyTitle","role","kind","amountMinor","currency","stripePaymentIntentId","stripeTransferId","stripeRefundId","x402TxReference","counterpartyStripeAccountId","counterpartyAddress","createdAt"]},"LedgerEntriesListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LedgerEntryInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]},"OAuthTokenBodyInput":{"type":"object","properties":{"grant_type":{"type":"string","const":"client_credentials","description":"RFC 6749 §4.4 — only the client-credentials grant is supported."},"client_id":{"type":"string","minLength":1,"maxLength":200,"description":"The agent's apiKeys row id, or its prefix — either identifies the same key."},"client_secret":{"type":"string","minLength":1,"maxLength":500,"description":"The raw API key the caller received once from POST /v1/agents."}},"required":["grant_type","client_id","client_secret"]},"OAuthTokenResponseInput":{"type":"object","properties":{"access_token":{"type":"string","description":"Short-lived signed JWT (HS256). Send as Authorization: Bearer <access_token> to apps/mcp's streamable-HTTP transport."},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Seconds until expiry (RFC 6749 §5.1)."},"scope":{"type":"string","description":"Space-separated scopes carried over from the underlying API key."}},"required":["access_token","token_type","expires_in","scope"]},"AgentPolicyBodyInput":{"type":"object","properties":{"maxPerBountyAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerBountyCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"maxPerDayAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerDayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"allowedKinds":{"default":["agent_bounty"],"type":"array","items":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."}},"allowedCountries":{"default":[],"type":"array","items":{"type":"string","minLength":2,"maxLength":2}}},"required":["maxPerBountyAmountMinor","maxPerBountyCurrency","maxPerDayAmountMinor","maxPerDayCurrency"]},"AgentPolicyUpdateBodyInput":{"type":"object","properties":{"maxPerBountyAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerBountyCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"maxPerDayAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerDayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"allowedKinds":{"default":["agent_bounty"],"type":"array","items":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."}},"allowedCountries":{"default":[],"type":"array","items":{"type":"string","minLength":2,"maxLength":2}}}},"AgentPolicyInput":{"type":"object","properties":{"agentId":{"type":"string"},"maxPerBountyAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPerBountyCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"maxPerDayAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPerDayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"allowedKinds":{"type":"array","items":{"type":"string"}},"allowedCountries":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["agentId","maxPerBountyAmountMinor","maxPerBountyCurrency","maxPerDayAmountMinor","maxPerDayCurrency","allowedKinds","allowedCountries","updatedAt"]},"CreateAgentBodyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"didKey":{"description":"A did:key the caller generated client-side. Omit for a platform-issued id (agent_<uuid>).","type":"string","minLength":1,"maxLength":500},"policy":{"$ref":"#/components/schemas/AgentPolicyBodyInput"}},"required":["name","policy"]},"AgentInput":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"principalUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"principalOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"status":{"type":"string","enum":["active","suspended"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","principalUserId","principalOrgId","status","createdAt"]},"CreateAgentResponseInput":{"type":"object","properties":{"agent":{"$ref":"#/components/schemas/AgentInput"},"policy":{"$ref":"#/components/schemas/AgentPolicyInput"},"key":{"type":"string","description":"The raw API key — shown once, never retrievable again."}},"required":["agent","policy","key"]},"MandateBodyInput":{"type":"object","properties":{"intent":{"type":"object","properties":{"agentId":{"type":"string","minLength":1},"maxAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"description":{"type":"string","minLength":1,"maxLength":500},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["agentId","maxAmountMinor","currency","description","expiresAt"]},"cart":{"type":"object","properties":{"bountyId":{"type":"string","minLength":1},"amountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["bountyId","amountMinor","currency"]},"payment":{"type":"object","properties":{"bountyId":{"type":"string","minLength":1},"amountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["bountyId","amountMinor","currency"]},"signature":{"type":"string","minLength":1,"description":"Compact JWS (ES256) over the canonical {intentHash, cartHash, paymentHash} payload."},"signerPublicJwk":{"$ref":"#/components/schemas/JwkInput"}},"required":["intent","cart","payment","signature","signerPublicJwk"]},"CreateBountyBodyInput":{"type":"object","properties":{"title":{"type":"string","minLength":4,"maxLength":200},"taskSpec":{"type":"string","minLength":10,"maxLength":10000},"deliverableSpec":{"type":"string","minLength":4,"maxLength":2000},"remote":{"default":false,"type":"boolean"},"geoCountries":{"default":[],"type":"array","items":{"type":"string","minLength":2,"maxLength":2}},"geoCities":{"default":[],"type":"array","items":{"type":"string","minLength":1,"maxLength":120}},"deadline":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"priceAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"requiredProofPolicy":{"default":[],"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"]}},"maxApplicants":{"default":20,"type":"integer","exclusiveMinimum":0,"maximum":500},"mandate":{"$ref":"#/components/schemas/MandateBodyInput"}},"required":["title","taskSpec","deliverableSpec","priceAmountMinor","priceCurrency"]},"ContentRuleViolationInput":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string"},"quote":{"type":"string"},"ruleVersion":{"type":"string"}},"required":["code","severity","quote","ruleVersion"]},"BountySummaryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"taskSpec":{"type":"string"},"deliverableSpec":{"type":"string"},"remote":{"type":"boolean"},"geoCountries":{"type":"array","items":{"type":"string"}},"geoCities":{"type":"array","items":{"type":"string"}},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"priceAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"requiredProofPolicy":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"]}},"maxApplicants":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["draft","pending_funding","funded","open","accepted","submitted","approved","disputed","released","refunded","cancelled"]},"postedByAgentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"postedByPrincipalUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"postedByPrincipalOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","title","taskSpec","deliverableSpec","remote","geoCountries","geoCities","deadline","priceAmountMinor","priceCurrency","requiredProofPolicy","maxApplicants","status","postedByAgentId","postedByPrincipalUserId","postedByPrincipalOrgId","createdAt","updatedAt"]},"BountyDetailInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"taskSpec":{"type":"string"},"deliverableSpec":{"type":"string"},"remote":{"type":"boolean"},"geoCountries":{"type":"array","items":{"type":"string"}},"geoCities":{"type":"array","items":{"type":"string"}},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"priceAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"requiredProofPolicy":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"]}},"maxApplicants":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["draft","pending_funding","funded","open","accepted","submitted","approved","disputed","released","refunded","cancelled"]},"postedByAgentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"postedByPrincipalUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"postedByPrincipalOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"contentRuleResult":{"type":"array","items":{"$ref":"#/components/schemas/ContentRuleViolationInput"}},"stripePaymentIntentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"x402PayeeReference":{"anyOf":[{"type":"string"},{"type":"null"}]},"ledger":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["fund","release","refund","fee"]},"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"stripePaymentIntentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeTransferId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeRefundId":{"anyOf":[{"type":"string"},{"type":"null"}]},"x402TxReference":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyStripeAccountId":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyAddress":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","kind","amountMinor","currency","stripePaymentIntentId","stripeTransferId","stripeRefundId","x402TxReference","counterpartyStripeAccountId","counterpartyAddress","createdAt"]},"description":"Real ledger_entries rows for this bounty — only on the poster/principal's own view."}},"required":["id","title","taskSpec","deliverableSpec","remote","geoCountries","geoCities","deadline","priceAmountMinor","priceCurrency","requiredProofPolicy","maxApplicants","status","postedByAgentId","postedByPrincipalUserId","postedByPrincipalOrgId","createdAt","updatedAt","contentRuleResult","stripePaymentIntentId","x402PayeeReference","ledger"]},"BountiesListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BountySummaryInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]},"FundBountyBodyInput":{"type":"object","properties":{"rail":{"default":"stripe","type":"string","enum":["stripe","x402"]}}},"ApplyToBountyBodyInput":{"type":"object","properties":{"proofShareIds":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}}},"BountyApplicationInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"earnerUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"proofShareIds":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"status":{"type":"string","enum":["applied","accepted","rejected"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","earnerUserId","proofShareIds","status","createdAt"]},"BountyApplicantsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BountyApplicationInput"}}},"required":["items"]},"AcceptApplicantBodyInput":{"type":"object","properties":{"applicationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["applicationId"]},"CreateSubmissionBodyInput":{"type":"object","properties":{"deliverables":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","minLength":1,"maxLength":60},"note":{"type":"string","maxLength":2000}},"required":["url","kind"]}}},"required":["deliverables"]},"BountySubmissionInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"applicationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"deliverables":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","minLength":1,"maxLength":60},"note":{"type":"string","maxLength":2000}},"required":["url","kind"]}},"status":{"type":"string","enum":["submitted","approved","disputed"]},"autoApproveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","applicationId","deliverables","status","autoApproveAt","createdAt"]},"CreateDisputeBodyInput":{"type":"object","properties":{"submissionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":4,"maxLength":2000},"evidence":{"default":[],"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"note":{"type":"string","maxLength":2000}},"required":["url"]}}},"required":["submissionId","reason"]},"DisputeInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"submissionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"openedByUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"note":{"type":"string"}},"required":["url"]}},"status":{"type":"string","enum":["open","resolved"]},"outcome":{"anyOf":[{"type":"string","enum":["release","partial","refund"]},{"type":"null"}]},"outcomeAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"resolvedByUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","submissionId","openedByUserId","reason","evidence","status","outcome","outcomeAmountMinor","resolvedByUserId","resolvedAt","createdAt"]},"AdminDisputesListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"submissionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"openedByUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"note":{"type":"string"}},"required":["url"]}},"status":{"type":"string","enum":["open","resolved"]},"outcome":{"anyOf":[{"type":"string","enum":["release","partial","refund"]},{"type":"null"}]},"outcomeAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"resolvedByUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"bountyTitle":{"type":"string"},"priceAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["id","bountyId","submissionId","openedByUserId","reason","evidence","status","outcome","outcomeAmountMinor","resolvedByUserId","resolvedAt","createdAt","bountyTitle","priceAmountMinor","priceCurrency"]}}},"required":["items"]},"ResolveDisputeBodyInput":{"type":"object","properties":{"outcome":{"type":"string","enum":["release","partial","refund"]},"outcomeAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["outcome"]},"VerifyListingBodyInput":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"text":{"type":"string","minLength":1,"maxLength":20000}}},"RiskFlagResultInput":{"type":"object","properties":{"code":{"type":"string","enum":["UPFRONT_FEE","TASK_SCAM_PATTERN","CRYPTO_ONLY_PAYOUT","OFF_PLATFORM_ONLY_MESSAGING","CHECK_DEPOSIT_SCHEME","EQUIPMENT_PURCHASE_REQUIRED","DOMAIN_AGE_UNDER_90D","DOMAIN_MISMATCH","UNSUBSTANTIATED_EARNINGS_CLAIM","MLM_STRUCTURE","GHOST_POSTING","BRAND_IMPERSONATION","UNPAID_WORK_REPORTS","NO_APPEALS_PROCESS"],"description":"Scam-signature rule code."},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"description":"How serious the signal is."},"detectedBy":{"type":"string","enum":["rule","curator","report"],"description":"Who or what raised the flag."},"ruleVersion":{"type":"string"},"evidence":{"type":"object","properties":{"quote":{"type":"string","maxLength":2000},"sourceUrl":{"type":"string","format":"uri"},"observedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["observedAt"]}},"required":["code","severity","detectedBy","ruleVersion","evidence"]},"VerifyListingResponseInput":{"type":"object","properties":{"flags":{"type":"array","items":{"$ref":"#/components/schemas/RiskFlagResultInput"}},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["flags","checkedAt"]},"UsageSummaryInput":{"type":"object","properties":{"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"tier":{"anyOf":[{"type":"string","enum":["free","developer","partner","agent"]},{"type":"null"}],"description":"The org's active API-key tier, or null when it has no active key."},"pricingConnected":{"type":"boolean","description":"True only when every money field below was read from a real, currently-active Stripe Price."},"periodStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"eventCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalUnits":{"type":"integer","minimum":0,"maximum":9007199254740991},"freeUnitsUsed":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"freeUnitsPerMonth":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"billableOverageUnits":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"overageRatePerUnitMinor":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"overageAmountMinor":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]}},"required":["orgId","tier","pricingConnected","periodStart","periodEnd","eventCount","totalUnits","freeUnitsUsed","freeUnitsPerMonth","billableOverageUnits","overageRatePerUnitMinor","overageAmountMinor","currency"]},"BillingPriceInput":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"openmoneyKey":{"type":"string"},"active":{"type":"boolean"},"currency":{"type":"string"},"unitAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"recurringInterval":{"anyOf":[{"type":"string"},{"type":"null"}]},"usageType":{"anyOf":[{"type":"string"},{"type":"null"}]},"freeUnitsPerMonth":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","productId","openmoneyKey","active","currency","unitAmountMinor","recurringInterval","usageType","freeUnitsPerMonth"]},"BillingPricingResponseInput":{"type":"object","properties":{"earnerPlus":{"anyOf":[{"type":"object","properties":{"monthly":{"$ref":"#/components/schemas/BillingPriceInput"},"annual":{"$ref":"#/components/schemas/BillingPriceInput"}},"required":["monthly","annual"]},{"type":"null"}]},"apiOverage":{"type":"object","propertyNames":{"type":"string","enum":["developer","partner","agent"]},"additionalProperties":{"$ref":"#/components/schemas/BillingPriceInput"},"required":["developer","partner","agent"],"description":"Only the tiers with a real, currently-active Stripe Price."},"all":{"type":"array","items":{"$ref":"#/components/schemas/BillingPriceInput"}}},"required":["earnerPlus","apiOverage","all"]},"CreateCheckoutBodyInput":{"type":"object","properties":{"priceId":{"type":"string","minLength":1}},"required":["priceId"]},"CreateCheckoutResponseInput":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"CreateBillingPortalResponseInput":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"BillingWebhookAckInput":{"type":"object","properties":{"received":{"type":"boolean","const":true},"handled":{"type":"boolean"}},"required":["received","handled"]},"SubscriptionSummaryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"plan":{"type":"string"},"status":{"type":"string","enum":["incomplete","incomplete_expired","trialing","active","past_due","unpaid","canceled"]},"stripePriceId":{"type":"string"},"currentPeriodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"cancelAtPeriodEnd":{"type":"boolean"},"canceledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","plan","status","stripePriceId","currentPeriodEnd","cancelAtPeriodEnd","canceledAt"]},"MySubscriptionResponseInput":{"type":"object","properties":{"subscription":{"anyOf":[{"$ref":"#/components/schemas/SubscriptionSummaryInput"},{"type":"null"}]}},"required":["subscription"]},"RankingEntryInput":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"score":{"type":"number"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]}},"required":["opportunityId","providerId","providerBrandName","rank","score","confidence"]},"RankingGroupInput":{"type":"object","properties":{"key":{"type":"object","properties":{"kind":{"type":"string"},"region":{"type":"string"}},"required":["kind","region"]},"cut":{"type":"string","enum":["composite","pay","fees","payout","stability","transparency","scamRisk"]},"excludedForInsufficientEvidence":{"type":"integer","minimum":0,"maximum":9007199254740991},"entries":{"type":"array","items":{"$ref":"#/components/schemas/RankingEntryInput"}}},"required":["key","cut","excludedForInsufficientEvidence","entries"]},"MoverInput":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"previousScore":{"anyOf":[{"type":"number"},{"type":"null"}]},"currentScore":{"anyOf":[{"type":"number"},{"type":"null"}]},"deltaPoints":{"anyOf":[{"type":"number"},{"type":"null"}]},"direction":{"type":"string","enum":["up","down","new","delisted"]}},"required":["opportunityId","providerId","providerBrandName","previousScore","currentScore","deltaPoints","direction"]},"RankingsReportInput":{"type":"object","properties":{"period":{"type":"string"},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"methodologyVersion":{"type":"string"},"candidateCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"groups":{"type":"array","items":{"$ref":"#/components/schemas/RankingGroupInput"}},"movers":{"type":"array","items":{"$ref":"#/components/schemas/MoverInput"}}},"required":["period","generatedAt","publishedAt","methodologyVersion","candidateCount","groups","movers"]},"RankingsListItemInput":{"type":"object","properties":{"period":{"type":"string"},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["period","publishedAt"]},"RankingsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RankingsListItemInput"}}},"required":["items"]},"DatasetSnapshotInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string"},"format":{"type":"string","enum":["csv","parquet"]},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"sizeBytes":{"type":"integer","minimum":0,"maximum":9007199254740991},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"changelogNote":{"type":"string"}},"required":["id","kind","format","version","publishedAt","sizeBytes","rowCount","changelogNote"]},"DatasetsListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DatasetSnapshotInput"}}},"required":["items"]},"ModerationEvidenceItemInput":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"quote":{"type":"string","maxLength":2000}},"required":["url"]},"ReportInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reporterUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string"},"subjectId":{"type":"string"},"category":{"type":"string"},"detail":{"type":"string"},"status":{"type":"string","enum":["open","queued","resolved","dismissed"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","reporterUserId","subjectType","subjectId","category","detail","status","createdAt"]},"ModerationDecisionInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reportId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewerUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"decision":{"type":"string","enum":["no_action","warn","restrict","remove"]},"templatedReason":{"type":"string"},"evidence":{"type":"array","items":{"$ref":"#/components/schemas/ModerationEvidenceItemInput"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","reportId","reviewerUserId","decision","templatedReason","evidence","createdAt"]},"AppealInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"decisionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appellantUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewerUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"outcome":{"anyOf":[{"type":"string","enum":["upheld","overturned","partial"]},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","decisionId","appellantUserId","reviewerUserId","outcome","reason","createdAt"]},"VelocityFlagInput":{"type":"object","properties":{"flagged":{"type":"boolean"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"windowMs":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"threshold":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"windowStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"windowEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["flagged","count","windowMs","threshold","windowStart","windowEnd"]},"DuplicateAccountClusterInput":{"type":"object","properties":{"sharedSignal":{"type":"object","properties":{"type":{"type":"string","enum":["deviceFingerprintHash","ipHash"]},"value":{"type":"string"}},"required":["type","value"]},"userIds":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"occurredWithinMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["sharedSignal","userIds","occurredWithinMs"]},"ModerationQueueItemInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reporterUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string"},"subjectId":{"type":"string"},"category":{"type":"string"},"detail":{"type":"string"},"status":{"type":"string","enum":["open","queued","resolved","dismissed"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"decision":{"anyOf":[{"$ref":"#/components/schemas/ModerationDecisionInput"},{"type":"null"}],"description":"The real decision for this report, once one exists — null until `resolved`."},"reporterVelocityFlag":{"description":"Report-submission rate for this report's own reporter — real context, never an automatic block.","$ref":"#/components/schemas/VelocityFlagInput"},"reporterDuplicateAccountClusters":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateAccountClusterInput"},"description":"Real device/IP-hash clusters the reporter's own recent device_signals participate in, if any."},"subjectBountyPostingVelocityFlag":{"anyOf":[{"$ref":"#/components/schemas/VelocityFlagInput"},{"type":"null"}],"description":"Only populated when subjectType is \"bounty\": the real poster's own bounty-posting rate."}},"required":["id","reporterUserId","subjectType","subjectId","category","detail","status","createdAt","decision","reporterVelocityFlag","reporterDuplicateAccountClusters","subjectBountyPostingVelocityFlag"]},"ModerationQueueResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ModerationQueueItemInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]},"AppealsListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AppealInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]},"CreateReportBodyInput":{"type":"object","properties":{"subjectType":{"type":"string","enum":["provider","opportunity","bounty","message","proof_presentation"]},"subjectId":{"type":"string","minLength":1,"maxLength":200},"category":{"type":"string","minLength":1,"maxLength":100},"detail":{"type":"string","minLength":1,"maxLength":5000}},"required":["subjectType","subjectId","category","detail"]},"DecideReportBodyInput":{"type":"object","properties":{"decision":{"type":"string","enum":["no_action","warn","restrict","remove"]},"templatedReason":{"type":"string","minLength":1,"maxLength":2000},"evidence":{"default":[],"maxItems":20,"type":"array","items":{"$ref":"#/components/schemas/ModerationEvidenceItemInput"}}},"required":["decision","templatedReason"]},"DecideReportResponseInput":{"type":"object","properties":{"report":{"$ref":"#/components/schemas/ReportInput"},"decision":{"$ref":"#/components/schemas/ModerationDecisionInput"}},"required":["report","decision"]},"DismissReportBodyInput":{"type":"object","properties":{"reason":{"type":"string","minLength":1,"maxLength":2000}},"required":["reason"]},"FileAppealBodyInput":{"type":"object","properties":{"reason":{"type":"string","minLength":4,"maxLength":2000}},"required":["reason"]},"ResolveAppealBodyInput":{"type":"object","properties":{"outcome":{"type":"string","enum":["upheld","overturned","partial"]},"reason":{"type":"string","minLength":1,"maxLength":2000}},"required":["outcome","reason"]},"TransparencyCountsInput":{"type":"object","properties":{"period":{"type":"string"},"reportsReceived":{"type":"integer","minimum":0,"maximum":9007199254740991},"actionsTaken":{"type":"integer","minimum":0,"maximum":9007199254740991},"appealsOverturned":{"type":"integer","minimum":0,"maximum":9007199254740991},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["period","reportsReceived","actionsTaken","appealsOverturned","publishedAt"]},"TransparencyListInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TransparencyCountsInput"}}},"required":["items"]},"LinkSubmissionInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"userId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["queued","reviewed","dismissed"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","userId","url","note","status","createdAt"]},"CreateLinkSubmissionBodyInput":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"note":{"type":"string","maxLength":500}},"required":["url"]},"LinkSubmissionsListResponseInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LinkSubmissionInput"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]},"ProvidersStatusInput":{"type":"object","properties":{"providers":{"type":"array","items":{"$ref":"#/components/schemas/ProviderStatusInput"}},"anySandbox":{"type":"boolean"},"env":{"type":"string"}},"required":["providers","anySandbox","env"]},"GmailConnectResponseInput":{"type":"object","properties":{"authorizationUrl":{"type":"string","format":"uri"}},"required":["authorizationUrl"]},"ArgyleConnectResponseInput":{"type":"object","properties":{"linkToken":{"type":"string"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["linkToken","incomeSourceId"]},"PinwheelConnectResponseInput":{"type":"object","properties":{"linkToken":{"type":"string"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expires":{"type":"string"}},"required":["linkToken","incomeSourceId","expires"]},"PassportWebhookAckInput":{"type":"object","properties":{"received":{"type":"boolean","const":true},"matched":{"type":"boolean"}},"required":["received","matched"]},"PublicKeyCredentialCreationOptionsInput":{"type":"object","properties":{"challenge":{"type":"string"},"rp":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"additionalProperties":{}},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"}},"required":["id","name","displayName"],"additionalProperties":{}},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"alg":{"type":"number"},"type":{"type":"string"}},"required":["alg","type"],"additionalProperties":{}}},"timeout":{"type":"number"},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"],"additionalProperties":{}}},"authenticatorSelection":{"type":"object","properties":{"residentKey":{"type":"string"},"userVerification":{"type":"string"}},"additionalProperties":{}},"attestation":{"type":"string"}},"required":["challenge","rp","user","pubKeyCredParams"],"additionalProperties":{}},"PublicKeyCredentialRequestOptionsInput":{"type":"object","properties":{"challenge":{"type":"string"},"rpId":{"type":"string"},"timeout":{"type":"number"},"allowCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"],"additionalProperties":{}}},"userVerification":{"type":"string"}},"required":["challenge"],"additionalProperties":{}},"RegistrationResponseInput":{"type":"object","properties":{"id":{"type":"string","minLength":1},"rawId":{"type":"string","minLength":1},"type":{"type":"string","const":"public-key"},"response":{"type":"object","properties":{"clientDataJSON":{"type":"string","minLength":1},"attestationObject":{"type":"string","minLength":1},"transports":{"type":"array","items":{"type":"string"}}},"required":["clientDataJSON","attestationObject"],"additionalProperties":{}},"clientExtensionResults":{"default":{},"type":"object","properties":{},"additionalProperties":{}},"authenticatorAttachment":{"type":"string"}},"required":["id","rawId","type","response"],"additionalProperties":{}},"AuthenticationResponseInput":{"type":"object","properties":{"id":{"type":"string","minLength":1},"rawId":{"type":"string","minLength":1},"type":{"type":"string","const":"public-key"},"response":{"type":"object","properties":{"clientDataJSON":{"type":"string","minLength":1},"authenticatorData":{"type":"string","minLength":1},"signature":{"type":"string","minLength":1},"userHandle":{"type":"string"}},"required":["clientDataJSON","authenticatorData","signature"],"additionalProperties":{}},"clientExtensionResults":{"default":{},"type":"object","properties":{},"additionalProperties":{}},"authenticatorAttachment":{"type":"string"}},"required":["id","rawId","type","response"],"additionalProperties":{}},"MeInput":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/UserInput"},"activeOrg":{"anyOf":[{"$ref":"#/components/schemas/OrgMembershipInput"},{"type":"null"}]},"orgs":{"type":"array","items":{"$ref":"#/components/schemas/OrgMembershipInput"}},"sandbox":{"type":"boolean"},"auth":{"type":"object","properties":{"kind":{"type":"string","enum":["session","api_key"]},"scopes":{"type":"array","items":{"type":"string"}},"sessionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["kind"]}},"required":["user","activeOrg","orgs","sandbox","auth"]},"QueueCountsInput":{"type":"object","properties":{"name":{"type":"string"},"counts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}}},"required":["name","counts"]},"QueueJobInput":{"type":"object","properties":{"id":{"type":"string"},"queue":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"attemptsMade":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timestamp":{"type":"string"},"processedOn":{"anyOf":[{"type":"string"},{"type":"null"}]},"finishedOn":{"anyOf":[{"type":"string"},{"type":"null"}]},"failedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"returnvalue":{"anyOf":[{},{"type":"null"}]}},"required":["id","queue","name","state","data","attemptsMade","timestamp","processedOn","finishedOn","failedReason","returnvalue"]},"SourceAdminInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"canonicalUrl":{"type":"string","format":"uri"},"publisher":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"reachability":{"type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"finalUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastCheck":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string"},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"durationMs":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"jobId":{"anyOf":[{"type":"string"},{"type":"null"}]},"checkedAt":{"type":"string"}},"required":["id","status","httpStatus","durationMs","error","jobId","checkedAt"]},{"type":"null"}]}},"required":["id","url","canonicalUrl","publisher","title","type","retrievedAt","publishedAt","reachability","httpStatus","lastCheckedAt","finalUrl","consecutiveFailures","checksum","lastCheck"]},"AdminRegistryFetchResultItemInput":{"type":"object","properties":{"key":{"type":"string","description":"The URL slot, e.g. \"terms\", \"fees\", \"payout\"."},"url":{"type":"string"},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"finalUrl":{"type":"string"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceId":{"type":"string"}},"required":["key","url","httpStatus","finalUrl","error","sourceId"]},"AdminRegistryProviderCreatedInput":{"type":"object","properties":{"providerId":{"type":"string"},"opportunityId":{"type":"string"},"status":{"type":"string","enum":["draft","review","published"]},"fetch":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryFetchResultItemInput"}}},"required":["providerId","opportunityId","status","fetch"]},"AdminRegistryFetchResultInput":{"type":"object","properties":{"providerId":{"type":"string"},"fetchedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"pages":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryFetchResultItemInput"}}},"required":["providerId","fetchedAt","pages"]},"AdminRegistryProposedFieldInput":{"type":"object","properties":{"path":{"type":"string"},"value":{},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"corroborated":{"type":"boolean"},"sourceKey":{"type":"string"},"sourceId":{"anyOf":[{"type":"string"},{"type":"null"}]},"quotes":{"type":"array","items":{"type":"string"}}},"required":["path","value","confidence","corroborated","sourceKey","sourceId","quotes"]},"AdminRegistryExtractResultInput":{"type":"object","properties":{"providerId":{"type":"string"},"extractedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryProposedFieldInput"}}},"required":["providerId","extractedAt","fields"]},"AdminRegistryConfirmResultInput":{"type":"object","properties":{"providerId":{"type":"string"},"opportunityId":{"type":"string"},"fieldsWritten":{"type":"array","items":{"type":"string"}},"fieldsNeedingConfirmation":{"type":"array","items":{"type":"string"}}},"required":["providerId","opportunityId","fieldsWritten","fieldsNeedingConfirmation"]},"AdminRegistryPublishResultInput":{"type":"object","properties":{"providerId":{"type":"string"},"status":{"type":"string","enum":["draft","review","published"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sourceCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasCorroboratedFact":{"type":"boolean"},"minSourcesRequired":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opportunities":{"type":"array","items":{"type":"object","properties":{"opportunityId":{"type":"string"},"scorecard":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["opportunityId","scorecard"]}}},"required":["providerId","status","version","sourceCount","hasCorroboratedFact","minSourcesRequired","opportunities"]},"AdminRegistryRecomputeResultInput":{"type":"object","properties":{"opportunityId":{"type":"string"},"scorecard":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["opportunityId","scorecard"]},"AdminRegistryQueueItemInput":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"brandName":{"type":"string"},"title":{"type":"string"},"providerStatus":{"type":"string","enum":["draft","review","published"]},"opportunityStatus":{"type":"string","enum":["draft","review","published"]},"lastVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"stale":{"type":"boolean","description":"True when `lastVerifiedAt` is null or older than 30 days."},"needsConfirmation":{"type":"boolean","description":"True when the provider has not cleared the publish bar yet (proxy: `status !== 'published'`)."}},"required":["opportunityId","providerId","brandName","title","providerStatus","opportunityStatus","lastVerifiedAt","stale","needsConfirmation"]},"AdminRegistryQueueInput":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryQueueItemInput"}}},"required":["items"]},"AdminRegistryProviderRecordInput":{"type":"object","properties":{"provider":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"opportunities":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"feeSchedule":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"payoutTerms":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"onboardingCost":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"stability":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"riskFlags":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"scorecards":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"sources":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"pendingFields":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryProposedFieldInput"}}},"required":["provider","opportunities","feeSchedule","payoutTerms","onboardingCost","stability","riskFlags","scorecards","sources","pendingFields"]},"ChangelogEntryInput":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string","enum":["provider","opportunity"]},"subjectId":{"type":"string"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"changeSummary":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","subjectType","subjectId","version","changeSummary","createdAt"]},"Problem":{"type":"object","properties":{"type":{"type":"string","description":"Problem type URI under https://openmoney.ai/problems/"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"instance":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"type":"string"}},"required":["path","message"],"additionalProperties":false}},"requestId":{"type":"string"},"traceId":{"type":"string"}},"required":["type","title","status"],"additionalProperties":{}},"User":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"roles":{"type":"array","items":{"type":"string","enum":["earner","relying_party_admin","agent_principal","curator","admin"]}},"emailVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"locale":{"type":"string"},"timezone":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","email","handle","displayName","roles","emailVerifiedAt","locale","timezone","createdAt"],"additionalProperties":false},"Org":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["relying_party","agent_operator","employer","internal"]},"verificationStatus":{"type":"string"},"website":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","slug","kind","verificationStatus","website","createdAt"],"additionalProperties":false},"OrgMembership":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["relying_party","agent_operator","employer","internal"]},"verificationStatus":{"type":"string"},"website":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["id","name","slug","kind","verificationStatus","website","createdAt","role"],"additionalProperties":false},"Session":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"deviceLabel":{"anyOf":[{"type":"string"},{"type":"null"}]},"userAgent":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastSeenAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"current":{"type":"boolean"}},"required":["id","deviceLabel","userAgent","lastSeenAt","createdAt","expiresAt","current"],"additionalProperties":false},"Passkey":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}]},"deviceType":{"type":"string","enum":["singleDevice","multiDevice"]},"backedUp":{"type":"boolean"},"transports":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","nickname","deviceType","backedUp","transports","createdAt","lastUsedAt"],"additionalProperties":false},"ConsentEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"scope":{"type":"string"},"action":{"type":"string"},"subjectType":{"anyOf":[{"type":"string"},{"type":"null"}]},"subjectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"detail":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","scope","action","subjectType","subjectId","detail","createdAt"],"additionalProperties":false},"ApiKey":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"tier":{"type":"string"},"rateLimitPerMinute":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","orgId","name","prefix","scopes","tier","rateLimitPerMinute","lastUsedAt","expiresAt","revokedAt","createdBy","createdAt"],"additionalProperties":false},"ProviderStatus":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"mode":{"type":"string","enum":["live","sandbox","unconfigured"]},"requires":{"type":"array","items":{"type":"string"}},"unlocks":{"type":"array","items":{"type":"string"}},"howTo":{"type":"string"}},"required":["id","label","mode","requires","unlocks","howTo"],"additionalProperties":false},"Health":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded","unavailable"]},"version":{"type":"string"},"env":{"type":"string"},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"checks":{"type":"object","properties":{"postgres":{"type":"string","enum":["ok","degraded","unconfigured"]},"redis":{"type":"string","enum":["ok","degraded","unconfigured"]},"storage":{"type":"string","enum":["ok","degraded","unconfigured"]},"email":{"type":"string","enum":["ok","degraded","unconfigured"]}},"required":["postgres","redis","storage","email"],"additionalProperties":false}},"required":["status","version","env","checkedAt","checks"],"additionalProperties":false},"JobsLogRow":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"queue":{"type":"string"},"jobName":{"type":"string"},"jobId":{"type":"string"},"status":{"type":"string"},"attempt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"result":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"traceId":{"anyOf":[{"type":"string"},{"type":"null"}]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"durationMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","queue","jobName","jobId","status","attempt","payload","result","error","traceId","startedAt","finishedAt","durationMs","createdAt"],"additionalProperties":false},"SourcePublic":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"canonicalUrl":{"type":"string","format":"uri"},"publisher":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"reachability":{"type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","url","canonicalUrl","publisher","title","type","retrievedAt","publishedAt","reachability","httpStatus","lastCheckedAt"],"additionalProperties":false},"AuditRow":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"actorUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"actorApiKeyId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"actorType":{"type":"string"},"orgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"action":{"type":"string"},"subjectType":{"anyOf":[{"type":"string"},{"type":"null"}]},"subjectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"before":{"anyOf":[{},{"type":"null"}]},"after":{"anyOf":[{},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","actorUserId","actorApiKeyId","actorType","orgId","action","subjectType","subjectId","before","after","reason","createdAt"],"additionalProperties":false},"FeatureFlag":{"type":"object","properties":{"key":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100},"audience":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}},"orgIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"updatedBy":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["key","description","enabled","rolloutPercent","audience","updatedBy","updatedAt"],"additionalProperties":false},"ProviderSummary":{"type":"object","properties":{"id":{"type":"string"},"brandName":{"type":"string"},"legalName":{"type":"string"},"domain":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"hqCountry":{"anyOf":[{"type":"string"},{"type":"null"}]},"entityVerificationStatus":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"paymentVerificationStatus":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"primaryOpportunityId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The opportunity whose scorecard is shown here — see GET /v1/providers/{id}/scorecard."},"composite":{"anyOf":[{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["score","partial"],"additionalProperties":false},{"type":"null"}],"description":"Composite score of the primary opportunity; null when the provider has no published opportunity yet."},"status":{"type":"string","const":"published"},"publishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","brandName","legalName","domain","categories","hqCountry","entityVerificationStatus","paymentVerificationStatus","primaryOpportunityId","composite","status","publishedAt","updatedAt"],"additionalProperties":false},"ProvidersListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProviderSummary"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"],"additionalProperties":false},"OpportunitySummary":{"type":"object","properties":{"id":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."},"workMode":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."},"composite":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["score","partial"],"additionalProperties":false},"payEvidenceSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"],"additionalProperties":false}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"],"additionalProperties":false},{"type":"null"}]},"feesSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"],"additionalProperties":false}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"],"additionalProperties":false},{"type":"null"}]},"payoutSpeedSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"],"additionalProperties":false}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"],"additionalProperties":false},{"type":"null"}]},"freshness":{"type":"string","enum":["fresh","stale"]},"lastVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"countries":{"type":"array","items":{"type":"string"}}},"required":["id","providerId","providerBrandName","title","kind","workMode","composite","payEvidenceSummary","feesSummary","payoutSpeedSummary","freshness","lastVerifiedAt","countries"],"additionalProperties":false},"OpportunitiesListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OpportunitySummary"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"],"additionalProperties":false},"OpportunityHistoryEntry":{"type":"object","properties":{"version":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Record version at this point in the history; null for a recompute-only event with no accompanying content edit."},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"compositeScore":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"diff":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Human-readable summary of what changed, when known."}},"required":["version","computedAt","compositeScore","diff"],"additionalProperties":false},"Scorecard":{"type":"object","properties":{"pay":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"One scorecard dimension."},"fees":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"One scorecard dimension."},"payout":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"One scorecard dimension."},"stability":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"One scorecard dimension."},"transparency":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"One scorecard dimension."},"scamRisk":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"One scorecard dimension."},"composite":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Weighted composite 0–100, or null when no dimension has evidence."},"partial":{"type":"boolean","description":"True when at least one dimension was excluded for insufficient evidence."},"weights":{"type":"object","properties":{"pay":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"fees":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"payout":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"stability":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"transparency":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"scamRisk":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."}},"required":["pay","fees","payout","stability","transparency","scamRisk"],"additionalProperties":false,"description":"Composite weights per dimension in basis points; they sum to 10000."},"methodologyVersion":{"type":"string","minLength":1,"description":"Version of the scoring methodology that produced this composite, e.g. \"scoring@1.0.0\"."}},"required":["score","partial","weights","methodologyVersion"],"additionalProperties":false,"description":"The weighted composite and how it was computed."},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["pay","fees","payout","stability","transparency","scamRisk","composite","computedAt"],"additionalProperties":false},"RegistryMethodology":{"type":"object","properties":{"version":{"type":"string"},"changelog":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string"},"date":{"type":"string"},"summary":{"type":"string"}},"required":["version","date","summary"],"additionalProperties":false}},"dimensions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["pay","fees","payout","stability","transparency","scamRisk"]},"label":{"type":"string"},"weightBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"summary":{"type":"string"},"formula":{"type":"string"}},"required":["key","label","weightBps","summary","formula"],"additionalProperties":false}}},"required":["version","changelog","dimensions"],"additionalProperties":false},"IncomeSourceSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"providerLabel":{"type":"string"},"connectionType":{"type":"string","enum":["csv","pdf","screenshot","email","argyle","pinwheel","manual"]},"status":{"type":"string","enum":["connected","needs_reauth","disconnected","error"]},"lastSyncAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"eventCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","providerId","providerLabel","connectionType","status","lastSyncAt","eventCount","createdAt"],"additionalProperties":false},"IncomeSourcesList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/IncomeSourceSummary"}}},"required":["items"],"additionalProperties":false},"CreateIncomeSourceBody":{"type":"object","properties":{"providerId":{"type":"string","minLength":1,"maxLength":200},"providerLabel":{"type":"string","minLength":1,"maxLength":200},"connectionType":{"type":"string","enum":["csv","pdf","screenshot","manual"],"description":"Sources created directly by the caller; email/argyle/pinwheel sources are created by their own connect/callback/webhook routes."}},"required":["providerLabel","connectionType"],"additionalProperties":false},"CsvColumnMapping":{"type":"object","properties":{"occurredAtHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"periodStartHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"periodEndHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"currencyHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"currencyLiteral":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]},"grossAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"tipsAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"platformFeesAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"otherFeesAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"reimbursementsAmountHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"hoursActiveHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"hoursOnlineHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"tasksHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"milesHeader":{"anyOf":[{"type":"string"},{"type":"null"}]},"amountsAreMajorUnits":{"type":"boolean"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["occurredAtHeader","periodStartHeader","periodEndHeader","currencyHeader","currencyLiteral","grossAmountHeader","tipsAmountHeader","platformFeesAmountHeader","otherFeesAmountHeader","reimbursementsAmountHeader","hoursActiveHeader","hoursOnlineHeader","tasksHeader","milesHeader","amountsAreMajorUnits","notes"],"additionalProperties":false},"PassportImportResult":{"type":"object","properties":{"imported":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needsConfirmation":{"type":"boolean"},"skippedDuplicates":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"documentId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"mapping":{"anyOf":[{"$ref":"#/components/schemas/CsvColumnMapping"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"promptVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"editedImageAnalysis":{"anyOf":[{"type":"object","properties":{"method":{"type":"string"},"score":{"type":"number"},"likelyEdited":{"type":"boolean"},"maxToMeanRatio":{"type":"number"}},"required":["method","score","likelyEdited","maxToMeanRatio"],"additionalProperties":false},{"type":"null"}],"description":"Screenshot imports only: the real error-level-analysis result."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["imported","needsConfirmation","skippedDuplicates","format","documentId","mapping","model","promptVersion","editedImageAnalysis","warnings"],"additionalProperties":false},"CsvImportConfirmBody":{"type":"object","properties":{"documentId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"mapping":{"$ref":"#/components/schemas/CsvColumnMapping"},"model":{"type":"string","minLength":1},"promptVersion":{"type":"string","minLength":1}},"required":["documentId","mapping","model","promptVersion"],"additionalProperties":false},"EarningsEventSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"rawRef":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Id of the source document, when one exists — cheap to include on every row; the signed URL itself (rawRefUrl) is detail-only."},"dedupeHash":{"type":"string","description":"The idempotent-import fingerprint (provider + period + amount). Shared by rows the importer treats as the same statement line — the Ledger UI uses this to flag likely duplicates."},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"grossAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tipsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"platformFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"otherFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reimbursementsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hoursActive":{"anyOf":[{"type":"number"},{"type":"null"}]},"hoursOnline":{"anyOf":[{"type":"number"},{"type":"null"}]},"tasks":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"miles":{"anyOf":[{"type":"number"},{"type":"null"}]},"extractionModel":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionPromptVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionConfidence":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"confirmedByUser":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","incomeSourceId","providerId","rawRef","dedupeHash","occurredAt","periodStart","periodEnd","currency","grossAmountMinor","tipsAmountMinor","platformFeesAmountMinor","otherFeesAmountMinor","reimbursementsAmountMinor","hoursActive","hoursOnline","tasks","miles","extractionModel","extractionPromptVersion","extractionConfidence","confirmedByUser","createdAt","updatedAt"],"additionalProperties":false},"EarningsEventDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"rawRef":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Id of the source document, when one exists — cheap to include on every row; the signed URL itself (rawRefUrl) is detail-only."},"dedupeHash":{"type":"string","description":"The idempotent-import fingerprint (provider + period + amount). Shared by rows the importer treats as the same statement line — the Ledger UI uses this to flag likely duplicates."},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"grossAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tipsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"platformFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"otherFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reimbursementsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hoursActive":{"anyOf":[{"type":"number"},{"type":"null"}]},"hoursOnline":{"anyOf":[{"type":"number"},{"type":"null"}]},"tasks":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"miles":{"anyOf":[{"type":"number"},{"type":"null"}]},"extractionModel":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionPromptVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"extractionConfidence":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"confirmedByUser":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"rawRefUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Signed, time-limited URL to the source document. Null when there is no stored document, or object storage is unconfigured."}},"required":["id","incomeSourceId","providerId","rawRef","dedupeHash","occurredAt","periodStart","periodEnd","currency","grossAmountMinor","tipsAmountMinor","platformFeesAmountMinor","otherFeesAmountMinor","reimbursementsAmountMinor","hoursActive","hoursOnline","tasks","miles","extractionModel","extractionPromptVersion","extractionConfidence","confirmedByUser","createdAt","updatedAt","rawRefUrl"],"additionalProperties":false},"EarningsEventsListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EarningsEventSummary"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"],"additionalProperties":false},"PatchEarningsEventBody":{"type":"object","properties":{"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"grossAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tipsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"platformFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"otherFeesAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reimbursementsAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hoursActive":{"anyOf":[{"type":"number"},{"type":"null"}]},"hoursOnline":{"anyOf":[{"type":"number"},{"type":"null"}]},"tasks":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"miles":{"anyOf":[{"type":"number"},{"type":"null"}]},"confirm":{"type":"boolean"}},"additionalProperties":false},"PassportDistribution":{"type":"object","properties":{"p25":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"p50":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"p90":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["p25","p50","p90","n"],"additionalProperties":false},"PassportTaxSetAside":{"type":"object","properties":{"selfEmploymentTaxAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"mileageDeductionAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"label":{"type":"string","description":"Always includes \"estimate\" and \"not tax advice\" — never presented as a filing."},"rateSource":{"type":"object","properties":{"selfEmploymentTaxRateBps":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"mileageRateCentsPerMile":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mileageRateCitation":{"type":"string"}},"required":["selfEmploymentTaxRateBps","mileageRateCentsPerMile","mileageRateCitation"],"additionalProperties":false}},"required":["selfEmploymentTaxAmountMinor","mileageDeductionAmountMinor","label","rateSource"],"additionalProperties":false},"PassportAnalytics":{"type":"object","properties":{"window":{"type":"string","enum":["7d","30d","90d","12m"]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"netHourly":{"$ref":"#/components/schemas/PassportDistribution"},"grossHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"feeRateBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"tipShareBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"volatilityIndexBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"consistency":{"anyOf":[{"type":"string","enum":["steady","variable","erratic"]},{"type":"null"}]},"weeksObserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taxSetAside":{"$ref":"#/components/schemas/PassportTaxSetAside"},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total earnings_events in the window (the Evidence-component denominator); dimension-specific counts are nested in netHourly.n."},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"methodologyVersion":{"type":"string"}},"required":["window","currency","netHourly","grossHourlyP50AmountMinor","feeRateBps","tipShareBps","volatilityIndexBps","consistency","weeksObserved","taxSetAside","n","periodStart","periodEnd","asOf","methodologyVersion"],"additionalProperties":false},"PassportAnalyticsByPlatformItem":{"type":"object","properties":{"window":{"type":"string","enum":["7d","30d","90d","12m"]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"netHourly":{"$ref":"#/components/schemas/PassportDistribution"},"grossHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"feeRateBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"tipShareBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"volatilityIndexBps":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}]},"consistency":{"anyOf":[{"type":"string","enum":["steady","variable","erratic"]},{"type":"null"}]},"weeksObserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taxSetAside":{"$ref":"#/components/schemas/PassportTaxSetAside"},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total earnings_events in the window (the Evidence-component denominator); dimension-specific counts are nested in netHourly.n."},"periodStart":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"periodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"methodologyVersion":{"type":"string"},"providerId":{"type":"string"},"providerLabel":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["window","currency","netHourly","grossHourlyP50AmountMinor","feeRateBps","tipShareBps","volatilityIndexBps","consistency","weeksObserved","taxSetAside","n","periodStart","periodEnd","asOf","methodologyVersion","providerId","providerLabel"],"additionalProperties":false},"PassportAnalyticsByPlatform":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PassportAnalyticsByPlatformItem"}}},"required":["items"],"additionalProperties":false},"PassportCounterfactual":{"type":"object","properties":{"actualNetHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"registryMedianNetHourlyP50AmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"registryOpportunityId":{"type":"string"},"n":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"registryN":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"label":{"type":"string","const":"estimate, not a promise"}},"required":["actualNetHourlyP50AmountMinor","registryMedianNetHourlyP50AmountMinor","currency","registryOpportunityId","n","registryN","label"],"additionalProperties":false},"PassportRefreshResult":{"type":"object","properties":{"userId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"windowsComputed":{"type":"array","items":{"type":"string","enum":["7d","30d","90d","12m"]}},"providersComputed":{"type":"array","items":{"type":"string"}},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["userId","windowsComputed","providersComputed","computedAt"],"additionalProperties":false},"PassportExportCreated":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["pending","ready","failed","expired"]},"jobId":{"type":"string"}},"required":["id","status","jobId"],"additionalProperties":false},"PassportExport":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["pending","ready","failed","expired"]},"requestedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"downloadUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","status","requestedAt","completedAt","expiresAt","downloadUrl","error"],"additionalProperties":false},"PassportDeleteBody":{"type":"object","properties":{"confirmationPhrase":{"type":"string","minLength":1,"maxLength":320,"description":"Must equal the caller's account email, checked server-side."}},"required":["confirmationPhrase"],"additionalProperties":false},"PassportDeleteAccepted":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"],"additionalProperties":false},"PassportDeleteConfirmBody":{"type":"object","properties":{"token":{"type":"string","minLength":1}},"required":["token"],"additionalProperties":false},"PassportDeleteConfirmResult":{"type":"object","properties":{"status":{"type":"string","enum":["deleted","invalid","expired"]}},"required":["status"],"additionalProperties":false},"PassportAggregateConsentBody":{"type":"object","properties":{"optIn":{"type":"boolean"}},"required":["optIn"],"additionalProperties":false},"Jwk":{"type":"object","properties":{"kty":{"type":"string"}},"required":["kty"],"additionalProperties":{}},"CreateProofBody":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]}},"required":["type"],"additionalProperties":false},"HolderKeyBody":{"type":"object","properties":{"publicJwk":{"$ref":"#/components/schemas/Jwk"}},"required":["publicJwk"],"additionalProperties":false},"IssueProofResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"vct":{"type":"string"},"sdJwt":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","type","vct","sdJwt","expiresAt"],"additionalProperties":false},"ProofSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"status":{"type":"string","enum":["issued","revoked","suspended","expired"]},"vct":{"type":"string"},"issuedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","type","status","vct","issuedAt","expiresAt"],"additionalProperties":false},"ProofsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProofSummary"}}},"required":["items"],"additionalProperties":false},"ProofDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"status":{"type":"string","enum":["issued","revoked","suspended","expired"]},"vct":{"type":"string"},"issuedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"sdJwt":{"type":"string","description":"Full, all-disclosures compact SD-JWT VC. Only the owner can fetch this — used client-side to build a selective presentation via presentProof."},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"revokedReason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","type","status","vct","issuedAt","expiresAt","sdJwt","revokedAt","revokedReason"],"additionalProperties":false},"RevokeProofBody":{"type":"object","properties":{"reason":{"type":"string","maxLength":500}},"additionalProperties":false},"RevokeProofResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","const":"revoked"},"revokedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","status","revokedAt"],"additionalProperties":false},"CreateShareBody":{"type":"object","properties":{"audience":{"type":"string","minLength":1,"maxLength":2000},"expiresInSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":2592000},"disclosedClaimPaths":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":1}}},"required":["expiresInSeconds","disclosedClaimPaths"],"additionalProperties":false},"CreateShareResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","expiresAt"],"additionalProperties":false},"PublicShareView":{"type":"object","properties":{"proofType":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"audience":{"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"revoked":{"type":"boolean"}},"required":["proofType","audience","expiresAt","revoked"],"additionalProperties":false},"VerificationLogEntry":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"result":{"type":"string"},"disclosedClaimPaths":{"type":"array","items":{"type":"string"}},"audience":{"anyOf":[{"type":"string"},{"type":"null"}]},"relyingPartyOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","result","disclosedClaimPaths","audience","relyingPartyOrgId","createdAt"],"additionalProperties":false},"VerificationLogResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VerificationLogEntry"}}},"required":["items"],"additionalProperties":false},"VerifyProofBody":{"type":"object","properties":{"presentation":{"type":"string","minLength":1},"audience":{"type":"string","minLength":1,"maxLength":2000},"nonce":{"type":"string","minLength":1}},"required":["presentation","audience","nonce"],"additionalProperties":false},"VerifyProofResponse":{"type":"object","properties":{"valid":{"type":"boolean"},"claims":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"vct":{"type":"string"},"issuer":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}},"error":{"type":"string"}},"required":["valid","claims","vct","issuer","warnings"],"additionalProperties":false},"VerifyNonceBody":{"type":"object","properties":{"audience":{"type":"string","minLength":1,"maxLength":2000}},"required":["audience"],"additionalProperties":false},"VerifyNonceResponse":{"type":"object","properties":{"nonce":{"type":"string"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["nonce","expiresAt"],"additionalProperties":false},"CreateProofRequestBody":{"type":"object","properties":{"policyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expiresInSeconds":{"type":"integer","exclusiveMinimum":0,"maximum":2592000}},"required":["expiresInSeconds"],"additionalProperties":false},"CreateProofRequestResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"}},"required":["id","url"],"additionalProperties":false},"ProofRequestStatus":{"type":"object","properties":{"status":{"type":"string","enum":["pending","fulfilled","expired"]},"fulfilledShareId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]}},"required":["status","fulfilledShareId"],"additionalProperties":false},"CreateProofPolicyBody":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"requirements":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"],"additionalProperties":false}}},"required":["name","requirements"],"additionalProperties":false},"ProofPolicy":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"requirements":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"],"additionalProperties":false}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","orgId","name","requirements","createdAt","updatedAt"],"additionalProperties":false},"ProofPoliciesList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProofPolicy"}}},"required":["items"],"additionalProperties":false},"CreateWebhookBody":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]}}},"required":["url","events"],"additionalProperties":false},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]}},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","orgId","url","events","enabled","createdAt"],"additionalProperties":false},"CreateWebhookResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]}},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"signingSecret":{"type":"string","description":"Shown once, at creation — store it now. Used to verify this endpoint's HMAC-SHA256 delivery signature header."}},"required":["id","orgId","url","events","enabled","createdAt","signingSecret"],"additionalProperties":false},"WebhooksList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"required":["items"],"additionalProperties":false},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"endpointId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"event":{"type":"string","enum":["proof.verified","proof.revoked","proof.expired"]},"status":{"type":"string","enum":["pending","delivered","failed"]},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastAttemptAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","endpointId","event","status","attempts","lastAttemptAt","lastError","createdAt"],"additionalProperties":false},"WebhookDeliveriesList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}},"required":["items"],"additionalProperties":false},"OrgProofVerificationEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"proofId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"result":{"type":"string"},"disclosedClaimPaths":{"type":"array","items":{"type":"string"}},"audience":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","proofId","result","disclosedClaimPaths","audience","createdAt"],"additionalProperties":false},"OrgProofVerificationsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OrgProofVerificationEvent"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"DidDocument":{"type":"object","properties":{"@context":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"verificationMethod":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"assertionMethod":{"type":"array","items":{"type":"string"}}},"required":["@context","id","verificationMethod","assertionMethod"],"additionalProperties":{}},"Jwks":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/Jwk"}}},"required":["keys"],"additionalProperties":false},"Profile":{"type":"object","properties":{"userId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"locationCountry":{"anyOf":[{"type":"string"},{"type":"null"}]},"locationRegion":{"anyOf":[{"type":"string"},{"type":"null"}]},"locationCity":{"anyOf":[{"type":"string"},{"type":"null"}]},"workModes":{"type":"array","items":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."}},"hoursPerWeek":{"anyOf":[{"type":"integer","minimum":0,"maximum":168},{"type":"null"}]},"timeWindows":{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":6,"description":"0=Sunday..6=Saturday"},"startMinute":{"type":"integer","minimum":0,"maximum":1439},"endMinute":{"type":"integer","minimum":1,"maximum":1440}},"required":["day","startMinute","endMinute"],"additionalProperties":false}},"hasVehicle":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"equipment":{"type":"array","items":{"type":"string"}},"credentialsHeld":{"type":"array","items":{"type":"string"}},"backgroundCheckWilling":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"minAcceptableNetHourlyAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"minAcceptableNetHourlyCurrency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"payoutSpeedNeeded":{"type":"string","enum":["same_day","weekly","monthly","any"]},"capitalAvailableAmountMinor":{"type":"integer","minimum":0,"maximum":9007199254740991},"capitalAvailableCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"riskTolerance":{"type":"string","enum":["conservative","moderate","aggressive"]},"jurisdictions":{"type":"array","items":{"type":"string"}},"createdAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"null when no profile row exists yet — PRD-documented defaults are shown instead, never a 404."},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["userId","locationCountry","locationRegion","locationCity","workModes","hoursPerWeek","timeWindows","hasVehicle","equipment","credentialsHeld","backgroundCheckWilling","minAcceptableNetHourlyAmountMinor","minAcceptableNetHourlyCurrency","payoutSpeedNeeded","capitalAvailableAmountMinor","capitalAvailableCurrency","riskTolerance","jurisdictions","createdAt","updatedAt"],"additionalProperties":false},"PatchProfileBody":{"type":"object","properties":{"locationCountry":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}]},"locationRegion":{"anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]},"locationCity":{"anyOf":[{"type":"string","minLength":1,"maxLength":120},{"type":"null"}]},"workModes":{"maxItems":3,"type":"array","items":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."}},"hoursPerWeek":{"anyOf":[{"type":"integer","minimum":0,"maximum":168},{"type":"null"}]},"timeWindows":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":6,"description":"0=Sunday..6=Saturday"},"startMinute":{"type":"integer","minimum":0,"maximum":1439},"endMinute":{"type":"integer","minimum":1,"maximum":1440}},"required":["day","startMinute","endMinute"],"additionalProperties":false}},"hasVehicle":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"equipment":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"credentialsHeld":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"backgroundCheckWilling":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"minAcceptableNetHourlyAmountMinor":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"minAcceptableNetHourlyCurrency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"payoutSpeedNeeded":{"type":"string","enum":["same_day","weekly","monthly","any"]},"capitalAvailableAmountMinor":{"type":"integer","minimum":0,"maximum":9007199254740991},"capitalAvailableCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"riskTolerance":{"type":"string","enum":["conservative","moderate","aggressive"]},"jurisdictions":{"maxItems":50,"type":"array","items":{"type":"string","minLength":2,"maxLength":2}}},"additionalProperties":false},"ProfileSkill":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string"},"source":{"type":"string","enum":["typed","passport_inferred"]},"confirmed":{"type":"boolean"},"evidenceIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","label","source","confirmed","evidenceIds","createdAt"],"additionalProperties":false},"ProfileSkillsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSkill"}}},"required":["items"],"additionalProperties":false},"CreateSkillBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":120}},"required":["label"],"additionalProperties":false},"InferSkillsResponse":{"type":"object","properties":{"inserted":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSkill"}}},"required":["inserted"],"additionalProperties":false},"ProfileInterest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"tag":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","tag","createdAt"],"additionalProperties":false},"ProfileInterestsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProfileInterest"}}},"required":["items"],"additionalProperties":false},"CreateInterestBody":{"type":"object","properties":{"tag":{"type":"string","minLength":1,"maxLength":80}},"required":["tag"],"additionalProperties":false},"MatchedOn":{"type":"object","properties":{"label":{"type":"string"},"profileField":{"type":"string"},"opportunityField":{"type":"string"}},"required":["label","profileField","opportunityField"],"additionalProperties":false},"ExcludedBecause":{"type":"object","properties":{"code":{"type":"string"},"reason":{"type":"string"},"evidenceUrl":{"type":"string","format":"uri"}},"required":["code","reason"],"additionalProperties":false},"ExpectedValueBreakdown":{"type":"object","properties":{"probabilityOfAccess":{"anyOf":[{"type":"number"},{"type":"null"}]},"netHourlyMedianMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"netHourlyCurrency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},{"type":"null"}]},"netHourlySourceType":{"anyOf":[{"type":"string","enum":["passport_aggregate","platform_disclosure","third_party_dataset","survey","regulatory_filing"],"description":"Where a pay figure comes from."},{"type":"null"}]},"hoursApplied":{"anyOf":[{"type":"number"},{"type":"null"}]},"onboardingCostMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"expectedFeesMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"expectedValueMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["probabilityOfAccess","netHourlyMedianMinor","netHourlyCurrency","netHourlySourceType","hoursApplied","onboardingCostMinor","expectedFeesMinor","expectedValueMinor"],"additionalProperties":false},"DiscoverItem":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."},"workMode":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."},"payEvidenceSummary":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"],"additionalProperties":false}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"],"additionalProperties":false},{"type":"null"}]},"expectedValue":{"$ref":"#/components/schemas/ExpectedValueBreakdown"},"similarityScore":{"anyOf":[{"type":"number"},{"type":"null"}]},"verdict":{"type":"string","enum":["worth_it","consider","dont"]},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"matchedOn":{"type":"array","items":{"$ref":"#/components/schemas/MatchedOn"}},"excludedBecause":{"type":"array","items":{"$ref":"#/components/schemas/ExcludedBecause"}},"evidenceIds":{"type":"array","items":{"type":"string"}},"freshness":{"type":"string","enum":["fresh","stale"]},"lastVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"passesHardFilters":{"type":"boolean"},"countries":{"type":"array","items":{"type":"string"}}},"required":["opportunityId","providerId","providerBrandName","title","kind","workMode","payEvidenceSummary","expectedValue","similarityScore","verdict","confidence","matchedOn","excludedBecause","evidenceIds","freshness","lastVerifiedAt","passesHardFilters","countries"],"additionalProperties":false},"DiscoverListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverItem"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","nextCursor","total"],"additionalProperties":false},"DiscoverItemDetail":{"type":"object","properties":{"match":{"$ref":"#/components/schemas/DiscoverItem"},"opportunity":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Registry id, e.g. \"freelancer-com:projects\"."},"providerId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of the Provider offering this opportunity."},"kind":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."},"title":{"type":"string","minLength":1,"maxLength":200,"description":"Short name, sentence case."},"description":{"type":"string","minLength":1,"maxLength":5000,"description":"What the work is, in plain words."},"workMode":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."},"geo":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries where the opportunity is offered. Empty means worldwide or unknown; see eligibility."},"regions":{"type":"array","items":{"type":"string","minLength":1},"description":"States, provinces, or regions, when limited."},"cities":{"type":"array","items":{"type":"string","minLength":1},"description":"Cities or metros, when limited."}},"required":["countries","regions","cities"],"additionalProperties":false,"description":"Geographic availability."},"eligibility":{"type":"object","properties":{"minAge":{"anyOf":[{"type":"integer","minimum":0,"maximum":120},{"type":"null"}],"description":"Minimum age; null when not stated."},"vehicle":{"anyOf":[{"type":"string","enum":["none","bicycle","scooter","car","van","truck","any"]},{"type":"null"}],"description":"Vehicle required; null when not stated."},"equipment":{"type":"array","items":{"type":"string","minLength":1},"description":"Equipment the earner must supply, e.g. \"smartphone\", \"insulated bag\"."},"credentials":{"type":"array","items":{"type":"string","minLength":1},"description":"Licenses, certifications, or degrees required."},"backgroundCheck":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a background check is required; null when not stated."},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries of residence accepted, when they differ from geo.countries."}},"required":["minAge","vehicle","equipment","credentials","backgroundCheck","countries"],"additionalProperties":false,"description":"Who can do this work."},"payEvidence":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string","enum":["net_hourly","gross_hourly","per_task","per_project"],"description":"What the pay figures measure."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"p25":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"25th percentile in minor units; null when not reported."},"p50":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Median in minor units; null when not reported."},"p90":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"90th percentile in minor units; null when not reported."},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Sample size; null when the source does not state one."},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"First day of the period the figures cover."},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Last day of the period the figures cover."},"sourceType":{"type":"string","enum":["passport_aggregate","platform_disclosure","third_party_dataset","survey","regulatory_filing"],"description":"Where a pay figure comes from."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["metric","currency","p25","p50","p90","n","periodStart","periodEnd","sourceType","sourceId"],"additionalProperties":false,"description":"A pay distribution from one source: money in minor units, never a prediction."},"description":"Pay distributions with sources. Empty until evidence exists; never estimated."},"feeSchedule":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Fee name as the provider states it."},"type":{"type":"string","enum":["percent","fixed","per_application","subscription","withdrawal","instant_pay"],"description":"Fee category."},"value":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Fee amount: basis points when unit is basis_points, minor units of `currency` when unit is minor_units."},"unit":{"type":"string","enum":["basis_points","minor_units"],"description":"How `value` is expressed: basis points of the base, or minor units of `currency`."},"currency":{"description":"Required when unit is minor_units.","type":"string","pattern":"^[A-Z]{3}$"},"minimum":{"description":"Floor applied to a percent fee (\"10% or $5, whichever is greater\").","type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false},"appliesTo":{"type":"string","minLength":1,"description":"What the fee applies to, e.g. \"fixed-price project earnings\", \"each withdrawal via PayPal\"."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["name","type","value","unit","appliesTo","sourceId"],"additionalProperties":false,"description":"One published fee. Value is an integer; the unit says whether it is basis points or minor units."},"description":"Published fees, each with a source."},"payoutTerms":{"anyOf":[{"type":"object","properties":{"frequency":{"type":"string","enum":["instant","daily","weekly","biweekly","monthly","on_request","per_milestone","unknown"],"description":"How often payouts happen."},"minimumPayout":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Minimum balance before a payout is allowed; null when none or unknown."},"delayDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Days between earning and availability for withdrawal; null when not stated."},"methods":{"type":"array","items":{"type":"string","minLength":1},"description":"Payout methods, e.g. \"PayPal\", \"bank transfer\", \"Payoneer\"."},"instantPayFee":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Fee for an instant or express payout; null when none or unknown."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["frequency","minimumPayout","delayDays","methods","instantPayFee","sourceId"],"additionalProperties":false,"description":"How and when earners get paid."},{"type":"null"}],"description":"Payout terms; null when not yet documented."},"onboardingCost":{"anyOf":[{"type":"object","properties":{"unpaidHours":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Unpaid hours spent on onboarding, tests, or training; null when not stated."},"upfrontFees":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Fees due before earning anything; null when none or unknown."},"equipmentCost":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Typical cost of required equipment; null when none or unknown."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["unpaidHours","upfrontFees","equipmentCost","sourceId"],"additionalProperties":false,"description":"What it costs to start."},{"type":"null"}],"description":"Onboarding cost; null when not yet documented."},"stability":{"type":"object","properties":{"taskAvailabilitySignal":{"type":"string","enum":["high","medium","low","unknown"],"description":"Whether there is usually work available."},"observedDeactivationRate":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}],"description":"Share of earners deactivated per year, in basis points; null when unknown."},"reportedUnpaidWorkIncidents":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Count of reported unpaid-work incidents in the period; null when unknown."},"sourceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources for the stability figures."}},"required":["taskAvailabilitySignal","observedDeactivationRate","reportedUnpaidWorkIncidents","sourceIds"],"additionalProperties":false,"description":"How dependable the work and the account are."},"riskFlags":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["UPFRONT_FEE","TASK_SCAM_PATTERN","CRYPTO_ONLY_PAYOUT","OFF_PLATFORM_ONLY_MESSAGING","CHECK_DEPOSIT_SCHEME","EQUIPMENT_PURCHASE_REQUIRED","DOMAIN_AGE_UNDER_90D","DOMAIN_MISMATCH","UNSUBSTANTIATED_EARNINGS_CLAIM","MLM_STRUCTURE","GHOST_POSTING","BRAND_IMPERSONATION","UNPAID_WORK_REPORTS","NO_APPEALS_PROCESS"],"description":"Scam-signature rule code."},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"description":"How serious the signal is."},"evidence":{"type":"object","properties":{"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"quote":{"description":"Verbatim excerpt from the source that triggered the flag.","type":"string","maxLength":2000},"observedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When the evidence was observed."}},"required":["sourceId","observedAt"],"additionalProperties":false,"description":"The evidence a flag rests on. A flag cannot exist without it."},"detectedBy":{"type":"string","enum":["rule","curator","report"],"description":"Who or what raised the flag."},"ruleVersion":{"type":"string","minLength":1,"description":"Version of the rule set or curator guideline that raised the flag, e.g. \"scam-rules@1.0.0\"."}},"required":["code","severity","evidence","detectedBy","ruleVersion"],"additionalProperties":false,"description":"A scam or reliability signal with the evidence behind it."},"description":"Scam and reliability signals, each with evidence."},"agentPostable":{"type":"boolean","description":"Whether AI agents may post or apply on behalf of a principal."},"postedBy":{"type":"object","properties":{"type":{"type":"string","enum":["provider","agent","employer"],"description":"Who posted the opportunity."},"agentId":{"description":"Agent id when posted by an agent.","type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"principalProofId":{"description":"Proof id of the agent's human principal when posted by an agent.","type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["type"],"additionalProperties":false,"description":"Who posted this and, for agents, whose Proof backs them."},"lastVerifiedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When a curator last confirmed the record against its sources."},"scorecard":{"anyOf":[{"type":"object","properties":{"pay":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Pay: median net hourly vs. local minimum wage and category median."},"fees":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Fees: total extraction rate including unpaid onboarding."},"payout":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Payout: frequency, delay, minimum, reliability incidents."},"stability":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Stability: task availability, deactivation rate, unpaid-work incidents, appeals."},"transparency":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Transparency: published terms, fees, deactivation policy, pay disclosures."},"scamRisk":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Scam risk (inverted: 100 = no signals): risk flags, verification, domain age, complaints."},"composite":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Weighted composite 0–100, or null when no dimension has evidence."},"partial":{"type":"boolean","description":"True when at least one dimension was excluded for insufficient evidence."},"weights":{"type":"object","properties":{"pay":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"fees":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"payout":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"stability":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"transparency":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"scamRisk":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."}},"required":["pay","fees","payout","stability","transparency","scamRisk"],"additionalProperties":false,"description":"Composite weights per dimension in basis points; they sum to 10000."},"methodologyVersion":{"type":"string","minLength":1,"description":"Version of the scoring methodology that produced this composite, e.g. \"scoring@1.0.0\"."}},"required":["score","partial","weights","methodologyVersion"],"additionalProperties":false,"description":"The weighted composite and how it was computed."},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When the scorecard was computed."}},"required":["pay","fees","payout","stability","transparency","scamRisk","composite","computedAt"],"additionalProperties":false,"description":"Six-dimension scorecard with confidence per dimension and a weighted composite."},{"type":"null"}],"description":"Scorecard; null before the first computation."},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Source id, referenced by sourceId / sourceIds / evidenceIds elsewhere in the record."},"url":{"type":"string","format":"uri","description":"Exact URL of the page or dataset."},"publisher":{"type":"string","minLength":1,"description":"Who published it (organisation name)."},"title":{"description":"Page or document title.","type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"],"description":"Kind of source: platform_disclosure, regulatory_filing, third_party_dataset, survey, passport_aggregate, user_report, internal_measurement."},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When we fetched it (ISO 8601 date-time)."},"checksum":{"description":"SHA-256 hex of the retrieved body, when known.","type":"string","pattern":"^[a-f0-9]{64}$"},"reachability":{"default":"unchecked","description":"Last link-check result: unchecked, ok, redirected, unreachable, changed.","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"lastCheckedAt":{"description":"When the link was last checked.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"publishedAt":{"description":"Publication or period date stated by the source itself.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"description":"Curator notes, typically the verbatim sentences the figures were read from.","type":"string"}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false,"description":"A cited source: the exact URL, who published it, when we retrieved it, and its last known reachability."},"description":"Every source cited by this record."},"version":{"type":"string","const":"1.0.0","description":"Open Opportunity Schema version."}},"required":["id","providerId","kind","title","description","workMode","geo","eligibility","payEvidence","feeSchedule","payoutTerms","onboardingCost","stability","riskFlags","agentPostable","postedBy","lastVerifiedAt","scorecard","sources","version"],"additionalProperties":false},"provider":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Registry id, e.g. \"freelancer-com\"."},"legalName":{"type":"string","minLength":1,"description":"Registered legal name of the operating entity."},"brandName":{"type":"string","minLength":1,"description":"Name earners know the platform by."},"domain":{"type":"string","minLength":1,"description":"Canonical registrable domain, e.g. \"freelancer.com\"."},"otherDomains":{"type":"array","items":{"type":"string","minLength":1},"description":"Other domains the provider operates (regional sites, help centers)."},"hq":{"type":"object","properties":{"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},{"type":"null"}],"description":"Headquarters country; null when unknown."},"region":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"State, province, or city of the headquarters; null when unknown."}},"required":["country","region"],"additionalProperties":false,"description":"Where the provider is headquartered."},"jurisdictions":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries whose law governs earner terms."},"categories":{"minItems":1,"type":"array","items":{"type":"string","enum":["rideshare","delivery","local_shifts","home_services","care","freelance","ai_training","microtask","research","selling","leasing","tutoring","creator","agent_bounty","open_source","other"],"description":"Registry category."},"description":"Registry categories."},"entityVerification":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"method":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"How the legal entity was checked, e.g. \"company register lookup\", \"WHOIS + terms page\"."},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date-time with timezone."},{"type":"null"}],"description":"When the check was performed; null if never."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources supporting the verification status."}},"required":["status","method","verifiedAt","evidenceIds"],"additionalProperties":false,"description":"Whether the operating legal entity is real and matches the brand."},"paymentVerification":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"method":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"How payment was verified, e.g. \"observed payout to a Passport holder\", \"payment processor disclosure\"."},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date-time with timezone."},{"type":"null"}],"description":"When payment was last verified; null if never."}},"required":["status","method","verifiedAt"],"additionalProperties":false,"description":"Whether the provider has been observed actually paying earners."},"termsUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published terms of service for earners; null if none found."},"payoutPolicyUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published payout or fees policy; null if none found."},"deactivationPolicyUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published deactivation or account-termination policy; null if none found."},"appealsProcess":{"type":"object","properties":{"exists":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a published appeals process exists; null when unknown."},"humanReview":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a human reviews appeals; null when unknown."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources supporting the answers."}},"required":["exists","humanReview","evidenceIds"],"additionalProperties":false,"description":"Deactivation appeals: whether earners can appeal and whether a human reviews it."},"fairworkScores":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"year":{"type":"integer","minimum":2018,"maximum":2100,"description":"Rating year."},"score":{"type":"integer","minimum":0,"maximum":10,"description":"Fairwork score out of 10."},"url":{"type":"string","format":"uri","description":"Fairwork ratings page for that country and year."}},"required":["country","year","score","url"],"additionalProperties":false,"description":"A Fairwork (fair.work) country rating."},"description":"Fairwork ratings by country and year."},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Source id, referenced by sourceId / sourceIds / evidenceIds elsewhere in the record."},"url":{"type":"string","format":"uri","description":"Exact URL of the page or dataset."},"publisher":{"type":"string","minLength":1,"description":"Who published it (organisation name)."},"title":{"description":"Page or document title.","type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"],"description":"Kind of source: platform_disclosure, regulatory_filing, third_party_dataset, survey, passport_aggregate, user_report, internal_measurement."},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When we fetched it (ISO 8601 date-time)."},"checksum":{"description":"SHA-256 hex of the retrieved body, when known.","type":"string","pattern":"^[a-f0-9]{64}$"},"reachability":{"default":"unchecked","description":"Last link-check result: unchecked, ok, redirected, unreachable, changed.","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"lastCheckedAt":{"description":"When the link was last checked.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"publishedAt":{"description":"Publication or period date stated by the source itself.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"description":"Curator notes, typically the verbatim sentences the figures were read from.","type":"string"}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false,"description":"A cited source: the exact URL, who published it, when we retrieved it, and its last known reachability."},"description":"Every source cited by this record."},"version":{"type":"string","const":"1.0.0","description":"Open Opportunity Schema version."},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When this record was last edited."}},"required":["id","legalName","brandName","domain","otherDomains","hq","jurisdictions","categories","entityVerification","paymentVerification","termsUrl","payoutPolicyUrl","deactivationPolicyUrl","appealsProcess","fairworkScores","sources","version","updatedAt"],"additionalProperties":false},"saved":{"type":"boolean"}},"required":["match","opportunity","provider","saved"],"additionalProperties":false},"DiscoverSimilarResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverItem"}}},"required":["items"],"additionalProperties":false},"HideOpportunityBody":{"type":"object","properties":{"reason":{"type":"string","maxLength":500}},"additionalProperties":false},"Watch":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string","enum":["opportunity","provider","search"]},"opportunityId":{"anyOf":[{"type":"string"},{"type":"null"}]},"providerId":{"anyOf":[{"type":"string"},{"type":"null"}]},"searchQuery":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"channels":{"type":"array","items":{"type":"string","enum":["web_push","email"]}},"digest":{"type":"string","enum":["immediate","daily_digest","weekly_digest"]},"lastResultIds":{"type":"array","items":{"type":"string"}},"pausedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","subjectType","opportunityId","providerId","searchQuery","channels","digest","lastResultIds","pausedAt","createdAt"],"additionalProperties":false},"WatchesList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Watch"}}},"required":["items"],"additionalProperties":false},"CreateWatchBody":{"type":"object","properties":{"subjectType":{"type":"string","enum":["opportunity","provider","search"]},"opportunityId":{"type":"string","minLength":1,"maxLength":200},"providerId":{"type":"string","minLength":1,"maxLength":200},"searchQuery":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"channels":{"default":["email"],"minItems":1,"type":"array","items":{"type":"string","enum":["web_push","email"]}},"digest":{"default":"immediate","type":"string","enum":["immediate","daily_digest","weekly_digest"]}},"required":["subjectType","channels","digest"],"additionalProperties":false},"PatchWatchBody":{"type":"object","properties":{"channels":{"minItems":1,"type":"array","items":{"type":"string","enum":["web_push","email"]}},"digest":{"type":"string","enum":["immediate","daily_digest","weekly_digest"]},"paused":{"type":"boolean"}},"additionalProperties":false},"WatchEvent":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"change"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"type":"string"},"changeType":{"type":"string","enum":["fee_change","payout_term_change","new_risk_flag","verification_lapse","pay_evidence_update","went_stale"]},"field":{"type":"string"},"beforeValue":{"anyOf":[{},{"type":"null"}]},"afterValue":{"anyOf":[{},{"type":"null"}]},"detectedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["kind","id","opportunityId","changeType","field","beforeValue","afterValue","detectedAt"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"new_match"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"anyOf":[{"type":"string"},{"type":"null"}]},"detectedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["kind","id","opportunityId","detectedAt","payload"],"additionalProperties":false}]},"WatchEventsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WatchEvent"}}},"required":["items"],"additionalProperties":false},"PushSubscriptionBody":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri"},"keys":{"type":"object","properties":{"p256dh":{"type":"string","minLength":1},"auth":{"type":"string","minLength":1}},"required":["p256dh","auth"],"additionalProperties":false}},"required":["endpoint","keys"],"additionalProperties":false},"DeletePushSubscriptionBody":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri"}},"required":["endpoint"],"additionalProperties":false},"DraftApplicationBody":{"type":"object","properties":{"opportunityId":{"type":"string","minLength":1,"maxLength":200},"includeFactKeys":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":120}}},"required":["opportunityId","includeFactKeys"],"additionalProperties":false},"ApplicationDraft":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"type":"string"},"content":{"type":"string"},"includedFacts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"evidenceId":{"type":"string"}},"required":["label","value","evidenceId"],"additionalProperties":false}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","opportunityId","content","includedFacts","createdAt"],"additionalProperties":false},"ApplicationDraftsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ApplicationDraft"}}},"required":["items"],"additionalProperties":false},"CreateOutcomeBody":{"type":"object","properties":{"status":{"type":"string","enum":["applied","accepted","rejected","paid","scammed"]},"draftId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"note":{"type":"string","maxLength":2000},"sharedToRegistry":{"default":false,"type":"boolean"}},"required":["status","sharedToRegistry"],"additionalProperties":false},"ApplicationOutcome":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"opportunityId":{"type":"string"},"draftId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"status":{"type":"string","enum":["applied","accepted","rejected","paid","scammed"]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"sharedToRegistry":{"type":"boolean"},"reportedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","opportunityId","draftId","status","note","sharedToRegistry","reportedAt"],"additionalProperties":false},"LedgerEntry":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyTitle":{"type":"string"},"role":{"type":"string","enum":["poster","earner"],"description":"Whether the caller is this bounty's poster (directly, or via an org they belong to) or its accepted earner."},"kind":{"type":"string","enum":["fund","release","refund","fee"]},"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"stripePaymentIntentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeTransferId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeRefundId":{"anyOf":[{"type":"string"},{"type":"null"}]},"x402TxReference":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyStripeAccountId":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyAddress":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","bountyTitle","role","kind","amountMinor","currency","stripePaymentIntentId","stripeTransferId","stripeRefundId","x402TxReference","counterpartyStripeAccountId","counterpartyAddress","createdAt"],"additionalProperties":false},"LedgerEntriesListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LedgerEntry"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"OAuthTokenBody":{"type":"object","properties":{"grant_type":{"type":"string","const":"client_credentials","description":"RFC 6749 §4.4 — only the client-credentials grant is supported."},"client_id":{"type":"string","minLength":1,"maxLength":200,"description":"The agent's apiKeys row id, or its prefix — either identifies the same key."},"client_secret":{"type":"string","minLength":1,"maxLength":500,"description":"The raw API key the caller received once from POST /v1/agents."}},"required":["grant_type","client_id","client_secret"],"additionalProperties":false},"OAuthTokenResponse":{"type":"object","properties":{"access_token":{"type":"string","description":"Short-lived signed JWT (HS256). Send as Authorization: Bearer <access_token> to apps/mcp's streamable-HTTP transport."},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Seconds until expiry (RFC 6749 §5.1)."},"scope":{"type":"string","description":"Space-separated scopes carried over from the underlying API key."}},"required":["access_token","token_type","expires_in","scope"],"additionalProperties":false},"AgentPolicyBody":{"type":"object","properties":{"maxPerBountyAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerBountyCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"maxPerDayAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerDayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"allowedKinds":{"default":["agent_bounty"],"type":"array","items":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."}},"allowedCountries":{"default":[],"type":"array","items":{"type":"string","minLength":2,"maxLength":2}}},"required":["maxPerBountyAmountMinor","maxPerBountyCurrency","maxPerDayAmountMinor","maxPerDayCurrency","allowedKinds","allowedCountries"],"additionalProperties":false},"AgentPolicyUpdateBody":{"type":"object","properties":{"maxPerBountyAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerBountyCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"maxPerDayAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxPerDayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"allowedKinds":{"default":["agent_bounty"],"type":"array","items":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."}},"allowedCountries":{"default":[],"type":"array","items":{"type":"string","minLength":2,"maxLength":2}}},"additionalProperties":false},"AgentPolicy":{"type":"object","properties":{"agentId":{"type":"string"},"maxPerBountyAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPerBountyCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"maxPerDayAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPerDayCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"allowedKinds":{"type":"array","items":{"type":"string"}},"allowedCountries":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["agentId","maxPerBountyAmountMinor","maxPerBountyCurrency","maxPerDayAmountMinor","maxPerDayCurrency","allowedKinds","allowedCountries","updatedAt"],"additionalProperties":false},"CreateAgentBody":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"didKey":{"description":"A did:key the caller generated client-side. Omit for a platform-issued id (agent_<uuid>).","type":"string","minLength":1,"maxLength":500},"policy":{"$ref":"#/components/schemas/AgentPolicyBody"}},"required":["name","policy"],"additionalProperties":false},"Agent":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"principalUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"principalOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"status":{"type":"string","enum":["active","suspended"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","principalUserId","principalOrgId","status","createdAt"],"additionalProperties":false},"CreateAgentResponse":{"type":"object","properties":{"agent":{"$ref":"#/components/schemas/Agent"},"policy":{"$ref":"#/components/schemas/AgentPolicy"},"key":{"type":"string","description":"The raw API key — shown once, never retrievable again."}},"required":["agent","policy","key"],"additionalProperties":false},"MandateBody":{"type":"object","properties":{"intent":{"type":"object","properties":{"agentId":{"type":"string","minLength":1},"maxAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"description":{"type":"string","minLength":1,"maxLength":500},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["agentId","maxAmountMinor","currency","description","expiresAt"],"additionalProperties":false},"cart":{"type":"object","properties":{"bountyId":{"type":"string","minLength":1},"amountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["bountyId","amountMinor","currency"],"additionalProperties":false},"payment":{"type":"object","properties":{"bountyId":{"type":"string","minLength":1},"amountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["bountyId","amountMinor","currency"],"additionalProperties":false},"signature":{"type":"string","minLength":1,"description":"Compact JWS (ES256) over the canonical {intentHash, cartHash, paymentHash} payload."},"signerPublicJwk":{"$ref":"#/components/schemas/Jwk"}},"required":["intent","cart","payment","signature","signerPublicJwk"],"additionalProperties":false},"CreateBountyBody":{"type":"object","properties":{"title":{"type":"string","minLength":4,"maxLength":200},"taskSpec":{"type":"string","minLength":10,"maxLength":10000},"deliverableSpec":{"type":"string","minLength":4,"maxLength":2000},"remote":{"default":false,"type":"boolean"},"geoCountries":{"default":[],"type":"array","items":{"type":"string","minLength":2,"maxLength":2}},"geoCities":{"default":[],"type":"array","items":{"type":"string","minLength":1,"maxLength":120}},"deadline":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"priceAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"requiredProofPolicy":{"default":[],"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"],"additionalProperties":false}},"maxApplicants":{"default":20,"type":"integer","exclusiveMinimum":0,"maximum":500},"mandate":{"$ref":"#/components/schemas/MandateBody"}},"required":["title","taskSpec","deliverableSpec","remote","geoCountries","geoCities","priceAmountMinor","priceCurrency","requiredProofPolicy","maxApplicants"],"additionalProperties":false},"ContentRuleViolation":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string"},"quote":{"type":"string"},"ruleVersion":{"type":"string"}},"required":["code","severity","quote","ruleVersion"],"additionalProperties":false},"BountySummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"taskSpec":{"type":"string"},"deliverableSpec":{"type":"string"},"remote":{"type":"boolean"},"geoCountries":{"type":"array","items":{"type":"string"}},"geoCities":{"type":"array","items":{"type":"string"}},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"priceAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"requiredProofPolicy":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"],"additionalProperties":false}},"maxApplicants":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["draft","pending_funding","funded","open","accepted","submitted","approved","disputed","released","refunded","cancelled"]},"postedByAgentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"postedByPrincipalUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"postedByPrincipalOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","title","taskSpec","deliverableSpec","remote","geoCountries","geoCities","deadline","priceAmountMinor","priceCurrency","requiredProofPolicy","maxApplicants","status","postedByAgentId","postedByPrincipalUserId","postedByPrincipalOrgId","createdAt","updatedAt"],"additionalProperties":false},"BountyDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"taskSpec":{"type":"string"},"deliverableSpec":{"type":"string"},"remote":{"type":"boolean"},"geoCountries":{"type":"array","items":{"type":"string"}},"geoCities":{"type":"array","items":{"type":"string"}},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"priceAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"requiredProofPolicy":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["identity","active_earner","earnings","reliability","skill","platform_standing"]},"minLevel":{"type":"string"},"maxAgeDays":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type"],"additionalProperties":false}},"maxApplicants":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["draft","pending_funding","funded","open","accepted","submitted","approved","disputed","released","refunded","cancelled"]},"postedByAgentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"postedByPrincipalUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"postedByPrincipalOrgId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"contentRuleResult":{"type":"array","items":{"$ref":"#/components/schemas/ContentRuleViolation"}},"stripePaymentIntentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"x402PayeeReference":{"anyOf":[{"type":"string"},{"type":"null"}]},"ledger":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["fund","release","refund","fee"]},"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"stripePaymentIntentId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeTransferId":{"anyOf":[{"type":"string"},{"type":"null"}]},"stripeRefundId":{"anyOf":[{"type":"string"},{"type":"null"}]},"x402TxReference":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyStripeAccountId":{"anyOf":[{"type":"string"},{"type":"null"}]},"counterpartyAddress":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","kind","amountMinor","currency","stripePaymentIntentId","stripeTransferId","stripeRefundId","x402TxReference","counterpartyStripeAccountId","counterpartyAddress","createdAt"],"additionalProperties":false},"description":"Real ledger_entries rows for this bounty — only on the poster/principal's own view."}},"required":["id","title","taskSpec","deliverableSpec","remote","geoCountries","geoCities","deadline","priceAmountMinor","priceCurrency","requiredProofPolicy","maxApplicants","status","postedByAgentId","postedByPrincipalUserId","postedByPrincipalOrgId","createdAt","updatedAt","contentRuleResult","stripePaymentIntentId","x402PayeeReference","ledger"],"additionalProperties":false},"BountiesList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BountySummary"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"FundBountyBody":{"type":"object","properties":{"rail":{"default":"stripe","type":"string","enum":["stripe","x402"]}},"required":["rail"],"additionalProperties":false},"ApplyToBountyBody":{"type":"object","properties":{"proofShareIds":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["proofShareIds"],"additionalProperties":false},"BountyApplication":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"earnerUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"proofShareIds":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"status":{"type":"string","enum":["applied","accepted","rejected"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","earnerUserId","proofShareIds","status","createdAt"],"additionalProperties":false},"BountyApplicantsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BountyApplication"}}},"required":["items"],"additionalProperties":false},"AcceptApplicantBody":{"type":"object","properties":{"applicationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["applicationId"],"additionalProperties":false},"CreateSubmissionBody":{"type":"object","properties":{"deliverables":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","minLength":1,"maxLength":60},"note":{"type":"string","maxLength":2000}},"required":["url","kind"],"additionalProperties":false}}},"required":["deliverables"],"additionalProperties":false},"BountySubmission":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"applicationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"deliverables":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","minLength":1,"maxLength":60},"note":{"type":"string","maxLength":2000}},"required":["url","kind"],"additionalProperties":false}},"status":{"type":"string","enum":["submitted","approved","disputed"]},"autoApproveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","applicationId","deliverables","status","autoApproveAt","createdAt"],"additionalProperties":false},"CreateDisputeBody":{"type":"object","properties":{"submissionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string","minLength":4,"maxLength":2000},"evidence":{"default":[],"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"note":{"type":"string","maxLength":2000}},"required":["url"],"additionalProperties":false}}},"required":["submissionId","reason","evidence"],"additionalProperties":false},"Dispute":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"submissionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"openedByUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"note":{"type":"string"}},"required":["url"],"additionalProperties":false}},"status":{"type":"string","enum":["open","resolved"]},"outcome":{"anyOf":[{"type":"string","enum":["release","partial","refund"]},{"type":"null"}]},"outcomeAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"resolvedByUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","bountyId","submissionId","openedByUserId","reason","evidence","status","outcome","outcomeAmountMinor","resolvedByUserId","resolvedAt","createdAt"],"additionalProperties":false},"AdminDisputesListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"bountyId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"submissionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"openedByUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reason":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"note":{"type":"string"}},"required":["url"],"additionalProperties":false}},"status":{"type":"string","enum":["open","resolved"]},"outcome":{"anyOf":[{"type":"string","enum":["release","partial","refund"]},{"type":"null"}]},"outcomeAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"resolvedByUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"bountyTitle":{"type":"string"},"priceAmountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["id","bountyId","submissionId","openedByUserId","reason","evidence","status","outcome","outcomeAmountMinor","resolvedByUserId","resolvedAt","createdAt","bountyTitle","priceAmountMinor","priceCurrency"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"ResolveDisputeBody":{"type":"object","properties":{"outcome":{"type":"string","enum":["release","partial","refund"]},"outcomeAmountMinor":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["outcome"],"additionalProperties":false},"VerifyListingBody":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"text":{"type":"string","minLength":1,"maxLength":20000}},"additionalProperties":false},"RiskFlagResult":{"type":"object","properties":{"code":{"type":"string","enum":["UPFRONT_FEE","TASK_SCAM_PATTERN","CRYPTO_ONLY_PAYOUT","OFF_PLATFORM_ONLY_MESSAGING","CHECK_DEPOSIT_SCHEME","EQUIPMENT_PURCHASE_REQUIRED","DOMAIN_AGE_UNDER_90D","DOMAIN_MISMATCH","UNSUBSTANTIATED_EARNINGS_CLAIM","MLM_STRUCTURE","GHOST_POSTING","BRAND_IMPERSONATION","UNPAID_WORK_REPORTS","NO_APPEALS_PROCESS"],"description":"Scam-signature rule code."},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"description":"How serious the signal is."},"detectedBy":{"type":"string","enum":["rule","curator","report"],"description":"Who or what raised the flag."},"ruleVersion":{"type":"string"},"evidence":{"type":"object","properties":{"quote":{"type":"string","maxLength":2000},"sourceUrl":{"type":"string","format":"uri"},"observedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["observedAt"],"additionalProperties":false}},"required":["code","severity","detectedBy","ruleVersion","evidence"],"additionalProperties":false},"VerifyListingResponse":{"type":"object","properties":{"flags":{"type":"array","items":{"$ref":"#/components/schemas/RiskFlagResult"}},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["flags","checkedAt"],"additionalProperties":false},"UsageSummary":{"type":"object","properties":{"orgId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"tier":{"anyOf":[{"type":"string","enum":["free","developer","partner","agent"]},{"type":"null"}],"description":"The org's active API-key tier, or null when it has no active key."},"pricingConnected":{"type":"boolean","description":"True only when every money field below was read from a real, currently-active Stripe Price."},"periodStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"periodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"eventCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"totalUnits":{"type":"integer","minimum":0,"maximum":9007199254740991},"freeUnitsUsed":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"freeUnitsPerMonth":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"billableOverageUnits":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"overageRatePerUnitMinor":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"overageAmountMinor":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]}},"required":["orgId","tier","pricingConnected","periodStart","periodEnd","eventCount","totalUnits","freeUnitsUsed","freeUnitsPerMonth","billableOverageUnits","overageRatePerUnitMinor","overageAmountMinor","currency"],"additionalProperties":false},"BillingPrice":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"openmoneyKey":{"type":"string"},"active":{"type":"boolean"},"currency":{"type":"string"},"unitAmountMinor":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"recurringInterval":{"anyOf":[{"type":"string"},{"type":"null"}]},"usageType":{"anyOf":[{"type":"string"},{"type":"null"}]},"freeUnitsPerMonth":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","productId","openmoneyKey","active","currency","unitAmountMinor","recurringInterval","usageType","freeUnitsPerMonth"],"additionalProperties":false},"BillingPricingResponse":{"type":"object","properties":{"earnerPlus":{"anyOf":[{"type":"object","properties":{"monthly":{"$ref":"#/components/schemas/BillingPrice"},"annual":{"$ref":"#/components/schemas/BillingPrice"}},"required":["monthly","annual"],"additionalProperties":false},{"type":"null"}]},"apiOverage":{"type":"object","propertyNames":{"type":"string","enum":["developer","partner","agent"]},"additionalProperties":{"$ref":"#/components/schemas/BillingPrice"},"required":["developer","partner","agent"],"description":"Only the tiers with a real, currently-active Stripe Price."},"all":{"type":"array","items":{"$ref":"#/components/schemas/BillingPrice"}}},"required":["earnerPlus","apiOverage","all"],"additionalProperties":false},"CreateCheckoutBody":{"type":"object","properties":{"priceId":{"type":"string","minLength":1}},"required":["priceId"],"additionalProperties":false},"CreateCheckoutResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"CreateBillingPortalResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"BillingWebhookAck":{"type":"object","properties":{"received":{"type":"boolean","const":true},"handled":{"type":"boolean"}},"required":["received","handled"],"additionalProperties":false},"SubscriptionSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"plan":{"type":"string"},"status":{"type":"string","enum":["incomplete","incomplete_expired","trialing","active","past_due","unpaid","canceled"]},"stripePriceId":{"type":"string"},"currentPeriodEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"cancelAtPeriodEnd":{"type":"boolean"},"canceledAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["id","plan","status","stripePriceId","currentPeriodEnd","cancelAtPeriodEnd","canceledAt"],"additionalProperties":false},"MySubscriptionResponse":{"type":"object","properties":{"subscription":{"anyOf":[{"$ref":"#/components/schemas/SubscriptionSummary"},{"type":"null"}]}},"required":["subscription"],"additionalProperties":false},"RankingEntry":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"score":{"type":"number"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]}},"required":["opportunityId","providerId","providerBrandName","rank","score","confidence"],"additionalProperties":false},"RankingGroup":{"type":"object","properties":{"key":{"type":"object","properties":{"kind":{"type":"string"},"region":{"type":"string"}},"required":["kind","region"],"additionalProperties":false},"cut":{"type":"string","enum":["composite","pay","fees","payout","stability","transparency","scamRisk"]},"excludedForInsufficientEvidence":{"type":"integer","minimum":0,"maximum":9007199254740991},"entries":{"type":"array","items":{"$ref":"#/components/schemas/RankingEntry"}}},"required":["key","cut","excludedForInsufficientEvidence","entries"],"additionalProperties":false},"Mover":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"providerBrandName":{"type":"string"},"previousScore":{"anyOf":[{"type":"number"},{"type":"null"}]},"currentScore":{"anyOf":[{"type":"number"},{"type":"null"}]},"deltaPoints":{"anyOf":[{"type":"number"},{"type":"null"}]},"direction":{"type":"string","enum":["up","down","new","delisted"]}},"required":["opportunityId","providerId","providerBrandName","previousScore","currentScore","deltaPoints","direction"],"additionalProperties":false},"RankingsReport":{"type":"object","properties":{"period":{"type":"string"},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"methodologyVersion":{"type":"string"},"candidateCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"groups":{"type":"array","items":{"$ref":"#/components/schemas/RankingGroup"}},"movers":{"type":"array","items":{"$ref":"#/components/schemas/Mover"}}},"required":["period","generatedAt","publishedAt","methodologyVersion","candidateCount","groups","movers"],"additionalProperties":false},"RankingsListItem":{"type":"object","properties":{"period":{"type":"string"},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["period","publishedAt"],"additionalProperties":false},"RankingsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RankingsListItem"}}},"required":["items"],"additionalProperties":false},"DatasetSnapshot":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string"},"format":{"type":"string","enum":["csv","parquet"]},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"sizeBytes":{"type":"integer","minimum":0,"maximum":9007199254740991},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"changelogNote":{"type":"string"}},"required":["id","kind","format","version","publishedAt","sizeBytes","rowCount","changelogNote"],"additionalProperties":false},"DatasetsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DatasetSnapshot"}}},"required":["items"],"additionalProperties":false},"ModerationEvidenceItem":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"quote":{"type":"string","maxLength":2000}},"required":["url"],"additionalProperties":false},"Report":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reporterUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string"},"subjectId":{"type":"string"},"category":{"type":"string"},"detail":{"type":"string"},"status":{"type":"string","enum":["open","queued","resolved","dismissed"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","reporterUserId","subjectType","subjectId","category","detail","status","createdAt"],"additionalProperties":false},"ModerationDecision":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reportId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewerUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"decision":{"type":"string","enum":["no_action","warn","restrict","remove"]},"templatedReason":{"type":"string"},"evidence":{"type":"array","items":{"$ref":"#/components/schemas/ModerationEvidenceItem"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","reportId","reviewerUserId","decision","templatedReason","evidence","createdAt"],"additionalProperties":false},"Appeal":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"decisionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appellantUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reviewerUserId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"outcome":{"anyOf":[{"type":"string","enum":["upheld","overturned","partial"]},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","decisionId","appellantUserId","reviewerUserId","outcome","reason","createdAt"],"additionalProperties":false},"VelocityFlag":{"type":"object","properties":{"flagged":{"type":"boolean"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"windowMs":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"threshold":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"windowStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"windowEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["flagged","count","windowMs","threshold","windowStart","windowEnd"],"additionalProperties":false},"DuplicateAccountCluster":{"type":"object","properties":{"sharedSignal":{"type":"object","properties":{"type":{"type":"string","enum":["deviceFingerprintHash","ipHash"]},"value":{"type":"string"}},"required":["type","value"],"additionalProperties":false},"userIds":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"occurredWithinMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["sharedSignal","userIds","occurredWithinMs"],"additionalProperties":false},"ModerationQueueItem":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"reporterUserId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string"},"subjectId":{"type":"string"},"category":{"type":"string"},"detail":{"type":"string"},"status":{"type":"string","enum":["open","queued","resolved","dismissed"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"decision":{"anyOf":[{"$ref":"#/components/schemas/ModerationDecision"},{"type":"null"}],"description":"The real decision for this report, once one exists — null until `resolved`."},"reporterVelocityFlag":{"description":"Report-submission rate for this report's own reporter — real context, never an automatic block.","$ref":"#/components/schemas/VelocityFlag"},"reporterDuplicateAccountClusters":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateAccountCluster"},"description":"Real device/IP-hash clusters the reporter's own recent device_signals participate in, if any."},"subjectBountyPostingVelocityFlag":{"anyOf":[{"$ref":"#/components/schemas/VelocityFlag"},{"type":"null"}],"description":"Only populated when subjectType is \"bounty\": the real poster's own bounty-posting rate."}},"required":["id","reporterUserId","subjectType","subjectId","category","detail","status","createdAt","decision","reporterVelocityFlag","reporterDuplicateAccountClusters","subjectBountyPostingVelocityFlag"],"additionalProperties":false},"ModerationQueueResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ModerationQueueItem"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"AppealsListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Appeal"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"CreateReportBody":{"type":"object","properties":{"subjectType":{"type":"string","enum":["provider","opportunity","bounty","message","proof_presentation"]},"subjectId":{"type":"string","minLength":1,"maxLength":200},"category":{"type":"string","minLength":1,"maxLength":100},"detail":{"type":"string","minLength":1,"maxLength":5000}},"required":["subjectType","subjectId","category","detail"],"additionalProperties":false},"DecideReportBody":{"type":"object","properties":{"decision":{"type":"string","enum":["no_action","warn","restrict","remove"]},"templatedReason":{"type":"string","minLength":1,"maxLength":2000},"evidence":{"default":[],"maxItems":20,"type":"array","items":{"$ref":"#/components/schemas/ModerationEvidenceItem"}}},"required":["decision","templatedReason","evidence"],"additionalProperties":false},"DecideReportResponse":{"type":"object","properties":{"report":{"$ref":"#/components/schemas/Report"},"decision":{"$ref":"#/components/schemas/ModerationDecision"}},"required":["report","decision"],"additionalProperties":false},"DismissReportBody":{"type":"object","properties":{"reason":{"type":"string","minLength":1,"maxLength":2000}},"required":["reason"],"additionalProperties":false},"FileAppealBody":{"type":"object","properties":{"reason":{"type":"string","minLength":4,"maxLength":2000}},"required":["reason"],"additionalProperties":false},"ResolveAppealBody":{"type":"object","properties":{"outcome":{"type":"string","enum":["upheld","overturned","partial"]},"reason":{"type":"string","minLength":1,"maxLength":2000}},"required":["outcome","reason"],"additionalProperties":false},"TransparencyCounts":{"type":"object","properties":{"period":{"type":"string"},"reportsReceived":{"type":"integer","minimum":0,"maximum":9007199254740991},"actionsTaken":{"type":"integer","minimum":0,"maximum":9007199254740991},"appealsOverturned":{"type":"integer","minimum":0,"maximum":9007199254740991},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["period","reportsReceived","actionsTaken","appealsOverturned","publishedAt"],"additionalProperties":false},"TransparencyList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TransparencyCounts"}}},"required":["items"],"additionalProperties":false},"LinkSubmission":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"userId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["queued","reviewed","dismissed"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","userId","url","note","status","createdAt"],"additionalProperties":false},"CreateLinkSubmissionBody":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"note":{"type":"string","maxLength":500}},"required":["url"],"additionalProperties":false},"LinkSubmissionsListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LinkSubmission"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"ProvidersStatus":{"type":"object","properties":{"providers":{"type":"array","items":{"$ref":"#/components/schemas/ProviderStatus"}},"anySandbox":{"type":"boolean"},"env":{"type":"string"}},"required":["providers","anySandbox","env"],"additionalProperties":false},"GmailConnectResponse":{"type":"object","properties":{"authorizationUrl":{"type":"string","format":"uri"}},"required":["authorizationUrl"],"additionalProperties":false},"ArgyleConnectResponse":{"type":"object","properties":{"linkToken":{"type":"string"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["linkToken","incomeSourceId"],"additionalProperties":false},"PinwheelConnectResponse":{"type":"object","properties":{"linkToken":{"type":"string"},"incomeSourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expires":{"type":"string"}},"required":["linkToken","incomeSourceId","expires"],"additionalProperties":false},"PassportWebhookAck":{"type":"object","properties":{"received":{"type":"boolean","const":true},"matched":{"type":"boolean"}},"required":["received","matched"],"additionalProperties":false},"PublicKeyCredentialCreationOptions":{"type":"object","properties":{"challenge":{"type":"string"},"rp":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"additionalProperties":{}},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"}},"required":["id","name","displayName"],"additionalProperties":{}},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"alg":{"type":"number"},"type":{"type":"string"}},"required":["alg","type"],"additionalProperties":{}}},"timeout":{"type":"number"},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"],"additionalProperties":{}}},"authenticatorSelection":{"type":"object","properties":{"residentKey":{"type":"string"},"userVerification":{"type":"string"}},"additionalProperties":{}},"attestation":{"type":"string"}},"required":["challenge","rp","user","pubKeyCredParams"],"additionalProperties":{}},"PublicKeyCredentialRequestOptions":{"type":"object","properties":{"challenge":{"type":"string"},"rpId":{"type":"string"},"timeout":{"type":"number"},"allowCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"],"additionalProperties":{}}},"userVerification":{"type":"string"}},"required":["challenge"],"additionalProperties":{}},"RegistrationResponse":{"type":"object","properties":{"id":{"type":"string","minLength":1},"rawId":{"type":"string","minLength":1},"type":{"type":"string","const":"public-key"},"response":{"type":"object","properties":{"clientDataJSON":{"type":"string","minLength":1},"attestationObject":{"type":"string","minLength":1},"transports":{"type":"array","items":{"type":"string"}}},"required":["clientDataJSON","attestationObject"],"additionalProperties":{}},"clientExtensionResults":{"default":{},"type":"object","properties":{},"additionalProperties":{}},"authenticatorAttachment":{"type":"string"}},"required":["id","rawId","type","response","clientExtensionResults"],"additionalProperties":{}},"AuthenticationResponse":{"type":"object","properties":{"id":{"type":"string","minLength":1},"rawId":{"type":"string","minLength":1},"type":{"type":"string","const":"public-key"},"response":{"type":"object","properties":{"clientDataJSON":{"type":"string","minLength":1},"authenticatorData":{"type":"string","minLength":1},"signature":{"type":"string","minLength":1},"userHandle":{"type":"string"}},"required":["clientDataJSON","authenticatorData","signature"],"additionalProperties":{}},"clientExtensionResults":{"default":{},"type":"object","properties":{},"additionalProperties":{}},"authenticatorAttachment":{"type":"string"}},"required":["id","rawId","type","response","clientExtensionResults"],"additionalProperties":{}},"Me":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"},"activeOrg":{"anyOf":[{"$ref":"#/components/schemas/OrgMembership"},{"type":"null"}]},"orgs":{"type":"array","items":{"$ref":"#/components/schemas/OrgMembership"}},"sandbox":{"type":"boolean"},"auth":{"type":"object","properties":{"kind":{"type":"string","enum":["session","api_key"]},"scopes":{"type":"array","items":{"type":"string"}},"sessionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["kind"],"additionalProperties":false}},"required":["user","activeOrg","orgs","sandbox","auth"],"additionalProperties":false},"QueueCounts":{"type":"object","properties":{"name":{"type":"string"},"counts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}}},"required":["name","counts"],"additionalProperties":false},"QueueJob":{"type":"object","properties":{"id":{"type":"string"},"queue":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"attemptsMade":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timestamp":{"type":"string"},"processedOn":{"anyOf":[{"type":"string"},{"type":"null"}]},"finishedOn":{"anyOf":[{"type":"string"},{"type":"null"}]},"failedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"returnvalue":{"anyOf":[{},{"type":"null"}]}},"required":["id","queue","name","state","data","attemptsMade","timestamp","processedOn","finishedOn","failedReason","returnvalue"],"additionalProperties":false},"SourceAdmin":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"canonicalUrl":{"type":"string","format":"uri"},"publisher":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"reachability":{"type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lastCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"finalUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastCheck":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string"},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"durationMs":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"jobId":{"anyOf":[{"type":"string"},{"type":"null"}]},"checkedAt":{"type":"string"}},"required":["id","status","httpStatus","durationMs","error","jobId","checkedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["id","url","canonicalUrl","publisher","title","type","retrievedAt","publishedAt","reachability","httpStatus","lastCheckedAt","finalUrl","consecutiveFailures","checksum","lastCheck"],"additionalProperties":false},"AdminRegistryFetchResultItem":{"type":"object","properties":{"key":{"type":"string","description":"The URL slot, e.g. \"terms\", \"fees\", \"payout\"."},"url":{"type":"string"},"httpStatus":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"finalUrl":{"type":"string"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"sourceId":{"type":"string"}},"required":["key","url","httpStatus","finalUrl","error","sourceId"],"additionalProperties":false},"AdminRegistryProviderCreated":{"type":"object","properties":{"providerId":{"type":"string"},"opportunityId":{"type":"string"},"status":{"type":"string","enum":["draft","review","published"]},"fetch":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryFetchResultItem"}}},"required":["providerId","opportunityId","status","fetch"],"additionalProperties":false},"AdminRegistryFetchResult":{"type":"object","properties":{"providerId":{"type":"string"},"fetchedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"pages":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryFetchResultItem"}}},"required":["providerId","fetchedAt","pages"],"additionalProperties":false},"AdminRegistryProposedField":{"type":"object","properties":{"path":{"type":"string"},"value":{},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"corroborated":{"type":"boolean"},"sourceKey":{"type":"string"},"sourceId":{"anyOf":[{"type":"string"},{"type":"null"}]},"quotes":{"type":"array","items":{"type":"string"}}},"required":["path","value","confidence","corroborated","sourceKey","sourceId","quotes"],"additionalProperties":false},"AdminRegistryExtractResult":{"type":"object","properties":{"providerId":{"type":"string"},"extractedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryProposedField"}}},"required":["providerId","extractedAt","fields"],"additionalProperties":false},"AdminRegistryConfirmResult":{"type":"object","properties":{"providerId":{"type":"string"},"opportunityId":{"type":"string"},"fieldsWritten":{"type":"array","items":{"type":"string"}},"fieldsNeedingConfirmation":{"type":"array","items":{"type":"string"}}},"required":["providerId","opportunityId","fieldsWritten","fieldsNeedingConfirmation"],"additionalProperties":false},"AdminRegistryPublishResult":{"type":"object","properties":{"providerId":{"type":"string"},"status":{"type":"string","enum":["draft","review","published"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sourceCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasCorroboratedFact":{"type":"boolean"},"minSourcesRequired":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"opportunities":{"type":"array","items":{"type":"object","properties":{"opportunityId":{"type":"string"},"scorecard":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["opportunityId","scorecard"],"additionalProperties":false}}},"required":["providerId","status","version","sourceCount","hasCorroboratedFact","minSourcesRequired","opportunities"],"additionalProperties":false},"AdminRegistryRecomputeResult":{"type":"object","properties":{"opportunityId":{"type":"string"},"scorecard":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["opportunityId","scorecard"],"additionalProperties":false},"AdminRegistryQueueItem":{"type":"object","properties":{"opportunityId":{"type":"string"},"providerId":{"type":"string"},"brandName":{"type":"string"},"title":{"type":"string"},"providerStatus":{"type":"string","enum":["draft","review","published"]},"opportunityStatus":{"type":"string","enum":["draft","review","published"]},"lastVerifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"stale":{"type":"boolean","description":"True when `lastVerifiedAt` is null or older than 30 days."},"needsConfirmation":{"type":"boolean","description":"True when the provider has not cleared the publish bar yet (proxy: `status !== 'published'`)."}},"required":["opportunityId","providerId","brandName","title","providerStatus","opportunityStatus","lastVerifiedAt","stale","needsConfirmation"],"additionalProperties":false},"AdminRegistryQueue":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryQueueItem"}}},"required":["items"],"additionalProperties":false},"AdminRegistryProviderRecord":{"type":"object","properties":{"provider":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"opportunities":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"feeSchedule":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"payoutTerms":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"onboardingCost":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"stability":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"riskFlags":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"scorecards":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"sources":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"pendingFields":{"type":"array","items":{"$ref":"#/components/schemas/AdminRegistryProposedField"}}},"required":["provider","opportunities","feeSchedule","payoutTerms","onboardingCost","stability","riskFlags","scorecards","sources","pendingFields"],"additionalProperties":false},"ChangelogEntry":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subjectType":{"type":"string","enum":["provider","opportunity"]},"subjectId":{"type":"string"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"changeSummary":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","subjectType","subjectId","version","changeSummary","createdAt"],"additionalProperties":false}}},"paths":{"/health":{"get":{"operationId":"getHealth","summary":"Dependency health","tags":["health"],"description":"Runs real checks: `SELECT 1`, Redis `PING`, an S3 `HeadBucket`, and an SMTP handshake (results cached 30 s). Returns 503 when Postgres or Redis fail; storage/email problems only mark the service degraded.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/v1/status/providers":{"get":{"operationId":"getProviderStatuses","summary":"Provider configuration status","tags":["status"],"description":"The single source of truth for sandbox/live/unconfigured, read by the admin Providers page and `SandboxBanner`.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvidersStatus"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/registry/coverage":{"get":{"operationId":"getRegistryCoverage","summary":"Registry coverage counter","tags":["registry"],"description":"EvidenceValue (unit `count`, source type `internal_measurement`). Phase 0 has no providers table yet, so the value is the number of distinct publishers with a source retrieved within 30 days, read live from the database; `n` is the total number of sources.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string","enum":["currency","currency_per_hour","currency_per_task","percent","count","days","hours","score","ratio"]},"currency":{"type":"string","minLength":3,"maxLength":3},"source":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"publisher":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"]},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reachability":{"default":"unchecked","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"object","properties":{"null":{"type":"string","minLength":1}},"required":["null"],"additionalProperties":false}]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"p25":{"type":"number"},"p90":{"type":"number"},"methodologyVersion":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low","insufficient"]},"label":{"type":"string"}},"required":["value","unit","source","n","asOf"],"additionalProperties":false}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/providers":{"get":{"operationId":"listProviders","summary":"List providers","tags":["registry"],"description":"Published providers, searchable and filterable. `q` uses trigram similarity plus a substring fallback for typo tolerance.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"q","required":false},{"schema":{"type":"string","enum":["rideshare","delivery","local_shifts","home_services","care","freelance","ai_training","microtask","research","selling","leasing","tutoring","creator","agent_bounty","open_source","other"]},"in":"query","name":"category","required":false,"description":"Registry category."},{"schema":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"]},"in":"query","name":"kind","required":false,"description":"What kind of earning this is."},{"schema":{"type":"string","minLength":2,"maxLength":2},"in":"query","name":"country","required":false},{"schema":{"type":"string","enum":["published"]},"in":"query","name":"status","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"default":"composite_desc","type":"string","enum":["composite_desc","composite_asc","updated_desc"]},"in":"query","name":"sort","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvidersListResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/providers/{id}":{"get":{"operationId":"getProvider","summary":"Get a provider","tags":["registry"],"description":"Full provider record, shaped to round-trip through `@openmoney/schema`'s `Provider` type. 404 when unpublished or missing.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Registry id, e.g. \"freelancer-com\"."},"legalName":{"type":"string","minLength":1,"description":"Registered legal name of the operating entity."},"brandName":{"type":"string","minLength":1,"description":"Name earners know the platform by."},"domain":{"type":"string","minLength":1,"description":"Canonical registrable domain, e.g. \"freelancer.com\"."},"otherDomains":{"type":"array","items":{"type":"string","minLength":1},"description":"Other domains the provider operates (regional sites, help centers)."},"hq":{"type":"object","properties":{"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},{"type":"null"}],"description":"Headquarters country; null when unknown."},"region":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"State, province, or city of the headquarters; null when unknown."}},"required":["country","region"],"additionalProperties":false,"description":"Where the provider is headquartered."},"jurisdictions":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries whose law governs earner terms."},"categories":{"minItems":1,"type":"array","items":{"type":"string","enum":["rideshare","delivery","local_shifts","home_services","care","freelance","ai_training","microtask","research","selling","leasing","tutoring","creator","agent_bounty","open_source","other"],"description":"Registry category."},"description":"Registry categories."},"entityVerification":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"method":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"How the legal entity was checked, e.g. \"company register lookup\", \"WHOIS + terms page\"."},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date-time with timezone."},{"type":"null"}],"description":"When the check was performed; null if never."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources supporting the verification status."}},"required":["status","method","verifiedAt","evidenceIds"],"additionalProperties":false,"description":"Whether the operating legal entity is real and matches the brand."},"paymentVerification":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","suspicious"],"description":"Verification outcome."},"method":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"How payment was verified, e.g. \"observed payout to a Passport holder\", \"payment processor disclosure\"."},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date-time with timezone."},{"type":"null"}],"description":"When payment was last verified; null if never."}},"required":["status","method","verifiedAt"],"additionalProperties":false,"description":"Whether the provider has been observed actually paying earners."},"termsUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published terms of service for earners; null if none found."},"payoutPolicyUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published payout or fees policy; null if none found."},"deactivationPolicyUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Published deactivation or account-termination policy; null if none found."},"appealsProcess":{"type":"object","properties":{"exists":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a published appeals process exists; null when unknown."},"humanReview":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a human reviews appeals; null when unknown."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources supporting the answers."}},"required":["exists","humanReview","evidenceIds"],"additionalProperties":false,"description":"Deactivation appeals: whether earners can appeal and whether a human reviews it."},"fairworkScores":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"year":{"type":"integer","minimum":2018,"maximum":2100,"description":"Rating year."},"score":{"type":"integer","minimum":0,"maximum":10,"description":"Fairwork score out of 10."},"url":{"type":"string","format":"uri","description":"Fairwork ratings page for that country and year."}},"required":["country","year","score","url"],"additionalProperties":false,"description":"A Fairwork (fair.work) country rating."},"description":"Fairwork ratings by country and year."},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Source id, referenced by sourceId / sourceIds / evidenceIds elsewhere in the record."},"url":{"type":"string","format":"uri","description":"Exact URL of the page or dataset."},"publisher":{"type":"string","minLength":1,"description":"Who published it (organisation name)."},"title":{"description":"Page or document title.","type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"],"description":"Kind of source: platform_disclosure, regulatory_filing, third_party_dataset, survey, passport_aggregate, user_report, internal_measurement."},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When we fetched it (ISO 8601 date-time)."},"checksum":{"description":"SHA-256 hex of the retrieved body, when known.","type":"string","pattern":"^[a-f0-9]{64}$"},"reachability":{"default":"unchecked","description":"Last link-check result: unchecked, ok, redirected, unreachable, changed.","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"lastCheckedAt":{"description":"When the link was last checked.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"publishedAt":{"description":"Publication or period date stated by the source itself.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"description":"Curator notes, typically the verbatim sentences the figures were read from.","type":"string"}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false,"description":"A cited source: the exact URL, who published it, when we retrieved it, and its last known reachability."},"description":"Every source cited by this record."},"version":{"type":"string","description":"Open Opportunity Schema version.","enum":["1.0.0"]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When this record was last edited."}},"required":["id","legalName","brandName","domain","otherDomains","hq","jurisdictions","categories","entityVerification","paymentVerification","termsUrl","payoutPolicyUrl","deactivationPolicyUrl","appealsProcess","fairworkScores","sources","version","updatedAt"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/providers/{id}/scorecard":{"get":{"operationId":"getProviderScorecard","summary":"Get a provider's scorecard","tags":["registry"],"description":"Latest scorecard for the provider's primary opportunity (the earliest-published one), or for `?opportunityId=` when given.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"opportunityId","required":false},{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Scorecard"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/opportunities":{"get":{"operationId":"listOpportunities","summary":"List / search opportunities","tags":["registry"],"description":"Published opportunities, searchable and filterable. `q` uses trigram similarity over `title` (typo-tolerant) plus a substring match over `description`. Public and unauthenticated by default; also accepts a real `X-PAYMENT` header (x402, PRD §5.3) as an alternative, keyless access path for agents — honestly 402 while x402 is unconfigured in this environment, never a fabricated payment acceptance.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"q","required":false},{"schema":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"]},"in":"query","name":"kind","required":false,"description":"What kind of earning this is."},{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"providerId","required":false},{"schema":{"type":"string","minLength":2,"maxLength":2},"in":"query","name":"country","required":false},{"schema":{"type":"string","enum":["remote","onsite","hybrid"]},"in":"query","name":"workMode","required":false,"description":"Where the work happens."},{"schema":{"type":"integer","minimum":0,"maximum":100},"in":"query","name":"minComposite","required":false},{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"maxFeesBps","required":false},{"schema":{"type":"string","enum":["published"]},"in":"query","name":"status","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"default":"composite_desc","type":"string","enum":["composite_desc","composite_asc","updated_desc"]},"in":"query","name":"sort","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunitiesListResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/opportunities/{id}":{"get":{"operationId":"getOpportunity","summary":"Get an opportunity","tags":["registry"],"description":"Full opportunity record, shaped to round-trip through `@openmoney/schema`'s `Opportunity` type. 404 when unpublished or missing. Public and cross-origin: `Access-Control-Allow-Origin: *` (real e2e embedding needs this — see `packages/scorecard-embed`).","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Registry id, e.g. \"freelancer-com:projects\"."},"providerId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of the Provider offering this opportunity."},"kind":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"],"description":"What kind of earning this is."},"title":{"type":"string","minLength":1,"maxLength":200,"description":"Short name, sentence case."},"description":{"type":"string","minLength":1,"maxLength":5000,"description":"What the work is, in plain words."},"workMode":{"type":"string","enum":["remote","onsite","hybrid"],"description":"Where the work happens."},"geo":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries where the opportunity is offered. Empty means worldwide or unknown; see eligibility."},"regions":{"type":"array","items":{"type":"string","minLength":1},"description":"States, provinces, or regions, when limited."},"cities":{"type":"array","items":{"type":"string","minLength":1},"description":"Cities or metros, when limited."}},"required":["countries","regions","cities"],"additionalProperties":false,"description":"Geographic availability."},"eligibility":{"type":"object","properties":{"minAge":{"anyOf":[{"type":"integer","minimum":0,"maximum":120},{"type":"null"}],"description":"Minimum age; null when not stated."},"vehicle":{"anyOf":[{"type":"string","enum":["none","bicycle","scooter","car","van","truck","any"]},{"type":"null"}],"description":"Vehicle required; null when not stated."},"equipment":{"type":"array","items":{"type":"string","minLength":1},"description":"Equipment the earner must supply, e.g. \"smartphone\", \"insulated bag\"."},"credentials":{"type":"array","items":{"type":"string","minLength":1},"description":"Licenses, certifications, or degrees required."},"backgroundCheck":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether a background check is required; null when not stated."},"countries":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US, IN."},"description":"Countries of residence accepted, when they differ from geo.countries."}},"required":["minAge","vehicle","equipment","credentials","backgroundCheck","countries"],"additionalProperties":false,"description":"Who can do this work."},"payEvidence":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string","enum":["net_hourly","gross_hourly","per_task","per_project"],"description":"What the pay figures measure."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."},"p25":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"25th percentile in minor units; null when not reported."},"p50":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Median in minor units; null when not reported."},"p90":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"90th percentile in minor units; null when not reported."},"n":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Sample size; null when the source does not state one."},"periodStart":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"First day of the period the figures cover."},"periodEnd":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Last day of the period the figures cover."},"sourceType":{"type":"string","enum":["passport_aggregate","platform_disclosure","third_party_dataset","survey","regulatory_filing"],"description":"Where a pay figure comes from."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["metric","currency","p25","p50","p90","n","periodStart","periodEnd","sourceType","sourceId"],"additionalProperties":false,"description":"A pay distribution from one source: money in minor units, never a prediction."},"description":"Pay distributions with sources. Empty until evidence exists; never estimated."},"feeSchedule":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Fee name as the provider states it."},"type":{"type":"string","enum":["percent","fixed","per_application","subscription","withdrawal","instant_pay"],"description":"Fee category."},"value":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Fee amount: basis points when unit is basis_points, minor units of `currency` when unit is minor_units."},"unit":{"type":"string","enum":["basis_points","minor_units"],"description":"How `value` is expressed: basis points of the base, or minor units of `currency`."},"currency":{"description":"Required when unit is minor_units.","type":"string","pattern":"^[A-Z]{3}$"},"minimum":{"description":"Floor applied to a percent fee (\"10% or $5, whichever is greater\").","type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false},"appliesTo":{"type":"string","minLength":1,"description":"What the fee applies to, e.g. \"fixed-price project earnings\", \"each withdrawal via PayPal\"."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["name","type","value","unit","appliesTo","sourceId"],"additionalProperties":false,"description":"One published fee. Value is an integer; the unit says whether it is basis points or minor units."},"description":"Published fees, each with a source."},"payoutTerms":{"anyOf":[{"type":"object","properties":{"frequency":{"type":"string","enum":["instant","daily","weekly","biweekly","monthly","on_request","per_milestone","unknown"],"description":"How often payouts happen."},"minimumPayout":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Minimum balance before a payout is allowed; null when none or unknown."},"delayDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Days between earning and availability for withdrawal; null when not stated."},"methods":{"type":"array","items":{"type":"string","minLength":1},"description":"Payout methods, e.g. \"PayPal\", \"bank transfer\", \"Payoneer\"."},"instantPayFee":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Fee for an instant or express payout; null when none or unknown."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["frequency","minimumPayout","delayDays","methods","instantPayFee","sourceId"],"additionalProperties":false,"description":"How and when earners get paid."},{"type":"null"}],"description":"Payout terms; null when not yet documented."},"onboardingCost":{"anyOf":[{"type":"object","properties":{"unpaidHours":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Unpaid hours spent on onboarding, tests, or training; null when not stated."},"upfrontFees":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Fees due before earning anything; null when none or unknown."},"equipmentCost":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in minor units (cents, paise). Integer; never a float."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code, e.g. USD, INR."}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"An amount of money: integer minor units plus ISO 4217 currency."},{"type":"null"}],"description":"Typical cost of required equipment; null when none or unknown."},"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."}},"required":["unpaidHours","upfrontFees","equipmentCost","sourceId"],"additionalProperties":false,"description":"What it costs to start."},{"type":"null"}],"description":"Onboarding cost; null when not yet documented."},"stability":{"type":"object","properties":{"taskAvailabilitySignal":{"type":"string","enum":["high","medium","low","unknown"],"description":"Whether there is usually work available."},"observedDeactivationRate":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},{"type":"null"}],"description":"Share of earners deactivated per year, in basis points; null when unknown."},"reportedUnpaidWorkIncidents":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Count of reported unpaid-work incidents in the period; null when unknown."},"sourceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources for the stability figures."}},"required":["taskAvailabilitySignal","observedDeactivationRate","reportedUnpaidWorkIncidents","sourceIds"],"additionalProperties":false,"description":"How dependable the work and the account are."},"riskFlags":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["UPFRONT_FEE","TASK_SCAM_PATTERN","CRYPTO_ONLY_PAYOUT","OFF_PLATFORM_ONLY_MESSAGING","CHECK_DEPOSIT_SCHEME","EQUIPMENT_PURCHASE_REQUIRED","DOMAIN_AGE_UNDER_90D","DOMAIN_MISMATCH","UNSUBSTANTIATED_EARNINGS_CLAIM","MLM_STRUCTURE","GHOST_POSTING","BRAND_IMPERSONATION","UNPAID_WORK_REPORTS","NO_APPEALS_PROCESS"],"description":"Scam-signature rule code."},"severity":{"type":"string","enum":["info","low","medium","high","critical"],"description":"How serious the signal is."},"evidence":{"type":"object","properties":{"sourceId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"quote":{"description":"Verbatim excerpt from the source that triggered the flag.","type":"string","maxLength":2000},"observedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When the evidence was observed."}},"required":["sourceId","observedAt"],"additionalProperties":false,"description":"The evidence a flag rests on. A flag cannot exist without it."},"detectedBy":{"type":"string","enum":["rule","curator","report"],"description":"Who or what raised the flag."},"ruleVersion":{"type":"string","minLength":1,"description":"Version of the rule set or curator guideline that raised the flag, e.g. \"scam-rules@1.0.0\"."}},"required":["code","severity","evidence","detectedBy","ruleVersion"],"additionalProperties":false,"description":"A scam or reliability signal with the evidence behind it."},"description":"Scam and reliability signals, each with evidence."},"agentPostable":{"type":"boolean","description":"Whether AI agents may post or apply on behalf of a principal."},"postedBy":{"type":"object","properties":{"type":{"type":"string","enum":["provider","agent","employer"],"description":"Who posted the opportunity."},"agentId":{"description":"Agent id when posted by an agent.","type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"principalProofId":{"description":"Proof id of the agent's human principal when posted by an agent.","type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["type"],"additionalProperties":false,"description":"Who posted this and, for agents, whose Proof backs them."},"lastVerifiedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When a curator last confirmed the record against its sources."},"scorecard":{"anyOf":[{"type":"object","properties":{"pay":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Pay: median net hourly vs. local minimum wage and category median."},"fees":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Fees: total extraction rate including unpaid onboarding."},"payout":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Payout: frequency, delay, minimum, reliability incidents."},"stability":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Stability: task availability, deactivation rate, unpaid-work incidents, appeals."},"transparency":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Transparency: published terms, fees, deactivation policy, pay disclosures."},"scamRisk":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"0–100, or null when there is insufficient evidence."},"confidence":{"type":"string","enum":["high","medium","low","insufficient"],"description":"Confidence in the score: high, medium, low, or insufficient."},"evidenceIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9][a-z0-9._:-]*$","description":"Id of a source in the enclosing record's `sources[]`. Every number carries one."},"description":"Sources the score was computed from."}},"required":["score","confidence","evidenceIds"],"additionalProperties":false,"description":"Scam risk (inverted: 100 = no signals): risk flags, verification, domain age, complaints."},"composite":{"type":"object","properties":{"score":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Weighted composite 0–100, or null when no dimension has evidence."},"partial":{"type":"boolean","description":"True when at least one dimension was excluded for insufficient evidence."},"weights":{"type":"object","properties":{"pay":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"fees":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"payout":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"stability":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"transparency":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."},"scamRisk":{"type":"integer","minimum":0,"maximum":1000000,"description":"Percentage in basis points (10000 = 100%)."}},"required":["pay","fees","payout","stability","transparency","scamRisk"],"additionalProperties":false,"description":"Composite weights per dimension in basis points; they sum to 10000."},"methodologyVersion":{"type":"string","minLength":1,"description":"Version of the scoring methodology that produced this composite, e.g. \"scoring@1.0.0\"."}},"required":["score","partial","weights","methodologyVersion"],"additionalProperties":false,"description":"The weighted composite and how it was computed."},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When the scorecard was computed."}},"required":["pay","fees","payout","stability","transparency","scamRisk","composite","computedAt"],"additionalProperties":false,"description":"Six-dimension scorecard with confidence per dimension and a weighted composite."},{"type":"null"}],"description":"Scorecard; null before the first computation."},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Source id, referenced by sourceId / sourceIds / evidenceIds elsewhere in the record."},"url":{"type":"string","format":"uri","description":"Exact URL of the page or dataset."},"publisher":{"type":"string","minLength":1,"description":"Who published it (organisation name)."},"title":{"description":"Page or document title.","type":"string","minLength":1},"type":{"type":"string","enum":["platform_disclosure","regulatory_filing","third_party_dataset","survey","passport_aggregate","user_report","internal_measurement"],"description":"Kind of source: platform_disclosure, regulatory_filing, third_party_dataset, survey, passport_aggregate, user_report, internal_measurement."},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When we fetched it (ISO 8601 date-time)."},"checksum":{"description":"SHA-256 hex of the retrieved body, when known.","type":"string","pattern":"^[a-f0-9]{64}$"},"reachability":{"default":"unchecked","description":"Last link-check result: unchecked, ok, redirected, unreachable, changed.","type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"lastCheckedAt":{"description":"When the link was last checked.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"publishedAt":{"description":"Publication or period date stated by the source itself.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"description":"Curator notes, typically the verbatim sentences the figures were read from.","type":"string"}},"required":["id","url","publisher","type","retrievedAt","reachability"],"additionalProperties":false,"description":"A cited source: the exact URL, who published it, when we retrieved it, and its last known reachability."},"description":"Every source cited by this record."},"version":{"type":"string","description":"Open Opportunity Schema version.","enum":["1.0.0"]}},"required":["id","providerId","kind","title","description","workMode","geo","eligibility","payEvidence","feeSchedule","payoutTerms","onboardingCost","stability","riskFlags","agentPostable","postedBy","lastVerifiedAt","scorecard","sources","version"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/opportunities/{id}/history":{"get":{"operationId":"getOpportunityHistory","summary":"Opportunity change history","tags":["registry"],"description":"What changed and when: merged `record_versions` (content edits) and `scorecard_history` (recomputes), newest first.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpportunityHistoryEntry"}}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/methodology/registry":{"get":{"operationId":"getRegistryMethodology","summary":"Scoring methodology","tags":["registry"],"description":"Generated directly from `@openmoney/scoring`'s `METHODOLOGY` constant: weights, per-dimension formula text, and the changelog. No database access.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryMethodology"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/sources":{"get":{"operationId":"listIncomeSources","summary":"List the caller's income sources","tags":["passport"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncomeSourcesList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createIncomeSource","summary":"Create a manual/CSV/PDF/screenshot income source","tags":["passport"],"description":"Idempotency-Key required. Gmail/Argyle/Pinwheel sources are created by their own connect/callback/webhook routes, not this one.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIncomeSourceBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncomeSourceSummary"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/sources/{id}":{"delete":{"operationId":"disconnectIncomeSource","summary":"Disconnect a source","tags":["passport"],"description":"Sets status to `disconnected`; does not delete its earnings_events (use Settings -> Data delete for that).","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/sources/{id}/import/csv":{"post":{"operationId":"importCsvStatement","summary":"Import a CSV/XLSX statement, or confirm a low-confidence column mapping","tags":["passport"],"description":"Two call shapes: a multipart upload (field `file`) to parse a new statement, or a JSON body `{ documentId, mapping, model, promptVersion }` (the exact values a prior low-confidence response returned) to apply a human-reviewed mapping with no further LLM call. Idempotency-Key required.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportImportResult"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/sources/{id}/import/pdf":{"post":{"operationId":"importPdfStatement","summary":"Import a PDF statement (multipart upload)","tags":["passport"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportImportResult"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/sources/{id}/import/screenshot":{"post":{"operationId":"importScreenshotStatement","summary":"Import a screenshot/photo of a statement (multipart upload)","tags":["passport"],"description":"Strips EXIF, runs vision extraction, and a real error-level-analysis edited-image heuristic. Always writes confirmedByUser: false, extractionConfidence <= 0.6 (PRD §2.3).","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportImportResult"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/sources/gmail/connect":{"post":{"operationId":"connectGmail","summary":"Start the Gmail OAuth flow (gmail.readonly, label-scoped)","tags":["passport"],"description":"503 with `{ integration: \"google\", mode: \"unconfigured\", howTo }` when GOOGLE_CLIENT_ID/SECRET are not set — never a fabricated authorization URL.","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GmailConnectResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/sources/gmail/callback":{"get":{"operationId":"gmailCallback","summary":"OAuth redirect target","tags":["passport"],"description":"On success creates an income_sources row (connectionType: email) and a consent_events row (scope: import:gmail), then redirects back to the app.","parameters":[{"schema":{"type":"string"},"in":"query","name":"code","required":false},{"schema":{"type":"string"},"in":"query","name":"state","required":false},{"schema":{"type":"string"},"in":"query","name":"error","required":false}],"responses":{"303":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/sources/argyle/connect":{"post":{"operationId":"connectArgyle","summary":"Create a real Argyle sandbox user and Link token","tags":["passport"],"description":"503 with `{ integration: \"argyle\", mode: \"unconfigured\", howTo }` when ARGYLE_CLIENT_ID/SECRET are not set.","security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArgyleConnectResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/sources/argyle/webhook":{"post":{"operationId":"argyleWebhook","summary":"Real Argyle webhook receiver (HMAC-SHA512 signature-verified)","tags":["passport"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportWebhookAck"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/sources/pinwheel/connect":{"post":{"operationId":"connectPinwheel","summary":"Create a real Pinwheel sandbox Link token","tags":["passport"],"description":"503 with `{ integration: \"pinwheel\", mode: \"unconfigured\", howTo }` when PINWHEEL_API_SECRET is not set.","security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinwheelConnectResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/sources/pinwheel/webhook":{"post":{"operationId":"pinwheelWebhook","summary":"Real Pinwheel webhook receiver (HMAC-SHA256 signature-verified)","tags":["passport"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportWebhookAck"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/events":{"get":{"operationId":"listEarningsEvents","summary":"List the caller's earnings_events","tags":["passport"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"providerId","required":false},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"query","name":"incomeSourceId","required":false},{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"in":"query","name":"from","required":false},{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"in":"query","name":"to","required":false},{"schema":{"type":"boolean"},"in":"query","name":"needsConfirmation","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":50,"type":"integer","minimum":1,"maximum":200},"in":"query","name":"limit","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarningsEventsListResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/events/export.csv":{"get":{"operationId":"exportEarningsEventsCsv","summary":"Stream the caller's full ledger as CSV","tags":["passport"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/events/{id}":{"get":{"operationId":"getEarningsEvent","summary":"Full row including a signed URL to the source document","tags":["passport"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarningsEventDetail"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"operationId":"updateEarningsEvent","summary":"Edit or confirm one earnings event","tags":["passport"],"description":"Any editable field subset plus `confirm`. Any successful call always sets confirmedByUser: true and extractionConfidence: null — a human correction is not a model confidence.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchEarningsEventBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarningsEventDetail"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"deleteEarningsEvent","summary":"Remove a single wrongly-imported row","tags":["passport"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/analytics/overview":{"get":{"operationId":"passportAnalyticsOverview","summary":"Live analytics over the caller's earnings_events","tags":["passport"],"description":"Runs @openmoney/scoring's passport engine live (never a cached row) — always current.","parameters":[{"schema":{"default":"30d","type":"string","enum":["7d","30d","90d","12m"]},"in":"query","name":"window","required":false},{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"providerId","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportAnalytics"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/analytics/by-platform":{"get":{"operationId":"passportAnalyticsByPlatform","summary":"One PassportAnalytics per provider the caller has events for","tags":["passport"],"parameters":[{"schema":{"default":"30d","type":"string","enum":["7d","30d","90d","12m"]},"in":"query","name":"window","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportAnalyticsByPlatform"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/analytics/counterfactual":{"get":{"operationId":"passportAnalyticsCounterfactual","summary":"The caller's own net-hourly p50 against the registry's published evidence for the same provider","tags":["passport"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"providerId","required":true},{"schema":{"default":"30d","type":"string","enum":["7d","30d","90d","12m"]},"in":"query","name":"window","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportCounterfactual"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/analytics/refresh":{"get":{"operationId":"passportAnalyticsRefresh","summary":"Admin/worker-triggered: recompute and upsert derived_metrics for one user","tags":["passport"],"description":"Not user-facing — the nightly aggregation job calls this so it has a stable snapshot instead of recomputing every user live.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"query","name":"userId","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportRefreshResult"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/export":{"post":{"operationId":"requestPassportExport","summary":"Enqueue a zip export (JSON + CSV + original documents)","tags":["passport"],"description":"Idempotency-Key required. The worker (apps/worker/src/jobs/passport-export.ts) processes the job and marks the row ready with a signed download URL.","security":[{"sessionCookie":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportExportCreated"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/export/{id}":{"get":{"operationId":"getPassportExport","summary":"Poll export status","tags":["passport"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportExport"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/delete":{"post":{"operationId":"requestPassportDelete","summary":"Start the two-step deletion of every Passport row and stored document for the caller","tags":["passport"],"description":"Body `confirmationPhrase` must equal the caller's account email (first factor). Idempotency-Key required. Sends a single-use confirmation link to that email (second factor, PRD §2.5) and returns its request id immediately; nothing is deleted, and the worker job (apps/worker/src/jobs/passport-delete.ts) is not enqueued, until POST /v1/passport/delete/confirm consumes that link.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportDeleteBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportDeleteAccepted"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/delete/confirm":{"post":{"operationId":"confirmPassportDelete","summary":"Consume a Passport-deletion confirmation link and enqueue the real delete job","tags":["passport"],"description":"No session required, same as GET /v1/auth/magic-link/consume — the single-use token from the confirmation email is itself the proof, since the email may be opened on a device that never had a session here. Only on `status: \"deleted\"` is apps/worker/src/jobs/passport-delete.ts actually enqueued.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportDeleteConfirmBodyInput"}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportDeleteConfirmResult"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/passport/consent-log":{"get":{"operationId":"passportConsentLog","summary":"The caller's consent_events rows","tags":["passport"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"scope":{"type":"string"},"action":{"type":"string"},"subjectType":{"anyOf":[{"type":"string"},{"type":"null"}]},"subjectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"detail":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","scope","action","subjectType","subjectId","detail","createdAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/passport/consent/aggregate":{"put":{"operationId":"setAggregateConsent","summary":"Toggle the aggregate:anonymized consent scope (default off)","tags":["passport"],"description":"Gates whether the nightly aggregation job (apps/worker/src/jobs/passport-aggregate.ts) may include this user's data. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PassportAggregateConsentBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"optIn":{"type":"boolean"}},"required":["optIn"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/auth/passkey/register/options":{"post":{"operationId":"passkeyRegisterOptions","summary":"Start passkey registration","tags":["auth"],"description":"Creates an unverified account for a new email, or adds a passkey to the signed-in account. An existing account that already has a passkey or a verified email must be signed in first (prevents takeover by registering a credential on someone else's address). Exempt from `Idempotency-Key`: the WebAuthn challenge is single-use by construction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"displayName":{"type":"string","minLength":1,"maxLength":80}},"required":["email"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicKeyCredentialCreationOptions"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/passkey/register/verify":{"post":{"operationId":"passkeyRegisterVerify","summary":"Finish passkey registration","tags":["auth"],"description":"Verifies the attestation against the stored challenge (5-minute expiry, single use), stores the credential, and starts a session when none exists. Exempt from `Idempotency-Key`: the WebAuthn challenge is single-use by construction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"response":{"$ref":"#/components/schemas/RegistrationResponseInput"},"nickname":{"type":"string","minLength":1,"maxLength":60}},"required":["email","response"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"},"passkey":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}]},"deviceType":{"type":"string"},"backedUp":{"type":"boolean"}},"required":["id","nickname","deviceType","backedUp"],"additionalProperties":false}},"required":["user","passkey"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/passkey/login/options":{"post":{"operationId":"passkeyLoginOptions","summary":"Start passkey sign-in","tags":["auth"],"description":"With an email, lists that account's credentials in `allowCredentials`; without one (or for an unknown/passkey-less email) returns discoverable-credential options, so the response never reveals whether an email exists. Exempt from `Idempotency-Key`: the WebAuthn challenge is single-use by construction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"default":{},"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicKeyCredentialRequestOptions"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/passkey/login/verify":{"post":{"operationId":"passkeyLoginVerify","summary":"Finish passkey sign-in","tags":["auth"],"description":"Verifies the assertion, updates the signature counter, and sets the session cookie. Exempt from `Idempotency-Key`: the WebAuthn challenge is single-use by construction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"response":{"$ref":"#/components/schemas/AuthenticationResponseInput"}},"required":["response"]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"}},"required":["user"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/magic-link":{"post":{"operationId":"requestMagicLink","summary":"Email a sign-in link","tags":["auth"],"description":"Always responds 202 without revealing whether the address has an account. `provider` is `sandbox` (Mailpit), `live` (SMTP), or `unconfigured` (nothing was sent; the UI shows how to connect email). The link is single-use and expires in 15 minutes. Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"redirectTo":{"type":"string","maxLength":512}},"required":["email"]}}}},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"sent":{"type":"boolean"},"provider":{"type":"string","enum":["sandbox","live","unconfigured"]}},"required":["sent","provider"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/auth/magic-link/consume":{"get":{"operationId":"consumeMagicLink","summary":"Consume a sign-in link","tags":["auth"],"description":"Marks the link used, verifies the email, starts a session, and redirects (303) to `APP_WEB_ORIGIN + redirectTo` (default `/app`). Invalid or reused links redirect to `/sign-in?error=magic-link-invalid`. GET routes are never subject to `Idempotency-Key`.","parameters":[{"schema":{"type":"string","minLength":16,"maxLength":256},"in":"query","name":"token","required":true}],"responses":{"303":{"description":"Redirect to the web app"},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/auth/logout":{"post":{"operationId":"logout","summary":"Sign out","tags":["auth"],"description":"Revokes the current session and clears the cookie. Requires `Idempotency-Key`.","security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/me":{"get":{"operationId":"getMe","summary":"Current identity","tags":["me"],"description":"Works with the session cookie or a Bearer API key (the key's owning user and org are returned).","security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"operationId":"updateMe","summary":"Update profile","tags":["me"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":80},"handle":{"type":"string","pattern":"^[a-z0-9_]{3,30}$"},"locale":{"type":"string","pattern":"^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$"},"timezone":{"type":"string"}}}}}},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"}},"required":["user"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/me/sessions":{"get":{"operationId":"listSessions","summary":"Device list","tags":["me"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/Session"}}},"required":["sessions"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/sessions/{id}":{"delete":{"operationId":"revokeSession","summary":"Sign out a device","tags":["me"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/passkeys":{"get":{"operationId":"listPasskeys","summary":"Passkeys on this account","tags":["me"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"passkeys":{"type":"array","items":{"$ref":"#/components/schemas/Passkey"}}},"required":["passkeys"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/passkeys/{id}":{"patch":{"operationId":"renamePasskey","summary":"Rename a passkey","tags":["me"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nickname":{"type":"string","minLength":1,"maxLength":60}},"required":["nickname"]}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"passkey":{"$ref":"#/components/schemas/Passkey"}},"required":["passkey"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"deletePasskey","summary":"Delete a passkey","tags":["me"],"description":"Refused (409 `last-credential`) when it is the only passkey and the email is not verified, because the account would become unreachable.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/consent":{"get":{"operationId":"listConsent","summary":"Consent ledger","tags":["me"],"description":"Every data access, import, share, verification, and export, newest first. Pass `cursor` from the previous page.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ConsentEvent"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs":{"post":{"operationId":"createOrg","summary":"Create an organization","tags":["orgs"],"description":"Creates the org, makes the caller its owner, and activates it on the current session. Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"kind":{"default":"relying_party","type":"string","enum":["relying_party","agent_operator","employer"]},"website":{"type":"string","format":"uri"}},"required":["name"]}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"org":{"$ref":"#/components/schemas/OrgMembership"}},"required":["org"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]},"get":{"operationId":"listOrgs","summary":"Organizations you belong to","tags":["orgs"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"orgs":{"type":"array","items":{"$ref":"#/components/schemas/OrgMembership"}}},"required":["orgs"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{id}/activate":{"post":{"operationId":"activateOrg","summary":"Switch the active organization","tags":["orgs"],"description":"Requires `Idempotency-Key`.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"activeOrg":{"$ref":"#/components/schemas/OrgMembership"}},"required":["activeOrg"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{id}/request-verification":{"post":{"operationId":"requestOrgVerification","summary":"Request business verification","tags":["orgs"],"description":"Moves the organization from `unverified` to `pending` manual review. Stripe Identity's business-verification flow is not configured yet (no `STRIPE_SECRET_KEY`), so review is done by a human, not issued instantly — this route never sets `verified` itself. Idempotent: calling again while already `pending`/`verified`/`rejected` just returns the current state. Requires `Idempotency-Key`.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"org":{"$ref":"#/components/schemas/OrgMembership"}},"required":["org"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{id}/api-keys":{"get":{"operationId":"listApiKeys","summary":"API keys for an organization","tags":["orgs"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"apiKeys":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}},"required":["apiKeys"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createApiKey","summary":"Create an API key","tags":["orgs"],"description":"The full key is returned once and stored only as a SHA-256 hash. Prefix is `om_live_` in production and `om_test_` elsewhere. Writes a `share:api_key` consent event for the creator. Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"scopes":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","enum":["me:read","registry:read","sources:read","proof:verify","proof:request","bounties:write","agents:write"]}}},"required":["name","scopes"]}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"apiKey":{"$ref":"#/components/schemas/ApiKey"}},"required":["key","apiKey"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{id}/api-keys/{keyId}":{"delete":{"operationId":"revokeApiKey","summary":"Revoke an API key","tags":["orgs"],"description":"Requires `Idempotency-Key`.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"keyId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{id}/audit":{"get":{"operationId":"listOrgAudit","summary":"Audit log for an organization","tags":["orgs"],"description":"The organization's own audit trail (org, API key, webhook, policy, and Proof-request changes) — owner/admin only, keyset-paginated newest first. Never includes `ipHash`.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","maxLength":100},"in":"query","name":"action","required":false},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AuditRow"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{orgId}/proof-policies":{"post":{"operationId":"createProofPolicy","summary":"Create a proof policy (\"what we require\")","tags":["proof","orgs"],"description":"Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProofPolicyBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"orgId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofPolicy"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"operationId":"listProofPolicies","summary":"List proof policies","tags":["proof","orgs"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"orgId","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofPoliciesList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{orgId}/webhooks":{"post":{"operationId":"createWebhookEndpoint","summary":"Create a webhook endpoint","tags":["proof","orgs"],"description":"Generates and returns `signingSecret` ONCE — never retrievable again, same convention as an API key's raw value. Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"orgId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"operationId":"listWebhookEndpoints","summary":"List webhook endpoints (never returns signingSecret again)","tags":["proof","orgs"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"orgId","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{orgId}/webhooks/{id}/deliveries":{"get":{"operationId":"listWebhookDeliveries","summary":"Recent deliveries for one webhook endpoint (audit/debugging)","tags":["proof","orgs"],"parameters":[{"schema":{"default":50,"type":"integer","minimum":1,"maximum":200},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"orgId","required":true},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveriesList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/orgs/{orgId}/proof-verifications":{"get":{"operationId":"listOrgProofVerifications","summary":"The org's own proof_verification_events (usage dashboard)","tags":["proof","orgs"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"orgId","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgProofVerificationsList"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/providers":{"get":{"operationId":"adminProviders","summary":"Provider statuses and the last health check","tags":["admin"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"$ref":"#/components/schemas/ProviderStatus"}},"anySandbox":{"type":"boolean"},"lastHealthCheck":{"anyOf":[{"$ref":"#/components/schemas/Health"},{"type":"null"}]}},"required":["providers","anySandbox","lastHealthCheck"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/flags":{"get":{"operationId":"adminListFlags","summary":"Feature flags","tags":["admin"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"flags":{"type":"array","items":{"$ref":"#/components/schemas/FeatureFlag"}}},"required":["flags"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/flags/{key}":{"patch":{"operationId":"adminUpdateFlag","summary":"Update a feature flag","tags":["admin"],"description":"Requires `Idempotency-Key`. Writes before/after to the audit log.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"rolloutPercent":{"type":"integer","minimum":0,"maximum":100},"audience":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"orgIds":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}}},"description":{"type":"string","minLength":1,"maxLength":500}}}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"key","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"flag":{"$ref":"#/components/schemas/FeatureFlag"}},"required":["flag"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/jobs":{"get":{"operationId":"adminJobs","summary":"Queues and recent job runs","tags":["admin"],"description":"Live BullMQ counts per queue plus the last 50 `jobs_log` rows written by the worker.","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"queues":{"type":"array","items":{"$ref":"#/components/schemas/QueueCounts"}},"recent":{"type":"array","items":{"$ref":"#/components/schemas/JobsLogRow"}}},"required":["queues","recent"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/jobs/link-check":{"post":{"operationId":"adminEnqueueLinkCheck","summary":"Enqueue a link-check run","tags":["admin"],"description":"Adds a `link-check.run` job (payload validated by `linkCheckJobSchema`) with id `link-check-<uuid>` (BullMQ forbids `:` in custom ids). Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"default":{},"type":"object","properties":{"sourceIds":{"maxItems":5000,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":5000}}}}}},"security":[{"sessionCookie":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"queue":{"type":"string"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["jobId","queue","payload"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/jobs/rankings-report":{"post":{"operationId":"adminEnqueueRankingsReport","summary":"Enqueue a rankings-report run","tags":["admin"],"description":"Adds a `rankings-report.run` job (PRD §6.2) with id `rankings-report-<uuid>`, for demoing the quarterly report without waiting a quarter. `period` (e.g. \"2026-q3\") defaults to the real current quarter; the job is a real no-op if that period is already published. Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"default":{},"type":"object","properties":{"period":{"type":"string","pattern":"^\\d{4}-q[1-4]$"}}}}}},"security":[{"sessionCookie":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"queue":{"type":"string"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["jobId","queue","payload"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/jobs/dataset-snapshot":{"post":{"operationId":"adminEnqueueDatasetSnapshot","summary":"Enqueue a dataset-snapshot run","tags":["admin"],"description":"Adds a `dataset-snapshot.run` job (PRD §6.3) with id `dataset-snapshot-<uuid>`, for demoing without waiting for the real weekly schedule. No parameters — always exports the currently-published registry. Requires `Idempotency-Key`.","security":[{"sessionCookie":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"queue":{"type":"string"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["jobId","queue","payload"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/jobs/data-retention":{"post":{"operationId":"adminEnqueueDataRetention","summary":"Enqueue a data-retention sweep run","tags":["admin"],"description":"Adds a `data-retention.run` job (PRD §7.3) with id `data-retention-<uuid>`, for demoing the nightly privacy-retention sweep without waiting for the real schedule. No parameters — every documented table's own real retention cutoff (`apps/worker/src/jobs/data-retention.ts`) is evaluated against the real clock each run. Requires `Idempotency-Key`.","security":[{"sessionCookie":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"queue":{"type":"string"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["jobId","queue","payload"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/jobs/transparency-counts":{"post":{"operationId":"adminEnqueueTransparencyCounts","summary":"Enqueue a transparency-counts run","tags":["admin"],"description":"Adds a `transparency-counts.run` job (PRD §7.2) with id `transparency-counts-<uuid>`, for demoing the monthly transparency-counts publication without waiting for the real schedule. `period` (e.g. \"2026-08\") defaults to the real current month; the job is a real no-op if that period is already published. Requires `Idempotency-Key`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"default":{},"type":"object","properties":{"period":{"type":"string","pattern":"^\\d{4}-\\d{2}$"}}}}}},"security":[{"sessionCookie":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"queue":{"type":"string"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["jobId","queue","payload"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/jobs/{id}":{"get":{"operationId":"adminJob","summary":"One job: queue state plus its log rows","tags":["admin"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"anyOf":[{"$ref":"#/components/schemas/QueueJob"},{"type":"null"}]},"log":{"type":"array","items":{"$ref":"#/components/schemas/JobsLogRow"}}},"required":["job","log"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/sources":{"get":{"operationId":"adminSources","summary":"Sources with reachability and last check","tags":["admin"],"parameters":[{"schema":{"type":"string","enum":["unchecked","ok","redirected","unreachable","changed"]},"in":"query","name":"status","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceAdmin"}}},"required":["sources"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/audit":{"get":{"operationId":"adminAudit","summary":"Audit log","tags":["admin"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","maxLength":100},"in":"query","name":"action","required":false},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"query","name":"actorUserId","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AuditRow"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/registry/providers":{"post":{"operationId":"adminCreateRegistryProvider","summary":"Create a draft provider, optionally fetching its known policy pages","tags":["admin"],"description":"Runs the curator fetch step against any `urls` supplied and writes the provider/opportunity rows via the same writer the pipeline and confirm route use (with no facts yet, since nothing has been extracted). Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":3,"maxLength":255,"description":"Canonical registrable domain, e.g. \"example.com\"."},"brandName":{"type":"string","minLength":1,"maxLength":200},"legalName":{"description":"Defaults to `brandName` when omitted; a curator confirms the real legal name once the terms page is extracted.","type":"string","minLength":1,"maxLength":200},"otherDomains":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"hq":{"anyOf":[{"type":"object","properties":{"country":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}]},"region":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["country"]},{"type":"null"}]},"jurisdictions":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}},"kinds":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","enum":["platform_gig","freelance_marketplace","ai_training","local_shift","selling","leasing","research_study","agent_bounty","employer_posting","open_source_bounty"]}},"categories":{"maxItems":10,"type":"array","items":{"type":"string","minLength":1}},"urls":{"description":"Known policy-page URLs (`docs/registry/provider-sources.json` shape). Every URL supplied here is fetched immediately.","type":"object","properties":{"home":{"type":"string","format":"uri"},"earnerSignup":{"type":"string","format":"uri"},"terms":{"type":"string","format":"uri"},"fees":{"type":"string","format":"uri"},"payout":{"type":"string","format":"uri"},"deactivation":{"type":"string","format":"uri"},"payDisclosure":{"type":"string","format":"uri"},"help":{"type":"string","format":"uri"}}}},"required":["domain","brandName"]}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryProviderCreated"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/registry/providers/{id}/fetch":{"post":{"operationId":"adminFetchRegistryProvider","summary":"Re-fetch a provider's known URLs, snapshot each, and update sources","tags":["admin"],"description":"Uses the cached curator session for this provider when present (from `POST /providers` or a prior `/fetch`); otherwise reconstructs known URLs from `termsUrl`/`payoutPolicyUrl`/`deactivationPolicyUrl` on the provider row. Pass `urls` in the body to add or override slots (needed for `fees`/`payDisclosure` once the cache has expired, since those are not stored as columns). Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"default":{},"type":"object","properties":{"urls":{"type":"object","properties":{"home":{"type":"string","format":"uri"},"earnerSignup":{"type":"string","format":"uri"},"terms":{"type":"string","format":"uri"},"fees":{"type":"string","format":"uri"},"payout":{"type":"string","format":"uri"},"deactivation":{"type":"string","format":"uri"},"payDisclosure":{"type":"string","format":"uri"},"help":{"type":"string","format":"uri"}}}}}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryFetchResult"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/registry/providers/{id}/extract":{"post":{"operationId":"adminExtractRegistryProvider","summary":"Run LLM structured extraction over the freshest fetched pages","tags":["admin"],"description":"Proposes field values with `confidence` and `corroborated` (ADR-007: a value earns `high`/`corroborated: true` only by appearing, normalized, in the real fetched page text) — nothing is written yet. Requires `POST .../fetch` to have run first in this session. Idempotency-Key required.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryExtractResult"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/registry/providers/{id}/confirm":{"post":{"operationId":"adminConfirmRegistryProviderFields","summary":"Accept or reject proposed fields; write the accepted ones","tags":["admin"],"description":"Body `{ fields: [{ path, accept }] }`. Writes accepted fields via the same writer the automated pipeline uses; rejected fields are dropped. Requires `POST .../extract` to have run first in this session. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"minItems":1,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","minLength":1},"value":{},"sourceId":{"type":"string"},"accept":{"type":"boolean"}},"required":["path","accept"]}}},"required":["fields"]}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryConfirmResult"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/registry/providers/{id}/publish":{"post":{"operationId":"adminPublishRegistryProvider","summary":"Publish a provider once it clears the evidence bar","tags":["admin"],"description":"Refuses (409) unless the provider has at least 3 distinct sources and one corroborated fee or payout fact. On success, bumps `version`, snapshots `record_versions`, and recomputes every opportunity's scorecard. Idempotency-Key required.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryPublishResult"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/registry/opportunities/{id}/recompute":{"post":{"operationId":"adminRecomputeOpportunityScorecard","summary":"Recompute one opportunity's scorecard from current DB facts","tags":["admin"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryRecomputeResult"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/registry/queue":{"get":{"operationId":"adminRegistryQueue","summary":"Freshness and confirmation queue","tags":["admin"],"description":"Every opportunity, flagged `stale` (`lastVerifiedAt` null or older than 30 days) and `needsConfirmation` (provider not yet `published` — the closest DB-backed proxy for \"has fields a curator has not confirmed\"), stale-and-unconfirmed first.","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryQueue"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/registry/providers/{id}":{"get":{"operationId":"adminGetRegistryProvider","summary":"Full provider record for curator review, including pending proposed fields","tags":["admin"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRegistryProviderRecord"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sources":{"get":{"operationId":"listSources","summary":"Public evidence sources","tags":["sources"],"description":"Every source the registry cites, with its canonical URL (no affiliate or tracking parameters), publisher, type, reachability, and last check time.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourcePublic"}},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["sources","count"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/changelog":{"get":{"operationId":"listChangelog","summary":"Record version history across providers and opportunities","tags":["registry"],"description":"Append-only history from `record_versions`, newest first. Filter with `subjectType` and/or `subjectId`.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","enum":["provider","opportunity"]},"in":"query","name":"subjectType","required":false},{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"subjectId","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ChangelogEntry"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs":{"post":{"operationId":"createProof","summary":"Issue a new Proof from real Passport/registry/identity data","tags":["proof"],"description":"Runs the matching claim computer (`@openmoney/proof`'s claims/*). 409 `insufficient-evidence` when it finds no real evidence to issue this type honestly; 409 `holder-key-required` when the caller has not registered a holder public key yet (`POST /v1/proofs/holder-key` first); 503 when the type needs an integration that is not configured in this environment (identity -> Stripe Identity). Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProofBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueProofResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]},"get":{"operationId":"listProofs","summary":"List the caller's issued proofs","tags":["proof"],"description":"No `sdJwt` in the list view — fetch GET /v1/proofs/{id} for the full credential.","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofsList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs/holder-key":{"post":{"operationId":"setHolderKey","summary":"Register/update the session's current holder public key","tags":["proof"],"description":"The matching private key is generated and held entirely in the browser (WebCrypto) and never sent here (A3.4) — only its public half, embedded in every newly issued credential's `cnf` claim from now on. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HolderKeyBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HolderKeyBody"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/proofs/{id}":{"get":{"operationId":"getProof","summary":"Full record including the real, all-disclosures sdJwt","tags":["proof"],"description":"Only the owner may fetch this — it's what the browser needs to build a selective presentation locally via presentProof.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofDetail"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs/{id}/revoke":{"post":{"operationId":"revokeProof","summary":"Revoke a proof","tags":["proof"],"description":"Flips its Status List bit and re-signs that issuer key's Status List Token SYNCHRONOUSLY in this handler (A3.3's 60-second propagation is trivially met by not queuing this step). Enqueues real proof.revoked webhook deliveries to every org that has previously verified this proof. Idempotency-Key required.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeProofResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs/{id}/shares":{"post":{"operationId":"createProofShare","summary":"Create a share link (bookkeeping only — the presentation itself is built client-side, never uploaded)","tags":["proof"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs/shares/{id}":{"get":{"operationId":"getPublicShare","summary":"Public metadata for a share link — never claim values","tags":["proof"],"description":"For a relying-party page to render \"what this share claims to be\" before a live verification happens.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicShareView"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs/{id}/verification-log":{"get":{"operationId":"proofVerificationLog","summary":"The caller's own verification events for this proof (\"who verified what, when\")","tags":["proof"],"description":"Hash-only — never re-derives what was disclosed beyond the disclosedClaimPaths array already logged.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationLogResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs/verify/nonce":{"post":{"operationId":"mintVerifyNonce","summary":"Mint a real single-use nonce a presentation request must embed (the actual replay defense, A3.3)","tags":["proof"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyNonceBodyInput"}}}},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyNonceResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/proofs/verify":{"post":{"operationId":"verifyProof","summary":"Verify a presentation","tags":["proof"],"description":"Rejects a nonce not found freshly un-consumed in `proof_nonces` with 400 (A3.3 replay defense — server-side tracking, not just the presentation's own internal nonce field). Writes one proof_verification_events row (hash of the presentation, never the presentation itself) regardless of outcome. When called with a proof:verify-scoped API key, enqueues real proof.verified webhook deliveries for that key's org. This is the exact route the SDK, the embeddable widget, the hosted verify page, and the console's paste-a-presentation tool all call (A3.1).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyProofBodyInput"}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyProofResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/proofs/status-list/{kid}":{"get":{"operationId":"getStatusList","summary":"Live-built, real signed Status List Token for one issuer key","tags":["proof"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":500},"in":"path","name":"kid","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"string"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/proofs/requests":{"post":{"operationId":"createProofRequest","summary":"Create a \"request a Proof\" link an earner can open and fulfil","tags":["proof"],"description":"Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProofRequestBodyInput"}}}},"security":[{"apiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProofRequestResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/proofs/requests/{id}":{"get":{"operationId":"getProofRequestStatus","summary":"Status of a request-a-Proof link","tags":["proof"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofRequestStatus"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/.well-known/did.json":{"get":{"operationId":"getDidDocument","summary":"did:web document over every issuer key this deployment has ever signed with","tags":["proof"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DidDocument"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/.well-known/jwks.json":{"get":{"operationId":"getJwks","summary":"Plain JWKS — what most SD-JWT VC verifiers (including our own SDK) actually fetch","tags":["proof"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Jwks"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/profile":{"get":{"operationId":"getProfile","summary":"Get the caller's profile and constraints","tags":["profile"],"description":"Never 404s: a caller with no `profiles` row yet gets PRD-documented defaults (capital $0, risk tolerance conservative, payout speed \"any\", empty everything else).","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"operationId":"updateProfile","summary":"Update the profile","tags":["profile"],"description":"Partial update, PRD §4.2's field list. Creates the `profiles` row on first write. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchProfileBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/profile/skills":{"get":{"operationId":"listProfileSkills","summary":"List typed and Passport-inferred skills","tags":["profile"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSkillsList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createProfileSkill","summary":"Add a typed skill","tags":["profile"],"description":"The user typed this themselves, so it is confirmed immediately (`source: \"typed\"`, `confirmed: true`). Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSkillBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSkill"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/profile/skills/infer":{"post":{"operationId":"inferProfileSkills","summary":"Infer skills from confirmed Passport earnings","tags":["profile"],"description":"Reads confirmed `earnings_events`, maps each provider to its registry `categories[]`, and inserts any not already present as `source: \"passport_inferred\"`, `confirmed: false`. Idempotent by `(userId, label)` — safe to call repeatedly. Idempotency-Key required.","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferSkillsResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/profile/skills/{id}/confirm":{"post":{"operationId":"confirmProfileSkill","summary":"Confirm a skill","tags":["profile"],"description":"Never auto-confirmed anywhere else. Idempotency-Key required.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSkill"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/profile/skills/{id}":{"delete":{"operationId":"deleteProfileSkill","summary":"Dismiss a skill (typed or inferred)","tags":["profile"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/profile/interests":{"get":{"operationId":"listProfileInterests","summary":"List interest tags","tags":["profile"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileInterestsList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createProfileInterest","summary":"Add an interest tag","tags":["profile"],"description":"Free text, never a protected characteristic (PRD §4.3's fairness control). Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInterestBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileInterest"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/profile/interests/{id}":{"delete":{"operationId":"deleteProfileInterest","summary":"Remove an interest tag","tags":["profile"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/discover":{"get":{"operationId":"getDiscoverFeed","summary":"Ranked, explainable opportunity feed","tags":["discover"],"description":"Runs the caller's profile through `@openmoney/matching`'s hard filters, expected-value scoring, and diversity constraint. `showExcluded=true` includes hard-filtered items (`passesHardFilters: false`) with real reasons instead of dropping them.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"default":"expected_value","type":"string","enum":["expected_value","net_hourly","payout_speed","freshness"]},"in":"query","name":"sort","required":false},{"schema":{"default":false,"type":"boolean"},"in":"query","name":"showExcluded","required":false},{"schema":{"type":"string","enum":["remote","onsite","hybrid"]},"in":"query","name":"workMode","required":false,"description":"Where the work happens."},{"schema":{"type":"string","minLength":2,"maxLength":2},"in":"query","name":"country","required":false},{"schema":{"type":"string","minLength":1,"maxLength":120},"in":"query","name":"region","required":false},{"schema":{"type":"string","enum":["conservative","moderate","aggressive"]},"in":"query","name":"riskTolerance","required":false},{"schema":{"type":"string","enum":["same_day","weekly","monthly","any"]},"in":"query","name":"payoutSpeedNeeded","required":false},{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"minAcceptableNetHourlyAmountMinor","required":false},{"schema":{"type":"integer","minimum":0,"maximum":168},"in":"query","name":"hoursPerWeek","required":false},{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"capitalAvailableAmountMinor","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverListResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/discover/{id}":{"get":{"operationId":"getDiscoverItem","summary":"One opportunity's full match explanation plus its registry record","tags":["discover"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverItemDetail"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/discover/{id}/similar":{"get":{"operationId":"getSimilarOpportunities","summary":"Similar opportunities (same kind), ranked the same way as the feed","tags":["discover"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverSimilarResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/discover/{id}/save":{"post":{"operationId":"saveOpportunity","summary":"Save an opportunity","tags":["discover"],"description":"Idempotency-Key required.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"unsaveOpportunity","summary":"Remove a save","tags":["discover"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/discover/{id}/hide":{"post":{"operationId":"hideOpportunity","summary":"Hide an opportunity, with an optional reason","tags":["discover"],"description":"Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HideOpportunityBodyInput"}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"unhideOpportunity","summary":"Un-hide an opportunity","tags":["discover"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/watches":{"get":{"operationId":"listWatches","summary":"List the caller's watches","tags":["watches"],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchesList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createWatch","summary":"Watch an opportunity, provider, or saved search","tags":["watches"],"description":"Exactly one of `opportunityId`/`providerId`/`searchQuery` must be present, matching `subjectType`. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWatchBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Watch"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/watches/{id}":{"patch":{"operationId":"updateWatch","summary":"Update channels, digest, or pause state","tags":["watches"],"description":"Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchWatchBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Watch"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"deleteWatch","summary":"Remove a watch","tags":["watches"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/watches/{id}/events":{"get":{"operationId":"listWatchEvents","summary":"Real change history for a watch's subject","tags":["watches"],"description":"Opportunity/provider-type watches: real `watch_events` rows. Search-type watches: new-match history from `alert_deliveries` where `kind = \"new_match\"`.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchEventsList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/push-subscriptions":{"post":{"operationId":"createPushSubscription","summary":"Register a Web Push subscription","tags":["watches"],"description":"The browser Push API's own `PushSubscriptionJSON` shape. Upserts by `endpoint`. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushSubscriptionBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]},"delete":{"operationId":"deletePushSubscription","summary":"Unregister a Web Push subscription","tags":["watches"],"description":"Called on `pushsubscriptionchange`/unsubscribe from the client.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePushSubscriptionBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/applications/draft":{"post":{"operationId":"draftApplication","summary":"Draft a proposal/cover note from evidenced facts only","tags":["applications"],"description":"Rate-capped at 10 drafts per rolling 24h (429 with Retry-After when exceeded). Rejects a draft that doesn't reference the opportunity's title/kind. No submit endpoint exists anywhere in this API — the user copies or opens the canonical application page themselves. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftApplicationBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationDraft"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/applications/drafts":{"get":{"operationId":"listApplicationDrafts","summary":"List the caller's drafts","tags":["applications"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"opportunityId","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationDraftsList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/applications/{opportunityId}/outcome":{"post":{"operationId":"reportApplicationOutcome","summary":"Report an outcome for an opportunity you applied to","tags":["applications"],"description":"`sharedToRegistry` defaults `false` — explicit opt-in. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOutcomeBodyInput"}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"opportunityId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationOutcome"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/ledger":{"get":{"operationId":"listLedgerEntries","summary":"Real money movements the caller is a party to","tags":["ledger"],"description":"Every `ledger_entries` row where the caller is the bounty's poster (directly, or via an org they belong to) or its accepted earner, newest first. Each row carries the real Stripe/x402 reference and counterparty that actually moved the money — never a computed balance. Works with the session cookie or a Bearer API key.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":50,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerEntriesListResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/oauth/token":{"post":{"operationId":"oauthToken","summary":"OAuth 2.1 client-credentials grant for agents","tags":["agents"],"description":"Exchanges an agent's real API key id/secret (from POST /v1/agents) for a short-lived (1 hour) signed bearer JWT, for apps/mcp's streamable-HTTP transport specifically. Real jose HS256 signing — an unknown client_id, a wrong client_secret, or a revoked/expired key all fail with a real RFC 6749 `invalid_client` error, never a fabricated token.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenBodyInput"}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/agents":{"post":{"operationId":"createAgent","summary":"Register an agent under the caller (or their active agent_operator org)","tags":["agents"],"description":"Principal is the caller's session, or their active organization when it is an `agent_operator` org (same 'active org' convention as `POST /v1/orgs/{id}/api-keys`) — never any other org kind. `id` is the supplied `didKey`, or a generated `agent_<uuid>`. Creates a real `apiKeys` row (scopes `agents:write`, `bounties:write`, `proof:verify`) and returns the raw key **once** — store it now, it is never retrievable again. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/agents/{id}/policy":{"get":{"operationId":"getAgentPolicy","summary":"The agent's own spend policy","tags":["agents"],"description":"Readable by the agent's own API key, or by its principal (session).","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPolicy"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"operationId":"updateAgentPolicy","summary":"Update the agent's spend policy","tags":["agents"],"description":"Principal-only (owner/admin of the principal org, or the principal user) — never the agent's own key, so an agent can never raise its own spending limit. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPolicyUpdateBodyInput"}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPolicy"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties":{"post":{"operationId":"createBounty","summary":"Post a bounty (real content-rule check; blocked bounties are recorded, not silently dropped)","tags":["bounties"],"description":"Caller is a signed-in principal (web) or an agent API key (`bounties:write` scope). An agent-posted bounty additionally requires a body `mandate`, verified via a real ES256 JWS check and checked against the real trailing-24h spend policy — a failed mandate or policy check 403s with the real reason, no row written. On success, `checkBountyContent` always runs; any real violation 403s with the rule code(s) cited and the bounty is still created (`status: 'cancelled'`) with the result attached for audit. A clean bounty is created `pending_funding`, ready to fund. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBountyBodyInput"}}}},"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyDetail"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]},"get":{"operationId":"listBounties","summary":"Public list of open bounties","tags":["bounties"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","minLength":2,"maxLength":2},"in":"query","name":"country","required":false},{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"minPriceAmountMinor","required":false},{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"maxPriceAmountMinor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountiesList"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/fund":{"post":{"operationId":"fundBounty","summary":"Fund a bounty (pending_funding -> funded -> open)","tags":["bounties"],"description":"Real Stripe PaymentIntent (manual capture, captured immediately) or an x402 funding intent, per `rail`. Honestly blocked (503 `stripe-unconfigured`/`x402-unconfigured`) while credentials are unset — the one real funding boundary this environment cannot cross. On real success: a real `ledger_entries` row (`kind: 'fund'`), then `funded -> open` in the same call. Poster/principal only. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundBountyBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyDetail"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}":{"get":{"operationId":"getBounty","summary":"Bounty detail — public for open/accepted/submitted, full for the poster/principal","tags":["bounties"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyDetail"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/applicants":{"get":{"operationId":"listBountyApplicants","summary":"Applicants for one bounty — poster/principal only","tags":["bounties"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyApplicantsList"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/apply":{"post":{"operationId":"applyToBounty","summary":"Apply with real Proof shares satisfying requiredProofPolicy","tags":["bounties"],"description":"Verifies each real `proof_shares` row (ownership, non-revoked, matching type/freshness) against `requiredProofPolicy` before writing. `maxApplicants` enforced. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyToBountyBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyApplication"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/accept":{"post":{"operationId":"acceptApplicant","summary":"Accept one applicant, reject the rest (open -> accepted). Poster/principal only.","tags":["bounties"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptApplicantBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyDetail"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/submissions":{"post":{"operationId":"createBountySubmission","summary":"Submit deliverables (accepted -> submitted). The accepted earner only.","tags":["bounties"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubmissionBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyDetail"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/submissions/{sid}/approve":{"post":{"operationId":"approveSubmission","summary":"Approve a submission (submitted -> approved), then release funds (approved -> released)","tags":["bounties"],"description":"Poster/principal only. Marks the deliverable approved for real, then attempts the real release (Stripe capture+transfer, or x402) — honestly blocked (503) while unconfigured, in which case the bounty is left `approved` (accepted, payout pending real credentials), never silently stuck at `submitted`. On real success: two `ledger_entries` rows (`release` to the earner, `fee` to the platform). Idempotency-Key required.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"sid","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyDetail"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/disputes":{"post":{"operationId":"openBountyDispute","summary":"Open a dispute (submitted -> disputed). Either side — a human principal via session, or an agent (whose API key resolves to its principal) via Bearer.","tags":["bounties"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDisputeBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dispute"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/bounties/{id}/cancel":{"post":{"operationId":"cancelBounty","summary":"Cancel a bounty. Poster/principal only, only from a cancellable state. Refunds if already funded.","tags":["bounties"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BountyDetail"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/disputes":{"get":{"operationId":"listAdminDisputes","summary":"Curator/admin dispute-review queue","tags":["bounties"],"description":"Every dispute joined with its bounty title/price, newest first. `status` narrows to open/resolved; omitted returns every dispute.","parameters":[{"schema":{"type":"string","enum":["open","resolved"]},"in":"query","name":"status","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDisputesListResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/disputes/{id}/resolve":{"post":{"operationId":"resolveDispute","summary":"Curator/admin resolves a dispute: release, partial, or refund","tags":["bounties"],"description":"Real Stripe refund/release call per outcome — honestly blocked (503) while unconfigured. Writes the real ledger_entries row(s). Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveDisputeBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dispute"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/listings/verify":{"post":{"operationId":"verifyListing","summary":"Check a URL or raw text for real scam signals, with evidence","tags":["registry"],"description":"Fetches the URL live (robots-respecting) or scans the supplied text, and runs every real scam-signature rule (`@openmoney/scoring`). A flag never exists without a matched excerpt/lookup — no flags does not mean \"safe\", it means the current rule set found nothing. Also accepts a real `X-PAYMENT` header (x402) as an alternative, keyless access path — honestly 402 while x402 is unconfigured in this environment.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyListingBodyInput"}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyListingResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/orgs/{id}/usage":{"get":{"operationId":"getOrgUsage","summary":"Real usage for one org's current (or requested) billing period","tags":["billing"],"description":"Session (a member of the org) or the org's own agent key. Defaults to the current UTC calendar month. When Stripe is configured and the org's active API-key tier has a real, currently-active metered Price, every money field is populated from it; otherwise every money field is honestly `null` — real usage, no invented cost.","parameters":[{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"in":"query","name":"periodStart","required":false},{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"in":"query","name":"periodEnd","required":false},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"security":[{"sessionCookie":[]},{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummary"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/billing/pricing":{"get":{"operationId":"getBillingPricing","summary":"Real Stripe Prices/Products for the public pricing page","tags":["billing"],"description":"Honestly `stripe-unconfigured` (503) when no Stripe key exists in this environment — the pricing page renders that state, never invented numbers.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingPricingResponse"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/billing/subscription":{"get":{"operationId":"getMySubscription","summary":"The signed-in user's own Earner Plus subscription","tags":["billing"],"description":"Their most recent real `subscriptions` row, whatever its status — `null` when they have never subscribed. Earner Plus is always per-user (never org-billed); this never reads another user's row.","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MySubscriptionResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/billing/checkout":{"post":{"operationId":"createBillingCheckout","summary":"Real Stripe Checkout Session URL for Earner Plus","tags":["billing"],"description":"`priceId` must be one of the real, currently-active ids `GET /v1/billing/pricing` just listed — any other id, even syntactically valid, is rejected so a client can never charge an arbitrary Stripe price. Creates/reuses the caller's `stripe_customers` row. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/billing/portal":{"post":{"operationId":"createBillingPortal","summary":"Real Stripe Customer Portal URL — the one-click-cancel channel","tags":["billing"],"description":"Requires an existing `stripe_customers` row (subscribe via POST /v1/billing/checkout first). Idempotency-Key required.","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBillingPortalResponse"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/billing/webhook":{"post":{"operationId":"billingWebhook","summary":"Real Stripe Billing webhook receiver (distinct signing secret from Connect's webhook)","tags":["billing"],"description":"Verifies the real signature against STRIPE_BILLING_WEBHOOK_SECRET, then for each of SUBSCRIPTION_CONFIRMATION_EVENTS sends the real confirmation email and upserts subscriptions/stripe_customers, validating every status write through assertTransition first. An illegal transition is logged and rejected with 500 so Stripe retries — never silently applied.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingWebhookAck"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited — retry after the `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/rankings":{"get":{"operationId":"listRankings","summary":"Published rankings report periods","tags":["rankings"],"description":"Every real, published `rankings_reports` period, newest first — backs the report index and RSS/changelog-style discovery.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankingsList"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/rankings/{period}":{"get":{"operationId":"getRankingsReport","summary":"One published rankings report","tags":["rankings"],"description":"The real, immutable snapshot for this period — `@openmoney/rankings`'s own `RankingsReport` plus its real `Mover[]` and methodology version. 404 when the period has not been published yet (a real absence, not \"insufficient evidence\").","parameters":[{"schema":{"type":"string","pattern":"^\\d{4}-q[1-4]$"},"in":"path","name":"period","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankingsReport"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/rankings/{period}.csv":{"get":{"operationId":"getRankingsReportCsv","summary":"Rankings report CSV (redirect)","tags":["rankings"],"description":"Redirects to the real, already-generated CSV for this period (`rankings_reports.csvDocumentId`) — the same file the worker job rendered, byte-identical on every download. 404 if no report has been published for this period; 503 if storage is not configured.","parameters":[{"schema":{"type":"string","pattern":"^\\d{4}-q[1-4]$"},"in":"path","name":"period","required":true}],"responses":{"303":{"description":"Redirect to the real file in storage"},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/rankings/{period}.pdf":{"get":{"operationId":"getRankingsReportPdf","summary":"Rankings report PDF (redirect)","tags":["rankings"],"description":"Redirects to the real, already-generated PDF for this period (`rankings_reports.pdfDocumentId`), never generated on request. 404 if no report has been published for this period; 503 if storage is not configured.","parameters":[{"schema":{"type":"string","pattern":"^\\d{4}-q[1-4]$"},"in":"path","name":"period","required":true}],"responses":{"303":{"description":"Redirect to the real file in storage"},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/datasets":{"get":{"operationId":"listDatasets","summary":"Available dataset snapshots","tags":["datasets"],"description":"Every real, published `dataset_snapshots` row (registry CSV and Parquet exports), newest first.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetsList"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/datasets/{id}/download":{"get":{"operationId":"downloadDataset","summary":"Download a dataset snapshot (redirect)","tags":["datasets"],"description":"Redirects (303) to the real file in storage for this dataset snapshot — signed URL redirect, same pattern `documents` downloads already use. 404 if the id does not exist; 503 if storage is not configured.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true}],"responses":{"303":{"description":"Redirect to the real file in storage"},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/reports":{"post":{"operationId":"createReport","summary":"File a report against a real provider, opportunity, bounty, message, or Proof presentation","tags":["reports"],"description":"Verifies the real subject exists first for `provider`/`opportunity`/`bounty` subjectTypes (real 404 if not — never a report against nothing); `message`/`proof_presentation` have no dedicated table in this schema yet, so those are accepted on the caller's word (see `services/moderation.ts`). Creates a real `reports` row, `status: 'open'`. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/moderation/queue":{"get":{"operationId":"adminModerationQueue","summary":"Moderation queue: real reports, oldest first, with real fraud-signal context","tags":["moderation"],"description":"Real `reports` rows, oldest-`createdAt`-first (mirrors `GET /v1/admin/audit`'s keyset-pagination convention, direction flipped — a moderator working the default, unfiltered view sees the oldest report first; combined with `?status=open` this literally is \"oldest-open-first\"). Each item carries its real `moderationDecisions` row as `decision` (null until `resolved` — a report has at most one, since `resolved`/`dismissed` are both terminal) and real, non-blocking fraud-signal context from `@openmoney/trust-safety` (`fraud-signals.ts`): the reporter's own report-submission velocity, any real duplicate-account cluster their recent `device_signals` participate in, and — only for `subjectType: \"bounty\"` reports — the real bounty poster's own posting velocity. None of this ever blocks or restricts anything by itself.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","enum":["open","queued","resolved","dismissed"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","enum":["provider","opportunity","bounty","message","proof_presentation"]},"in":"query","name":"subjectType","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationQueueResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/moderation/{reportId}/queue":{"post":{"operationId":"adminQueueReport","summary":"Pick up a report for review (open -> queued)","tags":["moderation"],"description":"Real `open -> queued` transition via `@openmoney/trust-safety`'s `assertTransition`. Idempotency-Key required.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"reportId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/moderation/{reportId}/decide":{"post":{"operationId":"adminDecideReport","summary":"Record a real human moderation decision (queued -> resolved)","tags":["moderation"],"description":"Writes a real `moderation_decisions` row with `reviewerUserId: req.auth.user.id` — `assertHumanReviewed` runs before the insert (defense-in-depth alongside the schema's own `NOT NULL`; PRD §7.2's adverse-action rule: every decision here is a real, attributed human judgment, never automated). Real `queued -> resolved` transition. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecideReportBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"reportId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecideReportResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/moderation/{reportId}/dismiss":{"post":{"operationId":"adminDismissReport","summary":"Dismiss a report — no action warranted (open|queued -> dismissed)","tags":["moderation"],"description":"Real `open|queued -> dismissed` transition. The real dismissal reason is written to the audit log's own `reason` field (`reports` has no separate reason column). Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DismissReportBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"reportId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/moderation/{decisionId}/appeal":{"post":{"operationId":"fileAppeal","summary":"Appeal a real moderation decision — the decision's report's reporter, the bounty's real principal (when the decision's report targeted a bounty), or an admin/curator","tags":["moderation"],"description":"Session auth. Who may appeal is deliberately scoped to what this schema can really verify: the report's own `reporterUserId`, the real principal of the bounty when `subjectType` is `\"bounty\"` (`bountyPostedByPrincipal`, reused from `services/settlement.ts`), or an admin/curator acting on someone's behalf — a provider/opportunity/message/proof_presentation report has no single real per-user owner in this schema to check against. Creates a real `appeals` row, `appellantUserId: req.auth.user.id`. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileAppealBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"decisionId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Appeal"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/appeals":{"get":{"operationId":"adminAppealsQueue","summary":"Appeals queue: every real appeal, oldest first","tags":["moderation"],"description":"Real `appeals` rows, oldest-`createdAt`-first (same keyset-pagination convention as `GET /v1/admin/moderation/queue` and `GET /v1/admin/audit`). Documented gap: `docs/api/phase-7-contract.md` only spells out `POST /v1/admin/appeals/{appealId}/resolve`, not this listing route — added because `apps/web`'s admin/curator appeals queue (`AppealsQueue.tsx`) needs a real list to resolve against and none existed.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppealsListResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/appeals/{appealId}/resolve":{"post":{"operationId":"resolveAppeal","summary":"Resolve an appeal with a real, different reviewer","tags":["moderation"],"description":"Real `assertAppealReviewerDiffers` check before writing — a real 403 (`appeal-same-reviewer`) if the caller made the original decision (PRD §7.2: \"appeals with a different reviewer\"). The resolver's own rationale (`reason`) is written to the audit log, alongside the appellant's original `appeals.reason`, which is left untouched. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveAppealBodyInput"}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"appealId","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Appeal"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/transparency":{"get":{"operationId":"listTransparencyCounts","summary":"Published monthly transparency counts","tags":["transparency"],"description":"Every real, published `transparency_counts_snapshots` row, newest period first — real counts only, no live-computed numbers mixed in with historical ones (`apps/worker/src/jobs/transparency-counts.ts` is the only writer).","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransparencyList"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/link-submissions":{"post":{"operationId":"createLinkSubmission","summary":"Queue a link for a curator to review — no automatic fetch or analysis","tags":["discovery"],"description":"Session auth (so there is a real person to notify once it is reviewed). Creates a real `link_submissions` row, `status: \"queued\"`; nothing is fetched or analyzed at submission time. Idempotency-Key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkSubmissionBodyInput"}}}},"security":[{"sessionCookie":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSubmission"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}]}},"/v1/admin/link-submissions":{"get":{"operationId":"adminListLinkSubmissions","summary":"Every real link submission, oldest first","tags":["discovery"],"description":"Same keyset-pagination convention as `GET /v1/admin/appeals` and `GET /v1/admin/moderation/queue`.","parameters":[{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"default":25,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSubmissionsListResponse"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/link-submissions/{id}/review":{"post":{"operationId":"adminReviewLinkSubmission","summary":"Mark a link submission reviewed (queued -> reviewed)","tags":["discovery"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSubmission"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/link-submissions/{id}/dismiss":{"post":{"operationId":"adminDismissLinkSubmission","summary":"Dismiss a link submission — no action warranted","tags":["discovery"],"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"id","required":true},{"name":"Idempotency-Key","in":"header","required":false,"description":"UUID chosen by the client. The server rejects mutating requests that omit it (400 `idempotency-key-required`); the generated SDK (@openmoney/api-client) adds one automatically, which is why it is not marked required here. The first response is stored for 24 hours and replayed for the same key with `Idempotent-Replayed: true`.","schema":{"type":"string","format":"uuid"}}],"security":[{"sessionCookie":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSubmission"}}}},"400":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Default Response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Unexpected error. The `requestId` and `traceId` identify the failure in logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"servers":[{"url":"https://api.openmoney.ai","description":"production environment"}],"tags":[{"name":"health","description":"Liveness and dependency checks."},{"name":"status","description":"Provider configuration status (sandbox/live/unconfigured)."},{"name":"registry","description":"Public registry measurements. Every figure is an EvidenceValue."},{"name":"auth","description":"Passkeys (WebAuthn), magic links, and sessions."},{"name":"me","description":"The signed-in user: profile, devices, passkeys, consent ledger."},{"name":"orgs","description":"Organizations, membership, and scoped API keys."},{"name":"admin","description":"Operator routes: providers, flags, jobs, sources, audit."},{"name":"sources","description":"Public list of evidence sources with reachability."},{"name":"agents","description":"Agent principals, spend policies, bounties, and OAuth 2.1 client credentials (PRD §5)."},{"name":"bounties","description":"Funded, Proof-gated task bounties: post, apply, accept, submit, approve, dispute (PRD §5.5)."},{"name":"ledger","description":"Real Stripe/x402 money movements (PRD §5.6). Never a computed balance."},{"name":"rankings","description":"Open Opportunity Rankings: quarterly reports, movers, CSV/PDF downloads (PRD §6.2)."},{"name":"datasets","description":"Downloadable, versioned registry dataset snapshots — CSV and Parquet (PRD §6.3)."}]}