> For the complete documentation index, see [llms.txt](https://docs.trustlesswork.com/trustless-work/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trustlesswork.com/trustless-work/introduction/developer-resources/types/entities.md).

# Entities

### Escrow

Contains both single-release and multiple-release types.

```typescript
/**
 * Single Release Escrow
 */
export type SingleReleaseEscrow = {
  /**
   * Address of the user signing the contract transaction
   */
  signer: string;

  /**
   * ID (address) that identifies the escrow contract
   */
  contractId: string;

  /**
   * Unique identifier for the escrow
   */
  engagementId: string;

  /**
   * Name of the escrow
   */
  title: string;

  /**
   * Roles that make up the escrow structure
   */
  roles: Roles;

  /**
   * Text describing the function of the escrow
   */
  description: string;

  /**
   * Amount to be transferred upon completion of escrow milestones
   */
  amount: number;

  /**
   * Commission that the platform will receive when the escrow is completed
   */
  platformFee: number;

  /**
   * Amount of the token (XLM, USDC, EURC, etc) in the smart contract.
   */
  balance: number;

  /**
   * Objectives to be completed to define the escrow as completed
   */
  milestones: SingleReleaseMilestone[];

  /**
   * Flags validating certain escrow life states
   */
  flags?: Flags;

  /**
   * Information on the trustline that will manage the movement of funds in escrow
   */
  trustline: Trustline;
};

/**
 * Multi Release Escrow
 */
export type MultiReleaseEscrow = Omit<
  SingleReleaseEscrow,
  "milestones" | "flags" | "amount" | "roles"
> & {
  milestones: MultiReleaseMilestone[];
  roles: Omit<Roles, "receiver">;
};
```

### Milestone

Contains both single-release and multiple-release types. Both of them based on the BaseMilestone.

```typescript
/**
 * Milestone
 */
type BaseMilestone = {
  /**
   * Text describing the function of the milestone.
   */
  description: string;

  /**
   * Milestone status. Ex: Approved, In dispute, etc...
   */
  status?: string;

  /**
   * Evidence of work performed by the service provider.
   */
  evidence?: string;
};

/**
 * Single Release Milestone
 */
export type SingleReleaseMilestone = BaseMilestone & {
  /**
   * Approved flag, only if the escrow is single-release
   */
  approved?: boolean;
};

/**
 * Multi Release Milestone
 */
export type MultiReleaseMilestone = BaseMilestone & {
  /**
   * Amount to be transferred upon completion of this milestone
   */
  amount: number;
  
  /**
   * Address where milestone proceeds will be sent to
   */
  receiver: string;

  /**
   * Flags validating certain milestone life states, only if the escrow is multi-release
   */
  flags?: Flags;
};
```

### Trustline

```typescript
/**
 * Trustline
 */
export type Trustline = {
  /**
   * Symbol of the token, example: USDC, EURC, etc...
   */
  symbol: string;

  /**
   * Public address establishing permission to accept and use a specific token.
   */
  address: string;
};
```

### Flags

All the possible flags **only in multi-release escrow.**

```typescript
/**
 * Flags
 */
export type Flags = {
  /**
   * Flag indicating that an escrow is in dispute.
   */
  disputed?: boolean;

  /**
   * Flag indicating that escrow funds have already been released.
   */
  released?: boolean;

  /**
   * Flag indicating that a disputed escrow has already been resolved.
   */
  resolved?: boolean;

  /**
   * Flag indicating whether a milestone has been approved by the approver.
   */
  approved?: boolean;
};

```

### Roles

```typescript
/**
 * Roles
 */
export type Roles = {
  /**
   * Address of the entity requiring the service.
   */
  approver: string;

  /**
   * Address of the entity providing the service.
   */
  serviceProvider: string;

  /**
   * Address of the entity that owns the escrow
   */
  platformAddress: string;

  /**
   * Address of the user in charge of releasing the escrow funds to the service provider.
   */
  releaseSigner: string;

  /**
   * Address in charge of resolving disputes within the escrow.
   */
  disputeResolver: string;

  /**
   * Address where escrow proceeds will be sent to (In the “Multi-Release” version, 
     this role is at the milestone level.)
   */
  receiver: string;
};

/**
 * Role
 */
export type Role =
  | "approver"
  | "serviceProvider"
  | "platformAddress"
  | "releaseSigner"
  | "disputeResolver"
  | "receiver"
  | "signer";
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.trustlesswork.com/trustless-work/introduction/developer-resources/types/entities.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
