> ## Documentation Index
> Fetch the complete documentation index at: https://help.onetsolutions.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Accept a proposal

> Records the acceptance with the signed-in user, the date, the IP address and the user agent. Only an owner of the organization can decide, never during an impersonation, and only while the proposal is sent and not expired.



## OpenAPI

````yaml https://api.onetsolutions.net/schema post /v1/organizations/{organization_id}/proposals/{proposal_id}/accept
openapi: 3.0.3
info:
  title: OnetSolutions API
  version: v1 (v1)
  description: >

    ## Overview


    The OnetSolutions API provides programmatic access to manage your cloud
    infrastructure, domains, and web hosting services.


    ## Authentication


    All API requests require authentication using one of the following methods:


    - **JWT Token**: Obtain a token via login endpoints and include it in the
    `Authorization: Bearer <token>` header

    - **API Key**: Generate an API key from your account settings and use it as
    `Authorization: Bearer sk-onetsolutions-...`


    ## Rate Limiting


    API requests are rate-limited to ensure fair usage:

    - **Anonymous**: 60 requests per minute, per client IP address

    - **Authenticated**: 5000 requests per hour, per user


    Some endpoints, such as login and sign-up, apply stricter limits of their
    own.

    A request over the limit gets a `429` response whose `Retry-After` header
    gives the wait in seconds.


    ## Pagination


    Most list endpoints return paginated results. Use the `page` and `page_size`
    query parameters

    (at most 100 results per page). The response carries `count`, `next`,
    `previous`, `page`, `page_size`,

    `total_pages` and the `results` themselves.


    ## Error Handling


    The API uses standard HTTP status codes:

    - `200` Success

    - `201` Created

    - `204` No Content

    - `400` Bad Request

    - `401` Unauthorized

    - `403` Forbidden

    - `404` Not Found

    - `409` Conflict

    - `429` Too Many Requests

    - `500` Internal Server Error

    - `503` Service Unavailable


    Error responses carry a JSON body with `detail`, a human-readable message,
    and `code`, a stable

    machine-readable error code. Some errors add `context` with structured
    details, and `error`

    repeats `detail` for older clients. A request whose fields fail validation
    gets a `400` whose body maps each

    invalid field to its list of messages. A few older endpoints still answer
    with `error` alone.
servers:
  - url: https://api.onetsolutions.net
    description: Production
security: []
tags:
  - name: Authentication
    description: >-
      Login, passwordless authentication, MFA, OAuth providers, and token
      management.
  - name: Organizations
    description: >-
      Organization management, members, roles, modules, audit logs, and
      notification settings.
  - name: Projects
    description: Project management, team members, and project-scoped resources.
  - name: Compute
    description: >-
      Cloud instances, volumes, snapshots, backups, VPCs, firewalls, SSH keys,
      uptime monitors, and instance tasks.
  - name: Billing
    description: >-
      Shopping cart, orders, invoices, payments, payment methods, gateways,
      promo codes, and balance management.
  - name: Domains
    description: >-
      Domain availability, registration, transfers, DNS zones, DNS records, and
      TLD information.
  - name: Web Hosting
    description: >-
      cPanel-based web hosting, emails, databases, subdomains, FTP accounts,
      addon domains, and SSL certificates.
paths:
  /v1/organizations/{organization_id}/proposals/{proposal_id}/accept:
    post:
      tags:
        - Contracts
      summary: Accept a proposal
      description: >-
        Records the acceptance with the signed-in user, the date, the IP address
        and the user agent. Only an owner of the organization can decide, never
        during an impersonation, and only while the proposal is sent and not
        expired.
      operationId: accept_proposal
      parameters:
        - in: path
          name: organization_id
          schema:
            type: string
            pattern: ^[^/]+$
          required: true
        - in: path
          name: proposal_id
          schema:
            type: string
          description: The proposal UUID
          required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Proposal'
          description: ''
        '403':
          description: Not allowed to decide for the organization, or impersonating
        '404':
          description: Unknown proposal
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProposalTransitionRefused'
          description: The proposal is not in a status allowing this action
      security:
        - BearerAuth: []
components:
  schemas:
    Proposal:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        reference:
          type: string
          readOnly: true
        title:
          type: string
          readOnly: true
        kind:
          enum:
            - quote
            - agreement
          type: string
          description: |-
            * `quote` - Quote
            * `agreement` - Custom agreement
          x-spec-enum-id: ce675c68033e3fde
          readOnly: true
        amount_excl_tax:
          type: string
          pattern: ^-?\d{0,10}(?:\.\d{0,2})?$
          readOnly: true
          nullable: true
        currency:
          type: string
          readOnly: true
        expires_on:
          type: string
          format: date
          readOnly: true
          nullable: true
        status:
          enum:
            - draft
            - sent
            - accepted
            - declined
            - withdrawn
            - expired
          type: string
          description: |-
            * `draft` - Draft
            * `sent` - Sent
            * `accepted` - Accepted
            * `declined` - Declined
            * `withdrawn` - Withdrawn
            * `expired` - Expired
          x-spec-enum-id: d8e5dc1270650433
          readOnly: true
        sent_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        viewed_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        decided_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        decided_by_name:
          type: string
          readOnly: true
          nullable: true
        decline_reason:
          type: string
          readOnly: true
        pdf_size:
          type: integer
          readOnly: true
        can_decide:
          type: boolean
          readOnly: true
      required:
        - amount_excl_tax
        - can_decide
        - currency
        - decided_at
        - decided_by_name
        - decline_reason
        - expires_on
        - id
        - kind
        - pdf_size
        - reference
        - sent_at
        - status
        - title
        - viewed_at
    ProposalTransitionRefused:
      type: object
      properties:
        error:
          type: string
        code:
          type: string
      required:
        - code
        - error
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT or API Key
      description: >-
        Use `Authorization: Bearer <token>` header. Token can be a JWT token or
        an API key (format: `sk-onetsolutions-...`).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.