naftiko: 1.0.0-alpha2 info: label: Suger API — Offer description: 'Suger API — Offer. 12 operations. Lead operation: Create Or Update Draft Offer. Self-contained Naftiko capability covering one Suger business surface.' tags: - Suger - Offer created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: SUGER_API_KEY: SUGER_API_KEY capability: consumes: - type: http namespace: suger-offer baseUri: https://api.suger.cloud description: Suger API — Offer business capability. Self-contained, no shared references. resources: - name: org-orgId-draftOffer path: /org/{orgId}/draftOffer operations: - name: createorupdatedraftoffer method: POST description: Create Or Update Draft Offer outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: body in: body type: object description: Request body (JSON). required: true - name: org-orgId-offer path: /org/{orgId}/offer operations: - name: listoffers method: GET description: List Offers outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: status in: query type: string description: filter by offer status - name: partner in: query type: string description: filter by partner - name: offerType in: query type: string description: filter by offerType - name: productId in: query type: string description: filter by productId - name: buyerId in: query type: string description: filter by buyerId - name: hubspotDealId in: query type: string description: filter by hubspotDealId - name: contactId in: query type: string description: filter by contactId - name: limit in: query type: integer description: List pagination size, default 1000, max value is 1000 - name: offset in: query type: integer description: List pagination offset, default 0 - name: createoffer method: POST description: Create Offer outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: body in: body type: object description: Request body (JSON). required: true - name: org-orgId-offer-offerId path: /org/{orgId}/offer/{offerId} operations: - name: deleteoffer method: DELETE description: Delete Offer outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: getoffer method: GET description: Get Offer outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: org-orgId-offer-offerId-cancel path: /org/{orgId}/offer/{offerId}/cancel operations: - name: canceloffer method: POST description: Cancel Offer outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: org-orgId-offer-offerId-eula path: /org/{orgId}/offer/{offerId}/eula operations: - name: getoffereula method: GET description: Get Offer EULA outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: format in: query type: string description: response format in JSON or string - name: org-orgId-offer-offerId-extendExpiryDate path: /org/{orgId}/offer/{offerId}/extendExpiryDate operations: - name: extendprivateofferexpirydate method: POST description: Extend Offer Expiry Date outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: newExpiryDate in: query type: string description: new expiry date in YYYY-MM-DD format required: true - name: org-orgId-offer-offerId-metaInfo path: /org/{orgId}/offer/{offerId}/metaInfo operations: - name: updateoffermetainfo method: PATCH description: Update Offer Meta Info outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: body in: body type: object description: Request body (JSON). required: true - name: org-orgId-offer-offerId-notifyContacts path: /org/{orgId}/offer/{offerId}/notifyContacts operations: - name: sendoffernotifications method: POST description: Notify Offer Contacts outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: body in: body type: object description: Request body (JSON). required: false - name: org-orgId-offer-offerId-resellerEula path: /org/{orgId}/offer/{offerId}/resellerEula operations: - name: getofferresellereula method: GET description: Get Offer Reseller EULA outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerId in: path type: string description: Offer ID required: true - name: org-orgId-offerExternalId-offerExternalId path: /org/{orgId}/offerExternalId/{offerExternalId} operations: - name: getofferbyexternalid method: GET description: Get Offer By External ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: path type: string description: Organization ID required: true - name: offerExternalId in: path type: string description: Offer External ID required: true authentication: type: apikey key: Authorization value: '{{env.SUGER_API_KEY}}' placement: header exposes: - type: rest namespace: suger-offer-rest port: 8080 description: REST adapter for Suger API — Offer. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/org/{orgid}/draftoffer name: org-orgid-draftoffer description: REST surface for org-orgId-draftOffer. operations: - method: POST name: createorupdatedraftoffer description: Create Or Update Draft Offer call: suger-offer.createorupdatedraftoffer with: orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer name: org-orgid-offer description: REST surface for org-orgId-offer. operations: - method: GET name: listoffers description: List Offers call: suger-offer.listoffers with: orgId: rest.orgId status: rest.status partner: rest.partner offerType: rest.offerType productId: rest.productId buyerId: rest.buyerId hubspotDealId: rest.hubspotDealId contactId: rest.contactId limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - method: POST name: createoffer description: Create Offer call: suger-offer.createoffer with: orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer/{offerid} name: org-orgid-offer-offerid description: REST surface for org-orgId-offer-offerId. operations: - method: DELETE name: deleteoffer description: Delete Offer call: suger-offer.deleteoffer with: orgId: rest.orgId offerId: rest.offerId outputParameters: - type: object mapping: $. - method: GET name: getoffer description: Get Offer call: suger-offer.getoffer with: orgId: rest.orgId offerId: rest.offerId outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer/{offerid}/cancel name: org-orgid-offer-offerid-cancel description: REST surface for org-orgId-offer-offerId-cancel. operations: - method: POST name: canceloffer description: Cancel Offer call: suger-offer.canceloffer with: orgId: rest.orgId offerId: rest.offerId outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer/{offerid}/eula name: org-orgid-offer-offerid-eula description: REST surface for org-orgId-offer-offerId-eula. operations: - method: GET name: getoffereula description: Get Offer EULA call: suger-offer.getoffereula with: orgId: rest.orgId offerId: rest.offerId format: rest.format outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer/{offerid}/extendexpirydate name: org-orgid-offer-offerid-extendexpirydate description: REST surface for org-orgId-offer-offerId-extendExpiryDate. operations: - method: POST name: extendprivateofferexpirydate description: Extend Offer Expiry Date call: suger-offer.extendprivateofferexpirydate with: orgId: rest.orgId offerId: rest.offerId newExpiryDate: rest.newExpiryDate outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer/{offerid}/metainfo name: org-orgid-offer-offerid-metainfo description: REST surface for org-orgId-offer-offerId-metaInfo. operations: - method: PATCH name: updateoffermetainfo description: Update Offer Meta Info call: suger-offer.updateoffermetainfo with: orgId: rest.orgId offerId: rest.offerId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer/{offerid}/notifycontacts name: org-orgid-offer-offerid-notifycontacts description: REST surface for org-orgId-offer-offerId-notifyContacts. operations: - method: POST name: sendoffernotifications description: Notify Offer Contacts call: suger-offer.sendoffernotifications with: orgId: rest.orgId offerId: rest.offerId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offer/{offerid}/resellereula name: org-orgid-offer-offerid-resellereula description: REST surface for org-orgId-offer-offerId-resellerEula. operations: - method: GET name: getofferresellereula description: Get Offer Reseller EULA call: suger-offer.getofferresellereula with: orgId: rest.orgId offerId: rest.offerId outputParameters: - type: object mapping: $. - path: /v1/org/{orgid}/offerexternalid/{offerexternalid} name: org-orgid-offerexternalid-offerexternalid description: REST surface for org-orgId-offerExternalId-offerExternalId. operations: - method: GET name: getofferbyexternalid description: Get Offer By External ID call: suger-offer.getofferbyexternalid with: orgId: rest.orgId offerExternalId: rest.offerExternalId outputParameters: - type: object mapping: $. - type: mcp namespace: suger-offer-mcp port: 9090 transport: http description: MCP adapter for Suger API — Offer. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: create-update-draft-offer description: Create Or Update Draft Offer hints: readOnly: false destructive: false idempotent: false call: suger-offer.createorupdatedraftoffer with: orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: list-offers description: List Offers hints: readOnly: true destructive: false idempotent: true call: suger-offer.listoffers with: orgId: tools.orgId status: tools.status partner: tools.partner offerType: tools.offerType productId: tools.productId buyerId: tools.buyerId hubspotDealId: tools.hubspotDealId contactId: tools.contactId limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: create-offer description: Create Offer hints: readOnly: false destructive: false idempotent: false call: suger-offer.createoffer with: orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: delete-offer description: Delete Offer hints: readOnly: false destructive: true idempotent: true call: suger-offer.deleteoffer with: orgId: tools.orgId offerId: tools.offerId outputParameters: - type: object mapping: $. - name: get-offer description: Get Offer hints: readOnly: true destructive: false idempotent: true call: suger-offer.getoffer with: orgId: tools.orgId offerId: tools.offerId outputParameters: - type: object mapping: $. - name: cancel-offer description: Cancel Offer hints: readOnly: false destructive: false idempotent: false call: suger-offer.canceloffer with: orgId: tools.orgId offerId: tools.offerId outputParameters: - type: object mapping: $. - name: get-offer-eula description: Get Offer EULA hints: readOnly: true destructive: false idempotent: true call: suger-offer.getoffereula with: orgId: tools.orgId offerId: tools.offerId format: tools.format outputParameters: - type: object mapping: $. - name: extend-offer-expiry-date description: Extend Offer Expiry Date hints: readOnly: false destructive: false idempotent: false call: suger-offer.extendprivateofferexpirydate with: orgId: tools.orgId offerId: tools.offerId newExpiryDate: tools.newExpiryDate outputParameters: - type: object mapping: $. - name: update-offer-meta-info description: Update Offer Meta Info hints: readOnly: false destructive: false idempotent: true call: suger-offer.updateoffermetainfo with: orgId: tools.orgId offerId: tools.offerId body: tools.body outputParameters: - type: object mapping: $. - name: notify-offer-contacts description: Notify Offer Contacts hints: readOnly: false destructive: false idempotent: false call: suger-offer.sendoffernotifications with: orgId: tools.orgId offerId: tools.offerId body: tools.body outputParameters: - type: object mapping: $. - name: get-offer-reseller-eula description: Get Offer Reseller EULA hints: readOnly: true destructive: false idempotent: true call: suger-offer.getofferresellereula with: orgId: tools.orgId offerId: tools.offerId outputParameters: - type: object mapping: $. - name: get-offer-external-id description: Get Offer By External ID hints: readOnly: true destructive: false idempotent: true call: suger-offer.getofferbyexternalid with: orgId: tools.orgId offerExternalId: tools.offerExternalId outputParameters: - type: object mapping: $.