{"components":{"responses":{"ErrorResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Request failed; error.code is stable for callers."}},"schemas":{"ErrorEnvelope":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"details":{},"message":{"type":"string"},"requestId":{"type":"string"}},"required":["code","message","requestId"],"type":"object"}},"required":["error"],"type":"object"},"SuccessEnvelope":{"additionalProperties":false,"properties":{"data":{},"requestId":{"type":"string"}},"required":["data","requestId"],"type":"object"}},"securitySchemes":{"apiKeyHeader":{"in":"header","name":"X-API-Key","type":"apiKey"},"bearerApiKey":{"bearerFormat":"Shortlink API key","scheme":"bearer","type":"http"}}},"info":{"description":"Stable versioned API for organization-bound short links, live codes, analytics, and asynchronous exports. API keys select exactly one organization and never accept client-supplied tenant switching. All create operations require Idempotency-Key; successful responses are replayed for 24 hours and a changed payload returns 409. Quotas reset at 00:00 UTC.","title":"Shortlink Professional API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/exports":{"get":{"operationId":"listExports","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"List asynchronous export jobs","x-required-scope":"exports:read","parameters":[{"description":"One-based result page.","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Results per page.","in":"query","name":"pageSize","required":false,"schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}]},"post":{"operationId":"createExport","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Create an asynchronous CSV export","x-required-scope":"exports:write","parameters":[{"description":"Caller-generated key retained for 24 hours (8-128 characters: letters, digits, dot, underscore, colon, or hyphen).","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":8,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"exportType":{"enum":["SHORT_LINKS","SHORT_LINK_ANALYTICS","LIVE_CODES","LIVE_CODE_ITEMS","LIVE_CODE_ANALYTICS","ORDERS","USAGE_LEDGER","AUDIT_LOGS"],"type":"string"},"filters":{"additionalProperties":false,"properties":{"from":{"format":"date-time","type":"string"},"statuses":{"items":{"maxLength":64,"type":"string"},"maxItems":20,"type":"array","uniqueItems":true},"to":{"format":"date-time","type":"string"}},"type":"object"},"format":{"default":"CSV","enum":["CSV"],"type":"string"}},"required":["exportType"],"type":"object"}}},"required":true}}},"/exports/{id}":{"delete":{"operationId":"deleteExport","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Delete an export job and its file","x-required-scope":"exports:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]},"get":{"operationId":"getExport","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Get an export job","x-required-scope":"exports:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}]}},"/exports/{id}/cancel":{"post":{"operationId":"cancelExport","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Cancel a pending or running export","x-required-scope":"exports:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]}},"/exports/{id}/download-url":{"post":{"operationId":"createExportDownloadUrl","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Create a short-lived signed download URL","x-required-scope":"exports:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]}},"/live-codes":{"get":{"operationId":"listLiveCodes","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"List live codes","x-required-scope":"live_codes:read","parameters":[{"description":"One-based result page.","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Results per page.","in":"query","name":"pageSize","required":false,"schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}]},"post":{"operationId":"createLiveCode","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Create a live code","x-required-scope":"live_codes:write","parameters":[{"description":"Caller-generated key retained for 24 hours (8-128 characters: letters, digits, dot, underscore, colon, or hyphen).","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":8,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"description":{"maxLength":500,"type":"string"},"domainId":{"format":"uuid","type":"string"},"expiresAt":{"format":"date-time","nullable":true,"type":"string"},"slug":{"maxLength":32,"minLength":4,"type":"string"},"stickyEnabled":{"default":true,"type":"boolean"},"stickyTtlSeconds":{"default":86400,"minimum":60,"type":"integer"},"strategy":{"default":"SEQUENTIAL","enum":["SEQUENTIAL","WEIGHTED_RANDOM","ROUND_ROBIN"],"type":"string"},"title":{"maxLength":160,"minLength":1,"type":"string"},"type":{"enum":["NORMAL","GROUP","CUSTOMER_SERVICE"],"type":"string"}},"required":["title","type"],"type":"object"}}},"required":true}}},"/live-codes/{id}":{"get":{"operationId":"getLiveCode","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Get a live code","x-required-scope":"live_codes:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}]},"patch":{"operationId":"updateLiveCode","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Update a live code","x-required-scope":"live_codes:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}},"required":true}}},"/live-codes/{id}/analytics":{"get":{"operationId":"getLiveCodeAnalytics","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Get live-code analytics","x-required-scope":"analytics:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}]}},"/live-codes/{id}/items":{"get":{"operationId":"listLiveCodeItems","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"List live-code items","x-required-scope":"live_codes:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}]},"post":{"operationId":"addLiveCodeItem","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Add a live-code item","x-required-scope":"live_codes:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Caller-generated key retained for 24 hours (8-128 characters: letters, digits, dot, underscore, colon, or hyphen).","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":8,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"assetId":{"format":"uuid","type":"string"},"maxAssignments":{"minimum":1,"nullable":true,"type":"integer"},"name":{"maxLength":160,"minLength":1,"type":"string"},"targetUrl":{"format":"uri","maxLength":2048,"nullable":true,"type":"string"},"validFrom":{"format":"date-time","nullable":true,"type":"string"},"validUntil":{"format":"date-time","nullable":true,"type":"string"},"weight":{"default":1,"maximum":10000,"minimum":1,"type":"integer"}},"required":["assetId","name"],"type":"object"}}},"required":true}}},"/live-codes/{id}/items/{itemId}":{"patch":{"operationId":"updateLiveCodeItem","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Update a live-code item","x-required-scope":"live_codes:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"itemId","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}},"required":true}}},"/live-codes/{id}/items/{itemId}/mark-full":{"post":{"operationId":"markLiveCodeItemFull","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Mark a live-code item full","x-required-scope":"live_codes:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"itemId","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]}},"/live-codes/{id}/items/{itemId}/replace":{"post":{"operationId":"replaceLiveCodeItem","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Replace a live-code item asset","x-required-scope":"live_codes:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"itemId","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"assetId":{"format":"uuid","type":"string"},"name":{"maxLength":160,"minLength":1,"type":"string"}},"required":["assetId"],"type":"object"}}},"required":true}}},"/live-codes/{id}/pause":{"post":{"operationId":"pauseLiveCode","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Pause a live code","x-required-scope":"live_codes:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]}},"/live-codes/{id}/resume":{"post":{"operationId":"resumeLiveCode","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Resume a live code","x-required-scope":"live_codes:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]}},"/short-links":{"get":{"operationId":"listShortLinks","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"List short links","x-required-scope":"short_links:read","parameters":[{"description":"One-based result page.","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Results per page.","in":"query","name":"pageSize","required":false,"schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}]},"post":{"operationId":"createShortLink","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Create a short link","x-required-scope":"short_links:write","parameters":[{"description":"Caller-generated key retained for 24 hours (8-128 characters: letters, digits, dot, underscore, colon, or hyphen).","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":8,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"description":{"maxLength":500,"type":"string"},"domainId":{"format":"uuid","type":"string"},"expiresAt":{"format":"date-time","nullable":true,"type":"string"},"slug":{"maxLength":32,"minLength":4,"type":"string"},"targetUrl":{"maxLength":2048,"type":"string"},"title":{"maxLength":160,"type":"string"}},"required":["targetUrl"],"type":"object"}}},"required":true}}},"/short-links/{id}":{"delete":{"operationId":"deleteShortLink","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Delete a short link","x-required-scope":"short_links:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]},"get":{"operationId":"getShortLink","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Get a short link","x-required-scope":"short_links:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}]},"patch":{"operationId":"updateShortLink","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Update a short link","x-required-scope":"short_links:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}},"required":true}}},"/short-links/{id}/analytics":{"get":{"operationId":"getShortLinkAnalytics","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Get short-link analytics","x-required-scope":"analytics:read","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}]}},"/short-links/{id}/pause":{"post":{"operationId":"pauseShortLink","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Pause a short link","x-required-scope":"short_links:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]}},"/short-links/{id}/resume":{"post":{"operationId":"resumeShortLink","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope"}}},"description":"Successful response"},"400":{"$ref":"#/components/responses/ErrorResponse"},"401":{"$ref":"#/components/responses/ErrorResponse"},"403":{"$ref":"#/components/responses/ErrorResponse"},"404":{"$ref":"#/components/responses/ErrorResponse"},"409":{"$ref":"#/components/responses/ErrorResponse"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate or UTC daily quota exceeded.","headers":{"Retry-After":{"description":"Seconds until the caller should retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Effective requests-per-second limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current second.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current second bucket resets.","schema":{"type":"integer"}}}}},"summary":"Resume a short link","x-required-scope":"short_links:write","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Optional correlation identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"type":"string"}}]}}},"security":[{"apiKeyHeader":[]},{"bearerApiKey":[]}],"servers":[{"url":"/api/open/v1"}],"tags":[{"name":"Short links"},{"name":"Live codes"},{"name":"Analytics"},{"name":"Exports"}],"x-api-key-scopes":{"analytics:read":"Read organization-scoped analytics.","assets:read":"Read organization-scoped asset metadata.","assets:write":"Create and update organization-scoped assets.","billing:read":"Read billing and entitlement summaries; billing writes are never granted.","exports:read":"Read export jobs and obtain short-lived downloads.","exports:write":"Create and manage asynchronous export jobs.","live_codes:read":"Read live codes and items.","live_codes:write":"Create and manage live codes and items.","short_links:read":"Read short links.","short_links:write":"Create and manage short links.","webhooks:read":"Read webhook endpoints and deliveries.","webhooks:write":"Create and manage webhook endpoints and replay deliveries."},"x-curl-example":"curl --request GET \\\n  --url 'https://api.example.test/api/open/v1/short-links?page=1&pageSize=20' \\\n  --header 'Authorization: Bearer sk_live_example_REDACTED' \\\n  --header 'X-Request-Id: example-request-id'","x-environments":{"live":"Production accepts sk_live_ keys.","test":"Development and test environments accept sk_test_ keys."},"x-webhook-signature":{"algorithm":"HMAC-SHA256","headers":["X-Webhook-Id","X-Webhook-Timestamp","X-Webhook-Signature","X-Webhook-Event","X-Webhook-Attempt"],"signedBytes":"HMAC(secret, delivery_id + \".\" + unix_timestamp + \".\" + exact_request_body)","toleranceSeconds":300}}