Skip to main content

Introduction

An Ampersand manifest (amp.yaml) is a YAML file that defines how your application integrates with various SaaS platforms through the Ampersand integration platform. This page provides a comprehensive reference for the schema of this file, including detailed field descriptions and best practices.
VSCode Extension for amp.yamlInstall the Ampersand Schema Validator extension for Visual Studio Code to get:
  • Real-time validation and error detection
  • Auto-completion for all manifest fields
  • Hover documentation with examples
  • Quick fixes for common issues
  • Template generation for various providers
This extension helps you write valid amp.yaml files faster and catch errors before deployment.

OpenAPI spec

The OpenAPI spec for the manifest is available on GitHub.

Top-level structure

The Ampersand manifest starts with a top-level structure that specifies the schema version and a list of integrations:
Notes
  • Only one specVersion is allowed per manifest file.
  • The integrations array must contain at least one integration configuration.
  • Multiple integrations can reference the same provider with different configurations.

Integration definition

Each integration defines a connection to a specific provider (e.g., Salesforce, HubSpot). This section contains the basic metadata about the integration:
Naming Conventions
  • name: Use descriptive, unique names that identify the purpose of the integration. Examples: salesforce-contacts-sync, hubspot-crm-integration, github-issues-tracker.
  • displayName: Use proper capitalization and spacing for better readability in UIs. Examples: “Salesforce Contacts Sync”, “HubSpot CRM Integration”, “GitHub Issues Tracker”.

Subscribe definition

The subscribe section defines how to subscribe to real-time create, update, and delete events from the provider. This section is optional - if your integration does not need real-time data, you can omit this section. Learn more in Subscribe Actions.
Subscribe considerations
  • Check the specific provider guide to see which providers support subscribe actions. If subscribe actions isn’t supported for a particular provider, you can still use read actions to get updated data every 10 minutes.
  • A read block must always be defined alongside a subscribe block. Each subscribed object that uses createEvent, updateEvent, or deleteEvent must also have a matching object entry in the read block (with the same objectName) and set inheritFieldsAndMapping: true. Objects that only use otherEvents do not need their own entry in the read block.
  • Only one of requiredWatchFields or watchFieldsAuto should be provided for update events.
  • See Subscribe Actions documentation for detailed implementation guidance.

Read definition

The read section defines what data to read from the provider. This section is optional - if your integration only writes data or uses proxy, you can omit this section. Learn more in Read Actions.
Read considerations

Write definition

The write section defines what data can be written to the provider. This section is optional - if your integration only reads data, subscribes to events, or uses proxy, you can omit this section. Learn more in Write Actions.
Write Considerations
  • Check the specific provider guide to see which objects support writing.
  • When inheritMapping: true is set, field mappings defined in the read definition will also be used for writing, which simplifies definition for bidirectional syncs.
  • See Write Actions documentation for detailed implementation guidance.

Proxy definition

The proxy section configures API call proxying. This allows direct access to the provider’s API through Ampersand’s proxy. This section is optional - if your integration does not need to make proxy calls, you can omit this section. Learn more in Proxy Actions.

Object-level definition

Read object

Each object in the objects array defines a specific data type to read from the provider:
When configuring fields for a read object, keep these points in mind:
  • You can combine requiredFields and optionalFields in the same object definition.
  • For detailed options on configuring individual fields, see the Field Configuration section.
  • Learn more about Object and Field Mapping.

Write object

Subscribe Object

Each object in the objects array defines a specific object type to subscribe to:

Details

Object Name

The objectName must match the API object name in the provider’s system. Some common examples:
  • Salesforce: contact, lead, account, opportunity
  • HubSpot: contacts, companies, deals, tickets
  • GitHub: repos, issues, pulls, users
  • Intercom: contacts, companies, conversations, teams
See the Provider Guides for provider-specific object names.

Destination

The destination field must match a destination configured in your Ampersand dashboard. Common patterns for naming include:
  • Provider-specific webhooks: salesforceWebhook, hubspotKinesisStream, intercomWebhook
  • Generic webhooks: defaultWebhook, dataStream, analyticsWebhook
Learn more in Destinations.

Schedule

The schedule field uses standard cron syntax with five fields:
Common patterns:
  • */10 * * * *: Every 10 minutes
  • */30 * * * *: Every 30 minutes
Scheduling Considerations
  • Higher frequency (e.g., every 10 minutes) provides more up-to-date data but increases API usage.
  • Lower frequency (e.g., daily) reduces API usage but data may be less current.
  • Consider the provider’s API rate limits when setting schedules.
  • For less frequently updated data (e.g., user profiles), a lower frequency may be sufficient.
  • For rapidly changing data (e.g., chat messages), a higher frequency is recommended.

Backfill

The backfill section configures how historical data is loaded.
Learn more about backfill behavior:
Backfill Considerations
  • Setting fullHistory: true may result in longer initial sync times, especially for large datasets.
  • Some providers may have API rate limits that affect backfill performance.
  • See Read Actions backfill behavior for detailed implementation guidance.

Field

In Read Actions, fields can be configured in two main ways - either using a simple fieldName reference or using a mapped field approach (mapToName, mapToDisplayName, prompt, default). This flexibility allows for both direct field references and more sophisticated field mapping options.
Learn more about Object and Field Mapping and Dynamic Field Mappings.
Simple Field Reference For straightforward field access where you directly reference a provider’s field without renaming it:
This approach is best when:
  • The field name in the provider’s API is already meaningful to your application
  • You don’t need to standardize field names across different providers
  • No user configuration is needed for the field
Field Mapping For more complex scenarios, you can use field mapping to standardize field names or prompt users for configuration.
Learn more about field mapping strategies.
Field mapping is useful when:
  • You want to standardize field names across different providers
  • Different customers use different field names for the same concept
  • You need to provide user-friendly display names
  • You want to prompt users to select the appropriate fields during setup
See Dynamic Field Mappings for implementation details.
*Either fieldName or all of mapToName, mapToDisplayName, and prompt are required. Common Patterns and Best Practices
  1. Direct Field Access: Use simple fieldName references for standard, unchanging fields:
  2. Standardized Field Names: Use fieldName with mapToName to standardize field names:
  3. User-Defined Mapping: Use mapToName without fieldName when users need to select the field:
  4. Combined Approach: For complex integrations, combine these patterns:
Learn more about Object and Field Mapping.

Subscribe action events

In Subscribe Actions, each event type can be configured with specific options: Create event The createEvent definition specifies how to handle create events:
Update event The updateEvent definition specifies how to handle update events:
Or alternatively:
Only one of watchFieldsAuto or requiredWatchFields should be specified.
Delete event The deleteEvent definition specifies how to handle delete events:
Association change event The associationChangeEvent definition specifies how to handle association change events:
Other events The otherEvents array allows you to subscribe to non-standard events specific to certain providers:
Combine subscribe actions with read actions to get a complete picture of your customers’ data: