{"openapi":"3.1.0","info":{"title":"Nextstep job tracker public API","version":"1.0.0","description":"Read-only product metadata and fictional sandbox data. No user data is exposed. Use /api/v1/; legacy aliases remain supported. Breaking changes require a new major URL version, with at least 180 days of deprecation notice before retirement. See /docs/versioning for Deprecation and Sunset header conventions.","contact":{"name":"Nextstep support","url":"https://nextstep.fans/contact","email":"support@nextstep.fans"}},"servers":[{"url":"https://nextstep.fans"}],"externalDocs":{"description":"Nextstep API reference, errors and versioning policy","url":"https://nextstep.fans/docs"},"security":[],"paths":{"/api/v1/capabilities":{"get":{"operationId":"getNextstepCapabilitiesV1","summary":"Read Nextstep job tracker capabilities and integration links.","description":"Read Nextstep job tracker capabilities and integration links. Version 1 public API. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capabilities"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/capabilities":{"get":{"operationId":"getNextstepCapabilities","summary":"Read Nextstep job tracker capabilities and integration links.","description":"Read Nextstep job tracker capabilities and integration links. Supported legacy alias for the version 1 endpoint; prefer /api/v1/ for new integrations. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capabilities"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/stages":{"get":{"operationId":"getNextstepStagesV1","summary":"Read valid application stages and assessment statuses.","description":"Read valid application stages and assessment statuses. Version 1 public API. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stages"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/stages":{"get":{"operationId":"getNextstepStages","summary":"Read valid application stages and assessment statuses.","description":"Read valid application stages and assessment statuses. Supported legacy alias for the version 1 endpoint; prefer /api/v1/ for new integrations. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stages"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/sandbox/applications":{"get":{"operationId":"listNextstepSandboxApplicationsV1","summary":"List fictional applications for read-only integration testing. These are not user records.","description":"List fictional applications for read-only integration testing. These are not user records. Version 1 public API. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of fictional applications to return.","schema":{"type":"integer","minimum":1,"maximum":3,"default":3}}],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxApplications"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/sandbox/applications":{"get":{"operationId":"listNextstepSandboxApplications","summary":"List fictional applications for read-only integration testing. These are not user records.","description":"List fictional applications for read-only integration testing. These are not user records. Supported legacy alias for the version 1 endpoint; prefer /api/v1/ for new integrations. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum number of fictional applications to return.","schema":{"type":"integer","minimum":1,"maximum":3,"default":3}}],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxApplications"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/health":{"get":{"operationId":"getNextstepHealthV1","summary":"Check database availability. This is not a service-level guarantee.","description":"Check database availability. This is not a service-level guarantee. Version 1 public API. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/health":{"get":{"operationId":"getNextstepHealth","summary":"Check database availability. This is not a service-level guarantee.","description":"Check database availability. This is not a service-level guarantee. Supported legacy alias for the version 1 endpoint; prefer /api/v1/ for new integrations. Versioning and deprecation policy: https://nextstep.fans/docs/versioning.","security":[],"tags":["Public API v1"],"parameters":[],"responses":{"200":{"description":"Successful response.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"400":{"description":"Error: invalid_request. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error: forbidden. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error: not_found. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error: method_not_allowed. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error: payload_too_large. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error: unsupported_media_type. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error: rate_limited. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Error: internal_error. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error: unavailable. See /docs/errors for handling guidance.","headers":{"API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"headers":{"ApiVersion":{"description":"Major public API version.","schema":{"type":"string","const":"1"}},"RateLimitPolicy":{"description":"Structured Fields quota policy per draft-ietf-httpapi-ratelimit-headers-11. Shared by public endpoints and legacy aliases, per client network and server process.","schema":{"type":"string"},"example":"\"public-read\";q=300;w=60"},"RateLimit":{"description":"Structured Fields quota status: r is remaining requests; t is seconds until reset. Honor Retry-After when present.","schema":{"type":"string"},"example":"\"public-read\";r=299;t=60"},"RetryAfter":{"description":"Delay in seconds before retrying. Present on 429 and temporary capacity/draining 503 responses.","schema":{"type":"integer","minimum":1},"example":60}},"schemas":{"Error":{"type":"object","additionalProperties":false,"required":["code","message","error"],"properties":{"code":{"type":"string","enum":["invalid_request","forbidden","not_found","method_not_allowed","payload_too_large","unsupported_media_type","rate_limited","internal_error","unavailable"],"description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation. Do not use this text for program logic."},"error":{"type":"string","description":"Backward-compatible alias of message."},"status":{"type":"string","const":"unavailable","description":"Retained on database health failures."},"documentation":{"type":"string","format":"uri-reference"}}},"Capabilities":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Product name."},"description":{"type":"string","description":"Product purpose."},"url":{"type":"string","format":"uri"},"features":{"type":"array","items":{"type":"string"},"description":"Available core product features."},"authentication":{"type":"object","additionalProperties":false,"properties":{"publicApi":{"type":"string","const":"none"},"workspace":{"type":"string","const":"browser session"},"apiKeysAvailable":{"type":"boolean","const":false}},"required":["publicApi","workspace","apiKeysAvailable"]},"links":{"type":"object","additionalProperties":false,"properties":{"documentation":{"type":"string","format":"uri"},"developers":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"instructions":{"type":"string","format":"uri"},"sandbox":{"type":"string","format":"uri"}},"required":["documentation","developers","openapi","instructions","sandbox"]}},"required":["name","description","url","features","authentication","links"]},"Stages":{"type":"object","additionalProperties":false,"properties":{"stages":{"type":"array","items":{"type":"string","enum":["Pending","Applied","Online assessment","Interview","Offer","Rejected","Withdrawn"]}},"assessmentStatuses":{"type":"array","items":{"type":"string","enum":["Pending","In progress","Done","Not completed"]}}},"required":["stages","assessmentStatuses"]},"SandboxApplications":{"type":"object","additionalProperties":false,"properties":{"sandbox":{"type":"boolean","const":true},"applications":{"type":"array","maxItems":3,"items":{"$ref":"#/components/schemas/SandboxApplication"}}},"required":["sandbox","applications"]},"SandboxApplication":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","description":"Stable fictional sample ID."},"company":{"type":"string","description":"Fictional company name."},"role":{"type":"string","description":"Example job title."},"status":{"type":"string","enum":["Pending","Applied","Online assessment","Interview","Offer","Rejected","Withdrawn"]},"workMode":{"type":"string","enum":["Remote","Hybrid","On-site","Not specified"]}},"required":["id","company","role","status","workMode"]},"Health":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","const":"ok"}},"required":["status"]}}}}