DeckExtract API

DeckExtract API as documented publicly: 13 operations. Contract generated from the documentation by API Evangelist (2026-11-05); not the provider's own document.

Operations 13

GET /api/v2/extract GET /api/v2/extract #
POST /api/v2/extract POST /api/v2/extract #
PATCH /crm/v3/objects/deals/{dealId} Set Deal properties from the analysis object #
POST /crm/v3/objects/notes POST /crm/v3/objects/notes #
POST /entity-files POST /entity-files #
POST /files/v3/files POST /files/v3/files #
POST /notes POST /notes #
POST /services/data/v60.0/sobjects/ContentDocumentLink POST /services/data/v60.0/sobjects/ContentDocumentLink #
POST /services/data/v60.0/sobjects/ContentVersion POST /services/data/v60.0/sobjects/ContentVersion #
PATCH /services/data/v60.0/sobjects/Opportunity/{opportunityId} Set custom fields on the Opportunity from the analysis object #
POST /v1/pages POST /v1/pages #
POST /v2/notes POST /v2/notes #
PATCH /v2/objects/companies/records/{recordId} Attio Integration — Save DocSend & Papermark Decks to Attio #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/deckextract-com:deckextract-com-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

deckextract-com-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: DeckExtract API
  version: '2026-11-05'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-05: 13 operation(s) read from 8 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; DeckExtract has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 10
    documentation: 3
    pages-with-code: 6
    pages-read: 8
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-05'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://deckextract.com/api
  - https://deckextract.com/integrations
  - https://deckextract.com/integrations/n8n
  - https://deckextract.com/integrations/attio
  - https://deckextract.com/integrations/affinity
  - https://deckextract.com/integrations/salesforce
  - https://deckextract.com/integrations/hubspot
  - https://deckextract.com/integrations/notion
paths:
  /api/v2/extract:
    get:
      operationId: get_api_v2_extract
      tags:
      - Api
      summary: GET /api/v2/extract
      x-source: https://deckextract.com/api
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV2ExtractResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -L -o document.pdf JavaScript — handle the auth gates A complete loop that retries the 422 gates with the returned sessionId\
          \ : async function extractDocument(url, { email, password, format = 'pdf' } = {}) {\n let sessionId = null;\n while (true) {\n const\
          \ response = await fetch('https://deckextract.com/api/v2/extract', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n\
          \ },\n body"
    post:
      operationId: post_api_v2_extract
      tags:
      - Api
      summary: POST /api/v2/extract
      x-source: https://deckextract.com/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV2ExtractRequest'
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiV2ExtractResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://deckextract.com/api/v2/extract  -H \"Content-Type: application/json\"  -d '{\n \"url\": \"https://docsend.com/view/abc123\"\
          \n }' Extract and download the file The response is JSON, so grab download.url and fetch it: # 1. Request the extraction — the JSON\
          \ reply carries a short-lived link\nRESPONSE=$(curl -s -X POST https://deckextract.com/api/v2/extract  -H \"Content-Type: application/js"
  /crm/v3/objects/deals/{dealId}:
    patch:
      operationId: patch_crm_v3_objects_deals_dealId
      tags:
      - Crm
      summary: Set Deal properties from the analysis object
      x-source: https://deckextract.com/integrations/hubspot
      parameters:
      - name: dealId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchCrmV3ObjectsDealsDealidRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /crm/v3/objects/notes:
    post:
      operationId: post_crm_v3_objects_notes
      tags:
      - Crm
      summary: POST /crm/v3/objects/notes
      x-source: https://deckextract.com/integrations/hubspot
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostCrmV3ObjectsNotesRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://api.hubapi.com/crm/v3/objects/notes  -H \"Authorization: Bearer HUBSPOT_PRIVATE_APP_TOKEN\"  -H \"Content-Type:\
          \ application/json\"  -d '{\n \"properties\": {\n \"hs_note_body\": \"Pitch deck archived. Stage: seed | Ask: $5M | ARR: $1.2M\",\n\
          \ \"hs_attachment_ids\": \"FILE_ID\"\n },\n \"associations\": [{\n \"to\": { \"id\": \"DEAL_ID\" },\n \"types\": [{ \"associationCategory\"\
          : \"HUBSPOT_DEFINED\", \"association"
  /entity-files:
    post:
      operationId: post_entity_files
      tags:
      - Entity Files
      summary: POST /entity-files
      x-source: https://deckextract.com/integrations/affinity
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -X POST https://api.affinity.co/entity-files  -u ":YOUR_AFFINITY_API_KEY"  -F "organization_id=ORG_ID"  -F "file=@deck.pdf"
          Add a note summarising the round so the highlights are visible without opening the file: # Optional: add a note with the round summary
          from the analysis'
  /files/v3/files:
    post:
      operationId: post_files_v3_files
      tags:
      - Files
      summary: POST /files/v3/files
      x-source: https://deckextract.com/integrations/hubspot
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -X POST https://api.hubapi.com/files/v3/files  -H "Authorization: Bearer HUBSPOT_PRIVATE_APP_TOKEN"  -F "file=@deck.pdf"  -F
          ''folderPath=/decks''  -F ''options={"access":"PRIVATE"}'''
  /notes:
    post:
      operationId: post_notes
      tags:
      - Notes
      summary: POST /notes
      x-source: https://deckextract.com/integrations/affinity
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://api.affinity.co/notes  -u \":YOUR_AFFINITY_API_KEY\"  -H \"Content-Type: application/json\"  -d '{\n \"\
          organization_ids\": [ORG_ID],\n \"content\": \"Pitch deck archived. Stage: seed | Ask: $5M | ARR: $1.2M\"\n }' Affinity authenticates\
          \ with HTTP Basic auth using your API key as the password (empty username) — hence the -u \":KEY\" . Use opportunity_id or person_id\
          \ instead of organization_id"
  /services/data/v60.0/sobjects/ContentDocumentLink:
    post:
      operationId: post_services_data_v60_0_sobjects_ContentDocumentLink
      tags:
      - Services
      summary: POST /services/data/v60.0/sobjects/ContentDocumentLink
      x-source: https://deckextract.com/integrations/salesforce
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostServicesDataV600SobjectsContentdocumentlinkRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST  https://YOUR_INSTANCE.my.salesforce.com/services/data/v60.0/sobjects/ContentDocumentLink  -H \"Authorization:\
          \ Bearer SF_ACCESS_TOKEN\"  -H \"Content-Type: application/json\"  -d '{\n \"ContentDocumentId\": \"CONTENT_DOCUMENT_ID\",\n \"LinkedEntityId\"\
          : \"OPPORTUNITY_ID\",\n \"ShareType\": \"V\"\n }' Then map the structured fields onto the Opportunity (create the custom fields once\
          \ in Setup first): # Set"
  /services/data/v60.0/sobjects/ContentVersion:
    post:
      operationId: post_services_data_v60_0_sobjects_ContentVersion
      tags:
      - Services
      summary: POST /services/data/v60.0/sobjects/ContentVersion
      x-source: https://deckextract.com/integrations/salesforce
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostServicesDataV600SobjectsContentversionRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST  https://YOUR_INSTANCE.my.salesforce.com/services/data/v60.0/sobjects/ContentVersion  -H \"Authorization: Bearer\
          \ SF_ACCESS_TOKEN\"  -H \"Content-Type: application/json\"  -d '{\n \"Title\": \"Pitch deck — Acme (seed)\",\n \"PathOnClient\": \"\
          acme-deck.pdf\",\n \"VersionData\": \"<base64 of the PDF>\"\n }'"
  /services/data/v60.0/sobjects/Opportunity/{opportunityId}:
    patch:
      operationId: patch_services_data_v60_0_sobjects_Opportunity_opportunityId
      tags:
      - Services
      summary: Set custom fields on the Opportunity from the analysis object
      description: Updates custom fields on a Salesforce Opportunity with values from the DeckExtract analysis.
      x-source: https://deckextract.com/integrations/salesforce
      parameters:
      - name: opportunityId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchServicesDataV600SobjectsOpportunityOpportunityidRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/pages:
    post:
      operationId: post_v1_pages
      tags:
      - Pages
      summary: POST /v1/pages
      x-source: https://deckextract.com/integrations/notion
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1PagesRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://api.notion.com/v1/pages  -H \"Authorization: Bearer NOTION_SECRET\"  -H \"Notion-Version: 2022-06-28\"\
          \  -H \"Content-Type: application/json\"  -d '{\n \"parent\": { \"database_id\": \"DEAL_FLOW_DB_ID\" },\n \"properties\": {\n \"Company\"\
          : { \"title\": [{ \"text\": { \"content\": \"Acme\" } }] },\n \"Stage\": { \"select\": { \"name\": \"seed\" } },\n \"Ask (USD)\": {\
          \ \"number\": 5000000 },\n \"ARR (USD)\": { \"number\": 1"
  /v2/notes:
    post:
      operationId: post_v2_notes
      tags:
      - Notes
      summary: POST /v2/notes
      x-source: https://deckextract.com/integrations/attio
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV2NotesRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://api.attio.com/v2/notes  -H \"Authorization: Bearer YOUR_ATTIO_TOKEN\"  -H \"Content-Type: application/json\"\
          \  -d '{\n \"data\": {\n \"parent_object\": \"companies\",\n \"parent_record_id\": \"RECORD_ID\",\n \"title\": \"Pitch deck (seed)\"\
          ,\n \"format\": \"plaintext\",\n \"content\": \"Deck PDF: <download.url from DeckExtract>\\nStage: seed | Ask: $5M | ARR: $1.2M\"\n\
          \ }\n }' To make the deck data queryable, als"
  /v2/objects/companies/records/{recordId}:
    patch:
      operationId: patch_v2_objects_companies_records_recordId
      tags:
      - Objects
      summary: Attio Integration — Save DocSend & Papermark Decks to Attio
      description: Set structured fields on the Attio record from the DeckExtract analysis object.
      x-source: https://deckextract.com/integrations/attio
      parameters:
      - name: recordId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchV2ObjectsCompaniesRecordsRecordidRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
components:
  schemas:
    GetApiV2ExtractResponse:
      type: object
      properties:
        url:
          type: string
        filename:
          type: string
        contentType:
          type: string
        bytes:
          type: integer
        expiresAt:
          type: string
          format: date-time
    PostApiV2ExtractRequest:
      type: object
      properties:
        url:
          type: string
    PostApiV2ExtractResponse:
      type: object
      properties:
        url:
          type: string
    PatchCrmV3ObjectsDealsDealidRequest:
      type: object
      properties:
        properties:
          type: object
          description: Deal properties to update, e.g., round_stage, raise_amount, arr
      required:
      - properties
    PostCrmV3ObjectsNotesRequest:
      type: object
      properties:
        properties:
          type: object
          properties:
            hs_note_body:
              type: string
            hs_attachment_ids:
              type: string
        associations:
          type: array
          items:
            type: object
            properties:
              to:
                type: object
                properties:
                  id:
                    type: string
              types:
                type: array
                items:
                  type: object
                  properties:
                    associationCategory:
                      type: string
                    associationTypeId:
                      type: integer
    PostServicesDataV600SobjectsContentdocumentlinkRequest:
      type: object
      properties:
        ContentDocumentId:
          type: string
        LinkedEntityId:
          type: string
        ShareType:
          type: string
    PostServicesDataV600SobjectsContentversionRequest:
      type: object
      properties:
        Title:
          type: string
        PathOnClient:
          type: string
        VersionData:
          type: string
    PatchServicesDataV600SobjectsOpportunityOpportunityidRequest:
      type: object
      properties:
        Round_Stage__c:
          type: string
          description: Round stage from analysis
        Raise_Amount__c:
          type: number
          description: Raise amount value from analysis
        ARR__c:
          type: number
          description: ARR value from analysis
    PostV1PagesRequest:
      type: object
      properties:
        parent:
          type: object
          properties:
            database_id:
              type: string
        properties:
          type: object
          properties:
            Company:
              type: object
              properties:
                title:
                  type: array
                  items:
                    type: object
                    properties:
                      text:
                        type: object
                        properties:
                          content:
                            type: string
            Stage:
              type: object
              properties:
                select:
                  type: object
                  properties:
                    name:
                      type: string
            Ask (USD):
              type: object
              properties:
                number:
                  type: integer
            ARR (USD):
              type: object
              properties:
                number:
                  type: integer
            Deck:
              type: object
              properties:
                url:
                  type: string
    PostV2NotesRequest:
      type: object
      properties:
        data:
          type: object
          properties:
            parent_object:
              type: string
            parent_record_id:
              type: string
            title:
              type: string
            format:
              type: string
            content:
              type: string
    PatchV2ObjectsCompaniesRecordsRecordidRequest:
      type: object
      properties:
        data.values.round_stage:
          type: string
          description: Round stage from the DeckExtract analysis.
        data.values.raise_amount:
          type: number
          description: Raise amount from the DeckExtract analysis.
        data.values.arr:
          type: number
          description: ARR value from the DeckExtract analysis.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Api
- name: Crm
- name: Entity Files
- name: Files
- name: Notes
- name: Objects
- name: Pages
- name: Services