---
title: "Supported provider operations"
description: "Bounded synthetic operation contracts generated from the CLI source."
canonical: "https://agenttwin.si/docs/provider-operations/"
---

# Supported provider operations

Bounded synthetic operation contracts generated from the CLI source.


These are implemented operation subsets, not full provider replicas or independently verified production parity. Unsupported operations make coverage incomplete. Authentication below describes synthetic twin credentials, not AgentTwin account login.

## json-collection

Contract version: 1.0.0. Bearer run-scoped test token.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `<collection path>` | read |
| POST | `<collection path>` | append |

- Custom API contract, not a vendor replica
- No update/delete, pagination, OAuth, webhooks or schema validation
- Idempotency compares the exact parsed JSON serialization

## stripe

Contract version: 1.0.0. Bearer run-scoped test token; official Stripe SDK configured with test endpoint.

| Method | Endpoint | Effect |
| --- | --- | --- |
| POST | `/v1/customers` | append customer |
| GET | `/v1/customers[/<id>]` | retrieve or list customers |
| POST | `/v1/payment_intents` | create test payment intent |
| GET | `/v1/payment_intents/<id>` | retrieve intent |
| POST | `/v1/payment_intents/<id>/confirm` | test success or decline |

- Bounded subset, not full Stripe parity; minimal object fields only; no real money
- Only pm_card_visa and pm_card_chargeDeclined test methods
- No webhooks, refunds, subscriptions, payment-method APIs, metadata, updates or deletes
- Customers list supports limit/starting_after; payment intent listing unsupported
- POST idempotency supported; reset clears records and keys; unsupported operations/parameters return 501 and make coverage incomplete

## slack

Contract version: 1.0.0. Bearer run-scoped test token; no Slack OAuth.

| Method | Endpoint | Effect |
| --- | --- | --- |
| POST | `/api/chat.postMessage` | append /messages |
| GET / POST | `/api/conversations.history` | read /messages |
| GET / POST | `/api/conversations.list` | read /channels |

- JSON and form bodies only
- No OAuth, scopes, pagination, threads, edits, deletes, attachments or webhooks
- Errors channel_not_found/no_text use HTTP 200 with ok:false
- Unmodeled parameters and operations return HTTP 501 and make coverage incomplete

## github

Contract version: 1.0.0. Bearer run-scoped test token; GitHub-style Authorization header.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/repos` | list repositories |
| GET | `/repos/<repo>` | retrieve repository by name or full_name |
| GET | `/repos/<repo>/issues` | list issues |
| POST | `/repos/<repo>/issues` | create issue |
| GET | `/repos/<repo>/issues/<number>` | retrieve issue |
| PATCH | `/repos/<repo>/issues/<number>` | update title/body or close |
| POST | `/repos/<repo>/issues/<number>/comments` | create comment |
| GET | `/repos/<repo>/issues/<number>/comments` | list comments |
| GET | `/repos/<repo>/pulls` | list pull requests |
| GET | `/repos/<repo>/pulls/<number>` | retrieve pull request |
| PUT | `/repos/<repo>/pulls/<number>/merge` | merge pull request |
| POST | `/repos/<repo>/check-runs` | create check run |

- Bounded REST v3-shaped subset; minimal object fields only
- Ids, numbers and timestamps are deterministic synthetic values
- No auth beyond the run token, no reactions, labels mutation, reviews, branches, contents, releases or webhooks
- Unknown query parameters and operations return 501 and make coverage incomplete

## linear

Contract version: 1.0.0. Bearer run-scoped test token; GraphQL endpoint shape.

| Method | Endpoint | Effect |
| --- | --- | --- |
| POST | `/graphql query viewer` | read first seeded user as viewer |
| POST | `/graphql query issues` | list issues |
| POST | `/graphql query issue(id:)` | retrieve issue |
| POST | `/graphql query projects` | list projects |
| POST | `/graphql query project(id:)` | retrieve project |
| POST | `/graphql mutation issueCreate` | create issue |
| POST | `/graphql mutation issueUpdate` | update issue |
| POST | `/graphql mutation commentCreate` | create issue comment |

- GraphQL-shaped approximation of Linear’s API, not the real schema: a bounded root-field whitelist over the same POST /graphql surface
- Structured inputs must be sent as GraphQL variables; inline object arguments are rejected
- Responses use full bounded node shapes regardless of selection set; no pagination, filters, teams, workflows, attachments or subscriptions
- Known failures (missing entity, validation) use HTTP 200 GraphQL errors; unsupported root fields return 501 and make coverage incomplete

## notion

Contract version: 1.0.0. Bearer run-scoped test token; requires Notion-Version header.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/v1/pages/<id>` | retrieve page |
| POST | `/v1/pages` | create page in a seeded database |
| PATCH | `/v1/pages/<id>` | update properties or archive |
| GET | `/v1/databases/<id>` | retrieve database |
| POST | `/v1/databases/<id>/query` | query pages in database |
| PATCH | `/v1/blocks/<id>/children` | append child blocks |

- Bounded envelope subset: pages must use a seeded database parent
- Ids are deterministic synthetic UUIDs; no url, users, comments, searches or nested rich text parsing
- Databases and blocks are returned as created; schema changes and page_size cursoring are not modeled
- Unsupported filters and operations return 501 and make coverage incomplete

## hubspot

Contract version: 1.0.0. Bearer run-scoped test token; HubSpot-style Bearer private token.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/crm/v3/objects/<contacts\|companies\|deals\|tickets>` | list objects |
| POST | `/crm/v3/objects/<contacts\|companies\|deals\|tickets>` | create object |
| GET | `/crm/v3/objects/<object>/<id>` | retrieve object |
| PATCH | `/crm/v3/objects/<object>/<id>` | update properties |
| POST | `/crm/v3/objects/<object>/search` | search objects |

- Bounded CRM v3 subset: scalar properties only, no associations, batches, pipelines, owners or dedupe
- Ids and timestamps are deterministic synthetic values
- properties/sorts query parameters and filter operators beyond EQ are unsupported
- Unknown objects, parameters and operations return 501 and make coverage incomplete

## shopify

Contract version: 1.0.0. Bearer run-scoped test token; also accepts X-Shopify-Access-Token.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/admin/api/2024-01/products.json` | list products |
| POST | `/admin/api/2024-01/products.json` | create product |
| GET / PUT | `/admin/api/2024-01/products/<id>.json` | retrieve or update product |
| GET | `/admin/api/2024-01/orders.json` | list orders |
| POST | `/admin/api/2024-01/orders.json` | create order with line_items |
| GET / PUT | `/admin/api/2024-01/orders/<id>.json` | retrieve or update order |
| GET | `/admin/api/2024-01/customers.json` | list customers |
| POST | `/admin/api/2024-01/customers.json` | create customer |
| GET / PUT | `/admin/api/2024-01/customers/<id>.json` | retrieve or update customer |

- REST Admin API pinned to version 2024-01; .json endpoints only
- No metafields, variants mutation, fulfillment, transactions, webhooks, GraphQL or counts endpoints
- Ids and timestamps are deterministic synthetic values
- Unknown parameters and operations return 501 and make coverage incomplete

## datadog

Contract version: 1.0.0. Bearer run-scoped test token; also accepts DD-API-KEY and DD-APPLICATION-KEY headers.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/api/v1/monitors` | list monitors |
| POST | `/api/v1/monitors` | create monitor |
| GET | `/api/v1/monitor/<id>` | retrieve monitor |
| POST | `/api/v1/monitor/<id>/mute` | mute monitor |
| POST | `/api/v1/events` | post event |
| GET | `/api/v1/events` | list events in window |
| GET | `/api/v1/query` | query seeded metric series |

- Bounded v1 subset: no dashboards, logs, SLOs, downtimes, unmute or v2 endpoints
- Overall state is always OK; monitor unmute and event deletion are unsupported
- Metric queries return seeded /metrics points clipped to the window; unknown metrics return empty series
- Unknown parameters and operations return 501 and make coverage incomplete

## gmail

Contract version: 1.0.0. Bearer run-scoped test token; Google-style OAuth2 Bearer header.

| Method | Endpoint | Effect |
| --- | --- | --- |
| POST | `/gmail/v1/users/me/messages/send` | append a sent message |
| GET | `/gmail/v1/users/me/messages` | list message ids with a snippet q filter |
| GET | `/gmail/v1/users/me/messages/<id>` | retrieve message |
| GET | `/gmail/v1/users/me/labels` | list seeded labels |

- Bounded Gmail v1 subset: send, list, get and labels only
- Sent messages carry a bounded Message envelope; MIME bodies are not parsed and attachments are not modeled
- No drafts, threads, history, modify, trash or watch endpoints
- Unknown fields and operations return 501 and make coverage incomplete

## google-calendar

Contract version: 1.1.0. Bearer run-scoped test token; Google-style OAuth2 Bearer header.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/calendar/v3/users/me/calendarList` | list seeded calendars |
| GET | `/calendar/v3/calendars/primary/events` | filter and paginate nonrecurring timed primary-calendar events |
| POST | `/calendar/v3/calendars/primary/events` | create event |
| GET | `/calendar/v3/calendars/primary/events/<id>` | retrieve event |
| PATCH | `/calendar/v3/calendars/primary/events/<id>` | update event fields |
| DELETE | `/calendar/v3/calendars/primary/events/<id>` | delete event (responds 200 with an empty object; production returns 204) |

- Bounded Calendar v3 subset: events on the primary seeded calendar only; requests to any other calendar id return 404
- Recurring-event expansion, all-day timezone filtering, reminders, conference data and sendUpdates are not modeled; these queries return 501
- Pagination tokens are synthetic and expire when query or event state changes; calendar queries follow documented end &gt; timeMin and start &lt; timeMax semantics
- Unknown fields and operations return 501 and make coverage incomplete

## gitlab

Contract version: 1.0.0. Bearer run-scoped test token; GitLab-style Bearer/OAuth token.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/api/v4/projects` | list projects |
| POST | `/api/v4/projects` | create project |
| GET | `/api/v4/projects/<id>` | retrieve project |
| GET | `/api/v4/issues` | list issues |
| POST | `/api/v4/issues` | create issue in a seeded project |
| GET | `/api/v4/issues/<id>` | retrieve issue |
| GET | `/api/v4/merge_requests` | list merge requests |
| POST | `/api/v4/merge_requests` | create merge request in a seeded project |
| GET | `/api/v4/merge_requests/<iid>` | retrieve merge request |
| GET | `/api/v4/merge_requests/<iid>/notes` | list merge request notes |
| POST | `/api/v4/merge_requests/<iid>/notes` | create merge request note |

- Bounded v4 subset: groups, branches, pipelines, environments, tags workflows and uploads are not modeled
- Ids, iids and timestamps are deterministic synthetic values
- List endpoints take no query parameters; unsupported filters return 501
- Unknown operations return 501 and make coverage incomplete

## jira

Contract version: 1.0.0. Bearer run-scoped test token; Atlassian PAT Bearer header.

| Method | Endpoint | Effect |
| --- | --- | --- |
| POST | `/rest/api/3/issue` | create issue |
| GET | `/rest/api/3/issue/<keyOrId>` | retrieve issue |
| POST | `/rest/api/3/search` | search issues with bounded JQL (project = KEY only) |
| POST | `/rest/api/3/issue/<key>/comment` | create issue comment (ADF doc or plain string) |
| POST | `/rest/api/3/issue/<key>/transitions` | apply a bounded transition (11 To Do, 21 In Progress, 31 Done) |
| GET | `/rest/api/3/project` | list seeded projects |
| GET | `/rest/api/3/project/<key>` | retrieve project |

- Bounded /rest/api/3 subset
- JQL supports only the project = KEY clause; unsupported clauses return 501
- Transitions are the fixed ids 11/21/31 and respond 200 with an empty object
- Comment bodies accept ADF doc objects or plain strings; no rich-text validation
- No attachments, watchers, boards, bulk operations or user endpoints
- Unknown fields and operations return 501 and make coverage incomplete

## discord

Contract version: 1.0.0. Bearer run-scoped test token; also accepts the Discord-idiomatic Authorization: Bot header.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/api/channels/<id>` | retrieve seeded channel |
| GET | `/api/channels/<id>/messages` | list channel messages (newest first) |
| POST | `/api/channels/<id>/messages` | create channel message |
| GET | `/api/guilds/<id>` | retrieve seeded guild |
| GET | `/api/guilds/<id>/members` | list guild members |

- Bounded subset: channels and guilds exist only as seeded reference state
- Message edit/delete, reactions, roles, threads and guild creation are unsupported
- Member results are seeded records; no gateway presence or intents

## twilio

Contract version: 1.0.0. Bearer run-scoped test token; production Twilio HTTP Basic auth is not required by this twin.

| Method | Endpoint | Effect |
| --- | --- | --- |
| POST | `/2010-04-01/Accounts/<sid>/Messages.json` | create outbound message (status queued) |
| GET | `/2010-04-01/Accounts/<sid>/Messages.json` | list messages |
| POST | `/2010-04-01/Accounts/<sid>/Calls.json` | create outbound call (status queued) |
| GET | `/2010-04-01/Accounts/<sid>/Calls.json` | list calls |

- JSON bodies accepted in place of Twilio’s form encoding; the .json suffix is optional
- Messages and Calls only; statuses stay queued and never progress in-flight
- No call updates, lookups, queues, recordings, SMS status callbacks or rate limits
- Deterministic synthetic sids; any account sid is accepted
- Unknown parameters and operations return 501 and make coverage incomplete

## zendesk

Contract version: 1.0.0. Bearer run-scoped test token; production Zendesk Basic auth is not required by this twin.

| Method | Endpoint | Effect |
| --- | --- | --- |
| GET | `/api/v2/tickets.json` | list tickets |
| POST | `/api/v2/tickets.json` | create ticket |
| GET | `/api/v2/tickets/<id>.json` | retrieve ticket |
| PUT | `/api/v2/tickets/<id>.json` | update ticket fields |
| GET | `/api/v2/users.json` | list seeded users |
| GET | `/api/v2/organizations.json` | list seeded organizations |

- Bounded Support API v2 subset: ticket create/list/get/update plus users and organizations lists
- No macros, views, triggers, audits, attachments, bulk updates or deletes
- Users and organizations are seed-only records; their updates are unsupported
- Unknown fields and operations return 501 and make coverage incomplete
