# Fundamentals

> Define a contract, write its handlers, and make your first client call.

## Documentation

- [API contracts](https://hulla.dev/docs/api/core/contracts.md): Define the routes, inputs, and responses that your server and client share.
- [Implementing the server](https://hulla.dev/docs/api/core/servers.md): Write handlers for your contract and call the finished server.
- [Server context & middleware](https://hulla.dev/docs/api/core/server-context.md): Share request data between handlers and add checks with middleware.
- [Organizing server code](https://hulla.dev/docs/api/core/server-composition.md): Split a large API into smaller handler files or separately mounted fragments.
- [Request and response data](https://hulla.dev/docs/api/core/request-transport.md): Turn URL parameters, headers, and request bodies into values your handlers can use.
- [Validation and serialization](https://hulla.dev/docs/api/core/value-round-trips.md): Choose how values such as dates and URLs travel between your client and server.
- [Error handling](https://hulla.dev/docs/api/core/errors.md): Handle expected API errors and diagnose unexpected failures.
- [Calling the API](https://hulla.dev/docs/api/core/clients.md): Call your API with typed input and handle the response by status.
