At this point, the connection is established, and you may send requests.
### Flags
When connecting, the pipe provides a welcome message with a series of flags.
Advanced clients may request a list of connection flags when calling `Civi::pipe()`. Connection flags are useful for both *reporting* about the
connection and *requesting* specific features.
For example, this requests two flags (`v`, `u`) and receives a welcome message:
```php
Civi::pipe("vu");
```
```js
{"Civi::pipe":{"v":"5.46.alpha1","u":"untrusted"}
```
The `v` flag reports on the active CiviCRM version. The `u` flag marks the session as *untrusted* (which ensures that API calls must enforce permissions).
Valid flags are:
*`v` (*version*): Report the CiviCRM version. Ex: `"v":"5.48.0"`
*`j` (*json-rpc*): Report supported flavors of JSON-RPC. Ex: `"j":["jsonrpc-2.0"]`
*`l` (*login*): Report login options. Ex: `"l":["login"]` and `"l":["nologin"]`
*`t` (*trusted*): Mark session as trusted. Logins do not require credentials. API calls may execute with or without permission-checks.
*`u` (*untrusted*): Mark session as untrusted. Logins require credentials. API calls may only execute with permission-checks.
Unrecognized flags must not cause a failure. They must report as `null`. In this example, `x` is an unrecognized flag:
Each request and response is a JSON object formatted to fit on a single line. Lines are separated with the
conventional newline character (`\n`).
Payload data MAY include escaped newlines (`"\n"`).
JSON is rendered in condensed / ugly / non-"pretty-printed" format. It MUST NOT include the line-delimiter as whitespace.
!!! warning "For readability, some long examples in the documentation may be displayed with multiple lines. But these lines are not transmitted over the wire."
Each request-line and each response-line is formatted according to [JSON-RPC v2.0](https://www.jsonrpc.org/specification).
Many PHP deployments include misconfigurations, bugs, or add-ons -- which can cause extra noise to be presented on STDOUT.
Clients SHOULD use the [session option `responsePrefix`](#options) to detect and discard noise.
## Methods
### `api3`
The `api3` method is used to invoke APIv3 actions. It receives the standard tuple of entity-action-params.
For example, to send a request for `Contact.get` with `rowCount=4` and `check_permissions=false`: