# info.summary
Read-only endpoints of the Arraya gamified programming-learning platform.

# info.description
Hand-maintained description of the endpoints of arraya.com.br that are readable without any credential. It deliberately does not describe the authenticated surface (progress, submissions, organizations, admin), which is documented for humans and agents in /auth.md.

All paths are relative to the same-origin `/api` prefix: the browser and any agent should call `https://arraya.com.br/api/...`, never the backend deployment host directly.

Responses are JSON. Text fields are mostly Brazilian Portuguese; the interface itself is available in pt-br and en.

# servers[].description
Production, reached same-origin through the /api rewrite

# paths./health.get.description
Returns 200 when the API can reach its database and 503 when it cannot. Cheap to call; use it before a batch of requests instead of probing a data endpoint.

# paths./health.get.responses.503.description
API is up but a dependency is unreachable

# paths./phases/.get.description
Paginated list of published phases, ordered by like count and then by id.

# paths./phases/.get.parameters[].description
Game mode. Only narrows the like counts and the completion flag, not the phase list itself.

# paths./phases/.get.parameters[].description
Keeps only phases that ship a reference solution in this programming language.

# paths./phases/.get.parameters[].description
Substring match on the title. For typo-tolerant search use /phases/search.

# paths./phases/search.get.description
Accent- and case-insensitive fuzzy match on the phase title, capped at 20 results. Prefer this over the `search` filter of /phases/ when the query may be misspelled.

# paths./phases/daily.get.description
The phase featured for the current date in the America/Sao_Paulo timezone. Stable for the whole day.

# paths./phases/{phase_identifier}.get.description
Accepts either the numeric id or the slug. Includes the grid, the target path and the reference solution in each language the phase supports.

# paths./phases/{phase_identifier}.get.parameters[].description
Numeric id or slug, for example `condicionais-1`.

# paths./challenges/.get.parameters[].description
Typo-tolerant match on the challenge title.

# paths./challenges/{challenge_id}.get.description
Includes the statement and the public test cases. Hidden test cases are never returned.

# paths./users/ranking.get.description
Ties are broken by who reached the score first.

# paths./users/popular.get.summary
Ranking by likes received on the profile

# paths./users/{username}.get.description
Never returns the e-mail address or any other personal datum beyond what the user chose to publish.

# components.schemas.Difficulty.description
Worth 5, 10, 15 and 20 points respectively.

# components.schemas.World.description
The seven official concept worlds plus `community` for player-created phases. The slugs are unaccented Portuguese.

# components.schemas.Mode.description
`steps` asks the player to trace the given code step by step (shown as "Seguir" in the interface), `write` asks them to write code the backend executes ("Escrever"), and `code` is the input/output challenge mode ("Desafios"). The user-facing URLs use the Portuguese names; the API uses these.

# components.schemas.PhaseListItem.properties.user_completed.description
Always false for an unauthenticated caller.

# components.schemas.Phase.properties.grid.description
8x8 board. Each cell is an integer tile code.

# components.schemas.Phase.properties.code.description
Reference Python solution, one line per entry.

# components.schemas.DailyPhase.properties.date.description
Date in America/Sao_Paulo this pick is for.