0

I am creating a PHP script to access Open Ai's API, to ask a query and get a response.

I am getting the following error:

You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY)

...but I thought I was providing the API key in the first variable?

Here is my code:

$api_key = "sk-U3B.........7MiL";

$query = "How are you?";

$url = "https://api.openai.com/v1/engines/davinci/jobs";

// Set up the API request headers
$headers = array(
    "Content-Type: application/json",
    "Authorization: Bearer " . $api_key
);

// Set up the API request body
$data = array(
    "prompt" => $query,
    "max_tokens" => 100,
    "temperature" => 0.5
);

// Use WordPress's built-in HTTP API to send the API request
$response = wp_remote_post( $url, array(
    'headers' => $headers,
    'body' => json_encode( $data )
) );

// Check if the API request was successful
if ( is_wp_error( $response ) ) {
    // If the API request failed, display an error message
    echo "Error communicating with OpenAI API: " . $response->get_error_message();
} else {
    // If the API request was successful, extract the response text
    $response_body = json_decode( $response['body'] );
    //$response_text = $response_body->choices[0]->text;
    var_dump($response_body);
    // Display the response text on the web page
    echo $response_body;
1

2 Answers 2

2

All Engines endpoints are deprecated.

Deprecated

Use the Completions API endpoint:

https://api.openai.com/v1/completions

Working example

If you run test.php the OpenAI API will return the following completion:

string(23) "

This is indeed a test"

test.php

<?php
    $ch = curl_init();

    $url = 'https://api.openai.com/v1/completions';

    $api_key = 'sk-xxxxxxxxxxxxxxxxxxxx';

    $post_fields = '{
        "model": "text-davinci-003",
        "prompt": "Say this is a test",
        "max_tokens": 7,
        "temperature": 0
    }';

    $header  = [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $api_key
    ];

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error: ' . curl_error($ch);
    }
    curl_close($ch);

    $response = json_decode($result);
    var_dump($response->choices[0]->text);
?>
Sign up to request clarification or add additional context in comments.

8 Comments

Thanks so much for your help. I changed the endpoint and updated $url variable, but unfortunately the issues is continuing. I definitely have not used up the credit though as I've only just begun trying to use the API. So you know what else I might be doing wrong?
Does this help you?
Sadly not, I've tried to implement some changes explained in the link but not helped unfortunately. You don't be any chance have a sample script which will enable the simple asking a query and getting a response, in php? Thank you
You're asking for a simple PHP example?
Will edit my answer tomorrow. :)
|
0
$headers = array(
    "Content-Type"=> "application/json",
    "Authorization"=> "Bearer " . $api_key
);

1 Comment

As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.