CodeAtlas Contact API

Submit a first-conversation request to CodeAtlas. Requires a Bearer token.

GitHub OpenAPI

Operations 1

POST /contact-requests Request a first conversation with CodeAtlas #

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/codeatlas-com-br:codeatlas-com-br-contact-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

codeatlas-com-br-contact-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Codeatlas Com Br Contact API
  version: 1.0.0
  contact:
    name: CodeAtlas
    email: contato@codeatlas.com.br
    url: https://codeatlas.com.br/
  description: 'Operations tagged Contact across 2 of this provider''s published API definitions: codeatlas-com-br-openapi.json, codeatlas-com-br-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://codeatlas.com.br/api/v1
  description: Production API
- url: https://codeatlas.com.br/api/sandbox/v1
  description: 'Sandbox: fixture data, nothing is delivered or stored. Same paths and OAuth flow as production; request tokens with resource=https://codeatlas.com.br/api/sandbox/v1.'
security: []
tags:
- name: Contact
  description: Submit a first-conversation request to CodeAtlas. Requires a Bearer token.
paths:
  /contact-requests:
    post:
      operationId: createContactRequest
      summary: Request a first conversation with CodeAtlas
      description: 'An agent submits a first-conversation request on behalf of a person. CodeAtlas emails it to the team and the person is answered at the given email. Only call it after the person asked you to and gave you their name and email. Requires a Bearer token with scope api:write. Honors Idempotency-Key. In the sandbox the request is accepted and never delivered or stored. Limit: 5 per hour per OAuth client.


        The response field data.delivery is delivered when the email was sent, stored when it was saved for the team but email delivery was not available, and sandbox in the sandbox.'
      tags:
      - Contact
      security:
      - oauth2ClientCredentials:
        - api:write
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactRequestInput'
            examples:
              basic:
                summary: Typical request
                value:
                  name: Maria Souza
                  email: maria@example.com
                  company: Acme
                  message: Quero conversar sobre um produto digital sob medida.
                  locale: pt-BR
                  service_slug: produto-digital
      responses:
        '201':
          description: The request was received.
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
            Idempotency-Replayed:
              $ref: '#/components/headers/IdempotencyReplayed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRequestResponse'
              examples:
                created:
                  value:
                    data:
                      id: cr_b6Q1i6OZ5FXddRKY
                      status: received
                      delivery: delivered
                      created_at: '2026-10-13T23:06:15.508Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/RateLimited'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        default:
          $ref: '#/components/responses/UnexpectedError'
    servers:
    - url: https://codeatlas.com.br/api/v1
      description: Production API
    - url: https://codeatlas.com.br/api/sandbox/v1
      description: 'Sandbox: fixture data, nothing is delivered or stored. Same paths and OAuth flow as production; request tokens with resource=https://codeatlas.com.br/api/sandbox/v1.'
components:
  headers:
    RetryAfter:
      description: Seconds to wait before retrying.
      schema:
        type: integer
    XRateLimitReset:
      description: Legacy. Seconds until the window resets.
      schema:
        type: integer
    RateLimit:
      description: IETF draft-ietf-httpapi-ratelimit-headers. Remaining quota r and seconds until reset t for the named policy.
      schema:
        type: string
      example: '"read";r=119;t=45'
    XRateLimitLimit:
      description: Legacy. Requests allowed per window.
      schema:
        type: integer
    XRateLimitRemaining:
      description: Legacy. Requests left in the window.
      schema:
        type: integer
    RateLimitPolicy:
      description: Quota q and window w in seconds of the policy that applies.
      schema:
        type: string
      example: '"read";q=120;w=60'
    IdempotencyReplayed:
      description: true when the response is a replay of an earlier request with the same Idempotency-Key.
      schema:
        type: string
        const: 'true'
    WWWAuthenticate:
      description: Bearer challenge with resource_metadata pointing to the RFC 9728 protected resource metadata.
      schema:
        type: string
      example: Bearer resource_metadata="https://codeatlas.com.br/.well-known/oauth-protected-resource", scope="api:write"
  responses:
    BadRequest:
      description: 'The request is malformed: invalid query parameter, invalid JSON or invalid Idempotency-Key.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnexpectedError:
      description: Unexpected error. Same shape as every other error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    PayloadTooLarge:
      description: The body is larger than 16384 bytes.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The token lacks the api:write scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        WWW-Authenticate:
          $ref: '#/components/headers/WWWAuthenticate'
    Unprocessable:
      description: A field failed validation, or the Idempotency-Key was reused with a different body.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing, malformed, expired or wrong-audience Bearer token. WWW-Authenticate carries the resource metadata URL.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        WWW-Authenticate:
          $ref: '#/components/headers/WWWAuthenticate'
    UnsupportedMediaType:
      description: The body must be application/json.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    MethodNotAllowed:
      description: The HTTP method is not supported.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        Allow:
          description: Supported methods.
          schema:
            type: string
    RateLimited:
      description: Rate limit exceeded. Wait Retry-After seconds.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
  schemas:
    ContactRequestResponse:
      type: object
      required:
      - data
      properties:
        data:
          type: object
          required:
          - id
          - status
          - delivery
          - created_at
          properties:
            id:
              type: string
              pattern: ^cr_
            status:
              type: string
              const: received
            delivery:
              type: string
              enum:
              - delivered
              - stored
              - sandbox
            created_at:
              type: string
              format: date-time
          additionalProperties: false
      additionalProperties: false
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - hint
          properties:
            code:
              type: string
              enum:
              - bad_request
              - conflict
              - forbidden
              - invalid_token
              - method_not_allowed
              - not_found
              - payload_too_large
              - rate_limited
              - unauthorized
              - unprocessable
              - unsupported_media_type
              description: Stable machine-readable code.
            message:
              type: string
              description: Human-readable description.
            hint:
              type: string
              description: How to fix the request.
          additionalProperties: false
      additionalProperties: false
      examples:
      - error:
          code: unauthorized
          message: This endpoint requires a Bearer access token.
          hint: 'Register a client at POST /oauth2/register, request a token at POST /oauth2/token and send it as Authorization: Bearer <token>.'
    ContactRequestInput:
      type: object
      required:
      - name
      - email
      - message
      properties:
        name:
          type: string
          minLength: 2
          maxLength: 120
          description: The person's full name.
        email:
          type: string
          format: email
          maxLength: 320
          description: The person's email. CodeAtlas replies here.
        company:
          type: string
          minLength: 1
          maxLength: 160
        message:
          type: string
          minLength: 10
          maxLength: 2000
          description: What the person wants to discuss.
        locale:
          type: string
          enum:
          - pt-BR
          - en
          default: pt-BR
          description: Reply language.
        service_slug:
          type: string
          enum:
          - produto-digital
          - zelvo-ai
          - consultoria
          description: Service of interest.
      additionalProperties: false
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: 8 to 128 printable ASCII characters, for example a UUID. The same key with the same body replays the first response for 24 hours. The same key with a different body returns 422.
      schema:
        type: string
        minLength: 8
        maxLength: 128
        pattern: ^[\x21-\x7e]{8,128}$
  securitySchemes:
    oauth2ClientCredentials:
      type: oauth2
      description: OAuth 2.0 client_credentials. Register a client at POST /oauth2/register, then POST /oauth2/token. Tokens are JWTs valid for 3600 seconds. For the sandbox request a token with resource=https://codeatlas.com.br/api/sandbox/v1.
      flows:
        clientCredentials:
          tokenUrl: https://codeatlas.com.br/oauth2/token
          scopes:
            api:write: Create contact requests and exports.
externalDocs:
  description: Developer documentation
  url: https://codeatlas.com.br/docs
x-refined-from:
- codeatlas-com-br-openapi.json
- codeatlas-com-br-openapi.yml
x-sandbox:
  url: https://codeatlas.com.br/api/sandbox/v1
  description: Test mode for the whole API. Read endpoints return fixture services (sandbox-one, sandbox-two). POST /contact-requests is accepted and answers delivery=sandbox but is never emailed or stored. Exports and batch work on the fixtures. Sandbox and production tokens are not interchangeable.
  auth: Same OAuth client_credentials flow. Request tokens with resource=https://codeatlas.com.br/api/sandbox/v1.
  health: https://codeatlas.com.br/api/sandbox/v1/health
  documentation: https://codeatlas.com.br/auth.md