Visitar URL original
IResourceFieldsService Documentation | Progress Agentic RAG Documentation Portal
Skip to main content

IResourceFieldsService Documentation

The IResourceFieldsService provides operations for managing individual fields within resources, including conversation, file, link, and text fields. It supports both resource ID and slug-based access patterns for all operations.

Overview​

Resource fields are the individual data components within a resource:

  • Conversation fields: Store chat/conversation data with messages
  • File fields: Store binary file data with metadata
  • Link fields: Store web URLs and associated metadata
  • Text fields: Store plain text or formatted text content

Methods​

Conversation Field Operations​

AddConversationFieldByIdAsync​

Adds a new conversation field to a resource by ID.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddConversationFieldByIdAsync(
string resourceId,
string fieldId,
InputConversationField conversationField,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier for the new conversation field
  • conversationField (InputConversationField, required): Conversation field data including messages
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: ResourceFieldAdded with sequence ID

Example:

var conversationField = new InputConversationField
{
Messages = new List<InputMessage>
{
new InputMessage(
content: new InputMessageContent { Text = "Hello!" },
ident: "msg1",
who: "user"
)
}
};

var response = await client.ResourceFields.AddConversationFieldByIdAsync(
"resource-123",
"chat-field",
conversationField
);

if (response.IsSuccessful)
{
Console.WriteLine($"Conversation field added with seqid: {response.Data.Seqid}");
}

AddConversationFieldBySlugAsync​

Adds a new conversation field to a resource by slug.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddConversationFieldBySlugAsync(
string resourceSlug,
string fieldId,
InputConversationField conversationField,
CancellationToken cancellationToken = default)

Parameters:

  • resourceSlug (string, required): The slug identifier of the resource
  • fieldId (string, required): The identifier for the new conversation field
  • conversationField (InputConversationField, required): Conversation field data
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: ResourceFieldAdded with sequence ID


AppendMessagesToConversationFieldByIdAsync​

Appends additional messages to an existing conversation field.

Signature:

Task<ApiResponse<object>> AppendMessagesToConversationFieldByIdAsync(
string resourceId,
string fieldId,
List<InputMessage> messages,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier of the conversation field
  • messages (List, required): List of messages to append
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: Success response object

Example:

var messages = new List<InputMessage>
{
new InputMessage(
content: new InputMessageContent { Text = "What is the weather?" },
ident: "msg2",
who: "user"
),
new InputMessage(
content: new InputMessageContent { Text = "It's sunny today!" },
ident: "msg3",
who: "assistant"
)
};

var response = await client.ResourceFields.AppendMessagesToConversationFieldByIdAsync(
"resource-123",
"chat-field",
messages
);

AppendMessagesToConversationFieldBySlugAsync​

Appends additional messages to an existing conversation field by resource slug.

Signature:

Task<ApiResponse<object>> AppendMessagesToConversationFieldBySlugAsync(
string resourceSlug,
string fieldId,
List<InputMessage> messages,
CancellationToken cancellationToken = default)

DownloadConversationAttachmentByIdAsync​

Downloads a file attachment from a conversation message.

Signature:

Task<ApiResponse<byte[]>> DownloadConversationAttachmentByIdAsync(
string resourceId,
string fieldId,
string messageId,
int fileNum,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier of the conversation field
  • messageId (string, required): The identifier of the message containing the attachment
  • fileNum (int, required): The index of the file attachment (0-based)
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: Binary file content as byte array

Example:

var response = await client.ResourceFields.DownloadConversationAttachmentByIdAsync(
"resource-123",
"chat-field",
"msg5",
0
);

if (response.IsSuccessful)
{
await File.WriteAllBytesAsync("attachment.pdf", response.Data);
}

DownloadConversationAttachmentBySlugAsync​

Downloads a file attachment from a conversation message by resource slug.

Signature:

Task<ApiResponse<byte[]>> DownloadConversationAttachmentBySlugAsync(
string resourceSlug,
string fieldId,
string messageId,
int fileNum,
CancellationToken cancellationToken = default)

File Field Operations​

AddFileFieldByIdAsync​

Adds a new file field to a resource by ID.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddFileFieldByIdAsync(
string resourceId,
string fieldId,
FileField fileField,
bool skipStore = false,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier for the new file field
  • fileField (FileField, required): File field data
  • skipStore (bool, optional): If true, file will not be saved in blob storage (only sent to processing)
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: ResourceFieldAdded with sequence ID

Example:

var fileField = new FileField(
file: new File
{
Uri = "https://example.com/document.pdf"
}
)
{
Language = "en",
ExtractStrategy = "paragraph"
};

var response = await client.ResourceFields.AddFileFieldByIdAsync(
"resource-123",
"document-field",
fileField,
skipStore: false
);

AddFileFieldBySlugAsync​

Adds a new file field to a resource by slug.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddFileFieldBySlugAsync(
string resourceSlug,
string fieldId,
FileField fileField,
bool skipStore = false,
CancellationToken cancellationToken = default)

UploadFileByIdAsync​

Uploads a binary file directly to a resource field by ID.

Signature:

Task<ApiResponse<ResourceFileUploaded>> UploadFileByIdAsync(
string resourceId,
string fieldId,
byte[] fileContent,
string? filename = null,
string? password = null,
string? language = null,
string? md5 = null,
string? extractStrategy = null,
string? splitStrategy = null,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier for the file field
  • fileContent (byte[], required): Binary content of the file
  • filename (string, optional): Name of the file being uploaded
  • password (string, optional): Password if the file is password protected
  • language (string, optional): Language code of the file content
  • md5 (string, optional): MD5 hash for file deduplication
  • extractStrategy (string, optional): Strategy to use for content extraction
  • splitStrategy (string, optional): Strategy to use for content splitting
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: ResourceFileUploaded with upload details

Example:

var fileBytes = await File.ReadAllBytesAsync("document.pdf");

var response = await client.ResourceFields.UploadFileByIdAsync(
resourceId: "resource-123",
fieldId: "pdf-document",
fileContent: fileBytes,
filename: "document.pdf",
language: "en",
extractStrategy: "paragraph"
);

if (response.IsSuccessful)
{
Console.WriteLine($"File uploaded: {response.Data.FieldId}");
Console.WriteLine($"UUID: {response.Data.Uuid}");
}

UploadFileBySlugAsync​

Uploads a binary file directly to a resource field by slug.

Signature:

Task<ApiResponse<ResourceFileUploaded>> UploadFileBySlugAsync(
string resourceSlug,
string fieldId,
byte[] fileContent,
string? filename = null,
string? password = null,
string? language = null,
string? md5 = null,
string? extractStrategy = null,
string? splitStrategy = null,
CancellationToken cancellationToken = default)

DownloadFileFieldByIdAsync​

Downloads the binary content of a file field by resource ID.

Signature:

Task<ApiResponse<byte[]>> DownloadFileFieldByIdAsync(
string resourceId,
string fieldId,
bool inline = false,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier of the file field
  • inline (bool, optional): Whether to display the file inline (affects Content-Disposition header)
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: Binary file content as byte array

Example:

var response = await client.ResourceFields.DownloadFileFieldByIdAsync(
"resource-123",
"pdf-document"
);

if (response.IsSuccessful)
{
await File.WriteAllBytesAsync("downloaded.pdf", response.Data);
}

DownloadFileFieldBySlugAsync​

Downloads the binary content of a file field by resource slug.

Signature:

Task<ApiResponse<byte[]>> DownloadFileFieldBySlugAsync(
string resourceSlug,
string fieldId,
bool inline = false,
CancellationToken cancellationToken = default)

ReprocessFileFieldByIdAsync​

Triggers reprocessing of a file field by resource ID.

Signature:

Task<ApiResponse<bool>> ReprocessFileFieldByIdAsync(
string resourceId,
string fieldId,
bool? resetTitle = null,
string? filePassword = null,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier of the file field
  • resetTitle (bool, optional): Whether to reset the resource title from the file
  • filePassword (string, optional): Password for the file if it's password protected
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: True if reprocessing was triggered successfully

Example:

var response = await client.ResourceFields.ReprocessFileFieldByIdAsync(
"resource-123",
"pdf-document",
resetTitle: true,
filePassword: "secret123"
);

ReprocessFileFieldBySlugAsync​

Triggers reprocessing of a file field by resource slug.

Signature:

Task<ApiResponse<bool>> ReprocessFileFieldBySlugAsync(
string resourceSlug,
string fieldId,
bool? resetTitle = null,
string? filePassword = null,
CancellationToken cancellationToken = default)

AddLinkFieldByIdAsync​

Adds a new link field to a resource by ID.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddLinkFieldByIdAsync(
string resourceId,
string fieldId,
LinkField linkField,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier for the new link field
  • linkField (LinkField, required): Link field data including URI
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: ResourceFieldAdded with sequence ID

Example:

var linkField = new LinkField("https://example.com/article")
{
Headers = new Dictionary<string, string>
{
["User-Agent"] = "MyBot/1.0"
},
Language = "en",
CssSelector = "article.content"
};

var response = await client.ResourceFields.AddLinkFieldByIdAsync(
"resource-123",
"web-link",
linkField
);

AddLinkFieldBySlugAsync​

Adds a new link field to a resource by slug.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddLinkFieldBySlugAsync(
string resourceSlug,
string fieldId,
LinkField linkField,
CancellationToken cancellationToken = default)

Text Field Operations​

AddTextFieldByIdAsync​

Adds a new text field to a resource by ID.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddTextFieldByIdAsync(
string resourceId,
string fieldId,
TextField textField,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldId (string, required): The identifier for the new text field
  • textField (TextField, required): Text field data including body content
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: ResourceFieldAdded with sequence ID

Example:

var textField = new TextField("This is the text content of my document.")
{
Format = TextFormat.Plain,
ExtractStrategy = "paragraph"
};

var response = await client.ResourceFields.AddTextFieldByIdAsync(
"resource-123",
"content-field",
textField
);

AddTextFieldBySlugAsync​

Adds a new text field to a resource by slug.

Signature:

Task<ApiResponse<ResourceFieldAdded>> AddTextFieldBySlugAsync(
string resourceSlug,
string fieldId,
TextField textField,
CancellationToken cancellationToken = default)

Generic Field Operations​

GetResourceFieldByIdAsync​

Retrieves a resource field by resource ID and field type.

Signature:

Task<ApiResponse<ResourceField>> GetResourceFieldByIdAsync(
string resourceId,
FieldTypeName fieldType,
string fieldId,
ResourceFieldProperties[]? show = null,
ExtractedDataTypeName[]? extracted = null,
string? page = null,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldType (FieldTypeName, required): The type of field (Text, File, Link, Conversation, Generic)
  • fieldId (string, required): The identifier of the field
  • show (ResourceFieldProperties[], optional): Properties to include (Value, Extracted, Error)
  • extracted (ExtractedDataTypeName[], optional): Extracted data types to include
  • page (string, optional): Page number or 'last' for conversation fields
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: ResourceField with field data and metadata

Example:

var response = await client.ResourceFields.GetResourceFieldByIdAsync(
resourceId: "resource-123",
fieldType: FieldTypeName.Text,
fieldId: "content-field",
show: new[] { ResourceFieldProperties.Value, ResourceFieldProperties.Extracted }
);

if (response.IsSuccessful)
{
Console.WriteLine($"Field ID: {response.Data.FieldId}");
Console.WriteLine($"Field Type: {response.Data.FieldType}");
}

GetResourceFieldBySlugAsync​

Retrieves a resource field by resource slug and field type.

Signature:

Task<ApiResponse<ResourceField>> GetResourceFieldBySlugAsync(
string resourceSlug,
FieldTypeName fieldType,
string fieldId,
ResourceFieldProperties[]? show = null,
ExtractedDataTypeName[]? extracted = null,
string? page = null,
CancellationToken cancellationToken = default)

DeleteResourceFieldByIdAsync​

Deletes a resource field by resource ID.

Signature:

Task<ApiResponse<bool>> DeleteResourceFieldByIdAsync(
string resourceId,
FieldTypeName fieldType,
string fieldId,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldType (FieldTypeName, required): The type of field to delete
  • fieldId (string, required): The identifier of the field to delete
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: True if deletion was successful

Example:

var response = await client.ResourceFields.DeleteResourceFieldByIdAsync(
"resource-123",
FieldTypeName.Text,
"old-content-field"
);

if (response.IsSuccessful)
{
Console.WriteLine("Field deleted successfully");
}

DeleteResourceFieldBySlugAsync​

Deletes a resource field by resource slug.

Signature:

Task<ApiResponse<bool>> DeleteResourceFieldBySlugAsync(
string resourceSlug,
FieldTypeName fieldType,
string fieldId,
CancellationToken cancellationToken = default)

DownloadExtractedFileByIdAsync​

Downloads an extracted binary file from a field by resource ID.

Signature:

Task<ApiResponse<byte[]>> DownloadExtractedFileByIdAsync(
string resourceId,
FieldTypeName fieldType,
string fieldId,
string downloadField,
CancellationToken cancellationToken = default)

Parameters:

  • resourceId (string, required): The unique identifier of the resource
  • fieldType (FieldTypeName, required): The type of field
  • fieldId (string, required): The identifier of the field
  • downloadField (string, required): The identifier of the extracted file to download
  • cancellationToken (CancellationToken, optional): Cancellation token

Returns: Binary file content as byte array

Example:

var response = await client.ResourceFields.DownloadExtractedFileByIdAsync(
resourceId: "resource-123",
fieldType: FieldTypeName.File,
fieldId: "pdf-document",
downloadField: "thumbnail"
);

if (response.IsSuccessful)
{
await File.WriteAllBytesAsync("thumbnail.jpg", response.Data);
}

DownloadExtractedFileBySlugAsync​

Downloads an extracted binary file from a field by resource slug.

Signature:

Task<ApiResponse<byte[]>> DownloadExtractedFileBySlugAsync(
string resourceSlug,
FieldTypeName fieldType,
string fieldId,
string downloadField,
CancellationToken cancellationToken = default)

Common Patterns​

Working with Field IDs​

Field IDs must match the pattern ^[a-zA-Z0-9:_-]+$:

// Valid field IDs
"my-field"
"field_1"
"namespace:field"
"field-with-underscore_123"

// Invalid field IDs (will cause validation errors)
"field with spaces"
"field@special"

Error Handling​

All methods return ApiResponse<T> which includes error handling:

var response = await client.ResourceFields.AddTextFieldByIdAsync(
"resource-123",
"content",
textField
);

if (response.IsSuccessful)
{
// Success
var result = response.Data;
}
else if (response.ValidationError != null)
{
// Validation error (HTTP 422)
Console.WriteLine($"Validation failed: {response.ValidationError}");
}
else
{
// Other error
Console.WriteLine($"Error: {response.ErrorMessage}");
}

Uploading vs Adding File Fields​

There are two ways to add file content:

  1. Direct Upload (recommended for binary data you have in memory):
var fileBytes = await File.ReadAllBytesAsync("document.pdf");
var response = await client.ResourceFields.UploadFileByIdAsync(
"resource-123",
"doc",
fileBytes,
filename: "document.pdf"
);
  1. File Field with URI (for files accessible via URL):
var fileField = new FileField(new File { Uri = "https://example.com/doc.pdf" });
var response = await client.ResourceFields.AddFileFieldByIdAsync(
"resource-123",
"doc",
fileField
);

Skip Store Option​

The skipStore parameter allows you to send files for processing without storing them in blob storage:

// File will be processed but not stored
var response = await client.ResourceFields.AddFileFieldByIdAsync(
"resource-123",
"temp-file",
fileField,
skipStore: true // File is processed but not permanently stored
);

This is useful for temporary processing or when you only need the extracted data.