---
title: "Record Consent"
method: POST
path: "/api/connections/{connection_id}/consent"
tags: ["connections"]
---

# Record Consent

`POST /api/connections/{connection_id}/consent`

## Request

- Base URL: `https://api.heymetra.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.heymetra.com/api/connections/{connection_id}/consent`
- Auth: none declared

Accept the widened ask, where the provider has nothing left to grant.

The other half of the offer ``core/reconsent.py`` makes. When a version bump
widened only what we do with scopes the customer already granted, the token
needs nothing and sending them round an OAuth trip would be asking them to
click for nothing — so this records the agreement and stops the offer.

It refuses, hard, when the bump widened the provider grant. No token we hold
carries a scope the customer never granted, and no row we write changes
that: stamping the version there would manufacture exactly the consent
record that keeping ``consent_version`` NULL was refusing to manufacture.
The reconnect flow is what records that one, because the provider is what
grants it.

Owner only: agreeing to a wider ask on the workspace's behalf is the same
act as connecting the account in the first place.

## Path parameters

- `connection_id` string, uuid, required

## Headers

- `authorization` string, nullable
- `x-workspace-id` string, nullable

## Response `200`

Successful Response

- ConnectionOut
  - `id` string, uuid, required
  - `provider` 'google_ads' | 'meta_ads' | 'meta_instagram' | 'meta_page' | 'ga4' | 'gsc' | 'zoho_crm' | 'zoho_salesiq' | 'zoho_marketing' | 'telegram' | 'slack' | 'email' | 'adapty' | 'trendyol' | 'revenuecat' | 'appsflyer' | 'app_store_connect' | 'woocommerce' | 'shopify' | 'stripe' | 'posthog' | 'jira' | 'hepsiburada' | 'n11' | 'ciceksepeti' | 'amazon_seller' | 'ikas', required
  - `account_id` string, required
  - `account_name` string, nullable, required
  - `alias` string, nullable, required
  - `display_name` string, required
  - `is_active` boolean, required
  - `paused_for_plan` boolean, required
  - `write_enabled` boolean, required
  - `ask_before_sending` boolean
  - `currency` string, nullable, required
  - `consent_version` integer, nullable
  - `is_mine` boolean
  - `may_administer` boolean
  - `shared_with_workspace` boolean
  - `reconsent` ReconsentOut: What this connection has not agreed to yet, and how it is fixed. Present only when there is something to offer, so a row without it is a row with nothing to say — never a row whose state is unknown.
    - `connector` string, required
    - `granted_version` integer, nullable, required
    - `current_version` integer, required
    - `reconnect_required` boolean, required
    - `what_changed` string[], required
    - `how_to_fix` string, required
  - `reference` string, required
  - `identity` object, required
  - `credentials` object
  - `last_error` string, nullable, required
  - `created_at` string, date-time, required
  - `grant_shape` 'separable' | 'read_only' | 'inseparable' | 'channel', required: What a customer's read-or-write choice can actually buy at this provider. The choice is offered on every connector, because a customer deciding whether an assistant may change their account should not have to know which providers happen to model that as a scope. What differs is what the choice BUYS, and saying so is this enum's whole job: a screen that offers the same two options everywhere while one of them is unenforceable at three providers is worse than one that says which is which.

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-20** `877b0f87d6d0`: 2 info
  - removed the `google_calendar` enum value from the `provider` response property for the response status `200`
  - removed the `google_meet` enum value from the `provider` response property for the response status `200`
- **2026-10-20** `488ce9683884`: 1 warning
  - added the new `ikas` enum value to the `provider` response property for the response status `200`
- **2026-10-19** `8153ccd4dea1`: 4 warning
  - added the new `amazon_seller` enum value to the `provider` response property for the response status `200`
  - added the new `ciceksepeti` enum value to the `provider` response property for the response status `200`
  - added the new `hepsiburada` enum value to the `provider` response property for the response status `200`
  - added the new `n11` enum value to the `provider` response property for the response status `200`

[Operation history](https://skmtc.dev/heymetra/apis/heymetra-api/changes/api/connections/:connection_id/consent/post.md)

---

[API](https://skmtc.dev/heymetra/apis/heymetra-api.md) · [All operations](https://skmtc.dev/heymetra/apis/heymetra-api/llms.txt) · [OpenAPI document](https://skmtc.dev/heymetra/apis/heymetra-api/revisions/877b0f87d6d0?raw)
