> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vine.getcourtyard.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Extract provider data from a business URL

> Async. Detects providers, extracts data from each, returns via polling. Requires an `Idempotency-Key` header (optional — omit for a server-generated key).



## OpenAPI

````yaml openapi.json POST /api/v1/extract
openapi: 3.1.0
info:
  title: Vine API
  version: extraction.v1
  description: >-
    Provider detection and extraction service. URL in → structured business data
    out.
servers:
  - url: https://vine.getcourtyard.ai
security:
  - bearerAuth: []
paths:
  /api/v1/extract:
    post:
      summary: Extract provider data from a business URL
      description: >-
        Async. Detects providers, extracts data from each, returns via polling.
        Requires an `Idempotency-Key` header (optional — omit for a
        server-generated key).
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExtractRequest'
      responses:
        '202':
          $ref: '#/components/responses/Accepted'
        '401':
          $ref: '#/components/responses/Error'
        '409':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        Optional caller-unique key. A replay with the same key + payload returns
        the existing job (a different payload returns 409). Omit and the server
        generates one.
      schema:
        type: string
  schemas:
    ExtractRequest:
      type: object
      required:
        - url
      additionalProperties: false
      properties:
        url:
          type: string
          format: uri
          description: Business URL.
          example: https://www.mindbodyonline.com/explore/locations/the-sharp-barber
        policy:
          type: object
          additionalProperties: false
          properties:
            allowTransportRescue:
              type: boolean
        options:
          $ref: '#/components/schemas/Options'
        callerRef:
          $ref: '#/components/schemas/CallerRef'
    Options:
      type: object
      additionalProperties: false
      properties:
        budgetMs:
          type: integer
          minimum: 1
    CallerRef:
      type: object
      additionalProperties: false
      properties:
        businessId:
          type: string
        entityId:
          type: string
        jobId:
          type: string
  responses:
    Accepted:
      description: Job accepted; poll `pollUrl`.
      content:
        application/json:
          schema:
            type: object
            properties:
              schemaVersion:
                type: string
              id:
                type: string
              kind:
                type: string
              status:
                type: string
              pollUrl:
                type: string
              createdAt:
                type: string
                format: date-time
              retryAfterSeconds:
                type: integer
    Error:
      description: Error envelope.
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: vine_live_… / vine_test_… API key

````